738 lines
22 KiB
JSON
738 lines
22 KiB
JSON
{
|
|
"project": {
|
|
"name": "sonic-cloud",
|
|
"version": "0.1.0",
|
|
"created_at": "2025-12-18T14:32:39.275839",
|
|
"description": "Music platform for musicians to upload songs"
|
|
},
|
|
"state": {
|
|
"current_phase": "DESIGN_PHASE",
|
|
"approval_status": {
|
|
"manifest_approved": false,
|
|
"approved_by": null,
|
|
"approved_at": null
|
|
},
|
|
"revision_history": [
|
|
{
|
|
"action": "PROJECT_INITIALIZED",
|
|
"timestamp": "2025-12-18T14:32:39.275844",
|
|
"details": "Project sonic-cloud created"
|
|
},
|
|
{
|
|
"action": "DESIGN_DOCUMENT_CREATED",
|
|
"timestamp": "2025-12-18T15:10:00",
|
|
"details": "Complete design document with 91 entities created"
|
|
}
|
|
]
|
|
},
|
|
"entities": {
|
|
"database_tables": [
|
|
{
|
|
"id": "model_user",
|
|
"name": "User",
|
|
"table_name": "users",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_artist",
|
|
"name": "Artist",
|
|
"table_name": "artists",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_label",
|
|
"name": "Label",
|
|
"table_name": "labels",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_genre",
|
|
"name": "Genre",
|
|
"table_name": "genres",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_album",
|
|
"name": "Album",
|
|
"table_name": "albums",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_song",
|
|
"name": "Song",
|
|
"table_name": "songs",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_song_genre",
|
|
"name": "SongGenre",
|
|
"table_name": "song_genres",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_playlist",
|
|
"name": "Playlist",
|
|
"table_name": "playlists",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_playlist_song",
|
|
"name": "PlaylistSong",
|
|
"table_name": "playlist_songs",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
},
|
|
{
|
|
"id": "model_share",
|
|
"name": "Share",
|
|
"table_name": "shares",
|
|
"status": "PENDING",
|
|
"file_path": "prisma/schema.prisma"
|
|
}
|
|
],
|
|
"api_endpoints": [
|
|
{
|
|
"id": "api_register",
|
|
"name": "Register User",
|
|
"path": "/api/auth/register",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/auth/register/route.ts"
|
|
},
|
|
{
|
|
"id": "api_login",
|
|
"name": "Login",
|
|
"path": "/api/auth/login",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/auth/login/route.ts"
|
|
},
|
|
{
|
|
"id": "api_forgot_password",
|
|
"name": "Forgot Password",
|
|
"path": "/api/auth/forgot-password",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/auth/forgot-password/route.ts"
|
|
},
|
|
{
|
|
"id": "api_reset_password",
|
|
"name": "Reset Password",
|
|
"path": "/api/auth/reset-password",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/auth/reset-password/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_current_user",
|
|
"name": "Get Current User",
|
|
"path": "/api/users/me",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/users/me/route.ts"
|
|
},
|
|
{
|
|
"id": "api_update_current_user",
|
|
"name": "Update Current User",
|
|
"path": "/api/users/me",
|
|
"method": "PUT",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/users/me/route.ts"
|
|
},
|
|
{
|
|
"id": "api_create_artist_profile",
|
|
"name": "Create Artist Profile",
|
|
"path": "/api/artists",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/artists/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_artist",
|
|
"name": "Get Artist",
|
|
"path": "/api/artists/:id",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/artists/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_update_artist",
|
|
"name": "Update Artist",
|
|
"path": "/api/artists/:id",
|
|
"method": "PUT",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/artists/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_artist_songs",
|
|
"name": "Get Artist Songs",
|
|
"path": "/api/artists/:id/songs",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/artists/[id]/songs/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_artist_albums",
|
|
"name": "Get Artist Albums",
|
|
"path": "/api/artists/:id/albums",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/artists/[id]/albums/route.ts"
|
|
},
|
|
{
|
|
"id": "api_upload_song",
|
|
"name": "Upload Song",
|
|
"path": "/api/songs/upload",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/songs/upload/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_song",
|
|
"name": "Get Song",
|
|
"path": "/api/songs/:id",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/songs/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_update_song",
|
|
"name": "Update Song",
|
|
"path": "/api/songs/:id",
|
|
"method": "PUT",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/songs/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_delete_song",
|
|
"name": "Delete Song",
|
|
"path": "/api/songs/:id",
|
|
"method": "DELETE",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/songs/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_increment_play_count",
|
|
"name": "Increment Play Count",
|
|
"path": "/api/songs/:id/play",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/songs/[id]/play/route.ts"
|
|
},
|
|
{
|
|
"id": "api_create_album",
|
|
"name": "Create Album",
|
|
"path": "/api/albums",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/albums/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_album",
|
|
"name": "Get Album",
|
|
"path": "/api/albums/:id",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/albums/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_update_album",
|
|
"name": "Update Album",
|
|
"path": "/api/albums/:id",
|
|
"method": "PUT",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/albums/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_delete_album",
|
|
"name": "Delete Album",
|
|
"path": "/api/albums/:id",
|
|
"method": "DELETE",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/albums/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_create_playlist",
|
|
"name": "Create Playlist",
|
|
"path": "/api/playlists",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/playlists/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_user_playlists",
|
|
"name": "Get User Playlists",
|
|
"path": "/api/playlists",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/playlists/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_playlist",
|
|
"name": "Get Playlist",
|
|
"path": "/api/playlists/:id",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/playlists/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_update_playlist",
|
|
"name": "Update Playlist",
|
|
"path": "/api/playlists/:id",
|
|
"method": "PUT",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/playlists/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_delete_playlist",
|
|
"name": "Delete Playlist",
|
|
"path": "/api/playlists/:id",
|
|
"method": "DELETE",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/playlists/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_add_song_to_playlist",
|
|
"name": "Add Song to Playlist",
|
|
"path": "/api/playlists/:id/songs",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/playlists/[id]/songs/route.ts"
|
|
},
|
|
{
|
|
"id": "api_remove_song_from_playlist",
|
|
"name": "Remove Song from Playlist",
|
|
"path": "/api/playlists/:playlistId/songs/:songId",
|
|
"method": "DELETE",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/playlists/[playlistId]/songs/[songId]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_reorder_playlist_songs",
|
|
"name": "Reorder Playlist Songs",
|
|
"path": "/api/playlists/:id/reorder",
|
|
"method": "PUT",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/playlists/[id]/reorder/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_trending_songs",
|
|
"name": "Get Trending Songs",
|
|
"path": "/api/discover/trending",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/discover/trending/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_new_releases",
|
|
"name": "Get New Releases",
|
|
"path": "/api/discover/new-releases",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/discover/new-releases/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_genres",
|
|
"name": "Get Genres",
|
|
"path": "/api/discover/genres",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/discover/genres/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_songs_by_genre",
|
|
"name": "Get Songs by Genre",
|
|
"path": "/api/discover/genres/:slug",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/discover/genres/[slug]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_search",
|
|
"name": "Search",
|
|
"path": "/api/search",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/search/route.ts"
|
|
},
|
|
{
|
|
"id": "api_create_label_profile",
|
|
"name": "Create Label Profile",
|
|
"path": "/api/labels",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/labels/route.ts"
|
|
},
|
|
{
|
|
"id": "api_get_label_artists",
|
|
"name": "Get Label Artists",
|
|
"path": "/api/labels/:id/artists",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/labels/[id]/artists/route.ts"
|
|
},
|
|
{
|
|
"id": "api_create_song_share",
|
|
"name": "Create Song Share",
|
|
"path": "/api/share/song/:id",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/share/song/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_create_playlist_share",
|
|
"name": "Create Playlist Share",
|
|
"path": "/api/share/playlist/:id",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/share/playlist/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_create_album_share",
|
|
"name": "Create Album Share",
|
|
"path": "/api/share/album/:id",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/share/album/[id]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_resolve_share",
|
|
"name": "Resolve Share",
|
|
"path": "/api/share/:token",
|
|
"method": "GET",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/share/[token]/route.ts"
|
|
},
|
|
{
|
|
"id": "api_track_share_click",
|
|
"name": "Track Share Click",
|
|
"path": "/api/share/:token/click",
|
|
"method": "POST",
|
|
"status": "PENDING",
|
|
"file_path": "app/api/share/[token]/click/route.ts"
|
|
}
|
|
],
|
|
"pages": [
|
|
{
|
|
"id": "page_login",
|
|
"name": "Login",
|
|
"path": "/login",
|
|
"status": "PENDING",
|
|
"file_path": "app/login/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_register",
|
|
"name": "Register",
|
|
"path": "/register",
|
|
"status": "PENDING",
|
|
"file_path": "app/register/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_forgot_password",
|
|
"name": "Forgot Password",
|
|
"path": "/forgot-password",
|
|
"status": "PENDING",
|
|
"file_path": "app/forgot-password/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_home",
|
|
"name": "Discover Music",
|
|
"path": "/",
|
|
"status": "PENDING",
|
|
"file_path": "app/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_artist_profile",
|
|
"name": "Artist Profile",
|
|
"path": "/artist/:id",
|
|
"status": "PENDING",
|
|
"file_path": "app/artist/[id]/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_album_detail",
|
|
"name": "Album",
|
|
"path": "/album/:id",
|
|
"status": "PENDING",
|
|
"file_path": "app/album/[id]/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_upload",
|
|
"name": "Upload Music",
|
|
"path": "/upload",
|
|
"status": "PENDING",
|
|
"file_path": "app/upload/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_playlists",
|
|
"name": "My Playlists",
|
|
"path": "/playlists",
|
|
"status": "PENDING",
|
|
"file_path": "app/playlists/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_playlist_detail",
|
|
"name": "Playlist",
|
|
"path": "/playlist/:id",
|
|
"status": "PENDING",
|
|
"file_path": "app/playlist/[id]/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_profile",
|
|
"name": "Profile Settings",
|
|
"path": "/profile",
|
|
"status": "PENDING",
|
|
"file_path": "app/profile/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_search",
|
|
"name": "Search",
|
|
"path": "/search",
|
|
"status": "PENDING",
|
|
"file_path": "app/search/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_genre_browse",
|
|
"name": "Browse Genre",
|
|
"path": "/genre/:slug",
|
|
"status": "PENDING",
|
|
"file_path": "app/genre/[slug]/page.tsx"
|
|
},
|
|
{
|
|
"id": "page_share",
|
|
"name": "Share",
|
|
"path": "/s/:token",
|
|
"status": "PENDING",
|
|
"file_path": "app/s/[token]/page.tsx"
|
|
}
|
|
],
|
|
"components": [
|
|
{
|
|
"id": "component_audio_player",
|
|
"name": "AudioPlayer",
|
|
"status": "PENDING",
|
|
"file_path": "components/AudioPlayer.tsx"
|
|
},
|
|
{
|
|
"id": "component_player_controls",
|
|
"name": "PlayerControls",
|
|
"status": "PENDING",
|
|
"file_path": "components/PlayerControls.tsx"
|
|
},
|
|
{
|
|
"id": "component_song_card",
|
|
"name": "SongCard",
|
|
"status": "PENDING",
|
|
"file_path": "components/SongCard.tsx"
|
|
},
|
|
{
|
|
"id": "component_album_card",
|
|
"name": "AlbumCard",
|
|
"status": "PENDING",
|
|
"file_path": "components/AlbumCard.tsx"
|
|
},
|
|
{
|
|
"id": "component_artist_card",
|
|
"name": "ArtistCard",
|
|
"status": "PENDING",
|
|
"file_path": "components/ArtistCard.tsx"
|
|
},
|
|
{
|
|
"id": "component_playlist_card",
|
|
"name": "PlaylistCard",
|
|
"status": "PENDING",
|
|
"file_path": "components/PlaylistCard.tsx"
|
|
},
|
|
{
|
|
"id": "component_upload_form",
|
|
"name": "UploadForm",
|
|
"status": "PENDING",
|
|
"file_path": "components/UploadForm.tsx"
|
|
},
|
|
{
|
|
"id": "component_waveform_display",
|
|
"name": "WaveformDisplay",
|
|
"status": "PENDING",
|
|
"file_path": "components/WaveformDisplay.tsx"
|
|
},
|
|
{
|
|
"id": "component_genre_badge",
|
|
"name": "GenreBadge",
|
|
"status": "PENDING",
|
|
"file_path": "components/GenreBadge.tsx"
|
|
},
|
|
{
|
|
"id": "component_track_list",
|
|
"name": "TrackList",
|
|
"status": "PENDING",
|
|
"file_path": "components/TrackList.tsx"
|
|
},
|
|
{
|
|
"id": "component_artist_header",
|
|
"name": "ArtistHeader",
|
|
"status": "PENDING",
|
|
"file_path": "components/ArtistHeader.tsx"
|
|
},
|
|
{
|
|
"id": "component_album_header",
|
|
"name": "AlbumHeader",
|
|
"status": "PENDING",
|
|
"file_path": "components/AlbumHeader.tsx"
|
|
},
|
|
{
|
|
"id": "component_playlist_header",
|
|
"name": "PlaylistHeader",
|
|
"status": "PENDING",
|
|
"file_path": "components/PlaylistHeader.tsx"
|
|
},
|
|
{
|
|
"id": "component_social_links",
|
|
"name": "SocialLinks",
|
|
"status": "PENDING",
|
|
"file_path": "components/SocialLinks.tsx"
|
|
},
|
|
{
|
|
"id": "component_auth_form",
|
|
"name": "AuthForm",
|
|
"status": "PENDING",
|
|
"file_path": "components/AuthForm.tsx"
|
|
},
|
|
{
|
|
"id": "component_search_bar",
|
|
"name": "SearchBar",
|
|
"status": "PENDING",
|
|
"file_path": "components/SearchBar.tsx"
|
|
},
|
|
{
|
|
"id": "component_search_results",
|
|
"name": "SearchResults",
|
|
"status": "PENDING",
|
|
"file_path": "components/SearchResults.tsx"
|
|
},
|
|
{
|
|
"id": "component_create_playlist_modal",
|
|
"name": "CreatePlaylistModal",
|
|
"status": "PENDING",
|
|
"file_path": "components/CreatePlaylistModal.tsx"
|
|
},
|
|
{
|
|
"id": "component_profile_form",
|
|
"name": "ProfileForm",
|
|
"status": "PENDING",
|
|
"file_path": "components/ProfileForm.tsx"
|
|
},
|
|
{
|
|
"id": "component_avatar_upload",
|
|
"name": "AvatarUpload",
|
|
"status": "PENDING",
|
|
"file_path": "components/AvatarUpload.tsx"
|
|
},
|
|
{
|
|
"id": "component_section_header",
|
|
"name": "SectionHeader",
|
|
"status": "PENDING",
|
|
"file_path": "components/SectionHeader.tsx"
|
|
},
|
|
{
|
|
"id": "component_genre_header",
|
|
"name": "GenreHeader",
|
|
"status": "PENDING",
|
|
"file_path": "components/GenreHeader.tsx"
|
|
},
|
|
{
|
|
"id": "component_header",
|
|
"name": "Header",
|
|
"status": "IMPLEMENTED",
|
|
"file_path": "components/Header.tsx"
|
|
},
|
|
{
|
|
"id": "component_nav_link",
|
|
"name": "NavLink",
|
|
"status": "IMPLEMENTED",
|
|
"file_path": "components/NavLink.tsx"
|
|
},
|
|
{
|
|
"id": "component_user_menu",
|
|
"name": "UserMenu",
|
|
"status": "IMPLEMENTED",
|
|
"file_path": "components/UserMenu.tsx"
|
|
},
|
|
{
|
|
"id": "component_share_button",
|
|
"name": "ShareButton",
|
|
"status": "PENDING",
|
|
"file_path": "components/ShareButton.tsx"
|
|
},
|
|
{
|
|
"id": "component_share_modal",
|
|
"name": "ShareModal",
|
|
"status": "PENDING",
|
|
"file_path": "components/ShareModal.tsx"
|
|
},
|
|
{
|
|
"id": "component_social_share_buttons",
|
|
"name": "SocialShareButtons",
|
|
"status": "PENDING",
|
|
"file_path": "components/SocialShareButtons.tsx"
|
|
},
|
|
{
|
|
"id": "component_share_content_display",
|
|
"name": "SharedContentDisplay",
|
|
"status": "PENDING",
|
|
"file_path": "components/SharedContentDisplay.tsx"
|
|
}
|
|
]
|
|
},
|
|
"dependencies": {
|
|
"component_to_page": {
|
|
"component_auth_form": ["page_login", "page_register", "page_forgot_password"],
|
|
"component_song_card": ["page_home", "page_artist_profile", "page_search", "page_genre_browse", "page_album_detail", "page_playlist_detail"],
|
|
"component_genre_badge": ["page_home"],
|
|
"component_section_header": ["page_home"],
|
|
"component_artist_header": ["page_artist_profile"],
|
|
"component_album_card": ["page_artist_profile", "page_search"],
|
|
"component_social_links": ["page_artist_profile"],
|
|
"component_album_header": ["page_album_detail"],
|
|
"component_track_list": ["page_album_detail", "page_playlist_detail"],
|
|
"component_upload_form": ["page_upload"],
|
|
"component_waveform_display": ["page_upload"],
|
|
"component_playlist_card": ["page_playlists"],
|
|
"component_create_playlist_modal": ["page_playlists"],
|
|
"component_playlist_header": ["page_playlist_detail"],
|
|
"component_profile_form": ["page_profile"],
|
|
"component_avatar_upload": ["page_profile"],
|
|
"component_search_bar": ["page_search"],
|
|
"component_search_results": ["page_search"],
|
|
"component_artist_card": ["page_search"],
|
|
"component_genre_header": ["page_genre_browse"]
|
|
},
|
|
"api_to_component": {
|
|
"api_login": ["component_auth_form"],
|
|
"api_register": ["component_auth_form"],
|
|
"api_forgot_password": ["component_auth_form"],
|
|
"api_upload_song": ["component_upload_form"],
|
|
"api_increment_play_count": ["component_audio_player"],
|
|
"api_search": ["component_search_bar"],
|
|
"api_create_playlist": ["component_create_playlist_modal"],
|
|
"api_update_current_user": ["component_profile_form"]
|
|
},
|
|
"table_to_api": {
|
|
"model_user": ["api_register", "api_login", "api_forgot_password", "api_reset_password", "api_get_current_user", "api_update_current_user"],
|
|
"model_artist": ["api_create_artist_profile", "api_get_artist", "api_update_artist", "api_get_artist_songs", "api_get_artist_albums"],
|
|
"model_song": ["api_upload_song", "api_get_song", "api_update_song", "api_delete_song", "api_increment_play_count", "api_get_artist_songs", "api_get_trending_songs", "api_get_new_releases", "api_search"],
|
|
"model_album": ["api_create_album", "api_get_album", "api_update_album", "api_delete_album", "api_get_artist_albums", "api_search"],
|
|
"model_playlist": ["api_create_playlist", "api_get_user_playlists", "api_get_playlist", "api_update_playlist", "api_delete_playlist"],
|
|
"model_playlist_song": ["api_add_song_to_playlist", "api_remove_song_from_playlist", "api_reorder_playlist_songs"],
|
|
"model_genre": ["api_get_genres", "api_get_songs_by_genre"],
|
|
"model_label": ["api_create_label_profile", "api_get_label_artists"]
|
|
}
|
|
}
|
|
}
|