project-standalo-sonic-cloud/.workflow/versions/v003/contexts/page_label_invitations.yml

162 lines
4.1 KiB
YAML

task_id: task_create_page_label_invitations
entity_id: page_label_invitations
generated_at: '2025-12-18T17:43:33.729145'
workflow_version: v003
target:
type: page
definition:
id: page_label_invitations
name: Label Invitations
path: /label/invitations
layout: layout_main
data_needs:
- api_id: api_list_label_invitations
purpose: List all invitations
on_load: true
components:
- component_invitation_card
- component_invite_artist_modal
seo:
title: Invitations | Sonic Cloud
description: Manage artist invitations
auth:
required: true
roles:
- label
redirect: /login
related:
models: []
apis:
- id: api_list_label_invitations
definition: &id002
id: api_list_label_invitations
method: GET
path: /api/labels/[id]/invitations
summary: List label invitations
description: Get all invitations sent by this label
tags:
- labels
- invitations
path_params:
- name: id
type: string
description: Label ID
query_params:
- name: status
type: string
required: false
description: Filter by status (pending, accepted, declined, expired)
responses:
- status: 200
description: Invitations list
schema:
type: array
properties:
- name: id
type: uuid
- name: artist
type: object
- name: status
type: string
- name: message
type: string
- name: expiresAt
type: datetime
- status: 401
description: Unauthorized
- status: 403
description: Not label owner
depends_on_models:
- model_label_invitation
depends_on_apis: []
auth:
required: true
roles:
- label
components:
- id: component_invitation_card
definition: &id001
id: component_invitation_card
name: InvitationCard
props:
- name: invitation
type: LabelInvitation
required: true
description: Invitation object
- name: viewType
type: string
required: true
description: Are we viewing as label or artist (label/artist)
events:
- name: onAccept
payload: string
description: Fires when accept clicked (artist view)
- name: onDecline
payload: string
description: Fires when decline clicked (artist view)
- name: onCancel
payload: string
description: Fires when cancel clicked (label view)
uses_apis: []
uses_components: []
internal_state:
- isProcessing
variants:
- default
- id: component_invite_artist_modal
definition: &id003
id: component_invite_artist_modal
name: InviteArtistModal
props:
- name: isOpen
type: boolean
required: true
description: Whether modal is open
- name: labelId
type: string
required: true
description: Label ID sending invitation
events:
- name: onClose
payload: void
description: Fires when modal should close
- name: onInviteSent
payload: LabelInvitation
description: Fires when invitation successfully sent
uses_apis:
- api_create_label_invitation
uses_components: []
internal_state:
- searchQuery
- selectedArtist
- message
- isSubmitting
variants:
- default
dependencies:
entity_ids:
- component_invitation_card
- api_list_label_invitations
- component_invite_artist_modal
definitions:
- id: component_invitation_card
type: component
definition: *id001
- id: api_list_label_invitations
type: api
definition: *id002
- id: component_invite_artist_modal
type: component
definition: *id003
files:
to_create:
- app/label/invitations/page.tsx
reference: []
acceptance:
- criterion: Page renders at /label/invitations
verification: Navigate to /label/invitations
- criterion: Data fetching works
verification: Check network tab
- criterion: Components render correctly
verification: Visual inspection