This commit is contained in:
Marek Lenczewski
2026-03-30 23:10:30 +02:00
parent 7b58e68ecb
commit f9a9004fcd
2 changed files with 15 additions and 16 deletions

View File

@@ -54,23 +54,20 @@ backend/src/
TaskSchemaController.php — Schema CRUD + week view + toggle TaskSchemaController.php — Schema CRUD + week view + toggle
DTO/ DTO/
Request/ — CreateSchemaRequest, UpdateSchemaRequest, UpdateTaskRequest, Request/ — CreateSchemaRequest, UpdateSchemaRequest, UpdateTaskRequest,
ToggleRequest, CreateCategoryRequest, UpdateCategoryRequest ToggleRequest, CreateCategoryRequest, UpdateCategoryRequest,
SchemaValidationTrait
Response/ — TaskResponse, CategoryResponse, WeekViewResponse, Response/ — TaskResponse, CategoryResponse, WeekViewResponse,
DayResponse, ToggleResponse DayResponse, ToggleResponse
Entity/ Entity/
Category.php, Task.php, TaskSchema.php Category.php, Task.php, TaskSchema.php
Enum/ Enum/
TaskStatus.php, TaskSchemaStatus.php, TaskSchemaType.php TaskStatus.php, TaskSchemaStatus.php, TaskSchemaType.php
Exception/
ValidationException.php — Wraps ConstraintViolationList, handled by ExceptionListener
EventListener/
ExceptionListener.php — Fängt ValidationException, erzeugt JSON 422
Repository/ Repository/
CategoryRepository.php, TaskRepository.php, TaskSchemaRepository.php CategoryRepository.php, TaskRepository.php, TaskSchemaRepository.php
Service/ Service/
CategoryManager.php — Category CRUD-Logik CategoryManager.php — Category CRUD-Logik
TaskManager.php — Task Update/Delete TaskManager.php — Task Update/Delete/Toggle
TaskSchemaManager.php — Schema CRUD + Toggle + Sync-Auslösung TaskSchemaManager.php — Schema CRUD + Sync-Auslösung
TaskGenerator.php — Erzeugt Task-Instanzen für Zeiträume TaskGenerator.php — Erzeugt Task-Instanzen für Zeiträume
TaskSynchronizer.php — Sync nach Schema-Update (löschen/erstellen/reset) TaskSynchronizer.php — Sync nach Schema-Update (löschen/erstellen/reset)
DeadlineCalculator.php — Berechnet Fälligkeitsdaten für ein Schema DeadlineCalculator.php — Berechnet Fälligkeitsdaten für ein Schema
@@ -153,7 +150,7 @@ frontend/src/
- **Enum-Werte**: Deutsch in DB (`aktiv`, `erledigt`, `einzel` etc.), Englisch als PHP-Case-Namen (`Active`, `Completed`, `Single`) - **Enum-Werte**: Deutsch in DB (`aktiv`, `erledigt`, `einzel` etc.), Englisch als PHP-Case-Namen (`Active`, `Completed`, `Single`)
- **API-Serialisierung**: Symfony Serializer-Groups für Schema/Category Entities (`schema:read`, `schema:write`, `category:read`, `category:write`), TaskSerializer-Service für Tasks - **API-Serialisierung**: Symfony Serializer-Groups für Schema/Category Entities (`schema:read`, `schema:write`, `category:read`, `category:write`), TaskSerializer-Service für Tasks
- **Validierung**: Auf Request-DTOs, nicht auf Entities - **Validierung**: Auf Request-DTOs, nicht auf Entities
- **Error-Handling**: `ValidationException` → ExceptionListener → JSON 422; `HttpException` → Symfony built-in - **Error-Handling**: `HttpException` → Symfony built-in
- **Frontend**: Vue 3 Composition API mit `<script setup>`, fetch-basierter API-Client - **Frontend**: Vue 3 Composition API mit `<script setup>`, fetch-basierter API-Client
## Development ## Development
@@ -167,9 +164,10 @@ ddev exec "cd backend && php bin/console cache:clear"
ddev exec "cd backend && php bin/console doctrine:migrations:migrate --no-interaction" ddev exec "cd backend && php bin/console doctrine:migrations:migrate --no-interaction"
# Frontend # Frontend
cd frontend && npm run dev ddev exec "cd frontend && npm install"
ddev exec "cd frontend && npm run dev -- --host 0.0.0.0"
# URLs # URLs
Frontend: https://haushalt.ddev.site:5174 Frontend: https://haushalt.ddev.site:5173
API: https://haushalt.ddev.site/api API: https://haushalt.ddev.site/api
``` ```

