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
DTO/
Request/ — CreateSchemaRequest, UpdateSchemaRequest, UpdateTaskRequest,
ToggleRequest, CreateCategoryRequest, UpdateCategoryRequest
ToggleRequest, CreateCategoryRequest, UpdateCategoryRequest,
SchemaValidationTrait
Response/ — TaskResponse, CategoryResponse, WeekViewResponse,
DayResponse, ToggleResponse
Entity/
Category.php, Task.php, TaskSchema.php
Enum/
TaskStatus.php, TaskSchemaStatus.php, TaskSchemaType.php
Exception/
ValidationException.php — Wraps ConstraintViolationList, handled by ExceptionListener
EventListener/
ExceptionListener.php — Fängt ValidationException, erzeugt JSON 422
Repository/
CategoryRepository.php, TaskRepository.php, TaskSchemaRepository.php
Service/
CategoryManager.php — Category CRUD-Logik
TaskManager.php — Task Update/Delete
TaskSchemaManager.php — Schema CRUD + Toggle + Sync-Auslösung
TaskManager.php — Task Update/Delete/Toggle
TaskSchemaManager.php — Schema CRUD + Sync-Auslösung
TaskGenerator.php — Erzeugt Task-Instanzen für Zeiträume
TaskSynchronizer.php — Sync nach Schema-Update (löschen/erstellen/reset)
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`)
- **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
- **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
## 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"
# 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
Frontend: https://haushalt.ddev.site:5174
Frontend: https://haushalt.ddev.site:5173
API: https://haushalt.ddev.site/api
```

View File

@@ -33,11 +33,11 @@ CategoryManager::updateCategory() — Kategorie aktualisieren
CategoryManager::deleteCategory() — Kategorie löschen
TaskManager::updateTask() — Task aktualisieren (Name, Kategorie, Status, Datum)
TaskManager::toggleTaskStatus() — Task-Status umschalten (aktiv↔erledigt)
TaskManager::deleteTask() — Task löschen
TaskSchemaManager::createSchema() — Neues Schema anlegen
TaskSchemaManager::updateSchema() — Schema aktualisieren + Tasks synchronisieren
TaskSchemaManager::toggleTaskStatus() — Task-Status umschalten (aktiv↔erledigt)
TaskSchemaManager::deleteSchema() — Schema löschen
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)
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::getExistingKeys() — Set aus "schemaId-YYYY-MM-DD" Keys für existierende Tasks
TaskRepository::findByTaskFromDate() — Tasks eines Schemas ab einem Datum
TaskRepository::deleteFutureByTask() — Zukünftige Tasks eines Schemas löschen
TaskRepository::deleteFutureActive() — Zukünftige aktive Tasks eines Schemas löschen
TaskRepository::findBySchemaFromDate() — Tasks eines Schemas ab einem Datum
TaskRepository::deleteFutureBySchema() — Zukünftige 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::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
@@ -101,3 +101,4 @@ Version20260324141105 — Erstellt task_completion-Tabelle mit Unique-Constraint
Version20260324154816 — Ersetzt task_completion durch task_occurrence, migriert Daten
Version20260325064344 — Ergänzt name, category_overridden, category_id auf task_occurrence
Version20260326165702 — Benennt task→task_schema und task_occurrence→task um
Version20260330210659 — Ergänzt year_days, created_at; entfernt interval_type; passt Indizes an