project-standalo-sonic-cloud/.workflow/versions/v001/dependency_graph.yml

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: []