View File

@@ -33,11 +33,11 @@ CategoryManager::updateCategory() — Kategorie aktualisieren
CategoryManager::deleteCategory() — Kategorie löschen CategoryManager::deleteCategory() — Kategorie löschen
TaskManager::updateTask() — Task aktualisieren (Name, Kategorie, Status, Datum) TaskManager::updateTask() — Task aktualisieren (Name, Kategorie, Status, Datum)
TaskManager::toggleTaskStatus() — Task-Status umschalten (aktiv↔erledigt)
TaskManager::deleteTask() — Task löschen TaskManager::deleteTask() — Task löschen
TaskSchemaManager::createSchema() — Neues Schema anlegen TaskSchemaManager::createSchema() — Neues Schema anlegen
TaskSchemaManager::updateSchema() — Schema aktualisieren + Tasks synchronisieren TaskSchemaManager::updateSchema() — Schema aktualisieren + Tasks synchronisieren
TaskSchemaManager::toggleTaskStatus() — Task-Status umschalten (aktiv↔erledigt)
TaskSchemaManager::deleteSchema() — Schema löschen TaskSchemaManager::deleteSchema() — Schema löschen
TaskGenerator::generateForRange() — Fehlende Tasks für einen Zeitraum erzeugen TaskGenerator::generateForRange() — Fehlende Tasks für einen Zeitraum erzeugen
@@ -83,16 +83,16 @@ TaskSchemaType — Wiederholungstyp (einzel, taeglich, multi, woechentlich, mona
CategoryRepository — Standard Doctrine-Repository (keine eigenen Methoden) CategoryRepository — Standard Doctrine-Repository (keine eigenen Methoden)
TaskRepository::findByTaskAndDate() — Task anhand Schema und Datum finden TaskRepository::findBySchemaAndDate() — Task anhand Schema und Datum finden
TaskRepository::findInRange() — Alle Tasks in einem Zeitraum (ohne inaktive Schemas) TaskRepository::findInRange() — Alle Tasks in einem Zeitraum (ohne inaktive Schemas)
TaskRepository::getExistingKeys() — Set aus "schemaId-YYYY-MM-DD" Keys für existierende Tasks TaskRepository::getExistingKeys() — Set aus "schemaId-YYYY-MM-DD" Keys für existierende Tasks
TaskRepository::findByTaskFromDate() — Tasks eines Schemas ab einem Datum TaskRepository::findBySchemaFromDate() — Tasks eines Schemas ab einem Datum
TaskRepository::deleteFutureByTask() — Zukünftige Tasks eines Schemas löschen TaskRepository::deleteFutureBySchema() — Zukünftige Tasks eines Schemas löschen
TaskRepository::deleteFutureActive() — Zukünftige aktive Tasks eines Schemas löschen TaskRepository::deleteFutureActiveBySchema() — Zukünftige aktive Tasks eines Schemas löschen
TaskRepository::findAllSorted() — Alle Tasks mit Datum, sortiert nach Datum absteigend TaskRepository::findAllSorted() — Alle Tasks mit Datum, sortiert nach Datum absteigend
TaskRepository::findWithoutDate() — Alle aktiven Tasks ohne Datum, sortiert nach Erstellung TaskRepository::findWithoutDate() — Alle aktiven Tasks ohne Datum, sortiert nach Erstellung
TaskSchemaRepository::findActiveTasksInRange() — Aktive Schemas in einem Zeitraum finden TaskSchemaRepository::findActiveSchemasInRange() — Aktive Schemas in einem Zeitraum finden
# Migration # Migration
@@ -101,3 +101,4 @@ Version20260324141105 — Erstellt task_completion-Tabelle mit Unique-Constraint
Version20260324154816 — Ersetzt task_completion durch task_occurrence, migriert Daten Version20260324154816 — Ersetzt task_completion durch task_occurrence, migriert Daten
Version20260325064344 — Ergänzt name, category_overridden, category_id auf task_occurrence Version20260325064344 — Ergänzt name, category_overridden, category_id auf task_occurrence
Version20260326165702 — Benennt task→task_schema und task_occurrence→task um Version20260326165702 — Benennt task→task_schema und task_occurrence→task um
Version20260330210659 — Ergänzt year_days, created_at; entfernt interval_type; passt Indizes an