Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
111 changes: 103 additions & 8 deletions api/swagger/swagger-v1.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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
Expand All @@ -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:
Expand Down Expand Up @@ -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:
Expand Down
55 changes: 30 additions & 25 deletions api/v1_users.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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
Expand Down