1334 lines
29 KiB
YAML
1334 lines
29 KiB
YAML
dependency_graph:
|
|
design_version: 1
|
|
workflow_version: v001
|
|
generated_at: '2025-12-18T15:16:50.203723'
|
|
generator: validate_design.py
|
|
stats:
|
|
total_entities: 78
|
|
total_layers: 4
|
|
max_parallelism: 38
|
|
critical_path_length: 4
|
|
layers:
|
|
- layer: 1
|
|
name: Data Layer
|
|
description: Database models - no external dependencies
|
|
items:
|
|
- id: component_album_card
|
|
type: component
|
|
name: AlbumCard
|
|
depends_on: []
|
|
task_id: task_create_component_album_card
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_album_header
|
|
type: component
|
|
name: AlbumHeader
|
|
depends_on: []
|
|
task_id: task_create_component_album_header
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_artist_card
|
|
type: component
|
|
name: ArtistCard
|
|
depends_on: []
|
|
task_id: task_create_component_artist_card
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_avatar_upload
|
|
type: component
|
|
name: AvatarUpload
|
|
depends_on: []
|
|
task_id: task_create_component_avatar_upload
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_genre_badge
|
|
type: component
|
|
name: GenreBadge
|
|
depends_on: []
|
|
task_id: task_create_component_genre_badge
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_genre_header
|
|
type: component
|
|
name: GenreHeader
|
|
depends_on: []
|
|
task_id: task_create_component_genre_header
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_player_controls
|
|
type: component
|
|
name: PlayerControls
|
|
depends_on: []
|
|
task_id: task_create_component_player_controls
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_playlist_card
|
|
type: component
|
|
name: PlaylistCard
|
|
depends_on: []
|
|
task_id: task_create_component_playlist_card
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_playlist_header
|
|
type: component
|
|
name: PlaylistHeader
|
|
depends_on: []
|
|
task_id: task_create_component_playlist_header
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_section_header
|
|
type: component
|
|
name: SectionHeader
|
|
depends_on: []
|
|
task_id: task_create_component_section_header
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_social_links
|
|
type: component
|
|
name: SocialLinks
|
|
depends_on: []
|
|
task_id: task_create_component_social_links
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_song_card
|
|
type: component
|
|
name: SongCard
|
|
depends_on: []
|
|
task_id: task_create_component_song_card
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_waveform_display
|
|
type: component
|
|
name: WaveformDisplay
|
|
depends_on: []
|
|
task_id: task_create_component_waveform_display
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: model_album
|
|
type: model
|
|
name: Album
|
|
depends_on: []
|
|
task_id: task_create_model_album
|
|
agent: backend
|
|
complexity: medium
|
|
- id: model_artist
|
|
type: model
|
|
name: Artist
|
|
depends_on: []
|
|
task_id: task_create_model_artist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: model_genre
|
|
type: model
|
|
name: Genre
|
|
depends_on: []
|
|
task_id: task_create_model_genre
|
|
agent: backend
|
|
complexity: medium
|
|
- id: model_label
|
|
type: model
|
|
name: Label
|
|
depends_on: []
|
|
task_id: task_create_model_label
|
|
agent: backend
|
|
complexity: medium
|
|
- id: model_playlist
|
|
type: model
|
|
name: Playlist
|
|
depends_on: []
|
|
task_id: task_create_model_playlist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: model_playlist_song
|
|
type: model
|
|
name: PlaylistSong
|
|
depends_on: []
|
|
task_id: task_create_model_playlist_song
|
|
agent: backend
|
|
complexity: medium
|
|
- id: model_song
|
|
type: model
|
|
name: Song
|
|
depends_on: []
|
|
task_id: task_create_model_song
|
|
agent: backend
|
|
complexity: medium
|
|
- id: model_song_genre
|
|
type: model
|
|
name: SongGenre
|
|
depends_on: []
|
|
task_id: task_create_model_song_genre
|
|
agent: backend
|
|
complexity: medium
|
|
- id: model_user
|
|
type: model
|
|
name: User
|
|
depends_on: []
|
|
task_id: task_create_model_user
|
|
agent: backend
|
|
complexity: medium
|
|
requires_layers: []
|
|
parallel_count: 22
|
|
- layer: 2
|
|
name: API Layer
|
|
description: REST endpoints - depend on models
|
|
items:
|
|
- id: api_add_song_to_playlist
|
|
type: api
|
|
name: api_add_song_to_playlist
|
|
depends_on:
|
|
- model_playlist
|
|
- model_playlist_song
|
|
task_id: task_create_api_add_song_to_playlist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_create_album
|
|
type: api
|
|
name: api_create_album
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
task_id: task_create_api_create_album
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_create_artist_profile
|
|
type: api
|
|
name: api_create_artist_profile
|
|
depends_on:
|
|
- model_artist
|
|
- model_user
|
|
task_id: task_create_api_create_artist_profile
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_create_label_profile
|
|
type: api
|
|
name: api_create_label_profile
|
|
depends_on:
|
|
- model_label
|
|
task_id: task_create_api_create_label_profile
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_create_playlist
|
|
type: api
|
|
name: api_create_playlist
|
|
depends_on:
|
|
- model_playlist
|
|
task_id: task_create_api_create_playlist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_delete_album
|
|
type: api
|
|
name: api_delete_album
|
|
depends_on:
|
|
- model_album
|
|
task_id: task_create_api_delete_album
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_delete_playlist
|
|
type: api
|
|
name: api_delete_playlist
|
|
depends_on:
|
|
- model_playlist
|
|
task_id: task_create_api_delete_playlist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_delete_song
|
|
type: api
|
|
name: api_delete_song
|
|
depends_on:
|
|
- model_song
|
|
task_id: task_create_api_delete_song
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_forgot_password
|
|
type: api
|
|
name: api_forgot_password
|
|
depends_on:
|
|
- model_user
|
|
task_id: task_create_api_forgot_password
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_album
|
|
type: api
|
|
name: api_get_album
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
- model_song
|
|
task_id: task_create_api_get_album
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_artist
|
|
type: api
|
|
name: api_get_artist
|
|
depends_on:
|
|
- model_artist
|
|
task_id: task_create_api_get_artist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_artist_albums
|
|
type: api
|
|
name: api_get_artist_albums
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
task_id: task_create_api_get_artist_albums
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_artist_songs
|
|
type: api
|
|
name: api_get_artist_songs
|
|
depends_on:
|
|
- model_artist
|
|
- model_song
|
|
task_id: task_create_api_get_artist_songs
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_current_user
|
|
type: api
|
|
name: api_get_current_user
|
|
depends_on:
|
|
- model_user
|
|
task_id: task_create_api_get_current_user
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_genres
|
|
type: api
|
|
name: api_get_genres
|
|
depends_on:
|
|
- model_genre
|
|
task_id: task_create_api_get_genres
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_label_artists
|
|
type: api
|
|
name: api_get_label_artists
|
|
depends_on:
|
|
- model_artist
|
|
- model_label
|
|
task_id: task_create_api_get_label_artists
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_new_releases
|
|
type: api
|
|
name: api_get_new_releases
|
|
depends_on:
|
|
- model_song
|
|
task_id: task_create_api_get_new_releases
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_playlist
|
|
type: api
|
|
name: api_get_playlist
|
|
depends_on:
|
|
- model_playlist
|
|
- model_playlist_song
|
|
task_id: task_create_api_get_playlist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_song
|
|
type: api
|
|
name: api_get_song
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
- model_song
|
|
task_id: task_create_api_get_song
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_songs_by_genre
|
|
type: api
|
|
name: api_get_songs_by_genre
|
|
depends_on:
|
|
- model_song
|
|
- model_genre
|
|
task_id: task_create_api_get_songs_by_genre
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_trending_songs
|
|
type: api
|
|
name: api_get_trending_songs
|
|
depends_on:
|
|
- model_artist
|
|
- model_song
|
|
task_id: task_create_api_get_trending_songs
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_get_user_playlists
|
|
type: api
|
|
name: api_get_user_playlists
|
|
depends_on:
|
|
- model_playlist
|
|
task_id: task_create_api_get_user_playlists
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_increment_play_count
|
|
type: api
|
|
name: api_increment_play_count
|
|
depends_on:
|
|
- model_song
|
|
task_id: task_create_api_increment_play_count
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_login
|
|
type: api
|
|
name: api_login
|
|
depends_on:
|
|
- model_user
|
|
task_id: task_create_api_login
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_register
|
|
type: api
|
|
name: api_register
|
|
depends_on:
|
|
- model_user
|
|
task_id: task_create_api_register
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_remove_song_from_playlist
|
|
type: api
|
|
name: api_remove_song_from_playlist
|
|
depends_on:
|
|
- model_playlist
|
|
- model_playlist_song
|
|
task_id: task_create_api_remove_song_from_playlist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_reorder_playlist_songs
|
|
type: api
|
|
name: api_reorder_playlist_songs
|
|
depends_on:
|
|
- model_playlist
|
|
- model_playlist_song
|
|
task_id: task_create_api_reorder_playlist_songs
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_reset_password
|
|
type: api
|
|
name: api_reset_password
|
|
depends_on:
|
|
- model_user
|
|
task_id: task_create_api_reset_password
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_search
|
|
type: api
|
|
name: api_search
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
- model_song
|
|
task_id: task_create_api_search
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_update_album
|
|
type: api
|
|
name: api_update_album
|
|
depends_on:
|
|
- model_album
|
|
task_id: task_create_api_update_album
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_update_artist
|
|
type: api
|
|
name: api_update_artist
|
|
depends_on:
|
|
- model_artist
|
|
task_id: task_create_api_update_artist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_update_current_user
|
|
type: api
|
|
name: api_update_current_user
|
|
depends_on:
|
|
- model_user
|
|
task_id: task_create_api_update_current_user
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_update_playlist
|
|
type: api
|
|
name: api_update_playlist
|
|
depends_on:
|
|
- model_playlist
|
|
task_id: task_create_api_update_playlist
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_update_song
|
|
type: api
|
|
name: api_update_song
|
|
depends_on:
|
|
- model_song
|
|
task_id: task_create_api_update_song
|
|
agent: backend
|
|
complexity: medium
|
|
- id: api_upload_song
|
|
type: api
|
|
name: api_upload_song
|
|
depends_on:
|
|
- model_artist
|
|
- model_song
|
|
task_id: task_create_api_upload_song
|
|
agent: backend
|
|
complexity: medium
|
|
- id: component_artist_header
|
|
type: component
|
|
name: ArtistHeader
|
|
depends_on:
|
|
- component_social_links
|
|
task_id: task_create_component_artist_header
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_search_results
|
|
type: component
|
|
name: SearchResults
|
|
depends_on:
|
|
- component_artist_card
|
|
- component_album_card
|
|
- component_song_card
|
|
task_id: task_create_component_search_results
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_track_list
|
|
type: component
|
|
name: TrackList
|
|
depends_on:
|
|
- component_song_card
|
|
task_id: task_create_component_track_list
|
|
agent: frontend
|
|
complexity: medium
|
|
requires_layers:
|
|
- 1
|
|
parallel_count: 38
|
|
- layer: 3
|
|
name: UI Layer
|
|
description: Pages and components - depend on APIs
|
|
items:
|
|
- id: component_audio_player
|
|
type: component
|
|
name: AudioPlayer
|
|
depends_on:
|
|
- component_waveform_display
|
|
- api_increment_play_count
|
|
- component_player_controls
|
|
task_id: task_create_component_audio_player
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_auth_form
|
|
type: component
|
|
name: AuthForm
|
|
depends_on:
|
|
- api_forgot_password
|
|
- api_register
|
|
- api_login
|
|
task_id: task_create_component_auth_form
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_create_playlist_modal
|
|
type: component
|
|
name: CreatePlaylistModal
|
|
depends_on:
|
|
- api_create_playlist
|
|
task_id: task_create_component_create_playlist_modal
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_profile_form
|
|
type: component
|
|
name: ProfileForm
|
|
depends_on:
|
|
- api_update_current_user
|
|
- component_avatar_upload
|
|
task_id: task_create_component_profile_form
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_search_bar
|
|
type: component
|
|
name: SearchBar
|
|
depends_on:
|
|
- api_search
|
|
task_id: task_create_component_search_bar
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: component_upload_form
|
|
type: component
|
|
name: UploadForm
|
|
depends_on:
|
|
- component_waveform_display
|
|
- api_upload_song
|
|
task_id: task_create_component_upload_form
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_album_detail
|
|
type: page
|
|
name: page_album_detail
|
|
depends_on:
|
|
- component_track_list
|
|
- component_song_card
|
|
- api_get_album
|
|
- component_album_header
|
|
task_id: task_create_page_album_detail
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_artist_profile
|
|
type: page
|
|
name: page_artist_profile
|
|
depends_on:
|
|
- api_get_artist_albums
|
|
- component_artist_header
|
|
- component_album_card
|
|
- api_get_artist_songs
|
|
- api_get_artist
|
|
- component_song_card
|
|
- component_social_links
|
|
task_id: task_create_page_artist_profile
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_genre_browse
|
|
type: page
|
|
name: page_genre_browse
|
|
depends_on:
|
|
- component_genre_header
|
|
- api_get_songs_by_genre
|
|
- component_song_card
|
|
task_id: task_create_page_genre_browse
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_home
|
|
type: page
|
|
name: page_home
|
|
depends_on:
|
|
- component_genre_badge
|
|
- component_section_header
|
|
- api_get_new_releases
|
|
- component_song_card
|
|
- api_get_trending_songs
|
|
- api_get_genres
|
|
task_id: task_create_page_home
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_playlist_detail
|
|
type: page
|
|
name: page_playlist_detail
|
|
depends_on:
|
|
- component_playlist_header
|
|
- component_track_list
|
|
- api_get_playlist
|
|
- component_song_card
|
|
task_id: task_create_page_playlist_detail
|
|
agent: frontend
|
|
complexity: medium
|
|
requires_layers:
|
|
- 1
|
|
- 2
|
|
parallel_count: 11
|
|
- layer: 4
|
|
name: Layer 4
|
|
description: Entities with 3 levels of dependencies
|
|
items:
|
|
- id: page_forgot_password
|
|
type: page
|
|
name: page_forgot_password
|
|
depends_on:
|
|
- component_auth_form
|
|
- api_forgot_password
|
|
task_id: task_create_page_forgot_password
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_login
|
|
type: page
|
|
name: page_login
|
|
depends_on:
|
|
- component_auth_form
|
|
- api_login
|
|
task_id: task_create_page_login
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_playlists
|
|
type: page
|
|
name: page_playlists
|
|
depends_on:
|
|
- component_playlist_card
|
|
- api_get_user_playlists
|
|
- component_create_playlist_modal
|
|
task_id: task_create_page_playlists
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_profile
|
|
type: page
|
|
name: page_profile
|
|
depends_on:
|
|
- api_update_current_user
|
|
- component_profile_form
|
|
- api_get_current_user
|
|
- component_avatar_upload
|
|
task_id: task_create_page_profile
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_register
|
|
type: page
|
|
name: page_register
|
|
depends_on:
|
|
- component_auth_form
|
|
- api_register
|
|
task_id: task_create_page_register
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_search
|
|
type: page
|
|
name: page_search
|
|
depends_on:
|
|
- component_search_results
|
|
- component_album_card
|
|
- component_artist_card
|
|
- component_search_bar
|
|
- api_search
|
|
- component_song_card
|
|
task_id: task_create_page_search
|
|
agent: frontend
|
|
complexity: medium
|
|
- id: page_upload
|
|
type: page
|
|
name: page_upload
|
|
depends_on:
|
|
- api_get_artist_albums
|
|
- component_upload_form
|
|
- api_upload_song
|
|
- component_waveform_display
|
|
- api_get_genres
|
|
task_id: task_create_page_upload
|
|
agent: frontend
|
|
complexity: medium
|
|
requires_layers:
|
|
- 1
|
|
- 2
|
|
- 3
|
|
parallel_count: 7
|
|
dependency_map:
|
|
model_user:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- api_register
|
|
- api_login
|
|
- api_reset_password
|
|
- api_update_current_user
|
|
- api_create_artist_profile
|
|
- api_forgot_password
|
|
- api_get_current_user
|
|
model_artist:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- api_update_artist
|
|
- api_get_label_artists
|
|
- api_create_album
|
|
- api_get_artist_albums
|
|
- api_get_song
|
|
- api_get_album
|
|
- api_create_artist_profile
|
|
- api_get_artist_songs
|
|
- api_get_artist
|
|
- api_upload_song
|
|
- api_search
|
|
- api_get_trending_songs
|
|
model_label:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- api_create_label_profile
|
|
- api_get_label_artists
|
|
model_genre:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- api_get_songs_by_genre
|
|
- api_get_genres
|
|
model_album:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- api_update_album
|
|
- api_delete_album
|
|
- api_create_album
|
|
- api_get_artist_albums
|
|
- api_get_song
|
|
- api_get_album
|
|
- api_search
|
|
model_song:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- api_get_song
|
|
- api_get_songs_by_genre
|
|
- api_increment_play_count
|
|
- api_get_album
|
|
- api_get_artist_songs
|
|
- api_get_new_releases
|
|
- api_upload_song
|
|
- api_search
|
|
- api_delete_song
|
|
- api_get_trending_songs
|
|
- api_update_song
|
|
model_song_genre:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by: []
|
|
model_playlist:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- api_create_playlist
|
|
- api_reorder_playlist_songs
|
|
- api_update_playlist
|
|
- api_add_song_to_playlist
|
|
- api_get_user_playlists
|
|
- api_get_playlist
|
|
- api_remove_song_from_playlist
|
|
- api_delete_playlist
|
|
model_playlist_song:
|
|
type: model
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- api_add_song_to_playlist
|
|
- api_reorder_playlist_songs
|
|
- api_get_playlist
|
|
- api_remove_song_from_playlist
|
|
api_register:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_user
|
|
depended_by:
|
|
- page_register
|
|
- component_auth_form
|
|
api_login:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_user
|
|
depended_by:
|
|
- component_auth_form
|
|
- page_login
|
|
api_forgot_password:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_user
|
|
depended_by:
|
|
- component_auth_form
|
|
- page_forgot_password
|
|
api_reset_password:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_user
|
|
depended_by: []
|
|
api_get_current_user:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_user
|
|
depended_by:
|
|
- page_profile
|
|
api_update_current_user:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_user
|
|
depended_by:
|
|
- component_profile_form
|
|
- page_profile
|
|
api_create_artist_profile:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_user
|
|
depended_by: []
|
|
api_get_artist:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
depended_by:
|
|
- page_artist_profile
|
|
api_update_artist:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
depended_by: []
|
|
api_get_artist_songs:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_song
|
|
depended_by:
|
|
- page_artist_profile
|
|
api_get_artist_albums:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
depended_by:
|
|
- page_artist_profile
|
|
- page_upload
|
|
api_upload_song:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_song
|
|
depended_by:
|
|
- page_upload
|
|
- component_upload_form
|
|
api_get_song:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
- model_song
|
|
depended_by: []
|
|
api_update_song:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_song
|
|
depended_by: []
|
|
api_delete_song:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_song
|
|
depended_by: []
|
|
api_increment_play_count:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_song
|
|
depended_by:
|
|
- component_audio_player
|
|
api_create_album:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
depended_by: []
|
|
api_get_album:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
- model_song
|
|
depended_by:
|
|
- page_album_detail
|
|
api_update_album:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_album
|
|
depended_by: []
|
|
api_delete_album:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_album
|
|
depended_by: []
|
|
api_create_playlist:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_playlist
|
|
depended_by:
|
|
- component_create_playlist_modal
|
|
api_get_user_playlists:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_playlist
|
|
depended_by:
|
|
- page_playlists
|
|
api_get_playlist:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_playlist
|
|
- model_playlist_song
|
|
depended_by:
|
|
- page_playlist_detail
|
|
api_update_playlist:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_playlist
|
|
depended_by: []
|
|
api_delete_playlist:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_playlist
|
|
depended_by: []
|
|
api_add_song_to_playlist:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_playlist
|
|
- model_playlist_song
|
|
depended_by: []
|
|
api_remove_song_from_playlist:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_playlist
|
|
- model_playlist_song
|
|
depended_by: []
|
|
api_reorder_playlist_songs:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_playlist
|
|
- model_playlist_song
|
|
depended_by: []
|
|
api_get_trending_songs:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_song
|
|
depended_by:
|
|
- page_home
|
|
api_get_new_releases:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_song
|
|
depended_by:
|
|
- page_home
|
|
api_get_genres:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_genre
|
|
depended_by:
|
|
- page_upload
|
|
- page_home
|
|
api_get_songs_by_genre:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_song
|
|
- model_genre
|
|
depended_by:
|
|
- page_genre_browse
|
|
api_search:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_album
|
|
- model_song
|
|
depended_by:
|
|
- page_search
|
|
- component_search_bar
|
|
api_create_label_profile:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_label
|
|
depended_by: []
|
|
api_get_label_artists:
|
|
type: api
|
|
layer: 2
|
|
depends_on:
|
|
- model_artist
|
|
- model_label
|
|
depended_by: []
|
|
page_login:
|
|
type: page
|
|
layer: 4
|
|
depends_on:
|
|
- component_auth_form
|
|
- api_login
|
|
depended_by: []
|
|
page_register:
|
|
type: page
|
|
layer: 4
|
|
depends_on:
|
|
- component_auth_form
|
|
- api_register
|
|
depended_by: []
|
|
page_forgot_password:
|
|
type: page
|
|
layer: 4
|
|
depends_on:
|
|
- component_auth_form
|
|
- api_forgot_password
|
|
depended_by: []
|
|
page_home:
|
|
type: page
|
|
layer: 3
|
|
depends_on:
|
|
- component_genre_badge
|
|
- component_section_header
|
|
- api_get_new_releases
|
|
- component_song_card
|
|
- api_get_trending_songs
|
|
- api_get_genres
|
|
depended_by: []
|
|
page_artist_profile:
|
|
type: page
|
|
layer: 3
|
|
depends_on:
|
|
- api_get_artist_albums
|
|
- component_artist_header
|
|
- component_album_card
|
|
- api_get_artist_songs
|
|
- api_get_artist
|
|
- component_song_card
|
|
- component_social_links
|
|
depended_by: []
|
|
page_album_detail:
|
|
type: page
|
|
layer: 3
|
|
depends_on:
|
|
- component_track_list
|
|
- component_song_card
|
|
- api_get_album
|
|
- component_album_header
|
|
depended_by: []
|
|
page_upload:
|
|
type: page
|
|
layer: 4
|
|
depends_on:
|
|
- api_get_artist_albums
|
|
- component_upload_form
|
|
- api_upload_song
|
|
- component_waveform_display
|
|
- api_get_genres
|
|
depended_by: []
|
|
page_playlists:
|
|
type: page
|
|
layer: 4
|
|
depends_on:
|
|
- component_playlist_card
|
|
- api_get_user_playlists
|
|
- component_create_playlist_modal
|
|
depended_by: []
|
|
page_playlist_detail:
|
|
type: page
|
|
layer: 3
|
|
depends_on:
|
|
- component_playlist_header
|
|
- component_track_list
|
|
- api_get_playlist
|
|
- component_song_card
|
|
depended_by: []
|
|
page_profile:
|
|
type: page
|
|
layer: 4
|
|
depends_on:
|
|
- api_update_current_user
|
|
- component_profile_form
|
|
- api_get_current_user
|
|
- component_avatar_upload
|
|
depended_by: []
|
|
page_search:
|
|
type: page
|
|
layer: 4
|
|
depends_on:
|
|
- component_search_results
|
|
- component_album_card
|
|
- component_artist_card
|
|
- component_search_bar
|
|
- api_search
|
|
- component_song_card
|
|
depended_by: []
|
|
page_genre_browse:
|
|
type: page
|
|
layer: 3
|
|
depends_on:
|
|
- component_genre_header
|
|
- api_get_songs_by_genre
|
|
- component_song_card
|
|
depended_by: []
|
|
component_audio_player:
|
|
type: component
|
|
layer: 3
|
|
depends_on:
|
|
- component_waveform_display
|
|
- api_increment_play_count
|
|
- component_player_controls
|
|
depended_by: []
|
|
component_player_controls:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- component_audio_player
|
|
component_song_card:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- component_track_list
|
|
- page_search
|
|
- component_search_results
|
|
- page_genre_browse
|
|
- page_artist_profile
|
|
- page_home
|
|
- page_playlist_detail
|
|
- page_album_detail
|
|
component_album_card:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_artist_profile
|
|
- page_search
|
|
- component_search_results
|
|
component_artist_card:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_search
|
|
- component_search_results
|
|
component_playlist_card:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_playlists
|
|
component_upload_form:
|
|
type: component
|
|
layer: 3
|
|
depends_on:
|
|
- component_waveform_display
|
|
- api_upload_song
|
|
depended_by:
|
|
- page_upload
|
|
component_waveform_display:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_upload
|
|
- component_audio_player
|
|
- component_upload_form
|
|
component_genre_badge:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_home
|
|
component_track_list:
|
|
type: component
|
|
layer: 2
|
|
depends_on:
|
|
- component_song_card
|
|
depended_by:
|
|
- page_album_detail
|
|
- page_playlist_detail
|
|
component_artist_header:
|
|
type: component
|
|
layer: 2
|
|
depends_on:
|
|
- component_social_links
|
|
depended_by:
|
|
- page_artist_profile
|
|
component_album_header:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_album_detail
|
|
component_playlist_header:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_playlist_detail
|
|
component_social_links:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_artist_profile
|
|
- component_artist_header
|
|
component_auth_form:
|
|
type: component
|
|
layer: 3
|
|
depends_on:
|
|
- api_forgot_password
|
|
- api_register
|
|
- api_login
|
|
depended_by:
|
|
- page_register
|
|
- page_login
|
|
- page_forgot_password
|
|
component_search_bar:
|
|
type: component
|
|
layer: 3
|
|
depends_on:
|
|
- api_search
|
|
depended_by:
|
|
- page_search
|
|
component_search_results:
|
|
type: component
|
|
layer: 2
|
|
depends_on:
|
|
- component_artist_card
|
|
- component_album_card
|
|
- component_song_card
|
|
depended_by:
|
|
- page_search
|
|
component_create_playlist_modal:
|
|
type: component
|
|
layer: 3
|
|
depends_on:
|
|
- api_create_playlist
|
|
depended_by:
|
|
- page_playlists
|
|
component_profile_form:
|
|
type: component
|
|
layer: 3
|
|
depends_on:
|
|
- api_update_current_user
|
|
- component_avatar_upload
|
|
depended_by:
|
|
- page_profile
|
|
component_avatar_upload:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- component_profile_form
|
|
- page_profile
|
|
component_section_header:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_home
|
|
component_genre_header:
|
|
type: component
|
|
layer: 1
|
|
depends_on: []
|
|
depended_by:
|
|
- page_genre_browse
|
|
task_map: []
|