diff --git a/api/swagger/swagger-v1.yaml b/api/swagger/swagger-v1.yaml index 989a8847..3dd77ea5 100644 --- a/api/swagger/swagger-v1.yaml +++ b/api/swagger/swagger-v1.yaml @@ -3446,13 +3446,6 @@ paths: security: - BasicAuth: [] - BearerAuth: [] - parameters: - - name: user_id - in: query - description: The user ID of the user making the request - required: true - schema: - type: string requestBody: x-codegen-request-body-name: metadata required: true @@ -10168,6 +10161,31 @@ components: spl_usdc_payout_wallet: type: string description: Solana USDC payout wallet address + playlist_library: + type: object + description: User's playlist library with support for folders and playlists + required: + - contents + properties: + contents: + type: array + description: Array of folders and playlist identifiers + items: + oneOf: + - $ref: '#/components/schemas/playlist_library_folder' + - $ref: '#/components/schemas/playlist_library_playlist_identifier' + - $ref: '#/components/schemas/playlist_library_explore_playlist_identifier' + events: + type: object + description: User events for tracking referrals and mobile users + properties: + referrer: + type: integer + description: User ID of the referrer + minimum: 1 + is_mobile_user: + type: boolean + description: Whether the user is on mobile update_user_request_body: type: object description: Request body for updating user profile. All fields are optional. @@ -10219,8 +10237,9 @@ components: type: boolean description: Whether the user is deactivated artist_pick_track_id: - type: string + type: integer description: Track ID to feature as artist pick + minimum: 1 allow_ai_attribution: type: boolean description: Whether to allow AI attribution @@ -10230,6 +10249,29 @@ components: coin_flair_mint: type: string description: Coin flair mint address + playlist_library: + type: object + description: User's playlist library with support for folders and playlists + properties: + contents: + type: array + description: Array of folders and playlist identifiers + items: + oneOf: + - $ref: '#/components/schemas/playlist_library_folder' + - $ref: '#/components/schemas/playlist_library_playlist_identifier' + - $ref: '#/components/schemas/playlist_library_explore_playlist_identifier' + events: + type: object + description: User events for tracking referrals and mobile users + properties: + referrer: + type: integer + description: User ID of the referrer + minimum: 1 + is_mobile_user: + type: boolean + description: Whether the user is on mobile update_comment_request_body: type: object required: @@ -10435,6 +10477,59 @@ components: success: type: boolean description: Whether the deactivation was successful + playlist_library_folder: + type: object + description: Folder containing nested playlists and folders + required: + - id + - type + - name + - contents + properties: + id: + type: string + description: Unique folder identifier + type: + type: string + enum: [folder] + name: + type: string + description: Folder name + contents: + type: array + description: Nested folders and playlist identifiers + items: + oneOf: + - $ref: '#/components/schemas/playlist_library_folder' + - $ref: '#/components/schemas/playlist_library_playlist_identifier' + - $ref: '#/components/schemas/playlist_library_explore_playlist_identifier' + playlist_library_playlist_identifier: + type: object + description: Reference to a playlist + required: + - type + - playlist_id + properties: + type: + type: string + enum: [playlist] + playlist_id: + type: integer + description: Playlist ID + minimum: 1 + playlist_library_explore_playlist_identifier: + type: object + description: Reference to an explore playlist + required: + - type + - playlist_id + properties: + type: + type: string + enum: [explore_playlist] + playlist_id: + type: string + description: Explore playlist identifier comment_entity_type: type: string enum: diff --git a/api/v1_users.go b/api/v1_users.go index 26ce93eb..babc5850 100644 --- a/api/v1_users.go +++ b/api/v1_users.go @@ -16,35 +16,39 @@ import ( ) // PlaylistLibraryItem represents an item in the user's playlist library -type PlaylistLibraryItem struct { - Type string `json:"type" validate:"required,oneof=playlist album explore_playlist temp_playlist"` - PlaylistId *string `json:"playlist_id,omitempty"` - ContentListId *string `json:"content_list_id,omitempty"` -} +// PlaylistLibraryItem can be either a folder or a playlist identifier +type PlaylistLibraryItem map[string]interface{} type PlaylistLibrary struct { - Contents []PlaylistLibraryItem `json:"contents" validate:"required,dive"` + Contents []PlaylistLibraryItem `json:"contents" validate:"required"` +} + +type Events struct { + Referrer *int `json:"referrer,omitempty" validate:"omitempty,min=1"` + IsMobileUser *bool `json:"is_mobile_user,omitempty"` } type CreateUserRequest struct { - UserId *int `json:"user_id,omitempty" validate:"omitempty,min=1"` - Handle string `json:"handle" validate:"required,min=1"` - Wallet string `json:"wallet" validate:"required"` - Name *string `json:"name,omitempty" validate:"omitempty,min=1"` - Bio *string `json:"bio,omitempty" validate:"omitempty,max=256"` - Location *string `json:"location,omitempty"` - Website *string `json:"website,omitempty" validate:"omitempty,url"` - Donation *string `json:"donation,omitempty"` - TwitterHandle *string `json:"twitter_handle,omitempty"` - InstagramHandle *string `json:"instagram_handle,omitempty"` - TiktokHandle *string `json:"tiktok_handle,omitempty"` - ProfilePicture *string `json:"profile_picture,omitempty"` - ProfilePictureSizes *string `json:"profile_picture_sizes,omitempty"` - CoverPhoto *string `json:"cover_photo,omitempty"` - CoverPhotoSizes *string `json:"cover_photo_sizes,omitempty"` - ProfileType *string `json:"profile_type,omitempty" validate:"omitempty,oneof=label"` - AllowAiAttribution *bool `json:"allow_ai_attribution,omitempty"` - SplUsdcPayoutWallet *string `json:"spl_usdc_payout_wallet,omitempty"` + UserId *int `json:"user_id,omitempty" validate:"omitempty,min=1"` + Handle string `json:"handle" validate:"required,min=1"` + Wallet string `json:"wallet" validate:"required"` + Name *string `json:"name,omitempty" validate:"omitempty,min=1"` + Bio *string `json:"bio,omitempty" validate:"omitempty,max=256"` + Location *string `json:"location,omitempty"` + Website *string `json:"website,omitempty" validate:"omitempty,url"` + Donation *string `json:"donation,omitempty"` + TwitterHandle *string `json:"twitter_handle,omitempty"` + InstagramHandle *string `json:"instagram_handle,omitempty"` + TiktokHandle *string `json:"tiktok_handle,omitempty"` + ProfilePicture *string `json:"profile_picture,omitempty"` + ProfilePictureSizes *string `json:"profile_picture_sizes,omitempty"` + CoverPhoto *string `json:"cover_photo,omitempty"` + CoverPhotoSizes *string `json:"cover_photo_sizes,omitempty"` + ProfileType *string `json:"profile_type,omitempty" validate:"omitempty,oneof=label"` + AllowAiAttribution *bool `json:"allow_ai_attribution,omitempty"` + SplUsdcPayoutWallet *string `json:"spl_usdc_payout_wallet,omitempty"` + PlaylistLibrary *PlaylistLibrary `json:"playlist_library,omitempty" validate:"omitempty"` + Events *Events `json:"events,omitempty"` } type UpdateUserRequest struct { @@ -62,11 +66,12 @@ type UpdateUserRequest struct { CoverPhotoSizes *string `json:"cover_photo_sizes,omitempty"` ProfileType *string `json:"profile_type,omitempty" validate:"omitempty,oneof=label"` IsDeactivated *bool `json:"is_deactivated,omitempty"` - ArtistPickTrackId *string `json:"artist_pick_track_id,omitempty"` + ArtistPickTrackId *int `json:"artist_pick_track_id,omitempty" validate:"omitempty,min=1"` AllowAiAttribution *bool `json:"allow_ai_attribution,omitempty"` PlaylistLibrary *PlaylistLibrary `json:"playlist_library,omitempty" validate:"omitempty"` SplUsdcPayoutWallet *string `json:"spl_usdc_payout_wallet,omitempty"` CoinFlairMint *string `json:"coin_flair_mint,omitempty"` + Events *Events `json:"events,omitempty"` } // v1Users is a handler that retrieves full user data