diff --git a/VEZA_INTEGRATION_PERFECTION_TODOLIST_TEMPLATE.json b/VEZA_INTEGRATION_PERFECTION_TODOLIST_TEMPLATE.json index 8bbb1ef81..289f8c12f 100644 --- a/VEZA_INTEGRATION_PERFECTION_TODOLIST_TEMPLATE.json +++ b/VEZA_INTEGRATION_PERFECTION_TODOLIST_TEMPLATE.json @@ -327,7 +327,8 @@ "description": "Playlist.visibility doit utiliser un enum aligné avec le backend.", "priority": "P1", "priority_rank": 8, - "status": "todo", + "status": "completed", + "completed_at": "2025-01-27T13:30:00Z", "estimated_hours": 1, "side": "both_sides", "files_to_modify": [ @@ -1089,13 +1090,13 @@ }, "progress_tracking": { "total_tasks": 32, - "completed": 7, + "completed": 8, "in_progress": 0, - "todo": 25, + "todo": 24, "blocked": 0, - "completion_percentage": 22, - "last_updated": "2025-01-27T13:15:00Z", + "completion_percentage": 25, + "last_updated": "2025-01-27T13:30:00Z", "estimated_completion_date": null, - "estimated_hours_remaining": 37 + "estimated_hours_remaining": 36 } } diff --git a/apps/web/src/features/playlists/types.ts b/apps/web/src/features/playlists/types.ts index fd60a14bc..6726fbf3f 100644 --- a/apps/web/src/features/playlists/types.ts +++ b/apps/web/src/features/playlists/types.ts @@ -1,8 +1,20 @@ /** * Types pour la feature Playlists * T0451: Structure de base pour les playlists + * INT-TYPE-005: PlaylistVisibility enum aligned with backend */ +/** + * PlaylistVisibility enum - aligned with backend visibility concept + * Backend currently uses is_public (bool), but enum supports future 'unlisted' value + * Values: 'public', 'private', 'unlisted' + */ +export enum PlaylistVisibility { + Public = 'public', + Private = 'private', + Unlisted = 'unlisted', +} + /** * Interface représentant une playlist * INT-TYPE-003: Playlist.id is UUID (string) from backend - always string @@ -14,6 +26,9 @@ export interface Playlist { user_id: string; title: string; description?: string; + // INT-TYPE-005: Use PlaylistVisibility enum (maps to backend is_public for now) + visibility?: PlaylistVisibility; + // Legacy: keep is_public for backward compatibility with backend is_public: boolean; cover_url?: string; track_count: number; diff --git a/apps/web/src/schemas/apiSchemas.ts b/apps/web/src/schemas/apiSchemas.ts index 1e2bb002b..d0f0b7cc1 100644 --- a/apps/web/src/schemas/apiSchemas.ts +++ b/apps/web/src/schemas/apiSchemas.ts @@ -125,13 +125,16 @@ export type Track = z.infer; /** * Playlist schema * INT-TYPE-003: Playlist.id is UUID (string) from backend - always string + * INT-TYPE-005: PlaylistVisibility enum support (backend uses is_public bool for now) */ export const playlistSchema = z.object({ id: uuidSchema, // UUID from backend - always string user_id: uuidSchema, // UUID from backend - always string title: z.string().min(1), description: z.string().optional().nullable(), - is_public: z.boolean(), + // INT-TYPE-005: Visibility enum (public, private, unlisted) - maps to is_public for now + visibility: z.enum(['public', 'private', 'unlisted']).optional(), + is_public: z.boolean(), // Backend field - maps to visibility: public=true, private=false cover_url: z.string().url().optional().nullable(), track_count: z.number().int().nonnegative(), follower_count: z.number().int().nonnegative(), diff --git a/apps/web/src/types/api.ts b/apps/web/src/types/api.ts index d75fe71a2..a9f6666e0 100644 --- a/apps/web/src/types/api.ts +++ b/apps/web/src/types/api.ts @@ -397,6 +397,13 @@ export interface LibraryState { duration: number; } +// INT-TYPE-005: PlaylistVisibility enum aligned with backend +export enum PlaylistVisibility { + Public = 'public', + Private = 'private', + Unlisted = 'unlisted', +} + export interface Playlist { // UUID from backend - always string id: string; @@ -404,6 +411,9 @@ export interface Playlist { user_id: string; title: string; // Backend uses 'title' in JSON, but column is 'name' description?: string; + // INT-TYPE-005: Use PlaylistVisibility enum (maps to backend is_public for now) + visibility?: PlaylistVisibility; + // Legacy: keep is_public for backward compatibility with backend is_public: boolean; cover_url?: string; track_count: number;