2040 lines
52 KiB
YAML
2040 lines
52 KiB
YAML
basePath: /api/v1
|
|
definitions:
|
|
internal_core_track.BatchDeleteRequest:
|
|
properties:
|
|
track_ids:
|
|
items:
|
|
type: string
|
|
type: array
|
|
required:
|
|
- track_ids
|
|
type: object
|
|
internal_core_track.CompleteChunkedUploadRequest:
|
|
properties:
|
|
upload_id:
|
|
type: string
|
|
required:
|
|
- upload_id
|
|
type: object
|
|
internal_core_track.InitiateChunkedUploadRequest:
|
|
properties:
|
|
filename:
|
|
type: string
|
|
total_chunks:
|
|
minimum: 1
|
|
type: integer
|
|
total_size:
|
|
minimum: 1
|
|
type: integer
|
|
required:
|
|
- filename
|
|
- total_chunks
|
|
- total_size
|
|
type: object
|
|
internal_core_track.UpdateTrackRequest:
|
|
properties:
|
|
album:
|
|
type: string
|
|
artist:
|
|
type: string
|
|
genre:
|
|
type: string
|
|
is_public:
|
|
type: boolean
|
|
title:
|
|
type: string
|
|
year:
|
|
type: integer
|
|
type: object
|
|
internal_handlers.APIResponse:
|
|
properties:
|
|
data: {}
|
|
error: {}
|
|
success:
|
|
type: boolean
|
|
type: object
|
|
internal_handlers.CreateOrderRequest:
|
|
properties:
|
|
items:
|
|
items:
|
|
properties:
|
|
product_id:
|
|
type: string
|
|
required:
|
|
- product_id
|
|
type: object
|
|
minItems: 1
|
|
type: array
|
|
required:
|
|
- items
|
|
type: object
|
|
internal_handlers.CreatePlaylistRequest:
|
|
properties:
|
|
description:
|
|
type: string
|
|
is_public:
|
|
type: boolean
|
|
title:
|
|
maxLength: 200
|
|
minLength: 1
|
|
type: string
|
|
required:
|
|
- title
|
|
type: object
|
|
internal_handlers.CreateProductRequest:
|
|
properties:
|
|
description:
|
|
maxLength: 2000
|
|
type: string
|
|
license_type:
|
|
enum:
|
|
- standard
|
|
- exclusive
|
|
- commercial
|
|
type: string
|
|
price:
|
|
minimum: 0
|
|
type: number
|
|
product_type:
|
|
enum:
|
|
- track
|
|
- pack
|
|
- service
|
|
type: string
|
|
title:
|
|
maxLength: 200
|
|
minLength: 3
|
|
type: string
|
|
track_id:
|
|
description: UUID string
|
|
type: string
|
|
required:
|
|
- price
|
|
- product_type
|
|
- title
|
|
type: object
|
|
internal_handlers.ReorderTracksRequest:
|
|
properties:
|
|
track_ids:
|
|
description: Changed to []uuid.UUID
|
|
items:
|
|
type: string
|
|
minItems: 1
|
|
type: array
|
|
required:
|
|
- track_ids
|
|
type: object
|
|
internal_handlers.UpdatePlaylistRequest:
|
|
properties:
|
|
description:
|
|
type: string
|
|
is_public:
|
|
type: boolean
|
|
title:
|
|
maxLength: 200
|
|
minLength: 1
|
|
type: string
|
|
type: object
|
|
internal_handlers.UpdateProfileRequest:
|
|
properties:
|
|
bio:
|
|
maxLength: 500
|
|
type: string
|
|
birthdate:
|
|
type: string
|
|
first_name:
|
|
maxLength: 100
|
|
type: string
|
|
gender:
|
|
enum:
|
|
- Male
|
|
- Female
|
|
- Other
|
|
- Prefer not to say
|
|
type: string
|
|
last_name:
|
|
maxLength: 100
|
|
type: string
|
|
location:
|
|
maxLength: 100
|
|
type: string
|
|
username:
|
|
maxLength: 30
|
|
minLength: 3
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_core_marketplace.LicenseType:
|
|
enum:
|
|
- basic
|
|
- premium
|
|
- exclusive
|
|
type: string
|
|
x-enum-varnames:
|
|
- LicenseBasic
|
|
- LicensePremium
|
|
- LicenseExclusive
|
|
veza-backend-api_internal_core_marketplace.Order:
|
|
properties:
|
|
buyer_id:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
currency:
|
|
type: string
|
|
id:
|
|
type: string
|
|
items:
|
|
items:
|
|
$ref: '#/definitions/veza-backend-api_internal_core_marketplace.OrderItem'
|
|
type: array
|
|
payment_intent:
|
|
description: Stripe PaymentIntent ID
|
|
type: string
|
|
status:
|
|
description: pending, paid, failed, refunded
|
|
type: string
|
|
total_amount:
|
|
type: number
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_core_marketplace.OrderItem:
|
|
properties:
|
|
id:
|
|
type: string
|
|
order_id:
|
|
type: string
|
|
price:
|
|
type: number
|
|
product_id:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_core_marketplace.Product:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
currency:
|
|
type: string
|
|
description:
|
|
type: string
|
|
id:
|
|
type: string
|
|
license_type:
|
|
$ref: '#/definitions/veza-backend-api_internal_core_marketplace.LicenseType'
|
|
price:
|
|
type: number
|
|
product_type:
|
|
description: '"track", "pack", "service"'
|
|
type: string
|
|
seller_id:
|
|
type: string
|
|
status:
|
|
$ref: '#/definitions/veza-backend-api_internal_core_marketplace.ProductStatus'
|
|
title:
|
|
type: string
|
|
track_id:
|
|
description: Liaison optionnelle avec un Track (si ProductType == "track")
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_core_marketplace.ProductStatus:
|
|
enum:
|
|
- draft
|
|
- active
|
|
- archived
|
|
type: string
|
|
x-enum-varnames:
|
|
- ProductStatusDraft
|
|
- ProductStatusActive
|
|
- ProductStatusArchived
|
|
veza-backend-api_internal_dto.LoginRequest:
|
|
properties:
|
|
email:
|
|
type: string
|
|
password:
|
|
type: string
|
|
remember_me:
|
|
type: boolean
|
|
required:
|
|
- email
|
|
- password
|
|
type: object
|
|
veza-backend-api_internal_dto.LoginResponse:
|
|
properties:
|
|
token:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.TokenResponse'
|
|
user:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.UserResponse'
|
|
type: object
|
|
veza-backend-api_internal_dto.RefreshRequest:
|
|
properties:
|
|
refresh_token:
|
|
type: string
|
|
required:
|
|
- refresh_token
|
|
type: object
|
|
veza-backend-api_internal_dto.RegisterRequest:
|
|
properties:
|
|
email:
|
|
type: string
|
|
password:
|
|
minLength: 12
|
|
type: string
|
|
password_confirm:
|
|
type: string
|
|
username:
|
|
maxLength: 50
|
|
minLength: 3
|
|
type: string
|
|
required:
|
|
- email
|
|
- password
|
|
- password_confirm
|
|
type: object
|
|
veza-backend-api_internal_dto.RegisterResponse:
|
|
properties:
|
|
token:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.TokenResponse'
|
|
user:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.UserResponse'
|
|
type: object
|
|
veza-backend-api_internal_dto.ResendVerificationRequest:
|
|
properties:
|
|
email:
|
|
type: string
|
|
required:
|
|
- email
|
|
type: object
|
|
veza-backend-api_internal_dto.TokenResponse:
|
|
properties:
|
|
access_token:
|
|
type: string
|
|
expires_in:
|
|
type: integer
|
|
refresh_token:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_dto.UserResponse:
|
|
properties:
|
|
email:
|
|
type: string
|
|
id:
|
|
type: string
|
|
username:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_models.Playlist:
|
|
properties:
|
|
collaborators:
|
|
items:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.PlaylistCollaborator'
|
|
type: array
|
|
cover_url:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
description:
|
|
type: string
|
|
follower_count:
|
|
type: integer
|
|
id:
|
|
type: string
|
|
is_public:
|
|
type: boolean
|
|
title:
|
|
type: string
|
|
track_count:
|
|
type: integer
|
|
tracks:
|
|
items:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.PlaylistTrack'
|
|
type: array
|
|
updated_at:
|
|
type: string
|
|
user_id:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_models.PlaylistCollaborator:
|
|
properties:
|
|
created_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
permission:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.PlaylistPermission'
|
|
playlist_id:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
user:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.User'
|
|
user_id:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_models.PlaylistPermission:
|
|
enum:
|
|
- read
|
|
- write
|
|
- admin
|
|
type: string
|
|
x-enum-varnames:
|
|
- PlaylistPermissionRead
|
|
- PlaylistPermissionWrite
|
|
- PlaylistPermissionAdmin
|
|
veza-backend-api_internal_models.PlaylistTrack:
|
|
properties:
|
|
added_at:
|
|
type: string
|
|
id:
|
|
type: string
|
|
playlist_id:
|
|
type: string
|
|
position:
|
|
type: integer
|
|
track:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Track'
|
|
track_id:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_models.Track:
|
|
properties:
|
|
album:
|
|
type: string
|
|
artist:
|
|
type: string
|
|
bitrate:
|
|
description: kbps
|
|
type: integer
|
|
cover_art_path:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
duration:
|
|
description: seconds
|
|
type: integer
|
|
file_path:
|
|
type: string
|
|
file_size:
|
|
description: bytes
|
|
type: integer
|
|
format:
|
|
description: mp3, flac, wav, etc.
|
|
type: string
|
|
genre:
|
|
type: string
|
|
id:
|
|
type: string
|
|
is_public:
|
|
type: boolean
|
|
like_count:
|
|
type: integer
|
|
play_count:
|
|
type: integer
|
|
sample_rate:
|
|
description: Hz
|
|
type: integer
|
|
status:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.TrackStatus'
|
|
status_message:
|
|
type: string
|
|
stream_manifest_url:
|
|
type: string
|
|
stream_status:
|
|
description: pending, processing, ready, error
|
|
type: string
|
|
title:
|
|
type: string
|
|
updated_at:
|
|
type: string
|
|
user_id:
|
|
type: string
|
|
waveform_path:
|
|
type: string
|
|
year:
|
|
type: integer
|
|
type: object
|
|
veza-backend-api_internal_models.TrackStatus:
|
|
enum:
|
|
- uploading
|
|
- processing
|
|
- completed
|
|
- failed
|
|
type: string
|
|
x-enum-varnames:
|
|
- TrackStatusUploading
|
|
- TrackStatusProcessing
|
|
- TrackStatusCompleted
|
|
- TrackStatusFailed
|
|
veza-backend-api_internal_models.User:
|
|
properties:
|
|
avatar:
|
|
type: string
|
|
bio:
|
|
type: string
|
|
birthdate:
|
|
type: string
|
|
created_at:
|
|
type: string
|
|
email:
|
|
type: string
|
|
first_name:
|
|
type: string
|
|
gender:
|
|
type: string
|
|
id:
|
|
type: string
|
|
is_active:
|
|
type: boolean
|
|
is_admin:
|
|
type: boolean
|
|
is_public:
|
|
type: boolean
|
|
is_verified:
|
|
type: boolean
|
|
last_login_at:
|
|
type: string
|
|
last_name:
|
|
type: string
|
|
location:
|
|
type: string
|
|
password:
|
|
description: Virtual field for input
|
|
type: string
|
|
role:
|
|
type: string
|
|
slug:
|
|
type: string
|
|
token_version:
|
|
type: integer
|
|
updated_at:
|
|
type: string
|
|
username:
|
|
type: string
|
|
username_changed_at:
|
|
type: string
|
|
type: object
|
|
veza-backend-api_internal_response.APIResponse:
|
|
properties:
|
|
data: {}
|
|
error: {}
|
|
success:
|
|
type: boolean
|
|
type: object
|
|
host: localhost:8080
|
|
info:
|
|
contact:
|
|
email: support@veza.app
|
|
name: API Support
|
|
url: http://www.veza.app/support
|
|
description: Backend API for Veza platform.
|
|
license:
|
|
name: Apache 2.0
|
|
url: http://www.apache.org/licenses/LICENSE-2.0.html
|
|
termsOfService: http://swagger.io/terms/
|
|
title: Veza Backend API
|
|
version: 1.2.0
|
|
paths:
|
|
/api/v1/marketplace/download/{product_id}:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get a secure download URL for a purchased product
|
|
parameters:
|
|
- description: Product ID
|
|
in: path
|
|
name: product_id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"403":
|
|
description: No license
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"404":
|
|
description: Not Found
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get download URL
|
|
tags:
|
|
- Marketplace
|
|
/api/v1/marketplace/orders:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Purchase products
|
|
parameters:
|
|
- description: Order items
|
|
in: body
|
|
name: order
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.CreateOrderRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_core_marketplace.Order'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Create a new order
|
|
tags:
|
|
- Marketplace
|
|
/api/v1/marketplace/products:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: List marketplace products with filters
|
|
parameters:
|
|
- description: Product status
|
|
in: query
|
|
name: status
|
|
type: string
|
|
- description: Seller ID
|
|
in: query
|
|
name: seller_id
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
items:
|
|
$ref: '#/definitions/veza-backend-api_internal_core_marketplace.Product'
|
|
type: array
|
|
summary: List products
|
|
tags:
|
|
- Marketplace
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a product (Track, Pack, Service) for sale
|
|
parameters:
|
|
- description: Product info
|
|
in: body
|
|
name: product
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.CreateProductRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_core_marketplace.Product'
|
|
"400":
|
|
description: Bad Request
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
additionalProperties:
|
|
type: string
|
|
type: object
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Create a new product
|
|
tags:
|
|
- Marketplace
|
|
/auth/check-username:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Check if a username is already taken
|
|
parameters:
|
|
- description: Username to check
|
|
in: query
|
|
name: username
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
available:
|
|
type: boolean
|
|
username:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Missing Username
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: Check Username Availability
|
|
tags:
|
|
- Auth
|
|
/auth/login:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Authenticate user and return access/refresh tokens
|
|
parameters:
|
|
- description: Login Credentials
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.LoginRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.LoginResponse'
|
|
"400":
|
|
description: Validation or Bad Request
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"401":
|
|
description: Invalid credentials
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: User Login
|
|
tags:
|
|
- Auth
|
|
/auth/logout:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Revoke refresh token and current session
|
|
parameters:
|
|
- description: Refresh Token to revoke
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
properties:
|
|
refresh_token:
|
|
type: string
|
|
type: object
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Success message
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Logout
|
|
tags:
|
|
- Auth
|
|
/auth/me:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get profile information of the currently logged-in user
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
email:
|
|
type: string
|
|
id:
|
|
type: string
|
|
role:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get Current User
|
|
tags:
|
|
- Auth
|
|
/auth/refresh:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Get a new access token using a refresh token
|
|
parameters:
|
|
- description: Refresh Token
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.RefreshRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.TokenResponse'
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"401":
|
|
description: Invalid/Expired Refresh Token
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: Refresh Token
|
|
tags:
|
|
- Auth
|
|
/auth/register:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Register a new user account
|
|
parameters:
|
|
- description: Registration Data
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.RegisterRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.RegisterResponse'
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"409":
|
|
description: User already exists
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: User Registration
|
|
tags:
|
|
- Auth
|
|
/auth/resend-verification:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Resend the email verification link
|
|
parameters:
|
|
- description: Email
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_dto.ResendVerificationRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Success message
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: Resend Verification Email
|
|
tags:
|
|
- Auth
|
|
/auth/verify-email:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Verify user email address using a token
|
|
parameters:
|
|
- description: Verification Token
|
|
in: query
|
|
name: token
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: Success message
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"400":
|
|
description: Invalid Token
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: Verify Email
|
|
tags:
|
|
- Auth
|
|
/chat/token:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Generate a short-lived token for chat authentication
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
token:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get Chat Token
|
|
tags:
|
|
- Chat
|
|
/playlists:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get a paginated list of playlists
|
|
parameters:
|
|
- default: 1
|
|
description: Page number
|
|
in: query
|
|
name: page
|
|
type: integer
|
|
- default: 20
|
|
description: Items per page
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- description: Filter by User ID
|
|
in: query
|
|
name: user_id
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
pagination:
|
|
type: object
|
|
playlists:
|
|
items:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Playlist'
|
|
type: array
|
|
type: object
|
|
type: object
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get Playlists
|
|
tags:
|
|
- Playlist
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Create a new playlist
|
|
parameters:
|
|
- description: Playlist Metadata
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.CreatePlaylistRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
playlist:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Playlist'
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Create Playlist
|
|
tags:
|
|
- Playlist
|
|
/playlists/{id}:
|
|
delete:
|
|
consumes:
|
|
- application/json
|
|
description: Permanently delete a playlist
|
|
parameters:
|
|
- description: Playlist ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
message:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"404":
|
|
description: Playlist not found
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Delete Playlist
|
|
tags:
|
|
- Playlist
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get detailed information about a playlist
|
|
parameters:
|
|
- description: Playlist ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
playlist:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Playlist'
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Invalid ID
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"404":
|
|
description: Playlist not found
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get Playlist by ID
|
|
tags:
|
|
- Playlist
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Update playlist metadata
|
|
parameters:
|
|
- description: Playlist ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Playlist Metadata
|
|
in: body
|
|
name: playlist
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.UpdatePlaylistRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
playlist:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Playlist'
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"404":
|
|
description: Playlist not found
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Update Playlist
|
|
tags:
|
|
- Playlist
|
|
/playlists/{id}/tracks:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Add a track to the playlist
|
|
parameters:
|
|
- description: Playlist ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Track ID (in body)
|
|
in: body
|
|
name: trackId
|
|
required: true
|
|
schema:
|
|
properties:
|
|
track_id:
|
|
type: string
|
|
type: object
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
message:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Track already present or invalid ID
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"404":
|
|
description: Playlist or Track not found
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Add Track to Playlist
|
|
tags:
|
|
- Playlist
|
|
/playlists/{id}/tracks/{trackId}:
|
|
delete:
|
|
consumes:
|
|
- application/json
|
|
description: Remove a track from the playlist
|
|
parameters:
|
|
- description: Playlist ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Track ID
|
|
in: path
|
|
name: trackId
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
message:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"404":
|
|
description: Playlist or Track not found
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Remove Track from Playlist
|
|
tags:
|
|
- Playlist
|
|
/playlists/{id}/tracks/reorder:
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Reorder tracks in the playlist
|
|
parameters:
|
|
- description: Playlist ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: New Track Order
|
|
in: body
|
|
name: order
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.ReorderTracksRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
message:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Reorder Tracks
|
|
tags:
|
|
- Playlist
|
|
/tracks:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get a paginated list of tracks with filters
|
|
parameters:
|
|
- default: 1
|
|
description: Page number
|
|
in: query
|
|
name: page
|
|
type: integer
|
|
- default: 20
|
|
description: Items per page
|
|
in: query
|
|
name: limit
|
|
type: integer
|
|
- description: Filter by User ID
|
|
in: query
|
|
name: user_id
|
|
type: string
|
|
- description: Filter by Genre
|
|
in: query
|
|
name: genre
|
|
type: string
|
|
- description: Filter by Format
|
|
in: query
|
|
name: format
|
|
type: string
|
|
- default: created_at
|
|
description: Sort field
|
|
in: query
|
|
name: sort_by
|
|
type: string
|
|
- default: desc
|
|
description: Sort order (asc/desc)
|
|
in: query
|
|
name: sort_order
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
pagination:
|
|
type: object
|
|
tracks:
|
|
items:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Track'
|
|
type: array
|
|
type: object
|
|
type: object
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
summary: List Tracks
|
|
tags:
|
|
- Track
|
|
post:
|
|
consumes:
|
|
- multipart/form-data
|
|
description: Upload a new track (audio file)
|
|
parameters:
|
|
- description: Audio File (MP3, WAV, FLAC, OGG)
|
|
in: formData
|
|
name: file
|
|
required: true
|
|
type: file
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
track:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Track'
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: No file or validation error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"403":
|
|
description: Quota exceeded
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Upload Track
|
|
tags:
|
|
- Track
|
|
/tracks/{id}:
|
|
delete:
|
|
consumes:
|
|
- application/json
|
|
description: Permanently delete a track
|
|
parameters:
|
|
- description: Track ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
message:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"404":
|
|
description: Track not found
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Delete Track
|
|
tags:
|
|
- Track
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get detailed information about a track
|
|
parameters:
|
|
- description: Track ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
track:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Track'
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Invalid ID
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"404":
|
|
description: Track not found
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
summary: Get Track by ID
|
|
tags:
|
|
- Track
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Update track metadata
|
|
parameters:
|
|
- description: Track ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Track Metadata
|
|
in: body
|
|
name: track
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_core_track.UpdateTrackRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
track:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Track'
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"404":
|
|
description: Track not found
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Update Track
|
|
tags:
|
|
- Track
|
|
/tracks/{id}/status:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get the processing status of an uploaded track
|
|
parameters:
|
|
- description: Track ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
progress:
|
|
type: integer
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Invalid ID
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"404":
|
|
description: Track not found
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get Upload Status
|
|
tags:
|
|
- Track
|
|
/tracks/batch/delete:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Delete multiple tracks at once
|
|
parameters:
|
|
- description: List of Track IDs
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_core_track.BatchDeleteRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
deleted:
|
|
items:
|
|
type: string
|
|
type: array
|
|
failed:
|
|
type: object
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"500":
|
|
description: Internal Error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Batch Delete Tracks
|
|
tags:
|
|
- Track
|
|
/tracks/chunk:
|
|
post:
|
|
consumes:
|
|
- multipart/form-data
|
|
description: Upload a single chunk of a file
|
|
parameters:
|
|
- description: Chunk Data
|
|
in: formData
|
|
name: chunk
|
|
required: true
|
|
type: file
|
|
- description: Upload ID
|
|
in: formData
|
|
name: upload_id
|
|
required: true
|
|
type: string
|
|
- description: Chunk Number
|
|
in: formData
|
|
name: chunk_number
|
|
required: true
|
|
type: integer
|
|
- description: Total Chunks
|
|
in: formData
|
|
name: total_chunks
|
|
required: true
|
|
type: integer
|
|
- description: Total Size
|
|
format: int64
|
|
in: formData
|
|
name: total_size
|
|
required: true
|
|
type: integer
|
|
- description: Filename
|
|
in: formData
|
|
name: filename
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
message:
|
|
type: string
|
|
progress:
|
|
format: float64
|
|
type: number
|
|
received_chunks:
|
|
type: integer
|
|
upload_id:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Upload Chunk
|
|
tags:
|
|
- Track
|
|
/tracks/complete:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Finish upload session and assemble file
|
|
parameters:
|
|
- description: Upload ID
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_core_track.CompleteChunkedUploadRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"201":
|
|
description: Created
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
md5:
|
|
type: string
|
|
message:
|
|
type: string
|
|
track:
|
|
$ref: '#/definitions/veza-backend-api_internal_models.Track'
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation or Assemblage Error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Complete Chunked Upload
|
|
tags:
|
|
- Track
|
|
/tracks/initiate:
|
|
post:
|
|
consumes:
|
|
- application/json
|
|
description: Start a new chunked upload session
|
|
parameters:
|
|
- description: Upload Metadata
|
|
in: body
|
|
name: request
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_core_track.InitiateChunkedUploadRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
message:
|
|
type: string
|
|
upload_id:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Initiate Chunked Upload
|
|
tags:
|
|
- Track
|
|
/tracks/quota/{id}:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get remaining upload quota for the user
|
|
parameters:
|
|
- description: User ID (optional, defaults to current user)
|
|
in: path
|
|
name: id
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
quota:
|
|
type: object
|
|
type: object
|
|
type: object
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Get Upload Quota
|
|
tags:
|
|
- Track
|
|
/tracks/resume/{uploadId}:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get state of an interrupted upload
|
|
parameters:
|
|
- description: Upload ID
|
|
in: path
|
|
name: uploadId
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
chunks_received:
|
|
type: integer
|
|
upload_id:
|
|
type: string
|
|
type: object
|
|
type: object
|
|
"404":
|
|
description: Upload session not found
|
|
schema:
|
|
$ref: '#/definitions/veza-backend-api_internal_response.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Resume Upload
|
|
tags:
|
|
- Track
|
|
/users/{id}:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get public profile information for a user
|
|
parameters:
|
|
- description: User ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
profile:
|
|
type: object
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Invalid ID
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"404":
|
|
description: User not found
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: Get Profile by ID
|
|
tags:
|
|
- User
|
|
put:
|
|
consumes:
|
|
- application/json
|
|
description: Update user profile details
|
|
parameters:
|
|
- description: User ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
- description: Profile Data
|
|
in: body
|
|
name: profile
|
|
required: true
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.UpdateProfileRequest'
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
profile:
|
|
type: object
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Validation Error
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
security:
|
|
- BearerAuth: []
|
|
summary: Update Profile
|
|
tags:
|
|
- User
|
|
/users/{id}/completion:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get profile completion percentage and missing fields
|
|
parameters:
|
|
- description: User ID
|
|
in: path
|
|
name: id
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Invalid ID
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"401":
|
|
description: Unauthorized
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"403":
|
|
description: Forbidden
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: Get Profile Completion
|
|
tags:
|
|
- User
|
|
/users/by-username/{username}:
|
|
get:
|
|
consumes:
|
|
- application/json
|
|
description: Get public profile information for a user by username
|
|
parameters:
|
|
- description: Username
|
|
in: path
|
|
name: username
|
|
required: true
|
|
type: string
|
|
produces:
|
|
- application/json
|
|
responses:
|
|
"200":
|
|
description: OK
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/definitions/internal_handlers.APIResponse'
|
|
- properties:
|
|
data:
|
|
properties:
|
|
profile:
|
|
type: object
|
|
type: object
|
|
type: object
|
|
"400":
|
|
description: Missing username
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
"404":
|
|
description: User not found
|
|
schema:
|
|
$ref: '#/definitions/internal_handlers.APIResponse'
|
|
summary: Get Profile by Username
|
|
tags:
|
|
- User
|
|
securityDefinitions:
|
|
BearerAuth:
|
|
in: header
|
|
name: Authorization
|
|
type: apiKey
|
|
swagger: "2.0"
|