Skip to content

mistalan/Terminplaner

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📅 Terminplaner

CI Status CodeQL Code Coverage Docker .NET Version License

Moderne Terminplaner-App für die Verwaltung von Terminen mit Kategorien und Prioritäten. Entwickelt als Alternative zum Word-Dokument-System - mit allen vertrauten Features, aber in einer modernen Cross-Platform-App die auf PC, Android, iOS und mehr funktioniert!

📱 Plattformen

  • Android - Native Android App
  • iOS - Native iOS App
  • Windows - Native Windows Desktop App
  • macOS - Native Mac App (via Mac Catalyst)

✨ Features

  • Termine erstellen - Füge neue Termine mit Beschreibung hinzu
  • 🏷️ Kategorien - Organisiere Termine mit farbigen Kategorien (z.B. Arbeit, Privat, Gesundheit, Familie)
  • 🎨 Farbcodierung - Jeder Kategorie eine eigene Farbe zuweisen
  • 🔢 Prioritäten - Termine mit Pfeil-Buttons neu sortieren (oben = höchste Priorität)
  • ✏️ Bearbeiten - Bestehende Termine ändern
  • 🗑️ Löschen - Erledigte Termine einfach entfernen
  • 📱 Cross-Platform - Eine Codebasis für alle Plattformen
  • 🎯 Native Performance - Echte native Apps, keine Web-Wrapper
  • 🚀 Schnell - Direkte API-Kommunikation mit dem Backend
  • 💾 Lokale Speicherung - Daten bleiben auch offline erhalten (SQLite)
  • ☁️ Cloud-Synchronisation - Automatisches Backup in Azure Cosmos DB (optional)
  • 🔄 Offline-Modus - Arbeiten ohne Internetverbindung

