{ "tasks": [ { "id": "TASK-001", "priority": "HIGH", "category": "FIX", "title": "Fix Error Handling Protocol Mismatch", "description": "The Backend returns errors wrapped in a root `error` object (e.g., `{\"error\": {\"code\": ...}}`), but the Frontend `apiErrorHandler.ts` expects either `{ \"success\": false, \"error\": ... }` or a root-level `code`/`message`. This causes specific backend parsing errors (like validation details) to be lost, defaulting to generic messages.", "context_files": [ "veza-backend-api/internal/middleware/error_handler.go", "apps/web/src/utils/apiErrorHandler.ts", "apps/web/src/services/api/client.ts" ], "verification": "Trigger a validation error (e.g. login with empty password) and verify that the Frontend displays the specific field error message instead of a generic fallback.", "status": "COMPLETED" }, { "id": "TASK-002", "priority": "HIGH", "category": "FIX", "title": "Fix Track Upload Metadata Loss", "description": "The Frontend sends track metadata (title, artist, genre, etc.) via FormData during upload, but the Backend `UploadTrack` handler only reads the `file` field and ignores all other metadata. This results in tracks being created with filenames as titles and missing metadata.", "context_files": [ "veza-backend-api/internal/core/track/track_handler.go", "veza-backend-api/internal/core/track/service.go", "apps/web/src/features/tracks/api/trackApi.ts" ], "verification": "Upload a track with a specific Title and Genre. Verify in the database or response that the created Track has these fields correctly set.", "status": "COMPLETED" }, { "id": "TASK-003", "priority": "HIGH", "category": "FIX", "title": "Standardize Auth Token Propagation", "description": "Ensure strict token propagation during Uploads. The manual error throwing in `trackApi.ts` for 401/403 might interfere with the `client.ts` interceptor's auto-refresh logic. Standardize to rely on the interceptor.", "context_files": [ "apps/web/src/services/api/client.ts", "apps/web/src/features/tracks/api/trackApi.ts" ], "verification": "Wait for token expiry (or mock 401), attempt an upload. Verify that the client attempts a refresh and retries the upload automatically.", "status": "COMPLETED" }, { "id": "TASK-004", "priority": "MEDIUM", "category": "FIX", "title": "Harmonize User Data Models (Date Formats)", "description": "Backend `User` struct uses `*time.Time` (nullable pointers) for `Birthdate` and `UsernameChangedAt`. Frontend interface expects `string` (ISO8601). Ensuring strictly compatible handling is required to avoid rendering issues with 'null' or zero-dates.", "context_files": [ "veza-backend-api/internal/models/user.go", "apps/web/src/types/api.ts" ], "verification": "Fetch a user profile with a null birthdate and one with a set birthdate. Verify both render without runtime errors.", "status": "COMPLETED" }, { "id": "TASK-005", "priority": "MEDIUM", "category": "FEATURE", "title": "Implement Missing DELETE Track Endpoint", "description": "The `DELETE /api/v1/tracks/:id` endpoint exists in the Backend but is missing from the Frontend `trackApi.ts`. Implement this function to allow users to delete their tracks.", "context_files": [ "veza-backend-api/internal/core/track/track_handler.go", "apps/web/src/features/tracks/api/trackApi.ts" ], "verification": "Call `deleteTrack(id)` from frontend. Verify track is deleted in backend and disappears from list.", "status": "COMPLETED" }, { "id": "TASK-006", "priority": "MEDIUM", "category": "FEATURE", "title": "Implement Chunked Uploads in Frontend", "description": "The Backend supports robust Chunked Uploads (`/initiate`, `/chunk`, `/complete`), but the Frontend currently relies on a single POST request which is fragile for large files. Implement the chunked upload strategy.", "context_files": [ "veza-backend-api/internal/core/track/track_handler.go", "apps/web/src/features/tracks/api/trackApi.ts" ], "verification": "Upload a file larger than 10MB. Verify it sends multiple requests to `/chunk` and finalizes with `/complete`.", "status": "COMPLETED" } ] }