[INT-TYPE-005] Create PlaylistVisibility enum aligned with backend

This commit is contained in:
senke 2025-12-25 22:36:51 +01:00
parent 8b4ef0abae
commit 2b81d5156d
4 changed files with 36 additions and 7 deletions

View file

@ -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
}
}

View file

@ -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;

View file

@ -125,13 +125,16 @@ export type Track = z.infer<typeof trackSchema>;
/**
* 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(),

View file

@ -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;