🛠️ Tech Stack

  • Backend: ASP.NET Core 9.0 Web API (C#)
  • Frontend: .NET MAUI (Multi-platform App UI) mit XAML
  • Pattern: MVVM (Model-View-ViewModel) mit CommunityToolkit.Mvvm
  • Datenspeicher: Repository Pattern mit mehreren Optionen:
    • InMemory: Für Entwicklung und Tests (Standard)
    • SQLite: Lokale Datenpersistenz mit Offline-Support
    • Cosmos DB: Cloud-basierte Datenspeicherung
    • Hybrid: SQLite + Cosmos DB mit automatischer Synchronisation
  • API: RESTful API mit JSON
  • Deployment: Android, iOS, Windows, macOS

📋 Voraussetzungen

  • .NET 9.0 SDK oder höher
  • Für Android-Entwicklung: Android SDK (kommt mit Visual Studio oder kann separat installiert werden)
  • Für iOS-Entwicklung: macOS mit Xcode
  • Empfohlen: Visual Studio 2022 oder Visual Studio Code mit C# Extension

🚀 Installation & Start

Backend starten

  1. Repository klonen:

    git clone https://github.com/mistalan/Terminplaner.git
    cd Terminplaner/TerminplanerApi
  2. (Optional) Speicher-Modus konfigurieren:

    Standardmäßig nutzt die App In-Memory-Speicher. Für persistente Speicherung bearbeite appsettings.json:

    Für lokale SQLite-Speicherung:

    {
      "RepositoryType": "Sqlite"
    }

    Für Hybrid-Modus (SQLite + Cloud-Sync):

    {
      "RepositoryType": "Hybrid"
    }

    Dann Cosmos DB Connection String via User Secrets konfigurieren:

    dotnet user-secrets set "CosmosDb:ConnectionString" "YOUR_CONNECTION_STRING"

    📖 Mehr Details: LOCAL_PERSISTENCE_GUIDE.md

  3. API starten:

    dotnet run

    Die API läuft nun auf http://localhost:5215

MAUI App starten

Für Android (empfohlen für Entwicklung):

  1. Android Emulator starten oder Android-Gerät per USB verbinden

  2. App starten:

    cd ../TerminplanerMaui
    dotnet build -t:Run -f net9.0-android

Für Windows:

cd ../TerminplanerMaui
dotnet build -t:Run -f net9.0-windows10.0.19041.0

Für iOS (nur auf macOS):

cd ../TerminplanerMaui
dotnet build -t:Run -f net9.0-ios

Für macOS (nur auf macOS):

cd ../TerminplanerMaui
dotnet build -t:Run -f net9.0-maccatalyst

Mit Visual Studio

  1. Öffne die Solution in Visual Studio 2022
  2. Stelle sicher, dass beide Projekte (TerminplanerApi und TerminplanerMaui) in der Solution sind
  3. Setze TerminplanerApi als Startup-Projekt und starte es
  4. Setze TerminplanerMaui als Startup-Projekt und wähle die Zielplattform (Android, iOS, Windows)
  5. Starte die App

Wichtig: Die Backend-API muss laufen, damit die MAUI-App funktioniert!

📖 Verwendung

Termin hinzufügen

  1. Gib den Termintext im Feld "Neuer Termin..." ein
  2. Optional: Gib eine Kategorie ein (z.B. "Arbeit", "Privat", "Gesundheit")
  3. Optional: Gib eine Farbe ein (z.B. "#FF0000" für Rot)
  4. Tippe auf "➕ Hinzufügen"

Termin bearbeiten

  1. Tippe auf "✏️" bei einem Termin
  2. Ändere Text, Kategorie oder Farbe
  3. Tippe auf "💾 Speichern"

Termin löschen

  1. Tippe auf "🗑️" bei einem Termin
  2. Bestätige die Löschung

Priorität ändern

  • Nutze die ⬆️ und ⬇️ Buttons um Termine nach oben oder unten zu verschieben
  • Die Position bestimmt die Priorität (oben = höchste Priorität)

💾 Speicher-Optionen

Die App unterstützt verschiedene Speicher-Modi:

Modus Beschreibung Offline Cloud-Backup
InMemory Daten nur im RAM (Standard)
Sqlite Lokale SQLite-Datenbank
CosmosDb Azure Cosmos DB Cloud-Speicher
Hybrid SQLite + Cosmos DB mit Auto-Sync

Konfiguration in appsettings.json:

{
  "RepositoryType": "Sqlite"  // Oder: "InMemory", "CosmosDb", "Hybrid"
}

📖 Vollständige Anleitung: LOCAL_PERSISTENCE_GUIDE.md

Hybrid-Modus (Empfohlen)

Der Hybrid-Modus bietet das Beste aus beiden Welten:

  • ✅ Arbeitet offline (lokale SQLite-Datenbank)
  • ✅ Automatische Cloud-Synchronisation beim Start
  • ✅ Daten bleiben bei App-Absturz erhalten
  • ✅ Einfaches Backup in Azure Cosmos DB

🔌 API Endpoints

Die Anwendung bietet folgende REST API Endpoints:

Method Endpoint Beschreibung
GET /api/appointments Alle Termine abrufen
GET /api/appointments/{id} Einzelnen Termin abrufen
POST /api/appointments Neuen Termin erstellen
PUT /api/appointments/{id} Termin aktualisieren
DELETE /api/appointments/{id} Termin löschen
PUT /api/appointments/priorities Prioritäten aktualisieren

Beispiel API Aufruf:

# Alle Termine abrufen
curl http://localhost:5215/api/appointments

# Neuen Termin erstellen
curl -X POST http://localhost:5215/api/appointments \
  -H "Content-Type: application/json" \
  -d '{"text":"Meeting","category":"Arbeit","color":"#0000FF"}'

🏗️ Projekt-Struktur

Terminplaner/
├── .github/
│   ├── workflows/          # CI/CD Workflows (CI, Coverage, CodeQL, Docker, etc.)
│   ├── dependabot.yml      # Dependency update configuration
│   ├── labels.yml          # GitHub labels configuration
│   ├── release-drafter.yml # Release notes configuration
│   └── copilot-instructions.md
│
├── TerminplanerApi/              # Backend Web API
│   ├── Models/
│   │   └── Appointment.cs        # Datenmodell für Termine
│   ├── Repositories/
│   │   ├── IAppointmentRepository.cs # Repository-Interface
│   │   ├── InMemoryAppointmentRepository.cs # In-Memory Implementierung
│   │   ├── SqliteAppointmentRepository.cs # SQLite Implementierung
│   │   ├── CosmosAppointmentRepository.cs # Azure Cosmos DB Implementierung
│   │   └── HybridAppointmentRepository.cs # Hybrid (SQLite + Cosmos DB)
│   ├── Program.cs                # API-Konfiguration & Endpoints
│   └── TerminplanerApi.csproj    # Backend-Projekt-Datei
│
├── TerminplanerApi.Tests/        # Tests für Backend API
│   ├── AppointmentRepositoryTests.cs      # Unit Tests (23)
│   ├── SqliteAppointmentRepositoryTests.cs # SQLite Tests (13)
│   ├── HybridAppointmentRepositoryTests.cs # Hybrid Tests (12)
│   ├── AppointmentApiIntegrationTests.cs # Integration Tests (19)
│   ├── CosmosAppointmentRepositoryTests.cs # Cosmos Tests (20)
│   ├── TEST_CASES.md             # Detaillierte Test-Dokumentation
│   └── TerminplanerApi.Tests.csproj    # Test-Projekt-Datei
│
├── TerminplanerMaui/             # Cross-Platform MAUI App
│   ├── Models/
│   │   └── Appointment.cs        # Client-seitiges Datenmodell
│   ├── Services/
│   │   └── AppointmentApiService.cs # API-Client
│   ├── ViewModels/
│   │   ├── MainViewModel.cs      # Haupt-ViewModel (MVVM)
│   │   └── EditAppointmentViewModel.cs # Edit-ViewModel
│   ├── Pages/
│   │   ├── MainPage.xaml         # Hauptseite UI
│   │   ├── EditAppointmentPage.xaml # Edit-Seite UI
│   │   └── *.xaml.cs             # Code-behind Dateien
│   ├── Platforms/                # Plattform-spezifischer Code
│   │   ├── Android/, iOS/, Windows/, MacCatalyst/
│   ├── Resources/                # App-Ressourcen (Icons, Fonts, Styles)
│   ├── App.xaml                  # App-Definition
│   ├── AppShell.xaml             # Shell/Navigation
│   └── TerminplanerMaui.csproj   # MAUI-Projekt-Datei
│
├── Dockerfile                    # Docker-Konfiguration für API
├── docker-compose.yml            # Docker Compose Setup
└── README.md                     # Diese Datei

🧪 Tests

Das Projekt enthält umfassende Tests für die Backend-API:

  • 42 Tests (100% bestanden)
    • 23 Unit Tests für AppointmentService
    • 19 Integration Tests für API Endpoints

Tests ausführen:

dotnet test

Mit Code Coverage:

dotnet test --collect:"XPlat Code Coverage" --results-directory ./coverage

Detaillierte Test-Dokumentation: Siehe TerminplanerApi.Tests/TEST_CASES.md

💾 Persistence Architecture

Das Projekt verwendet das Repository Pattern mit Abstraktionsschicht für flexible Datenspeicherung:

  • In-Memory Repository (Standard) - Für Entwicklung und Tests
  • Azure Cosmos DB Repository - Für Produktion (optional)
  • Einfache Konfiguration - Umschalten via appsettings.json
  • String-basierte IDs - Kompatibel mit Cosmos DB und anderen NoSQL-Datenbanken

Dokumentation:

🔮 Zukünftige Erweiterungen

  • 🔔 Benachrichtigungen und Erinnerungen
  • 📅 Kalenderintegration
  • 👥 Mehrbenutzer-Unterstützung
  • 🌐 Cloud-Synchronisation
  • 🔍 Such- und Filterfunktionen
  • 📊 Statistiken und Berichte
  • 🌍 Mehrsprachigkeit
  • 🎨 Anpassbare Themes

🎯 Warum .NET MAUI?

.NET MAUI ermöglicht es, mit einer einzigen C#/XAML-Codebasis native Apps für alle Plattformen zu erstellen:

  • Echte native Apps - Keine Web-Wrapper, sondern echte native UI-Controls
  • Beste Performance - Native Kompilierung für jede Plattform
  • Code-Sharing - 90%+ Code-Sharing zwischen allen Plattformen
  • Produktivität - XAML Hot Reload für schnelle Entwicklung
  • Zukunftssicher - Microsoft's neueste Cross-Platform-Technologie
  • Android-Ready - Einfaches Deployment auf Android-Geräte

🔧 Deployment & CI/CD

Das Projekt verfügt über automatisierte GitHub Actions Workflows für:

CI/CD Workflows

Workflow Trigger Beschreibung
CI - Build and Test Push/PR to main Baut API, führt alle 42 Tests aus, prüft Code-Formatierung
Code Coverage Push/PR to main Generiert Coverage-Reports (erfordert optional CODECOV_TOKEN Secret)
CodeQL Security Push/PR to main, Weekly Sicherheitsanalyse für C# Code (GitHub Default Setup)
Docker Build Push to main, Tags Baut und pusht Docker Image zu GHCR
Release Drafter Push to main, PRs Erstellt automatisch Release-Notizen
Label Sync Push to main (labels.yml), Manual Synchronisiert Repository-Labels
Stale Bot Täglich Schließt inaktive Issues/PRs nach 60/30 Tagen
Deploy API Tags v*.*.*, Manual Erstellt Linux/Windows API Packages
Deploy Android Tags android-v*.*.*, Manual Baut APK für Android
Deploy Windows Tags windows-v*.*.*, Manual Baut Windows Desktop App

GitHub Apps & Tools

Das Projekt nutzt folgende integrierte GitHub Features:

  • Dependabot - Automatische Dependency-Updates für NuGet und GitHub Actions
  • CodeQL - Sicherheitsscan für Schwachstellen und Code-Fehler (GitHub Default Setup)
  • Release Drafter - Automatische Generierung von Release Notes
  • Label Sync - Automatische Synchronisierung von Repository-Labels
  • Code Coverage - Test Coverage Reporting (Cobertura XML)
  • Docker CI/CD - Automatische Docker Builds zu GitHub Container Registry
  • Stale Bot - Verwaltung inaktiver Issues und Pull Requests

Empfohlene Marketplace Apps (Optional):

  • Codecov - Visuelles Coverage-Reporting (erfordert CODECOV_TOKEN Secret)
  • SonarCloud - Code-Qualitätsanalyse (erfordert SONAR_TOKEN Secret)

Schnell-Deployment

Mit Docker (Empfohlen):

# Docker Compose verwenden
docker-compose up
# API läuft auf http://localhost:5215

# Oder mit Docker direkt
docker build -t terminplaner-api .
docker run -p 5215:5215 terminplaner-api

Docker Image von GHCR:

docker pull ghcr.io/mistalan/terminplaner/api:latest
docker run -p 5215:5215 ghcr.io/mistalan/terminplaner/api:latest

Android APK erstellen:

# Über GitHub Actions (empfohlen):
# 1. Gehe zu Actions → Deploy Android App → Run workflow
# 2. Lade APK-Artifact herunter

# Oder lokal:
cd TerminplanerMaui
dotnet publish -f net9.0-android -c Release

API manuell deployen:

cd TerminplanerApi
dotnet publish -c Release -o ./publish
# Publish-Ordner auf Server kopieren

Konfiguration

Benötigte Secrets (alle optional):

  • CODECOV_TOKEN - Für Codecov Coverage-Uploads (nur wenn Codecov App installiert)
  • Signing-Secrets für Android/Windows sind für spätere Store-Veröffentlichung vorbereitet (aktuell nicht benötigt)

📚 Dokumentation

Das Projekt enthält umfassende Dokumentation in den folgenden Dateien:

📝 Lizenz

Dieses Projekt ist für den privaten Gebrauch bestimmt.

👤 Autor

Erstellt für meine Schwester - damit sie ihr Word-System endlich in Rente schicken kann! 😊

About

Individueller Terminplaner für meine Schwester

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors 4

  •  
  •  
  •  
  •