Dieses Projekt ist daraus entstanden, dass ich Dateien – in meinem Fall Obsidian Notizen – zwischen meinen verschiedenen Endgeräten synchronisieren möchte. Dafür muss ich verschiedene Betriebssysteme, Windows, Linux (Manjaro) und Android bedienen. Ich verspreche mir davon zusätzlich, einiges im Bereich DevOps bzw. CI/CD, Mobile- und Desktop-App-Entwicklung zu lernen. Aber auch beim Datenbankdesign und bei der REST API bin ich sicher, viel hinzuzulernen. Mein Hauptentwicklungssystem ist Manjaro (Linux).
Geplante Technologien/Frameworks:
- C# ASP .NET Core für das Backend
- Direkter Zugriff auf MariaDB (MySQL‑Protokoll) über ADO.NET (
MySql.Data) statt eines ORMs - Flutter/Dart für die Android-, Linux- und Windows-App
- Python für das CLI Tool (Linux)
Ich nutze KI in diesem Projekt bewusst als Lern- und Sparringspartner. Mir ist wichtig, dass ich mir die Loesungen nicht einfach vorkauen lasse, sondern sie mit gezielten Hinweisen, einfachen Beispielen und Erklaerungen selbst erarbeite.
- Ich nutze KI vor allem fuer Denkimpulse statt fuer komplette Fertigloesungen.
- Ich lasse mir lieber den naechsten sinnvollen Schritt oder ein vereinfachtes Beispiel zeigen, damit ich die eigentliche Loesung selbst herleiten kann.
- Ich nutze KI, um Zusammenhaenge zwischen Code, API, Datenbank und Dokumentation besser zu verstehen.
- Ich nutze KI auch als Feedbackgeber, um Unklarheiten, Inkonsistenzen und Verbesserungsmoeglichkeiten frueher zu erkennen.
- Ich pruefe Vorschlaege immer kritisch und passe sie an mein Projekt und meinen Lernstand an.
Das ist für mich wichtig, weil das Projekt nicht nur ein Werkzeug werden soll, sondern auch ein Lernprojekt und ein nachvollziehbares Portfolio-Element.
Status-Legende:
- ✅ Abgeschlossen
- ⌛ In Arbeit
- 🕓 Geplant
- 💭 Konzeptphase
- 0.0.0 - Planung
- 0.0.1 Datenbankentwicklung
- MariaDB Schema erstellen ✅
- MariaDB Accounts (Admin & Client) anlegen und Berechtigungen erteilen ✅
- Create Table SQL‑Skripte erstellen ✅
- 0.0.2 Implementierung der REST API
- Datenbankzugriff via
MySql.Dataimplementieren (MariaDB nutzt die MySQL Schnittstelle) ✅ - Grundlegende REST API Endpunkte ✅
- Entity Models / DTOs erstellen ✅
- Postman Collection ✅
- Implementierung File Up- und Download ✅
- Datenbankzugriff via
- 0.0.3 Linux CLI Tool
- Lokale SQLite Datenbank ✅
- Vorübergehendes Speichern der DB Logindaten in einem
.envFile ✅ - CLI Framework: argparse - Verschiedene Flags für unterschiedliche Funktionen ✅
- Lokale Berechnung des Dateihashes (SHA-256) ✅
- Implementierung API Client ✅
- Implementierung Logging in die MariaDB ✅
- Implementierung Logging in eine lokale Logdatei ✅
- Implementierung Init-Command ✅
- Implementierung Scan-Command ✅
- Implementierung Manifest-Command ✅
- Implementierung Upload-Command ✅
- Implementierung Download-Command ✅
- Implementierung Delete-Command ✅
- Implementierung Sync Command (Facade Pattern für alle bisherigen Aktionen) ✅
- Three-Way-Merge Logik (LastSyncState Tabelle) ✅
- Plattformübergreifende Hash-Kompatibilität (lowercase) ✅
- Intelligente Duplikat-Erkennung (gleichnamige Dateien in unterschiedlichen Ordnern) ✅
- Pfad-Normalisierung (Windows/Linux kompatibel) ✅
- Bidirektionale Löschungs-Synchronisation ✅
- Testing der REST API mit dem CLI Tool ✅
- 0.0.4 Android / Linux / Windows App - GUI Framework Flutter
- Einarbeitung in Flutter ⌛
- Lokale SQLite Datenbank 🕓
- Lokale Berechnung des Dateihashes 🕓
- Kommunikation, inkl. Manifest, mit der REST API zum Synchronisieren 🕓
- 0.1.0 Testing
- End to End Test 💭
- 0.9.0 Release-Vorbereitung
- Erstellen des automatischen Deployment 🕓
- Sicheres Speichern von Datenbanklogin und Passwort 🕓
- 1.0.0 Release und Deployment Version 1.0.0
- Release durchführen 💭
- Ausgewähltes Verzeichnis wird synchronisiert
- Basis REST API ohne Authentifizierung
- Einfache Konfliktlösung - letzte Änderung wird übernommen
- Manuelle Synchronisation - der User startet den Vorgang (Download / Upload Buttons)
- Ein Backupsystem
- Eine Authentifizierung
- Biometrie Login bei der Android App
- Auto Sync
- Intelligente Konfliktlösung
- Windows Forms Admin-App (optional)
- Admin Dashboard mit Statistiken und später User Management (optional)
Kurz: Wir nutzen GitLab Flow. Detaillierte Regeln zu Branch-Namen, Merge-Requests und Deploys sind in Docs/gitlab_flow.md dokumentiert.
- Wichtige Branches:
main/production,feature/*,hotfix/*,bugfix/*,release/* - Merge-Requests: Review erforderlich, CI-Pipeline muss erfolgreich sein
- Deploy:
productionist der Deployment-Branch (automatisiert) - Weitere Hinweise: Siehe
Docs/gitlab_flow.mdfür Beispiele und Regeln
Detaillierte Informationen zur Verwendung des CLI Tools finden Sie in Docs/cli_usage.md.
Schnellstart:
# Datenbank initialisieren
cd data_sync.CLI
python src/main.py --init
# Verzeichnis scannen
python src/main.py --scan
# Vollständige Synchronisation (Scan + Download + Upload + Delete)
python src/main.py --syncDie REST API ist das Backend fuer die Synchronisation und laeuft lokal im Development-Modus standardmaessig unter https://localhost:7169.
Quickstart:
cd data_sync.API
dotnet runDie ausfuehrliche API-Anleitung mit Voraussetzungen, .env, Docker-Setup und Troubleshooting findest du in Docs/api_usage.md.
POST /api/sync/manifest- Manifest-Abgleich mit Three-Way-MergePOST /api/sync/upload- Datei-UploadGET /api/sync/download- Datei-DownloadDELETE /api/sync/delete- Datei-Löschung
Für das CLI Tool:
- Python 3.8 oder höher
requestsBibliothek:pip install requestsconfig.jsonim Projektverzeichnis (siehe cli_usage.md)
Für die API:
- .NET 10.0 SDK oder höher
- MariaDB Server (MySQL-kompatibel)
MySql.DataNuGet Package
data_sync/
├── Docs/ # Projekt-Dokumentation
│ ├── android_mokup_2.png
│ ├── api_usage.md # Ausfuehrliche API Anleitung
│ ├── ausgangslage_technologien.md
│ ├── backend_system_design.md
│ ├── cli_usage.md # CLI Benutzerhandbuch
│ ├── datenbank_design.md
│ ├── gitlab_flow.md
│ └── grundlegende_funktionen.md
│
├── data_sync.API/ # ASP.NET Core REST API
│ ├── data_sync.API.csproj
│ ├── appsettings.json
│ ├── Program.cs
│ │
│ ├── Controllers/ # API Endpoints
│ │ └── SyncController.cs
│ │
│ ├── DTOs/ # Data Transfer Objects
│ │ ├── ConfirmDownloadDtos.cs
│ │ ├── ConfirmUploadDtos.cs
│ │ └── ManifestDtos.cs
│ │
│ ├── Models/ # Entity Models & Enums
│ │ ├── SyncFile.cs
│ │ ├── SyncEvent.cs
│ │ ├── FileState.cs
│ │ └── SyncAction.cs
│ │
│ ├── Services/ # Business Logic Services
│ │ ├── DbErrorLogService.cs
│ │ ├── DbStartupCheckService.cs
│ │ ├── EnvLoadeService.cs
│ │ ├── FileLogService.cs
│ │ ├── GetFilesToSyncService.cs
│ │ ├── MariaDBService.cs # ADO.NET Service für MariaDB
│ │ ├── SyncStateService.cs
│ │ ├── UpdateMetadataService.cs
│ │ └── UtilsService.cs
│ │
│ ├── MariaDB/ # MariaDB Schema
│ │ └── CreateTable.sql
│ │
│ ├── Tests/ # Test-Dateien
│ │ ├── Postman/ # Postman Collections
│ │ ├── DbErrorLogServiceTests.cs
│ │ └── TestService.cs
│ │
│ └── Properties/
│ └── launchSettings.json
│
├── data_sync.CLI/ # Python CLI Tool
│ ├── src/
│ │ ├── main.py # Entry Point
│ │ └── core/ # Core-Logik
│ │ ├── commands/ # Command Pattern Implementation
│ │ │ ├── base_command.py
│ │ │ ├── init_command.py
│ │ │ ├── scan_command.py
│ │ │ ├── manifest_command.py
│ │ │ ├── upload_command.py
│ │ │ ├── download_command.py
│ │ │ └── delete_command.py
│ │ ├── handlers/ # Hilfsfunktionen
│ │ │ ├── config_handler.py
│ │ │ ├── sqlite_handler.py
│ │ │ ├── manifest_handler.py
│ │ │ ├── db_logger.py
│ │ │ └── file_logger.py
│ │ ├── api_client.py # REST API Client
│ │ ├── file_scanner.py # Verzeichnis-Scanner
│ │ ├── sync_state_manager.py # LastSyncState Verwaltung
│ │ ├── db_setup.py # DB-Initialisierung
│ │ └── models.py # Datenmodelle
│ ├── SQLite/
│ │ └── CreateTable.sql # SQLite Schema
│ └── test_data/ # Test-Verzeichnis
│
├── data_sync.FLUTTER/ # Flutter App (Android, Linux, Windows)
│ ├── lib/
│ ├── android/
│ ├── linux/
│ ├── windows/
│ └── pubspec.yaml
│
├── config.json # CLI Konfiguration
├── cli_db.db # SQLite Datenbank (generiert)
├── README.md
└── data_sync.sln # Visual Studio Solution
# 1. Repository klonen
git clone <repository-url>
cd data_sync
# 2. Python-Abhängigkeiten installieren
pip install requests
# 3. Konfiguration erstellen
cat > config.json << EOF
{
"sync_path": "/pfad/zum/sync/verzeichnis",
"api_base_url": "https://localhost:7169/api/sync",
"verify_ssl": false
}
EOF
# 4. Datenbank initialisieren
cd data_sync.CLI/src
python main.py --initKurze Version:
cd data_sync.API
dotnet runDie ausfuehrliche Einrichtung findest du in Docs/api_usage.md.
Die Docker-Anleitung fuer die API findest du in Docs/api_usage.md.
Detaillierte Informationen zur CLI-Verwendung: Docs/cli_usage.md
requests- HTTP-Bibliothek für API-Kommunikation- Python Standard Library (
os,hashlib,sqlite3,json,argparse)
- .NET 10.0
MySql.Data- MariaDB/MySQL DatenbankzugriffDotNetEnv- .env Datei Support
Dieses Projekt ist unter der GPL-3.0 lizenziert - siehe die LICENSE-Datei für Details.