Jako Użytkownik chcę tworzyć, edytować i usuwać zadania (tytuł, opis, termin, status), aby prowadzić listę rzeczy do zrobienia w jednym miejscu.
Acceptance Criteria
- Create (POST /tasks)
- Gdy wysyłam
title (wymagane), opcjonalnie description, due_at, ai_tags, serwer tworzy Task z:
status="todo" domyślnie,
- ustawionymi
created_at, updated_at,
- polami oceny AI początkowo
null (ai_priority, ai_category, ai_rationale_short, ai_confidence, ai_last_scored_at),
ai_tags=[] jeśli nie podano, albo wartości z request jeśli podano.
- Walidacja wejścia:
title 1–120 znaków; jeśli nie spełnia, odpowiedź 422.
- Walidacja
ai_tags zgodnie z regułami globalnymi (unikalne, max 10, długości) — naruszenie → 422.
- Odpowiedź 201 zawiera pełny obiekt Task z
id.
- Update (PATCH /tasks/{id})
- Mogę zaktualizować dowolny podzbiór pól:
title, description, due_at, status.
- Serwer nie nadpisuje pól nieobecnych w body.
- Zmiana któregokolwiek pola modyfikowalnego aktualizuje
updated_at.
- Opcjonalnie mogę przekazać
expected_updated_at (ISO-8601 datetime). Jeśli wartość nie zgadza się z aktualnym updated_at w DB → 409 (conflict) i brak zmian.
- Niepoprawne
status lub format due_at → 422.
- Brak Task o
id → 404.
- Delete (DELETE /tasks/{id})
- Usunięcie istniejącego Task zwraca 204.
- Usunięcie nieistniejącego Task zwraca 404.
- Read (GET /tasks/{id})
- Odczyt istniejącego Task zwraca 200 i pełny obiekt Task.
- Odczyt nieistniejącego Task zwraca 404.
- Spójność danych
- Operacje CRUD nie modyfikują pól oceny AI (
ai_priority, ai_category, ai_rationale_short, ai_confidence, ai_last_scored_at).
ai_tags mogą być ustawione w Create (POST /tasks) oraz nadpisywane po udanym /tasks/{id}/ai-score.
Jako Użytkownik chcę tworzyć, edytować i usuwać zadania (tytuł, opis, termin, status), aby prowadzić listę rzeczy do zrobienia w jednym miejscu.
Acceptance Criteria
title(wymagane), opcjonalniedescription,due_at,ai_tags, serwer tworzy Task z:status="todo"domyślnie,created_at,updated_at,null(ai_priority,ai_category,ai_rationale_short,ai_confidence,ai_last_scored_at),ai_tags=[]jeśli nie podano, albo wartości z request jeśli podano.title1–120 znaków; jeśli nie spełnia, odpowiedź 422.ai_tagszgodnie z regułami globalnymi (unikalne, max 10, długości) — naruszenie → 422.id.title,description,due_at,status.updated_at.expected_updated_at(ISO-8601 datetime). Jeśli wartość nie zgadza się z aktualnymupdated_atw DB → 409 (conflict) i brak zmian.statuslub formatdue_at→ 422.id→ 404.ai_priority,ai_category,ai_rationale_short,ai_confidence,ai_last_scored_at).ai_tagsmogą być ustawione w Create (POST /tasks) oraz nadpisywane po udanym/tasks/{id}/ai-score.