2025-12-03 19:29:37 +00:00
// Package docs Code generated by swaggo/swag. DO NOT EDIT
package docs
import "github.com/swaggo/swag"
const docTemplate = ` {
"schemes" : { { marshal . Schemes } } ,
"swagger" : "2.0" ,
"info" : {
"description" : "{{escape .Description}}" ,
"title" : "{{.Title}}" ,
"termsOfService" : "http://swagger.io/terms/" ,
"contact" : {
"name" : "API Support" ,
"url" : "http://www.veza.app/support" ,
"email" : "support@veza.app"
} ,
"license" : {
"name" : "Apache 2.0" ,
"url" : "http://www.apache.org/licenses/LICENSE-2.0.html"
} ,
"version" : "{{.Version}}"
} ,
"host" : "{{.Host}}" ,
"basePath" : "{{.BasePath}}" ,
"paths" : {
2026-02-15 15:18:13 +00:00
"/api/v1/dashboard" : {
2026-01-11 15:30:43 +00:00
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-02-15 15:18:13 +00:00
"description" : "Get aggregated dashboard data including stats, recent activity, and library preview" ,
2026-01-11 15:30:43 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-02-15 15:18:13 +00:00
"Dashboard"
2026-01-11 15:30:43 +00:00
] ,
2026-02-15 15:18:13 +00:00
"summary" : "Get Dashboard Data" ,
2026-01-11 15:30:43 +00:00
"parameters" : [
{
"type" : "integer" ,
2026-02-15 15:18:13 +00:00
"description" : "Number of recent activity items (default: 10)" ,
"name" : "activity_limit" ,
2026-01-11 15:30:43 +00:00
"in" : "query"
} ,
{
2026-02-15 15:18:13 +00:00
"type" : "integer" ,
"description" : "Number of library items (default: 5)" ,
"name" : "library_limit" ,
2026-01-11 15:30:43 +00:00
"in" : "query"
} ,
{
"type" : "string" ,
2026-02-15 15:18:13 +00:00
"description" : "Time period for statistics: 7d, 30d, 90d, all (default: 30d)" ,
"name" : "stats_period" ,
2026-01-11 15:30:43 +00:00
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.DashboardResponse"
2026-01-07 18:39:21 +00:00
}
}
}
]
2025-12-03 19:29:37 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-03 19:29:37 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"500" : {
"description" : "Internal server error" ,
2025-12-03 19:29:37 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/api/v1/logs/frontend" : {
2025-12-06 16:34:18 +00:00
"post" : {
2026-01-07 18:39:21 +00:00
"description" : "Receive and store a log entry from the frontend application" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Logging"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Receive frontend log" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"description" : "Frontend log entry" ,
"name" : "log" ,
2025-12-06 16:34:18 +00:00
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.FrontendLogRequest"
2025-12-06 16:34:18 +00:00
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
2026-01-07 18:39:21 +00:00
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"received" : {
"type" : "boolean"
}
}
}
}
}
]
2025-12-06 16:34:18 +00:00
}
} ,
"400" : {
2026-01-07 18:39:21 +00:00
"description" : "Invalid log entry" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"500" : {
2026-01-07 18:39:21 +00:00
"description" : "Internal server error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/api/v1/marketplace/download/{product_id}" : {
"get" : {
2025-12-06 16:34:18 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Get a secure download URL for a purchased product" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Marketplace"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Get download URL" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"type" : "string" ,
"description" : "Product ID" ,
"name" : "product_id" ,
"in" : "path" ,
"required" : true
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
"200" : {
2026-01-07 18:39:21 +00:00
"description" : "OK" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"additionalProperties" : {
"type" : "string"
}
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"403" : {
"description" : "No license" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"404" : {
"description" : "Not Found" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/api/v1/marketplace/orders" : {
2025-12-06 16:34:18 +00:00
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Get all orders for the authenticated user" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Marketplace"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "List user orders" ,
2025-12-06 16:34:18 +00:00
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
2026-01-07 18:39:21 +00:00
"type" : "array" ,
"items" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.Order"
2026-01-07 18:39:21 +00:00
}
2025-12-06 16:34:18 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
2026-01-07 18:39:21 +00:00
} ,
2025-12-06 16:34:18 +00:00
"post" : {
2026-01-07 18:39:21 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Purchase products" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Marketplace"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Create a new order" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"description" : "Order items" ,
"name" : "order" ,
2025-12-06 16:34:18 +00:00
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.CreateOrderRequest"
2025-12-06 16:34:18 +00:00
}
}
] ,
"responses" : {
2026-01-07 18:39:21 +00:00
"201" : {
"description" : "Created" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.Order"
2025-12-06 16:34:18 +00:00
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"401" : {
2026-01-07 18:39:21 +00:00
"description" : "Unauthorized" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/api/v1/marketplace/orders/{id}" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Get details of a specific order (only order owner can access)" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Marketplace"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Get order details" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"type" : "string" ,
"description" : "Order ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
2026-01-07 18:39:21 +00:00
"200" : {
"description" : "OK" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.Order"
2025-12-06 16:34:18 +00:00
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"401" : {
"description" : "Unauthorized" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"403" : {
"description" : "Forbidden - Not order owner" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
"description" : "Order not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/api/v1/marketplace/products" : {
"get" : {
"description" : "List marketplace products with filters" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Marketplace"
] ,
"summary" : "List products" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Product status" ,
"name" : "status" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Seller ID" ,
"name" : "seller_id" ,
"in" : "query"
2026-01-11 15:30:43 +00:00
} ,
{
"type" : "string" ,
"description" : "Search query" ,
"name" : "q" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Product type (track, pack, service)" ,
"name" : "type" ,
"in" : "query"
} ,
{
"type" : "number" ,
"description" : "Minimum price" ,
"name" : "min_price" ,
"in" : "query"
} ,
{
"type" : "number" ,
"description" : "Maximum price" ,
"name" : "max_price" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"description" : "Page number" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"description" : "Items per page" ,
"name" : "limit" ,
"in" : "query"
2026-01-07 18:39:21 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"type" : "array" ,
"items" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.Product"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
2025-12-06 16:34:18 +00:00
"post" : {
2026-01-07 18:39:21 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Create a product (Track, Pack, Service) for sale" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Marketplace"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Create a new product" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"description" : "Product info" ,
"name" : "product" ,
2025-12-06 16:34:18 +00:00
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.CreateProductRequest"
2025-12-06 16:34:18 +00:00
}
}
] ,
"responses" : {
2026-01-07 18:39:21 +00:00
"201" : {
"description" : "Created" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.Product"
2025-12-06 16:34:18 +00:00
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/api/v1/marketplace/products/{id}" : {
"put" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Update product details (only seller can update)" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Marketplace"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Update a product" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
2026-01-07 18:39:21 +00:00
"description" : "Product ID" ,
"name" : "id" ,
"in" : "path" ,
2025-12-06 16:34:18 +00:00
"required" : true
2026-01-07 18:39:21 +00:00
} ,
{
"description" : "Product updates" ,
"name" : "product" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.UpdateProductRequest"
2026-01-07 18:39:21 +00:00
}
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
"200" : {
2026-01-07 18:39:21 +00:00
"description" : "OK" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.Product"
2025-12-06 16:34:18 +00:00
}
} ,
"400" : {
2026-01-07 18:39:21 +00:00
"description" : "Validation Error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
"description" : "Forbidden - Not product owner" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
"description" : "Product not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/audit/activity" : {
2025-12-06 16:34:18 +00:00
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Get recent activity logs for the current user" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Audit"
] ,
"summary" : "Get user activity" ,
"parameters" : [
{
"type" : "integer" ,
"default" : 50 ,
"description" : "Number of activities to return" ,
"name" : "limit" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"activities" : {
"type" : "array"
}
}
}
}
}
]
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal server error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/audit/logs" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Search and filter audit logs with pagination support. Supports filtering by action, resource, date range, IP address, and user agent." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Audit"
] ,
"summary" : "Search audit logs" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Filter by action type" ,
"name" : "action" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Filter by resource type" ,
"name" : "resource" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Filter by resource ID (UUID)" ,
"name" : "resource_id" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Filter by IP address" ,
"name" : "ip_address" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Filter by user agent" ,
"name" : "user_agent" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Start date filter (YYYY-MM-DD)" ,
"name" : "start_date" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "End date filter (YYYY-MM-DD)" ,
"name" : "end_date" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 1 ,
"description" : "Page number" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page" ,
"name" : "limit" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"description" : "Offset for pagination" ,
"name" : "offset" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"logs" : {
"type" : "array"
} ,
"pagination" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal server error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/audit/stats" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Get audit statistics for the current user, optionally filtered by date range" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Audit"
] ,
"summary" : "Get audit statistics" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Start date (YYYY-MM-DD)" ,
"name" : "start_date" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "End date (YYYY-MM-DD)" ,
"name" : "end_date" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"stats" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal server error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/2fa/disable" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Disable 2FA for user (requires password confirmation)" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Disable 2FA" ,
"parameters" : [
{
"description" : "Password Confirmation" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.DisableTwoFactorRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid password or 2FA not enabled" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/2fa/setup" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Generate 2FA secret and QR code for setup" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Setup 2FA" ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.SetupTwoFactorResponse"
2026-01-07 18:39:21 +00:00
}
}
}
]
}
} ,
"400" : {
"description" : "2FA already enabled" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/2fa/status" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Get 2FA enabled status for authenticated user" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Get 2FA Status" ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"enabled" : {
"type" : "boolean"
}
}
}
}
}
]
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/2fa/verify" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Verify 2FA code and enable 2FA for user" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Verify and Enable 2FA" ,
"parameters" : [
{
"description" : "2FA Code" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.VerifyTwoFactorRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid code" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/check-username" : {
"get" : {
"description" : "Check if a username is already taken" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Check Username Availability" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Username to check" ,
"name" : "username" ,
"in" : "query" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"available" : {
"type" : "boolean"
} ,
"username" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Missing Username" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/login" : {
"post" : {
"description" : "Authenticate user and return access token. Refresh token is set in httpOnly cookie." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "User Login" ,
"parameters" : [
{
"description" : "Login Credentials" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_dto.LoginRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"200" : {
"description" : "Access token returned in body, refresh token in httpOnly cookie" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_dto.LoginResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"400" : {
"description" : "Validation or Bad Request" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Invalid credentials" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/logout" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Revoke refresh token and current session" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Logout" ,
"parameters" : [
{
"description" : "Refresh Token to revoke" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"type" : "object" ,
"properties" : {
"refresh_token" : {
"type" : "string"
}
}
}
}
] ,
"responses" : {
"200" : {
"description" : "Success message" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/me" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Get profile information of the currently logged-in user" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Get Current User" ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object"
}
}
}
]
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
"description" : "User not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/refresh" : {
"post" : {
"description" : "Get a new access token using a refresh token" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Refresh Token" ,
"parameters" : [
{
"description" : "Refresh Token" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_dto.RefreshRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_dto.TokenResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Invalid/Expired Refresh Token" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/register" : {
"post" : {
"description" : "Register a new user account" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "User Registration" ,
"parameters" : [
{
"description" : "Registration Data" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_dto.RegisterRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"201" : {
"description" : "Created" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_dto.RegisterResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"409" : {
"description" : "User already exists" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/resend-verification" : {
"post" : {
"description" : "Resend the email verification link" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Resend Verification Email" ,
"parameters" : [
{
"description" : "Email" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_dto.ResendVerificationRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"200" : {
"description" : "Success message" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/auth/stream-token" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Returns a 5-minute JWT for HLS and WebSocket authentication (httpOnly cookies prevent direct token access)" ,
"tags" : [
"Auth"
] ,
"summary" : "Get ephemeral stream token" ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.StreamTokenResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/auth/verify-email" : {
"post" : {
"description" : "Verify user email address using a token" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Auth"
] ,
"summary" : "Verify Email" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Verification Token" ,
"name" : "token" ,
"in" : "query" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "Success message" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"400" : {
"description" : "Invalid Token" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/chat/token" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Generate a short-lived token for chat authentication" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Chat"
] ,
"summary" : "Get Chat Token" ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"token" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/comments/{id}" : {
"put" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Update a comment (only by owner)" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Comment"
] ,
"summary" : "Update comment" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Comment ID (UUID)" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "Updated comment content" ,
"name" : "comment" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.UpdateCommentRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"comment" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
"description" : "Forbidden - can only edit own comments" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
"description" : "Comment not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal server error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/comments/{id}/replies" : {
"get" : {
"description" : "Get paginated list of replies to a comment" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Comment"
] ,
"summary" : "Get comment replies" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Parent Comment ID (UUID)" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"minimum" : 1 ,
"type" : "integer" ,
"default" : 1 ,
"description" : "Page number" ,
"name" : "page" ,
"in" : "query"
} ,
{
"maximum" : 100 ,
"minimum" : 1 ,
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page" ,
"name" : "limit" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"pagination" : {
"type" : "object"
} ,
"replies" : {
"type" : "array"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
"description" : "Parent comment not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal server error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"/internal/tracks/{id}/stream-ready" : {
"post" : {
"description" : "Internal endpoint called by the Rust stream server when HLS transcoding completes or fails. Updates the track's stream_status and stream_manifest_url. Requires internal API key (not user-facing)." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Stream server callback" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "Callback payload" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_core_track.StreamCallbackRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
} ,
"400" : {
"description" : "Validation / invalid id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/playlists" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Get a paginated list of playlists" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Get Playlists" ,
"parameters" : [
{
"type" : "integer" ,
"default" : 1 ,
"description" : "Page number" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page" ,
"name" : "limit" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Filter by User ID" ,
"name" : "user_id" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"pagination" : {
"type" : "object"
} ,
"playlists" : {
"type" : "array" ,
"items" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
2026-01-07 18:39:21 +00:00
}
}
}
}
}
}
]
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
} ,
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Create a new playlist" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Create Playlist" ,
"parameters" : [
{
"description" : "Playlist Metadata" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.CreatePlaylistRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"201" : {
"description" : "Created" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"playlist" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
2026-01-07 18:39:21 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"/playlists/favoris" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Returns the authenticated user's \"Favoris\" playlist. Auto-created on first call. Used by the like-as-save pattern." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Get Favoris playlist" ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"playlist" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
}
}
}
}
}
]
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/playlists/import" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Create a playlist from a JSON payload (title, description, is_public, ordered track IDs). Useful for bulk seed / migration." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Import playlist" ,
"parameters" : [
{
"description" : "Playlist + tracks" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.ImportPlaylistRequest"
}
}
] ,
"responses" : {
"201" : {
"description" : "Created" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"playlist" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation" ,
"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"
}
}
}
}
} ,
"/playlists/recommendations" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Suggested playlists for the authenticated user. Chronological / declarative discovery — no behavioural ranking (CLAUDE.md rule 7)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Get playlist recommendations" ,
"parameters" : [
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Max items (max 100)" ,
"name" : "limit" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"playlists" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
}
}
}
}
}
}
]
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/playlists/search" : {
"get" : {
"description" : "Full-text search on public playlists (title + description). Paginated." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Search playlists" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Full-text query" ,
"name" : "q" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 1 ,
"description" : "Page number" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page (max 100)" ,
"name" : "limit" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"pagination" : {
"type" : "object"
} ,
"playlists" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
}
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/playlists/shared/{token}" : {
"get" : {
"description" : "Public endpoint resolving a share token. Allows unauthenticated access to the playlist snapshot + tracks." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Get playlist by share token" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Share token" ,
"name" : "token" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"playlist" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Missing token" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"403" : {
"description" : "Share expired" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Share or playlist not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/playlists/{id}" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Get detailed information about a playlist" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Get Playlist by ID" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"playlist" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid ID" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Playlist not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
} ,
"put" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Update playlist metadata" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Update Playlist" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "Playlist Metadata" ,
"name" : "playlist" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.UpdatePlaylistRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"playlist" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
}
}
}
}
}
]
}
} ,
"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"
}
}
}
} ,
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Permanently delete a playlist" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Delete Playlist" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"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"
}
}
}
}
} ,
"/playlists/{id}/analytics" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Returns aggregated stats for a playlist (plays, follows, tracks count, etc.). Visible to the owner, collaborators and admins." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Get playlist statistics" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"stats" : {
"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"
}
} ,
"404" : {
"description" : "Playlist not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/playlists/{id}/collaborators" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Returns the collaborators of a playlist with their permission level." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "List playlist collaborators" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"collaborators" : {
"type" : "array" ,
"items" : {
"type" : "object"
}
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid id" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Playlist not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
} ,
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Invite a user as collaborator. Only the owner (or admin) can add." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Add playlist collaborator" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "Collaborator + permission" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.AddCollaboratorRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"collaborator" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"403" : {
"description" : "Not owner" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Playlist not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/playlists/{id}/collaborators/{userId}" : {
"put" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Change a collaborator's permission level (read / write / admin). Only the owner can update." ,
2026-01-07 18:39:21 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"summary" : "Update collaborator permission" ,
2026-01-07 18:39:21 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Playlist UUID" ,
2026-01-07 18:39:21 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
} ,
{
"type" : "string" ,
"description" : "Collaborator user UUID" ,
"name" : "userId" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "New permission" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.UpdateCollaboratorPermissionRequest"
}
2026-01-07 18:39:21 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"collaborator" : {
"type" : "object"
2026-01-07 18:39:21 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Validation" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"403" : {
"description" : "Not owner" ,
2026-01-07 18:39:21 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Playlist or collaborator not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
2026-01-07 18:39:21 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
} ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"delete" : {
2026-01-07 18:39:21 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Revoke a collaborator's access. Only the owner (or admin) can remove." ,
2026-01-07 18:39:21 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"summary" : "Remove playlist collaborator" ,
2026-01-07 18:39:21 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Playlist UUID" ,
2026-01-07 18:39:21 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"type" : "string" ,
"description" : "Collaborator user UUID" ,
"name" : "userId" ,
"in" : "path" ,
"required" : true
2026-01-07 18:39:21 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"message" : {
"type" : "string"
2026-01-07 18:39:21 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Validation" ,
2026-01-07 18:39:21 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Not owner" ,
2026-01-07 18:39:21 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Playlist or collaborator not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
2026-01-07 18:39:21 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
}
} ,
"/playlists/{id}/duplicate" : {
"post" : {
2026-01-07 18:39:21 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Copy a playlist's track list into a new playlist owned by the authenticated user. Cover/description copied; original unchanged." ,
"produces" : [
2026-01-07 18:39:21 +00:00
"application/json"
] ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"tags" : [
"Playlist"
] ,
"summary" : "Duplicate playlist" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Source playlist UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"201" : {
"description" : "Created" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"playlist" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Playlist"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid id" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"403" : {
"description" : "Source not visible" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Source playlist not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/playlists/{id}/share" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Generate a tokenised link to share a playlist (read-only). Only owner / admin can issue. No body required." ,
2026-01-07 18:39:21 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"summary" : "Create playlist share link" ,
2026-01-07 18:39:21 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Playlist UUID" ,
2026-01-07 18:39:21 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"share" : {
"type" : "object"
2026-01-07 18:39:21 +00:00
}
}
}
}
}
]
}
} ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"400" : {
"description" : "Validation" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
2026-01-07 18:39:21 +00:00
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"description" : "Not owner" ,
2026-01-07 18:39:21 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
"description" : "Playlist not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
2026-01-07 18:39:21 +00:00
}
}
}
} ,
"/playlists/{id}/tracks" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Add a track to the playlist" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Add Track to Playlist" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "Track ID (in body)" ,
"name" : "trackId" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"type" : "object" ,
"properties" : {
"track_id" : {
"type" : "string"
}
}
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Track already present or invalid ID" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
"description" : "Playlist or Track not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/playlists/{id}/tracks/reorder" : {
"put" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Reorder tracks in the playlist" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Reorder Tracks" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "New Track Order" ,
"name" : "order" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.ReorderTracksRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/playlists/{id}/tracks/{trackId}" : {
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Remove a track from the playlist" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Playlist"
] ,
"summary" : "Remove Track from Playlist" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Playlist ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"type" : "string" ,
"description" : "Track ID" ,
"name" : "trackId" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"404" : {
"description" : "Playlist or Track not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/tracks" : {
2026-04-23 22:45:10 +00:00
"get" : {
"description" : "List tracks with pagination, filters, sort. Cursor-based when ?cursor provided, otherwise page/limit offset." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "List tracks" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Opaque pagination cursor (overrides page)" ,
"name" : "cursor" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 1 ,
"description" : "Page number, 1-based (ignored if cursor set)" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page (max 100)" ,
"name" : "limit" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Filter by creator UUID" ,
"name" : "user_id" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Filter by genre" ,
"name" : "genre" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Filter by audio format (mp3, flac, wav, ogg, m4a, aac)" ,
"name" : "format" ,
"in" : "query"
} ,
{
"type" : "string" ,
"default" : "created_at" ,
"description" : "Sort column (created_at, play_count, title)" ,
"name" : "sort_by" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"pagination" : {
"type" : "object"
} ,
"tracks" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
}
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid query params" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Upload a new track (audio file)" ,
"consumes" : [
"multipart/form-data"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Upload Track" ,
"parameters" : [
{
"type" : "file" ,
"description" : "Audio File (MP3, WAV, FLAC, OGG)" ,
"name" : "file" ,
"in" : "formData" ,
"required" : true
}
] ,
"responses" : {
"201" : {
"description" : "Created" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"track" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
2026-01-07 18:39:21 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "No file or validation error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
"description" : "Quota exceeded" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
2026-04-23 22:45:10 +00:00
"/tracks/batch/delete" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Soft-delete up to N tracks in one request. Per-track ownership checked (admin can delete others)." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Batch delete tracks" ,
"parameters" : [
{
"description" : "List of track UUIDs" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_core_track.BatchDeleteRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"deleted" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
} ,
"failed" : {
"type" : "array" ,
"items" : {
"type" : "object"
}
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation / batch size exceeded" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
}
}
}
} ,
"/tracks/batch/update" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Apply a partial metadata update to up to N tracks in one request. Per-track ownership checked." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Batch update tracks" ,
"parameters" : [
{
"description" : "Track UUIDs + shared updates map" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_core_track.BatchUpdateRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"failed" : {
"type" : "array" ,
"items" : {
"type" : "object"
}
} ,
"updated" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation / batch size exceeded" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/tracks/chunk" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Upload a single chunk of a file" ,
"consumes" : [
"multipart/form-data"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Upload Chunk" ,
"parameters" : [
{
"type" : "file" ,
"description" : "Chunk Data" ,
"name" : "chunk" ,
"in" : "formData" ,
"required" : true
} ,
{
"type" : "string" ,
"description" : "Upload ID" ,
"name" : "upload_id" ,
"in" : "formData" ,
"required" : true
} ,
{
"type" : "integer" ,
"description" : "Chunk Number" ,
"name" : "chunk_number" ,
"in" : "formData" ,
"required" : true
} ,
{
"type" : "integer" ,
"description" : "Total Chunks" ,
"name" : "total_chunks" ,
"in" : "formData" ,
"required" : true
} ,
{
"type" : "integer" ,
"format" : "int64" ,
"description" : "Total Size" ,
"name" : "total_size" ,
"in" : "formData" ,
"required" : true
} ,
{
"type" : "string" ,
"description" : "Filename" ,
"name" : "filename" ,
"in" : "formData" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
} ,
"progress" : {
"type" : "number" ,
"format" : "float64"
} ,
"received_chunks" : {
"type" : "integer"
} ,
"upload_id" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/tracks/complete" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Finish upload session and assemble file" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Complete Chunked Upload" ,
"parameters" : [
{
"description" : "Upload ID" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_core_track.CompleteChunkedUploadRequest"
2026-01-07 18:39:21 +00:00
}
}
] ,
"responses" : {
"201" : {
"description" : "Created" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"md5" : {
"type" : "string"
} ,
"message" : {
"type" : "string"
} ,
"track" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
2026-01-07 18:39:21 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation or Assemblage Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
}
}
}
} ,
"/tracks/initiate" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Start a new chunked upload session" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Track"
] ,
"summary" : "Initiate Chunked Upload" ,
"parameters" : [
{
"description" : "Upload Metadata" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_core_track.InitiateChunkedUploadRequest"
2026-01-07 18:39:21 +00:00
}
}
2025-12-06 16:34:18 +00:00
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"message" : {
"type" : "string"
} ,
"upload_id" : {
2025-12-06 16:34:18 +00:00
"type" : "string"
}
}
}
}
}
]
}
} ,
2026-01-07 18:39:21 +00:00
"400" : {
"description" : "Validation Error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"401" : {
"description" : "Unauthorized" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/tracks/quota/{id}" : {
2025-12-06 16:34:18 +00:00
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Get remaining upload quota for the user" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Track"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Get Upload Quota" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
2026-03-03 19:17:54 +00:00
"description" : "User ID or 'me' for current user" ,
2026-01-07 18:39:21 +00:00
"name" : "id" ,
2026-03-03 19:17:54 +00:00
"in" : "path" ,
"required" : true
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"quota" : {
2025-12-06 16:34:18 +00:00
"type" : "object"
}
}
}
}
}
]
}
} ,
2026-01-07 18:39:21 +00:00
"401" : {
"description" : "Unauthorized" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
"description" : "Forbidden" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
2026-01-07 18:39:21 +00:00
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"/tracks/recommendations" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Personalized tracks for D2 autoplay. If seed_track_id is given, returns tracks similar to that seed. Otherwise, uses the caller's history (chronological, no behavioural ranking — CLAUDE.md rule 7)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Get track recommendations" ,
"parameters" : [
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Max items (max 100)" ,
"name" : "limit" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Start from this track's similarity neighbours" ,
"name" : "seed_track_id" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"tracks" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
}
}
}
}
}
}
]
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/tracks/resume/{uploadId}" : {
"get" : {
2025-12-06 16:34:18 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Get state of an interrupted upload" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Track"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Resume Upload" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"type" : "string" ,
"description" : "Upload ID" ,
"name" : "uploadId" ,
"in" : "path" ,
"required" : true
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
2026-01-07 18:39:21 +00:00
"200" : {
"description" : "OK" ,
2025-12-06 16:34:18 +00:00
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"chunks_received" : {
"type" : "integer"
} ,
"upload_id" : {
"type" : "string"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
2026-01-07 18:39:21 +00:00
"404" : {
2026-04-23 22:45:10 +00:00
"description" : "Upload session not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
}
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"/tracks/search" : {
2026-04-23 22:45:10 +00:00
"get" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Full-text + faceted search on tracks (genre, BPM, duration, tags, musical key, dates). Sort-by and order configurable." ,
2026-04-23 22:45:10 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Advanced track search" ,
2026-04-23 22:45:10 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Full-text query (title/artist/album)" ,
"name" : "q" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Comma-separated tag list" ,
"name" : "tags" ,
"in" : "query"
} ,
{
"type" : "string" ,
"default" : "OR" ,
"description" : "Tag combinator (OR / AND)" ,
"name" : "tag_mode" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"description" : "Minimum duration (seconds)" ,
"name" : "min_duration" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"description" : "Maximum duration (seconds)" ,
"name" : "max_duration" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"description" : "Minimum BPM" ,
"name" : "min_bpm" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"description" : "Maximum BPM" ,
"name" : "max_bpm" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Genre filter" ,
"name" : "genre" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Audio format filter" ,
"name" : "format" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Musical key filter" ,
"name" : "musical_key" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Created-after (RFC3339)" ,
"name" : "min_date" ,
"in" : "query"
} ,
{
"type" : "string" ,
"description" : "Created-before (RFC3339)" ,
"name" : "max_date" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 1 ,
"description" : "Page (1-based)" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page (max 100)" ,
"name" : "limit" ,
"in" : "query"
} ,
{
"type" : "string" ,
"default" : "created_at" ,
"description" : "Sort column" ,
"name" : "sort_by" ,
"in" : "query"
} ,
{
"type" : "string" ,
"default" : "desc" ,
"description" : "asc / desc" ,
"name" : "sort_order" ,
"in" : "query"
2026-04-23 22:45:10 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"pagination" : {
"type" : "object"
} ,
"tracks" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
}
2026-04-23 22:45:10 +00:00
}
}
}
}
}
]
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
}
}
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
}
} ,
"/tracks/share/{id}" : {
"delete" : {
2026-04-23 22:45:10 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Permanently disable a share token. Only the share issuer (or admin) can revoke." ,
2026-04-23 22:45:10 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Revoke share link" ,
2026-04-23 22:45:10 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Share UUID" ,
2026-04-23 22:45:10 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"message" : {
"type" : "string"
2026-04-23 22:45:10 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Validation" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"403" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Not issuer" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"404" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Share not found" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
}
}
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
}
} ,
"/tracks/shared/{token}" : {
"get" : {
"description" : "Public endpoint that resolves a share token and returns the track + share metadata. No auth required; the token IS the auth." ,
2026-04-23 22:45:10 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Get track by share token" ,
2026-04-23 22:45:10 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Opaque share token issued by CreateShare" ,
"name" : "token" ,
2026-04-23 22:45:10 +00:00
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"share" : {
"type" : "object"
} ,
"track" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
2026-04-23 22:45:10 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Missing token" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"403" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Share link expired" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"404" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Share or track not found" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"/tracks/suggested-tags" : {
2025-12-06 16:34:18 +00:00
"get" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Returns a static tag suggestion list for a genre — useful for upload autocomplete and filter chips." ,
"produces" : [
2025-12-06 16:34:18 +00:00
"application/json"
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"tags" : [
"Track"
] ,
"summary" : "Get suggested tags" ,
"parameters" : [
{
"type" : "string" ,
"default" : "default" ,
"description" : "Genre slug (pop, rock, electronic, hip-hop, jazz, classical, ambient, default)" ,
"name" : "genre" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"tags" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
}
}
}
}
}
]
}
}
}
}
} ,
"/tracks/{id}" : {
"get" : {
"description" : "Retrieve a single track. Private play_count / like_count are omitted for non-owners (v0.10.3 F202)." ,
2025-12-06 16:34:18 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"Track"
2025-12-06 16:34:18 +00:00
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Get track by ID" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Track UUID" ,
2025-12-06 16:34:18 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"track" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Invalid track id" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"404" : {
2026-01-07 18:39:21 +00:00
"description" : "Track not found" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-02-27 19:23:10 +00:00
}
} ,
"500" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Internal Error" ,
2026-02-27 19:23:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"put" : {
2025-12-06 16:34:18 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Update the metadata of an existing track. Caller must own the track or be admin." ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"Track"
2025-12-06 16:34:18 +00:00
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Update track metadata" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Track UUID" ,
2025-12-06 16:34:18 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Updated metadata" ,
"name" : "request" ,
2025-12-06 16:34:18 +00:00
"in" : "body" ,
"required" : true ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/internal_core_track.UpdateTrackRequest"
2025-12-06 16:34:18 +00:00
}
}
] ,
"responses" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"200" : {
"description" : "OK" ,
2025-12-06 16:34:18 +00:00
"schema" : {
"allOf" : [
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"track" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Validation / invalid id" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"403" : {
"description" : "Not owner / no admin" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-02-27 19:23:10 +00:00
"404" : {
"description" : "Track not found" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-02-27 19:23:10 +00:00
"500" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Internal Error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
} ,
2025-12-06 16:34:18 +00:00
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
2026-01-07 18:39:21 +00:00
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Soft-delete a track (sets deleted_at). Caller must own the track or be admin." ,
2026-01-07 18:39:21 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"Track"
2026-01-07 18:39:21 +00:00
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Delete track" ,
2026-01-07 18:39:21 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Track UUID" ,
2026-01-07 18:39:21 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
2026-02-27 19:23:10 +00:00
"400" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Invalid track id" ,
2026-02-27 19:23:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-02-27 19:23:10 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"401" : {
"description" : "Unauthorized" ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Not owner / no admin" ,
2026-01-07 18:39:21 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"404" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Track not found" ,
2026-01-07 18:39:21 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"/tracks/{id}/comments" : {
2026-04-23 22:45:10 +00:00
"get" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Get paginated list of comments for a track" ,
"consumes" : [
"application/json"
] ,
2026-04-23 22:45:10 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"Comment"
2026-04-23 22:45:10 +00:00
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Get track comments" ,
2026-04-23 22:45:10 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Track ID" ,
2026-04-23 22:45:10 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
} ,
{
"type" : "integer" ,
"default" : 1 ,
"description" : "Page number" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page" ,
"name" : "limit" ,
"in" : "query"
2026-04-23 22:45:10 +00:00
}
] ,
"responses" : {
"200" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "OK" ,
2026-04-23 22:45:10 +00:00
"schema" : {
"allOf" : [
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"comments" : {
"type" : "array"
} ,
"pagination" : {
2026-04-23 22:45:10 +00:00
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Validation error" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"500" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Internal server error" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"post" : {
2026-04-23 22:45:10 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Create a new comment on a track. Can be a top-level comment or a reply to another comment (using parent_id)." ,
2026-04-23 22:45:10 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"Comment"
2026-04-23 22:45:10 +00:00
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Create comment" ,
2026-04-23 22:45:10 +00:00
"parameters" : [
{
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Track ID (UUID)" ,
2026-04-23 22:45:10 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Comment data" ,
"name" : "comment" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.CreateCommentRequest"
}
}
] ,
"responses" : {
"201" : {
"description" : "Created" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"comment" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal server error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/comments/{comment_id}" : {
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Delete a comment (only by owner or admin)" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Comment"
] ,
"summary" : "Delete comment" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"type" : "string" ,
"description" : "Comment ID" ,
"name" : "comment_id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"403" : {
"description" : "Forbidden - not comment owner" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Comment not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/download" : {
"get" : {
"description" : "Serve the original audio file. For S3-backed tracks returns a 302 redirect to a signed URL (TTL 30min). For local-backed tracks streams the file with Range support. Public tracks or share_token access; paid tracks require a license." ,
"produces" : [
"application/octet-stream"
] ,
"tags" : [
"Track"
] ,
"summary" : "Download a track" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"type" : "string" ,
"description" : "Grants access without authentication for a limited time" ,
"name" : "share_token" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"type" : "file"
}
} ,
"302" : {
"description" : "Location header points to signed S3 URL (s3-backed tracks)" ,
"schema" : {
"type" : "string"
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"403" : {
"description" : "No permission / license required" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track or file not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/history" : {
"get" : {
"description" : "Paginated audit log of modifications (metadata updates, version changes) for a track." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Get track history" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"type" : "integer" ,
"default" : 50 ,
"description" : "Items per page" ,
"name" : "limit" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 0 ,
"description" : "Offset" ,
"name" : "offset" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"history" : {
"type" : "array" ,
"items" : {
"type" : "object"
}
} ,
"limit" : {
"type" : "integer"
} ,
"offset" : {
"type" : "integer"
} ,
"total" : {
"type" : "integer"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/like" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Record a like from the authenticated user. Creates a grouped notification for the creator (F554)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Like a track" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
} ,
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Remove the authenticated user's like on the track (idempotent)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Unlike a track" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/likes" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Returns whether the current user has liked the track. The total like count is returned ONLY to the creator or an admin (privacy per ORIGIN_UI_UX_SYSTEM §13)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Get track like status" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "count is omitted for non-owners" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"count" : {
"type" : "integer"
} ,
"is_liked" : {
"type" : "boolean"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/lyrics" : {
"get" : {
"description" : "Returns the current lyrics for a track, or null if no lyrics exist." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Get track lyrics" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "lyrics may be null" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"lyrics" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
}
}
} ,
"put" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Replace the lyrics of a track. Caller must own the track or be admin." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Create or update track lyrics" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "Lyrics payload" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_core_track.UpdateLyricsRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"lyrics" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation / invalid id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"403" : {
"description" : "Not owner / no admin" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/play" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Persist a playback event with optional play_time so the creator's analytics dashboard tracks listening behaviour." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Record play event" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "Playback metadata (optional)" ,
"name" : "request" ,
"in" : "body" ,
"schema" : {
"$ref" : "#/definitions/internal_core_track.RecordPlayRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"id" : {
"type" : "string"
} ,
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id / body" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/repost" : {
"get" : {
"description" : "Returns whether the current user has reposted the track. Public (optional auth); unauthenticated callers get is_reposted=false." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Get repost status" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"is_reposted" : {
"type" : "boolean"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
} ,
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Add a track to the authenticated user's profile as a repost. Notifies the creator (F204) unless self-repost." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Repost a track" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
} ,
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Remove the authenticated user's repost of the track (idempotent)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Remove track repost" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/share" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Generate a tokenized share link for a track with given permission level and optional expiry." ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Create share link" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"description" : "Share parameters" ,
"name" : "request" ,
"in" : "body" ,
2026-04-23 22:45:10 +00:00
"required" : true ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/internal_core_track.CreateShareRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"share" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"403" : {
"description" : "Not owner" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/stats" : {
"get" : {
"description" : "Aggregated track stats: views, likes, comments, play time, downloads, average duration." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Get track statistics" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"stats" : {
"type" : "object"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/status" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Get the processing status of an uploaded track" ,
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Get Upload Status" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_response.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"progress" : {
"type" : "integer"
}
}
}
}
}
]
}
} ,
"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"
}
}
}
}
} ,
"/tracks/{id}/stream" : {
"get" : {
"description" : "Default playback path. S3-backed tracks return a 302 redirect to a signed URL (TTL 15min). Local-backed tracks are streamed via http.ServeContent with Range support. Always available, unlike /hls/* which is gated by HLSEnabled." ,
"produces" : [
"audio/*"
] ,
"tags" : [
"Track"
] ,
"summary" : "Stream a track (raw audio + Range)" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"type" : "string" ,
"description" : "Grants access without authentication" ,
"name" : "share_token" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"type" : "file"
}
} ,
"302" : {
"description" : "Location header points to signed S3 URL (s3-backed tracks)" ,
"schema" : {
"type" : "string"
}
} ,
"400" : {
"description" : "Invalid track id" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"403" : {
"description" : "No permission" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "Track or file not found" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/tracks/{id}/versions/{versionId}/restore" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Rollback a track to a previous version. Only the track owner can restore." ,
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
"summary" : "Restore track version" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Track UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"type" : "string" ,
"description" : "Version UUID" ,
"name" : "versionId" ,
"in" : "path" ,
"required" : true
2026-04-23 22:45:10 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"message" : {
"type" : "string"
2026-04-23 22:45:10 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Invalid id" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"403" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Not owner" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"404" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Track or version not found" ,
2026-04-23 22:45:10 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-04-23 22:45:10 +00:00
}
}
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"/tracks/{id}/waveform" : {
2026-01-07 18:39:21 +00:00
"get" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Returns a JSON peaks array used by the client to draw the audio waveform preview. 404 if waveform extraction is not complete yet." ,
2025-12-06 16:34:18 +00:00
"produces" : [
"application/json"
] ,
"tags" : [
"Track"
] ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"summary" : "Get track waveform" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"type" : "string" ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Track UUID" ,
2026-01-07 18:39:21 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
"200" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Waveform peaks JSON (tool-specific shape)" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"type" : "object"
2025-12-06 16:34:18 +00:00
}
} ,
"400" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"description" : "Invalid track id" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"404" : {
"description" : "Waveform not generated / track not found" ,
2026-01-07 18:39:21 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"500" : {
"description" : "Internal Error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/users" : {
"get" : {
"description" : "Get a paginated list of users with optional filtering" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
2026-01-07 18:39:21 +00:00
"application/json"
2025-12-06 16:34:18 +00:00
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"User"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "List Users" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"type" : "integer" ,
"default" : 1 ,
"description" : "Page number" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page" ,
"name" : "limit" ,
"in" : "query"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "string" ,
2026-01-07 18:39:21 +00:00
"description" : "Filter by role" ,
"name" : "role" ,
"in" : "query"
2025-12-06 16:34:18 +00:00
} ,
{
2026-01-07 18:39:21 +00:00
"type" : "boolean" ,
"description" : "Filter by active status" ,
"name" : "is_active" ,
"in" : "query"
2025-12-06 16:34:18 +00:00
} ,
{
2026-01-07 18:39:21 +00:00
"type" : "boolean" ,
"description" : "Filter by verified status" ,
"name" : "is_verified" ,
"in" : "query"
2025-12-06 16:34:18 +00:00
} ,
{
2026-01-07 18:39:21 +00:00
"type" : "string" ,
"description" : "Search by username, email, first_name, last_name" ,
"name" : "search" ,
"in" : "query"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "string" ,
2026-01-07 18:39:21 +00:00
"default" : "created_at" ,
"description" : "Sort field (created_at, username, email, last_login_at)" ,
"name" : "sort_by" ,
"in" : "query"
} ,
{
"type" : "string" ,
"default" : "desc" ,
"description" : "Sort order (asc, desc)" ,
"name" : "sort_order" ,
"in" : "query"
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"pagination" : {
"type" : "object"
2025-12-06 16:34:18 +00:00
} ,
2026-01-07 18:39:21 +00:00
"users" : {
"type" : "array"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
2026-01-07 18:39:21 +00:00
"500" : {
"description" : "Internal Error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/users/by-username/{username}" : {
"get" : {
"description" : "Get public profile information for a user by username" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"User"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Get Profile by Username" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"type" : "string" ,
"description" : "Username" ,
"name" : "username" ,
"in" : "path" ,
"required" : true
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
2026-01-07 18:39:21 +00:00
"200" : {
"description" : "OK" ,
2025-12-06 16:34:18 +00:00
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"profile" : {
"type" : "object"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
2026-01-07 18:39:21 +00:00
"description" : "Missing username" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"404" : {
"description" : "User not found" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/users/me" : {
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Permanently delete user account with anonymization, session revocation, audit log" ,
"tags" : [
"Users"
] ,
"summary" : "Delete account" ,
"parameters" : [
{
"description" : "Password, reason, confirm_text (must be DELETE)" ,
"name" : "body" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.DeleteAccountRequest"
}
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"type" : "object" ,
"additionalProperties" : true
}
} ,
"400" : {
"description" : "Bad Request" ,
"schema" : {
"type" : "object" ,
"additionalProperties" : true
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"type" : "object" ,
"additionalProperties" : true
}
} ,
"500" : {
"description" : "Internal Server Error" ,
"schema" : {
"type" : "object" ,
"additionalProperties" : true
}
}
}
}
} ,
"/users/me/privacy/opt-out" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Saves the user's Do Not Sell preference (CCPA compliance)" ,
"tags" : [
"Users"
] ,
"summary" : "CCPA Do Not Sell opt-out" ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"type" : "object" ,
"additionalProperties" : true
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"type" : "object" ,
"additionalProperties" : true
}
} ,
"500" : {
"description" : "Internal Server Error" ,
"schema" : {
"type" : "object" ,
"additionalProperties" : true
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-04-23 23:09:05 +00:00
"/users/search" : {
"get" : {
"description" : "Full-text search on users (username, display_name). Paginated. Public." ,
"produces" : [
"application/json"
] ,
"tags" : [
"User"
] ,
"summary" : "Search users" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Full-text query" ,
"name" : "q" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 1 ,
"description" : "Page" ,
"name" : "page" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page (max 100)" ,
"name" : "limit" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"pagination" : {
"type" : "object"
} ,
"users" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.User"
}
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation (bounds)" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/users/suggestions" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Returns suggested users to follow for the authenticated user. Declarative discovery — no behavioural scoring (CLAUDE.md rule 7)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"User"
] ,
"summary" : "Get follow suggestions" ,
"parameters" : [
{
"type" : "integer" ,
"default" : 10 ,
"description" : "Max items (max 50)" ,
"name" : "limit" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"users" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.User"
}
}
}
}
}
}
]
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/users/{id}" : {
"get" : {
"description" : "Get public profile information for a user" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"User"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Get Profile by ID" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"type" : "string" ,
"description" : "User ID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"profile" : {
"type" : "object"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
2026-01-07 18:39:21 +00:00
"description" : "Invalid ID" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"404" : {
"description" : "User not found" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
2026-01-07 18:39:21 +00:00
} ,
"put" : {
2025-12-06 16:34:18 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Update user profile details" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"User"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Update Profile" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
2026-01-07 18:39:21 +00:00
"description" : "User ID" ,
2025-12-06 16:34:18 +00:00
"name" : "id" ,
2026-01-07 18:39:21 +00:00
"in" : "path" ,
"required" : true
} ,
{
"description" : "Profile Data" ,
"name" : "profile" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.UpdateProfileRequest"
2026-01-07 18:39:21 +00:00
}
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"profile" : {
2025-12-06 16:34:18 +00:00
"type" : "object"
}
}
}
}
}
]
}
} ,
2026-01-07 18:39:21 +00:00
"400" : {
"description" : "Validation Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
2025-12-06 16:34:18 +00:00
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"403" : {
"description" : "Forbidden" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
2026-01-07 18:39:21 +00:00
} ,
"delete" : {
2025-12-06 16:34:18 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Soft delete a user (only user owner or admin can delete)" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"User"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Delete user" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
2026-01-07 18:39:21 +00:00
"description" : "User ID" ,
"name" : "id" ,
2025-12-06 16:34:18 +00:00
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
2026-01-07 18:39:21 +00:00
"description" : "User deleted successfully" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"400" : {
"description" : "Invalid ID" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
"description" : "Forbidden - Not user owner or admin" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"404" : {
2026-01-07 18:39:21 +00:00
"description" : "User not found" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-04-23 23:09:05 +00:00
"/users/{id}/block" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Authenticated user blocks target user (hides their content, prevents follows). Cannot self-block." ,
"produces" : [
"application/json"
] ,
"tags" : [
"User"
] ,
"summary" : "Block user" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Target user UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation / self-block" ,
"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"
}
}
}
} ,
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Authenticated user unblocks target user (idempotent)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"User"
] ,
"summary" : "Unblock user" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Target user UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid id" ,
"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"
}
}
}
}
} ,
2026-02-15 15:18:13 +00:00
"/users/{id}/completion" : {
2025-12-06 16:34:18 +00:00
"get" : {
2026-02-15 15:18:13 +00:00
"description" : "Get profile completion percentage and missing fields" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-02-15 15:18:13 +00:00
"User"
2025-12-06 16:34:18 +00:00
] ,
2026-02-15 15:18:13 +00:00
"summary" : "Get Profile Completion" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
2026-02-15 15:18:13 +00:00
"description" : "User ID" ,
2025-12-06 16:34:18 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
2026-02-15 15:18:13 +00:00
"type" : "object"
2025-12-06 16:34:18 +00:00
}
}
}
]
}
} ,
"400" : {
2026-02-15 15:18:13 +00:00
"description" : "Invalid ID" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"403" : {
2026-02-15 15:18:13 +00:00
"description" : "Forbidden" ,
2026-01-07 18:39:21 +00:00
"schema" : {
2026-04-23 23:09:05 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
}
} ,
"/users/{id}/follow" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Authenticated user follows target user. Creates a notification (F554 grouped) for the target." ,
"produces" : [
"application/json"
] ,
"tags" : [
"User"
] ,
"summary" : "Follow user" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Target user UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid id" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"404" : {
"description" : "User not found" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
}
}
} ,
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Authenticated user stops following target user (idempotent)." ,
"produces" : [
"application/json"
] ,
"tags" : [
"User"
] ,
"summary" : "Unfollow user" ,
"parameters" : [
{
"type" : "string" ,
"description" : "Target user UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Invalid id" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
2026-01-07 18:39:21 +00:00
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"/users/{id}/likes" : {
"get" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Returns paginated tracks the given user has liked. Used for profile \"Likes\" tab." ,
"produces" : [
"application/json"
] ,
"tags" : [
"User"
] ,
"summary" : "List tracks liked by a user" ,
"parameters" : [
{
"type" : "string" ,
"description" : "User UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page (max 100)" ,
"name" : "limit" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 0 ,
"description" : "Offset for pagination" ,
"name" : "offset" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"limit" : {
"type" : "integer"
} ,
"offset" : {
"type" : "integer"
} ,
"total" : {
"type" : "integer"
} ,
"tracks" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
}
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
"/users/{id}/reposts" : {
"get" : {
"description" : "Returns paginated tracks the user has reposted. Used for profile \"Reposts\" tab." ,
"produces" : [
"application/json"
] ,
"tags" : [
"User"
] ,
"summary" : "List tracks reposted by a user" ,
"parameters" : [
{
"type" : "string" ,
"description" : "User UUID" ,
"name" : "id" ,
"in" : "path" ,
"required" : true
} ,
{
"type" : "integer" ,
"default" : 20 ,
"description" : "Items per page (max 100)" ,
"name" : "limit" ,
"in" : "query"
} ,
{
"type" : "integer" ,
"default" : 0 ,
"description" : "Offset for pagination" ,
"name" : "offset" ,
"in" : "query"
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
"limit" : {
"type" : "integer"
} ,
"offset" : {
"type" : "integer"
} ,
"total" : {
"type" : "integer"
} ,
"tracks" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
}
}
}
}
}
}
]
}
} ,
"400" : {
"description" : "Validation" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
} ,
"500" : {
"description" : "Internal Error" ,
"schema" : {
"$ref" : "#/definitions/veza-backend-api_internal_handlers.APIResponse"
}
}
}
}
} ,
2026-02-15 15:18:13 +00:00
"/validate" : {
"post" : {
"description" : "Validates request data against known DTO types without executing the actual operation" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-02-15 15:18:13 +00:00
"Validation"
2025-12-06 16:34:18 +00:00
] ,
2026-02-15 15:18:13 +00:00
"summary" : "Validate request body" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-02-15 15:18:13 +00:00
"description" : "Validation request with type and data" ,
"name" : "request" ,
"in" : "body" ,
"required" : true ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.ValidateRequest"
2026-02-15 15:18:13 +00:00
}
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
"200" : {
2026-02-15 15:18:13 +00:00
"description" : "Validation result" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.ValidateResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"400" : {
2026-02-15 15:18:13 +00:00
"description" : "Invalid request format" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
2026-01-07 18:39:21 +00:00
}
} ,
"/webhooks" : {
"get" : {
2025-12-06 16:34:18 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Get a list of all webhooks registered by the current user" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Webhook"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "List webhooks" ,
2025-12-06 16:34:18 +00:00
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"webhooks" : {
"type" : "array"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"500" : {
"description" : "Internal server error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
2026-01-07 18:39:21 +00:00
} ,
"post" : {
2025-12-06 16:34:18 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Register a new webhook for receiving events" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Webhook"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Register webhook" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
2026-01-07 18:39:21 +00:00
"description" : "Webhook registration data" ,
"name" : "webhook" ,
"in" : "body" ,
"required" : true ,
"schema" : {
"type" : "object"
}
2025-12-06 16:34:18 +00:00
}
] ,
"responses" : {
2026-01-07 18:39:21 +00:00
"201" : {
"description" : "Created" ,
2025-12-06 16:34:18 +00:00
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"webhook" : {
"type" : "object"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
2026-01-07 18:39:21 +00:00
"description" : "Validation error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"500" : {
"description" : "Internal server error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/webhooks/stats" : {
2025-12-06 16:34:18 +00:00
"get" : {
2026-01-07 18:39:21 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Get statistics for webhook delivery and performance" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Webhook"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Get webhook statistics" ,
2025-12-06 16:34:18 +00:00
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"stats" : {
2025-12-06 16:34:18 +00:00
"type" : "object"
}
}
}
}
}
]
}
} ,
2026-01-07 18:39:21 +00:00
"401" : {
"description" : "Unauthorized" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"500" : {
"description" : "Internal server error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/webhooks/{id}" : {
"delete" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Delete a webhook by ID" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Webhook"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Delete webhook" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
2026-01-07 18:39:21 +00:00
"description" : "Webhook ID" ,
2025-12-06 16:34:18 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"message" : {
"type" : "string"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
2026-01-07 18:39:21 +00:00
"description" : "Invalid webhook ID" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"404" : {
2026-01-07 18:39:21 +00:00
"description" : "Webhook not found" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
2026-01-07 18:39:21 +00:00
}
} ,
"/webhooks/{id}/regenerate-key" : {
"post" : {
2025-12-06 16:34:18 +00:00
"security" : [
{
"BearerAuth" : [ ]
}
] ,
2026-01-07 18:39:21 +00:00
"description" : "Generate a new API key for a webhook (invalidates the old one)" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Webhook"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Regenerate webhook API key" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
2026-01-07 18:39:21 +00:00
"description" : "Webhook ID" ,
2025-12-06 16:34:18 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
"type" : "object" ,
"properties" : {
2026-01-07 18:39:21 +00:00
"api_key" : {
"type" : "string"
} ,
"message" : {
"type" : "string"
2025-12-06 16:34:18 +00:00
}
}
}
}
}
]
}
} ,
"400" : {
2026-01-07 18:39:21 +00:00
"description" : "Invalid webhook ID" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"404" : {
"description" : "Webhook not found" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2026-01-07 18:39:21 +00:00
}
} ,
"500" : {
"description" : "Internal server error" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
} ,
2026-01-07 18:39:21 +00:00
"/webhooks/{id}/test" : {
"post" : {
"security" : [
{
"BearerAuth" : [ ]
}
] ,
"description" : "Send a test event to a webhook to verify it's working" ,
2025-12-06 16:34:18 +00:00
"consumes" : [
"application/json"
] ,
"produces" : [
"application/json"
] ,
"tags" : [
2026-01-07 18:39:21 +00:00
"Webhook"
2025-12-06 16:34:18 +00:00
] ,
2026-01-07 18:39:21 +00:00
"summary" : "Test webhook" ,
2025-12-06 16:34:18 +00:00
"parameters" : [
{
"type" : "string" ,
2026-01-07 18:39:21 +00:00
"description" : "Webhook ID" ,
2025-12-06 16:34:18 +00:00
"name" : "id" ,
"in" : "path" ,
"required" : true
}
] ,
"responses" : {
"200" : {
"description" : "OK" ,
"schema" : {
"allOf" : [
{
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
} ,
{
"type" : "object" ,
"properties" : {
"data" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"properties" : {
"message" : {
"type" : "string"
}
}
2025-12-06 16:34:18 +00:00
}
}
}
]
}
} ,
"400" : {
2026-01-07 18:39:21 +00:00
"description" : "Invalid webhook ID" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
"401" : {
"description" : "Unauthorized" ,
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
} ,
2026-01-07 18:39:21 +00:00
"404" : {
"description" : "Webhook not found" ,
2025-12-06 16:34:18 +00:00
"schema" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.APIResponse"
2025-12-06 16:34:18 +00:00
}
}
}
}
2025-12-03 19:29:37 +00:00
}
} ,
"definitions" : {
2026-04-23 22:45:10 +00:00
"internal_core_track.BatchDeleteRequest" : {
"type" : "object" ,
"required" : [
"track_ids"
] ,
"properties" : {
"track_ids" : {
"type" : "array" ,
"minItems" : 1 ,
"items" : {
"type" : "string"
}
}
}
} ,
"internal_core_track.BatchUpdateRequest" : {
"type" : "object" ,
"required" : [
"track_ids" ,
"updates"
] ,
"properties" : {
"track_ids" : {
"type" : "array" ,
"minItems" : 1 ,
"items" : {
"type" : "string"
}
} ,
"updates" : {
"type" : "object" ,
"additionalProperties" : true
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_core_track.CompleteChunkedUploadRequest" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"required" : [
2026-02-27 19:23:10 +00:00
"upload_id"
2025-12-06 16:34:18 +00:00
] ,
"properties" : {
2026-02-27 19:23:10 +00:00
"upload_id" : {
2026-02-15 15:18:13 +00:00
"type" : "string"
2025-12-06 16:34:18 +00:00
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"internal_core_track.CreateShareRequest" : {
"type" : "object" ,
"required" : [
"permissions"
] ,
"properties" : {
"expires_at" : {
"type" : "string"
} ,
"permissions" : {
"type" : "string" ,
"enum" : [
"read" ,
"write" ,
"admin"
]
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_core_track.InitiateChunkedUploadRequest" : {
2026-02-15 15:18:13 +00:00
"type" : "object" ,
"required" : [
2026-02-27 19:23:10 +00:00
"filename" ,
"total_chunks" ,
"total_size"
2026-02-15 15:18:13 +00:00
] ,
"properties" : {
2026-02-27 19:23:10 +00:00
"filename" : {
2026-02-15 15:18:13 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"total_chunks" : {
"type" : "integer" ,
"minimum" : 1
2026-02-15 15:18:13 +00:00
} ,
2026-02-27 19:23:10 +00:00
"total_size" : {
"type" : "integer" ,
"minimum" : 1
2025-12-06 16:34:18 +00:00
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"internal_core_track.RecordPlayRequest" : {
"type" : "object" ,
"properties" : {
"play_time" : {
"type" : "integer" ,
"minimum" : 0
}
}
} ,
"internal_core_track.StreamCallbackRequest" : {
"type" : "object" ,
"required" : [
"status"
] ,
"properties" : {
"error" : {
"type" : "string"
} ,
"manifest_url" : {
"type" : "string"
} ,
"status" : {
"type" : "string" ,
"enum" : [
"completed" ,
"failed" ,
"processing"
]
}
}
} ,
2026-04-23 22:45:10 +00:00
"internal_core_track.UpdateLyricsRequest" : {
"type" : "object" ,
"properties" : {
"content" : {
"type" : "string"
}
}
} ,
"internal_core_track.UpdateTrackRequest" : {
"type" : "object" ,
"properties" : {
"album" : {
"type" : "string" ,
"maxLength" : 255
} ,
"artist" : {
"type" : "string" ,
"maxLength" : 255
} ,
"bpm" : {
"type" : "integer" ,
"maximum" : 300 ,
"minimum" : 0
} ,
"genre" : {
"description" : "legacy, single" ,
"type" : "string" ,
"maxLength" : 100
} ,
"genres" : {
"description" : "v0.10.1: max 3, taxonomy slugs" ,
"type" : "array" ,
"items" : {
"type" : "string"
}
} ,
"is_public" : {
"type" : "boolean"
} ,
"musical_key" : {
"type" : "string" ,
"maxLength" : 10
} ,
"tags" : {
"description" : "v0.10.1: max 10, 30 chars each" ,
"type" : "array" ,
"items" : {
"type" : "string"
}
} ,
"title" : {
"type" : "string" ,
"maxLength" : 255 ,
"minLength" : 1
} ,
"year" : {
"type" : "integer" ,
"maximum" : 2100 ,
"minimum" : 1900
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.APIResponse" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
"data" : { } ,
"error" : { } ,
"success" : {
"type" : "boolean"
}
}
} ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"internal_handlers.AddCollaboratorRequest" : {
"type" : "object" ,
"required" : [
"permission" ,
"user_id"
] ,
"properties" : {
"permission" : {
"type" : "string" ,
"enum" : [
"read" ,
"write" ,
"admin"
]
} ,
"user_id" : {
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.CreateCommentRequest" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"required" : [
"content"
] ,
"properties" : {
"content" : {
"type" : "string" ,
"maxLength" : 5000 ,
"minLength" : 1
} ,
"parent_id" : {
"type" : "string"
2026-04-23 22:45:10 +00:00
} ,
"timestamp" : {
"description" : "Position in seconds (0 = top-level, no specific time)" ,
"type" : "number"
2026-01-07 18:39:21 +00:00
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.CreateOrderRequest" : {
2025-12-03 19:29:37 +00:00
"type" : "object" ,
"required" : [
"items"
] ,
"properties" : {
"items" : {
"type" : "array" ,
"minItems" : 1 ,
"items" : {
"type" : "object" ,
"required" : [
"product_id"
] ,
"properties" : {
"product_id" : {
"type" : "string"
}
}
}
2026-02-27 19:23:10 +00:00
} ,
"promo_code" : {
"type" : "string" ,
"maxLength" : 50
2025-12-03 19:29:37 +00:00
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.CreatePlaylistRequest" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"required" : [
"title"
] ,
"properties" : {
"description" : {
2026-01-07 18:39:21 +00:00
"type" : "string" ,
"maxLength" : 1000
2025-12-06 16:34:18 +00:00
} ,
"is_public" : {
"type" : "boolean"
} ,
"title" : {
"type" : "string" ,
"maxLength" : 200 ,
"minLength" : 1
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.CreateProductRequest" : {
2025-12-03 19:29:37 +00:00
"type" : "object" ,
"required" : [
"price" ,
"product_type" ,
"title"
] ,
"properties" : {
2026-02-27 19:23:10 +00:00
"bpm" : {
"description" : "v0.401 M1" ,
"type" : "integer" ,
"maximum" : 300 ,
"minimum" : 1
} ,
"category" : {
"type" : "string" ,
"enum" : [
"sample" ,
"beat" ,
"preset" ,
"pack"
]
} ,
2025-12-03 19:29:37 +00:00
"description" : {
2025-12-06 16:21:59 +00:00
"type" : "string" ,
"maxLength" : 2000
2025-12-03 19:29:37 +00:00
} ,
"license_type" : {
2025-12-06 16:21:59 +00:00
"type" : "string" ,
"enum" : [
"standard" ,
"exclusive" ,
"commercial"
]
2025-12-03 19:29:37 +00:00
} ,
2026-02-27 19:23:10 +00:00
"licenses" : {
"description" : "v0.401 M2: Product licenses (streaming, personal, commercial, exclusive)" ,
"type" : "array" ,
"items" : {
"type" : "object" ,
"required" : [
"license_type" ,
"price_cents"
] ,
"properties" : {
"license_type" : {
"type" : "string" ,
"enum" : [
"streaming" ,
"personal" ,
"commercial" ,
"exclusive"
]
} ,
"price_cents" : {
"type" : "integer" ,
"minimum" : 0
} ,
"terms_text" : {
"type" : "string"
}
}
}
} ,
"musical_key" : {
"type" : "string" ,
"maxLength" : 10
} ,
2025-12-03 19:29:37 +00:00
"price" : {
"type" : "number" ,
"minimum" : 0
} ,
"product_type" : {
"type" : "string" ,
"enum" : [
"track" ,
"pack" ,
"service"
]
} ,
"title" : {
2025-12-06 16:21:59 +00:00
"type" : "string" ,
"maxLength" : 200 ,
"minLength" : 3
2025-12-03 19:29:37 +00:00
} ,
"track_id" : {
"description" : "UUID string" ,
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.DashboardResponse" : {
2026-02-15 15:18:13 +00:00
"type" : "object" ,
"properties" : {
"library_preview" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.LibraryPreview"
2026-02-15 15:18:13 +00:00
} ,
"recent_activity" : {
"type" : "array" ,
"items" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.RecentActivity"
2026-02-15 15:18:13 +00:00
}
} ,
"stats" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.DashboardStats"
2026-02-15 15:18:13 +00:00
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.DashboardStats" : {
2026-02-15 15:18:13 +00:00
"type" : "object" ,
"properties" : {
"active_friends" : {
"type" : "integer"
} ,
"active_friends_change" : {
"type" : "string"
} ,
"favorites" : {
"type" : "integer"
} ,
"favorites_change" : {
"type" : "string"
} ,
"messages_sent" : {
"type" : "integer"
} ,
"messages_sent_change" : {
"type" : "string"
} ,
"period" : {
"type" : "string"
} ,
"tracks_played" : {
"type" : "integer"
} ,
"tracks_played_change" : {
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.DeleteAccountRequest" : {
"type" : "object" ,
"required" : [
"confirm_text" ,
"password"
] ,
"properties" : {
"confirm_text" : {
"type" : "string"
} ,
2026-04-23 22:45:10 +00:00
"keep_public_tracks" : {
"description" : "If true, public tracks remain (attributed to deleted account)" ,
"type" : "boolean"
} ,
2026-02-27 19:23:10 +00:00
"password" : {
"type" : "string"
} ,
"reason" : {
"type" : "string"
}
}
} ,
"internal_handlers.DisableTwoFactorRequest" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"required" : [
"password"
] ,
"properties" : {
"password" : {
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.FrontendLogRequest" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"properties" : {
"context" : {
"type" : "object" ,
"additionalProperties" : true
} ,
"data" : { } ,
"level" : {
"type" : "string"
} ,
"message" : {
"type" : "string"
} ,
"timestamp" : {
"type" : "string"
}
}
} ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"internal_handlers.ImportPlaylistRequest" : {
"type" : "object" ,
"properties" : {
"playlist" : {
"type" : "object" ,
"properties" : {
"description" : {
"type" : "string"
} ,
"is_public" : {
"type" : "boolean"
} ,
"title" : {
"type" : "string"
}
}
} ,
"tracks" : {
"type" : "array" ,
"items" : {
"type" : "object" ,
"properties" : {
"id" : {
"type" : "string"
}
}
}
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.LibraryPreview" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"properties" : {
2026-02-15 15:18:13 +00:00
"has_more" : {
"type" : "boolean"
2026-01-07 18:39:21 +00:00
} ,
2026-02-15 15:18:13 +00:00
"items" : {
"type" : "array" ,
"items" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/internal_handlers.TrackPreview"
2026-02-15 15:18:13 +00:00
}
} ,
"total_count" : {
"type" : "integer"
2026-01-07 18:39:21 +00:00
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.RecentActivity" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"properties" : {
2026-02-15 15:18:13 +00:00
"description" : {
"type" : "string"
2026-01-07 18:39:21 +00:00
} ,
2026-02-15 15:18:13 +00:00
"icon" : {
"type" : "string"
} ,
"id" : {
"type" : "string"
} ,
"metadata" : {
"type" : "object" ,
"additionalProperties" : true
} ,
"timestamp" : {
"type" : "string"
} ,
"title" : {
"type" : "string"
} ,
"type" : {
"type" : "string"
2026-01-07 18:39:21 +00:00
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.ReorderTracksRequest" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"required" : [
"track_ids"
] ,
"properties" : {
"track_ids" : {
"description" : "Changed to []uuid.UUID" ,
"type" : "array" ,
"minItems" : 1 ,
"items" : {
"type" : "string"
}
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.SetupTwoFactorResponse" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"properties" : {
"qr_code_url" : {
"type" : "string"
} ,
"recovery_codes" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
} ,
"secret" : {
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.StreamTokenResponse" : {
"type" : "object" ,
"properties" : {
"expires_in" : {
"description" : "seconds" ,
"type" : "integer"
} ,
"token" : {
"type" : "string"
}
}
} ,
"internal_handlers.TrackPreview" : {
2026-02-15 15:18:13 +00:00
"type" : "object" ,
"properties" : {
"artist" : {
"type" : "string"
} ,
"cover_art_path" : {
"type" : "string"
} ,
"created_at" : {
"type" : "string"
} ,
"duration" : {
"type" : "integer"
} ,
"id" : {
"type" : "string"
} ,
"like_count" : {
"type" : "integer"
} ,
"play_count" : {
"type" : "integer"
} ,
"title" : {
"type" : "string"
}
}
} ,
feat(openapi): annotate playlist handler gap — 12 endpoints (v1.0.8 B-annot)
Third batch. Fills the playlist_handler.go gap (was 8/24 annotated,
now 20/24). Covers the functionality consumed by the frontend
playlists service: import, favoris, share tokens, collaborators,
analytics, search, recommendations, duplication.
Handlers annotated:
- ImportPlaylist — POST /playlists/import
- GetFavorisPlaylist — GET /playlists/favoris
- GetPlaylistByShareToken — GET /playlists/shared/{token}
- SearchPlaylists — GET /playlists/search
- GetRecommendations — GET /playlists/recommendations
- GetPlaylistStats — GET /playlists/{id}/analytics
- AddCollaborator — POST /playlists/{id}/collaborators
- GetCollaborators — GET /playlists/{id}/collaborators
- UpdateCollaboratorPermission — PUT /playlists/{id}/collaborators/{userId}
- RemoveCollaborator — DELETE /playlists/{id}/collaborators/{userId}
- CreateShareLink — POST /playlists/{id}/share
- DuplicatePlaylist — POST /playlists/{id}/duplicate
Not annotated (unrouted, survey false positives): FollowPlaylist,
UnfollowPlaylist — no route references in internal/api/routes_*.go.
Left unannotated to avoid polluting the spec with dead handlers.
Marketplace gap originally planned for this batch is deferred to
v1.0.9: the 13 remaining handlers (UploadProductPreview, reviews,
licenses, sell stats, refund, invoice) don't block the B-2 frontend
migration (auth/users/tracks/playlists only), so they will be done
after v1.0.8 ships. Task #48 updated to reflect.
Spec coverage:
/playlists/* paths: 5 → 15
make openapi: ✅ valid
go build ./...: ✅
Next: profile_handler.go + auth/handler.go to finish the B-2 spec
surface (users endpoints), then regen orval and migrate 4 services.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 23:04:15 +00:00
"internal_handlers.UpdateCollaboratorPermissionRequest" : {
"type" : "object" ,
"required" : [
"permission"
] ,
"properties" : {
"permission" : {
"type" : "string" ,
"enum" : [
"read" ,
"write" ,
"admin"
]
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.UpdateCommentRequest" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"required" : [
"content"
] ,
"properties" : {
"content" : {
"type" : "string" ,
"maxLength" : 5000 ,
"minLength" : 1
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.UpdatePlaylistRequest" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
"description" : {
2026-01-07 18:39:21 +00:00
"type" : "string" ,
"maxLength" : 1000
2025-12-06 16:34:18 +00:00
} ,
"is_public" : {
"type" : "boolean"
} ,
"title" : {
"type" : "string" ,
"maxLength" : 200 ,
"minLength" : 1
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.UpdateProductRequest" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"properties" : {
2026-02-27 19:23:10 +00:00
"bpm" : {
"type" : "integer" ,
"maximum" : 300 ,
"minimum" : 1
} ,
"category" : {
"type" : "string" ,
"enum" : [
"sample" ,
"beat" ,
"preset" ,
"pack"
]
} ,
2026-01-07 18:39:21 +00:00
"description" : {
"type" : "string" ,
"maxLength" : 2000
} ,
2026-02-27 19:23:10 +00:00
"licenses" : {
"description" : "v0.401 M2: Product licenses" ,
"type" : "array" ,
"items" : {
"type" : "object" ,
"required" : [
"license_type" ,
"price_cents"
] ,
"properties" : {
"license_type" : {
"type" : "string" ,
"enum" : [
"streaming" ,
"personal" ,
"commercial" ,
"exclusive"
]
} ,
"price_cents" : {
"type" : "integer" ,
"minimum" : 0
} ,
"terms_text" : {
"type" : "string"
}
}
}
} ,
"musical_key" : {
"type" : "string" ,
"maxLength" : 10
} ,
2026-01-07 18:39:21 +00:00
"price" : {
"type" : "number" ,
"minimum" : 0
} ,
"status" : {
"type" : "string" ,
"enum" : [
"draft" ,
"active" ,
"archived"
]
} ,
"title" : {
"type" : "string" ,
"maxLength" : 200 ,
"minLength" : 3
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.UpdateProfileRequest" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
2026-02-27 19:23:10 +00:00
"banner_url" : {
"type" : "string" ,
"maxLength" : 2048
} ,
2025-12-06 16:34:18 +00:00
"bio" : {
"type" : "string" ,
"maxLength" : 500
} ,
"birthdate" : {
"type" : "string"
} ,
"first_name" : {
"type" : "string" ,
"maxLength" : 100
} ,
"gender" : {
"type" : "string" ,
"enum" : [
"Male" ,
"Female" ,
"Other" ,
"Prefer not to say"
]
} ,
2026-02-27 19:23:10 +00:00
"is_public" : {
"type" : "boolean"
} ,
2025-12-06 16:34:18 +00:00
"last_name" : {
"type" : "string" ,
"maxLength" : 100
} ,
"location" : {
"type" : "string" ,
"maxLength" : 100
} ,
2026-01-07 18:39:21 +00:00
"social_links" : {
"type" : "object" ,
"additionalProperties" : true
} ,
2025-12-06 16:34:18 +00:00
"username" : {
"type" : "string" ,
"maxLength" : 30 ,
"minLength" : 3
}
}
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.ValidateRequest" : {
"type" : "object" ,
"required" : [
"data" ,
"type"
] ,
"properties" : {
"data" : {
"description" : "The data to validate" ,
"type" : "array" ,
"items" : {
"type" : "integer"
}
} ,
"type" : {
"description" : "e.g., \"RegisterRequest\", \"LoginRequest\"" ,
"type" : "string"
}
}
2026-02-15 15:18:13 +00:00
} ,
2026-02-27 19:23:10 +00:00
"internal_handlers.ValidateResponse" : {
2026-02-15 15:18:13 +00:00
"type" : "object" ,
"properties" : {
"errors" : {
"type" : "array" ,
"items" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_dto.ValidationError"
2026-02-15 15:18:13 +00:00
}
} ,
"message" : {
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"valid" : {
"type" : "boolean"
}
}
} ,
"internal_handlers.VerifyTwoFactorRequest" : {
"type" : "object" ,
"required" : [
"code" ,
"secret"
] ,
"properties" : {
"code" : {
"description" : "TOTP code to verify" ,
"type" : "string"
} ,
"secret" : {
"description" : "Secret from setup step" ,
"type" : "string"
}
}
} ,
"veza-backend-api_internal_core_marketplace.LicenseType" : {
"type" : "string" ,
"enum" : [
"basic" ,
"premium" ,
"exclusive"
] ,
"x-enum-varnames" : [
"LicenseBasic" ,
"LicensePremium" ,
"LicenseExclusive"
]
} ,
"veza-backend-api_internal_core_marketplace.Order" : {
"type" : "object" ,
"properties" : {
"buyer_id" : {
"type" : "string"
} ,
"created_at" : {
"type" : "string"
} ,
"currency" : {
"type" : "string"
} ,
"discount_amount_cents" : {
"type" : "integer"
} ,
"hyperswitch_payment_id" : {
"type" : "string"
} ,
"id" : {
"type" : "string"
} ,
"items" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.OrderItem"
}
} ,
"payment_intent" : {
"description" : "Legacy / Stripe PaymentIntent ID" ,
"type" : "string"
} ,
"payment_status" : {
"description" : "Hyperswitch payment status" ,
"type" : "string"
} ,
"promo_code_id" : {
"type" : "string"
} ,
2026-04-23 22:45:10 +00:00
"refund_deadline" : {
"description" : "v0.12.0: 14-day refund deadline" ,
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"status" : {
"description" : "pending, completed, failed, refunded" ,
"type" : "string"
} ,
"total_amount" : {
"type" : "number"
} ,
"updated_at" : {
"type" : "string"
}
}
} ,
"veza-backend-api_internal_core_marketplace.OrderItem" : {
"type" : "object" ,
"properties" : {
"id" : {
"type" : "string"
} ,
"order_id" : {
"type" : "string"
} ,
"price" : {
"type" : "number"
} ,
"product_id" : {
"type" : "string"
}
}
} ,
"veza-backend-api_internal_core_marketplace.Product" : {
"type" : "object" ,
"properties" : {
"avg_rating" : {
"description" : "v0.403 R1: Computed from product_reviews (not stored in DB)" ,
"type" : "number"
} ,
"bpm" : {
"description" : "v0.401 M1: Métadonnées musicales et catégorie" ,
"type" : "integer"
} ,
"category" : {
"description" : "sample, beat, preset, pack" ,
"type" : "string"
} ,
"created_at" : {
"type" : "string"
} ,
"currency" : {
"type" : "string"
} ,
"description" : {
"type" : "string"
} ,
"id" : {
"type" : "string"
} ,
"images" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.ProductImage"
}
} ,
"license_type" : {
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.LicenseType"
} ,
"licenses" : {
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.ProductLicense"
}
} ,
"musical_key" : {
"type" : "string"
} ,
"previews" : {
"description" : "Relations" ,
"type" : "array" ,
"items" : {
"$ref" : "#/definitions/veza-backend-api_internal_core_marketplace.ProductPreview"
}
} ,
"price" : {
"type" : "number"
} ,
"product_type" : {
"description" : "\"track\", \"pack\", \"service\"" ,
"type" : "string"
} ,
"review_count" : {
"type" : "integer"
} ,
"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"
}
}
} ,
"veza-backend-api_internal_core_marketplace.ProductImage" : {
"type" : "object" ,
"properties" : {
"created_at" : {
"type" : "string"
} ,
"id" : {
"type" : "string"
} ,
"product_id" : {
"type" : "string"
} ,
"sort_order" : {
"type" : "integer"
} ,
"url" : {
"type" : "string"
}
}
} ,
"veza-backend-api_internal_core_marketplace.ProductLicense" : {
"type" : "object" ,
"properties" : {
"created_at" : {
"type" : "string"
} ,
"id" : {
"type" : "string"
} ,
"license_type" : {
"description" : "streaming, personal, commercial, exclusive" ,
"type" : "string"
} ,
"price_cents" : {
"type" : "integer"
} ,
"product_id" : {
"type" : "string"
} ,
"terms_text" : {
"type" : "string"
2026-02-15 15:18:13 +00:00
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_core_marketplace.ProductPreview" : {
2026-01-07 18:39:21 +00:00
"type" : "object" ,
"properties" : {
2026-02-27 19:23:10 +00:00
"created_at" : {
2026-01-07 18:39:21 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"duration_sec" : {
"type" : "integer"
} ,
"file_path" : {
"type" : "string"
} ,
"id" : {
"type" : "string"
} ,
"product_id" : {
2026-01-07 18:39:21 +00:00
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_core_marketplace.ProductStatus" : {
2025-12-03 19:29:37 +00:00
"type" : "string" ,
"enum" : [
2026-02-27 19:23:10 +00:00
"draft" ,
"active" ,
"archived"
2025-12-03 19:29:37 +00:00
] ,
"x-enum-varnames" : [
2026-02-27 19:23:10 +00:00
"ProductStatusDraft" ,
"ProductStatusActive" ,
"ProductStatusArchived"
2025-12-03 19:29:37 +00:00
]
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_dto.LoginRequest" : {
2025-12-03 19:29:37 +00:00
"type" : "object" ,
2026-02-27 19:23:10 +00:00
"required" : [
"email" ,
"password"
] ,
2025-12-03 19:29:37 +00:00
"properties" : {
2026-02-27 19:23:10 +00:00
"email" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"password" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"remember_me" : {
"type" : "boolean"
}
}
} ,
"veza-backend-api_internal_dto.LoginResponse" : {
"type" : "object" ,
"properties" : {
"requires_2fa" : {
"description" : "BE-API-001: Flag indicating 2FA is required" ,
"type" : "boolean"
2025-12-03 19:29:37 +00:00
} ,
2026-02-27 19:23:10 +00:00
"token" : {
"$ref" : "#/definitions/veza-backend-api_internal_dto.TokenResponse"
2026-02-15 15:18:13 +00:00
} ,
2026-02-27 19:23:10 +00:00
"user" : {
"$ref" : "#/definitions/veza-backend-api_internal_dto.UserResponse"
}
}
} ,
"veza-backend-api_internal_dto.RefreshRequest" : {
"type" : "object" ,
"required" : [
"refresh_token"
] ,
"properties" : {
"refresh_token" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
2026-02-27 19:23:10 +00:00
}
}
} ,
"veza-backend-api_internal_dto.RegisterRequest" : {
"type" : "object" ,
"required" : [
"email" ,
"password" ,
"password_confirmation"
] ,
"properties" : {
"email" : {
2026-02-15 15:18:13 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"password" : {
"type" : "string" ,
"minLength" : 12
2025-12-03 19:29:37 +00:00
} ,
2026-02-27 19:23:10 +00:00
"password_confirmation" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"username" : {
"type" : "string" ,
"maxLength" : 50 ,
"minLength" : 3
}
}
} ,
"veza-backend-api_internal_dto.RegisterResponse" : {
"type" : "object" ,
"properties" : {
"token" : {
"$ref" : "#/definitions/veza-backend-api_internal_dto.TokenResponse"
2025-12-03 19:29:37 +00:00
} ,
2026-02-27 19:23:10 +00:00
"user" : {
"$ref" : "#/definitions/veza-backend-api_internal_dto.UserResponse"
2025-12-03 19:29:37 +00:00
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_dto.ResendVerificationRequest" : {
2025-12-03 19:29:37 +00:00
"type" : "object" ,
2026-02-27 19:23:10 +00:00
"required" : [
"email"
] ,
2025-12-03 19:29:37 +00:00
"properties" : {
2026-02-27 19:23:10 +00:00
"email" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
2026-02-27 19:23:10 +00:00
}
}
} ,
"veza-backend-api_internal_dto.TokenResponse" : {
"type" : "object" ,
"properties" : {
"access_token" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"expires_in" : {
"type" : "integer"
2025-12-03 19:29:37 +00:00
} ,
2026-02-27 19:23:10 +00:00
"refresh_token" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_dto.UserResponse" : {
2025-12-03 19:29:37 +00:00
"type" : "object" ,
"properties" : {
2026-02-27 19:23:10 +00:00
"email" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
} ,
"id" : {
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"username" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
2026-02-27 19:23:10 +00:00
}
}
} ,
"veza-backend-api_internal_dto.ValidationError" : {
"type" : "object" ,
"properties" : {
"field" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"message" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"value" : {
2025-12-03 19:29:37 +00:00
"type" : "string"
}
}
} ,
feat(openapi): annotate track subsystem (social/analytics/search/hls/waveform) — v1.0.8 B-annot
Second batch of the Veza backend OpenAPI annotation campaign. Completes
the track/ handler subtree — 22 more handlers annotated across 5 files —
so the orval-generated frontend client now covers the full track API
surface (stream, download, like, repost, share, search, recommendations,
stats, history, play, waveform, version restore).
Handlers annotated:
- internal/core/track/track_social_handler.go (11):
LikeTrack, UnlikeTrack, GetTrackLikes, GetUserLikedTracks,
GetUserRepostedTracks, CreateShare, GetSharedTrack, RevokeShare,
RepostTrack, UnrepostTrack, GetRepostStatus
- internal/core/track/track_analytics_handler.go (4):
GetTrackStats, GetTrackHistory, RecordPlay, RestoreVersion
- internal/core/track/track_search_handler.go (3):
GetRecommendations, GetSuggestedTags, SearchTracks
- internal/core/track/track_hls_handler.go (3):
HandleStreamCallback (internal), DownloadTrack, StreamTrack
— both user-facing endpoints document the v1.0.8 P2 302-to-signed-URL
behavior for S3-backed tracks alongside the local-FS path.
- internal/core/track/track_waveform_handler.go (1): GetWaveform
All comment blocks converge on the established template:
Summary / Description / Tags / Accept/Produce / Security (BearerAuth
when required) / typed Param path|query|body / Success envelope
handlers.APIResponse{data=...} / Failure 400/401/403/404/500 / Router.
track_hls_handler.go + track_waveform_handler.go receive a blank
import of internal/handlers so swaggo's type resolver can locate
handlers.APIResponse without forcing the file to call that package
at runtime.
Spec coverage:
/tracks/* paths: 13 → 29
make openapi: ✅ valid (Swagger 2.0)
go build ./...: ✅
openapi.yaml: +780 lines describing 16 new track endpoints.
Leaves /internal/core/ subsystems still blank: admin, moderation,
analytics/*, auth/handler.go (duplicates routes handled elsewhere),
discover, feed. Batch 2b next will cover playlists + marketplace gap
so the 4 frontend services (auth/users/tracks/playlists) become
fully orval-migratable.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 22:58:08 +00:00
"veza-backend-api_internal_handlers.APIResponse" : {
"type" : "object" ,
"properties" : {
"data" : { } ,
"error" : { } ,
"success" : {
"type" : "boolean"
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_models.Playlist" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
"collaborators" : {
"type" : "array" ,
"items" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.PlaylistCollaborator"
2025-12-06 16:34:18 +00:00
}
} ,
"cover_url" : {
"type" : "string"
} ,
"created_at" : {
"type" : "string"
} ,
"description" : {
"type" : "string"
} ,
"follower_count" : {
"type" : "integer"
} ,
"id" : {
"type" : "string"
} ,
2026-04-23 22:45:10 +00:00
"is_default_favorites" : {
"description" : "v0.10.4 F136" ,
"type" : "boolean"
} ,
"is_editorial" : {
"description" : "v0.10.4 F141" ,
"type" : "boolean"
} ,
2025-12-06 16:34:18 +00:00
"is_public" : {
"type" : "boolean"
} ,
"title" : {
"type" : "string"
} ,
"track_count" : {
"type" : "integer"
} ,
"tracks" : {
"type" : "array" ,
"items" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.PlaylistTrack"
2025-12-06 16:34:18 +00:00
}
} ,
"updated_at" : {
"type" : "string"
} ,
"user_id" : {
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_models.PlaylistCollaborator" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
"created_at" : {
"type" : "string"
} ,
"id" : {
"type" : "string"
} ,
"permission" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.PlaylistPermission"
2025-12-06 16:34:18 +00:00
} ,
"playlist_id" : {
"type" : "string"
} ,
"updated_at" : {
"type" : "string"
} ,
"user" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.User"
2025-12-06 16:34:18 +00:00
} ,
"user_id" : {
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_models.PlaylistPermission" : {
2025-12-06 16:34:18 +00:00
"type" : "string" ,
"enum" : [
"read" ,
"write" ,
"admin"
] ,
"x-enum-varnames" : [
"PlaylistPermissionRead" ,
"PlaylistPermissionWrite" ,
"PlaylistPermissionAdmin"
]
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_models.PlaylistTrack" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
"added_at" : {
"type" : "string"
} ,
2026-01-07 18:39:21 +00:00
"added_by" : {
"type" : "string"
} ,
2025-12-06 16:34:18 +00:00
"id" : {
"type" : "string"
} ,
"playlist_id" : {
"type" : "string"
} ,
"position" : {
"type" : "integer"
} ,
"track" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.Track"
2025-12-06 16:34:18 +00:00
} ,
"track_id" : {
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_models.Track" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
"album" : {
"type" : "string"
} ,
"artist" : {
"type" : "string"
} ,
"bitrate" : {
"description" : "kbps" ,
"type" : "integer"
} ,
2026-02-27 19:23:10 +00:00
"bpm" : {
"type" : "integer"
} ,
2025-12-06 16:34:18 +00:00
"cover_art_path" : {
"type" : "string"
} ,
"created_at" : {
"type" : "string"
} ,
2026-01-07 18:39:21 +00:00
"creator_id" : {
"type" : "string"
} ,
2025-12-06 16:34:18 +00:00
"duration" : {
"description" : "seconds" ,
"type" : "integer"
} ,
2026-01-07 18:39:21 +00:00
"file_id" : {
"description" : "NULL temporairement avant création fichier" ,
"type" : "string"
} ,
2025-12-06 16:34:18 +00:00
"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"
} ,
2026-02-27 19:23:10 +00:00
"musical_key" : {
"type" : "string"
} ,
2025-12-06 16:34:18 +00:00
"sample_rate" : {
"description" : "Hz" ,
"type" : "integer"
} ,
"status" : {
2026-02-27 19:23:10 +00:00
"$ref" : "#/definitions/veza-backend-api_internal_models.TrackStatus"
2025-12-06 16:34:18 +00:00
} ,
"status_message" : {
"type" : "string"
} ,
"stream_manifest_url" : {
"type" : "string"
} ,
"stream_status" : {
"description" : "pending, processing, ready, error" ,
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"tags" : {
"type" : "array" ,
"items" : {
"type" : "string"
}
} ,
2025-12-06 16:34:18 +00:00
"title" : {
"type" : "string"
} ,
"updated_at" : {
"type" : "string"
} ,
"waveform_path" : {
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"waveform_url" : {
"type" : "string"
} ,
2025-12-06 16:34:18 +00:00
"year" : {
"type" : "integer"
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_models.TrackStatus" : {
2025-12-06 16:34:18 +00:00
"type" : "string" ,
"enum" : [
"uploading" ,
"processing" ,
"completed" ,
"failed"
] ,
"x-enum-varnames" : [
"TrackStatusUploading" ,
"TrackStatusProcessing" ,
"TrackStatusCompleted" ,
"TrackStatusFailed"
]
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_models.User" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
"avatar" : {
"type" : "string"
} ,
2026-02-27 19:23:10 +00:00
"banner_url" : {
"type" : "string"
} ,
2025-12-06 16:34:18 +00:00
"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"
} ,
2026-01-07 18:39:21 +00:00
"is_banned" : {
"type" : "boolean"
} ,
2025-12-06 16:34:18 +00:00
"is_public" : {
"type" : "boolean"
} ,
"is_verified" : {
"type" : "boolean"
} ,
"last_login_at" : {
"type" : "string"
} ,
"last_name" : {
"type" : "string"
} ,
"location" : {
"type" : "string"
} ,
2026-01-07 18:39:21 +00:00
"login_count" : {
"type" : "integer"
} ,
2025-12-06 16:34:18 +00:00
"password" : {
"description" : "Virtual field for input" ,
"type" : "string"
} ,
2026-04-23 22:45:10 +00:00
"password_changed_at" : {
"description" : "F016: Password expiration tracking" ,
"type" : "string"
} ,
"promoted_to_creator_at" : {
"description" : "v1.0.6: set the first time a user self-promotes to ` + " ` " + ` role = ' creator ' ` + " ` " + `\nvia POST /api/v1/users/me/upgrade-creator. NULL for users who never\ntook that path (still 'user', or promoted by an admin out-of-band)." ,
"type" : "string"
} ,
2025-12-06 16:34:18 +00:00
"role" : {
"type" : "string"
} ,
"slug" : {
"type" : "string"
} ,
2026-01-07 18:39:21 +00:00
"social_links" : {
"type" : "string"
} ,
2025-12-06 16:34:18 +00:00
"token_version" : {
"type" : "integer"
} ,
"updated_at" : {
"type" : "string"
} ,
"username" : {
"type" : "string"
} ,
"username_changed_at" : {
"type" : "string"
}
}
} ,
2026-02-27 19:23:10 +00:00
"veza-backend-api_internal_response.APIResponse" : {
2025-12-06 16:34:18 +00:00
"type" : "object" ,
"properties" : {
"data" : { } ,
"error" : { } ,
"success" : {
"type" : "boolean"
}
}
2025-12-03 19:29:37 +00:00
}
} ,
"securityDefinitions" : {
2026-04-23 22:45:10 +00:00
"ApiKeyAuth" : {
"description" : "Developer API key (obtain from Developer Portal). Format: vza_xxxxx" ,
"type" : "apiKey" ,
"name" : "X-API-Key" ,
"in" : "header"
} ,
2025-12-03 19:29:37 +00:00
"BearerAuth" : {
"type" : "apiKey" ,
"name" : "Authorization" ,
"in" : "header"
}
}
} `
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = & swag . Spec {
Version : "1.2.0" ,
2026-04-23 22:45:10 +00:00
Host : "localhost:18080" ,
2025-12-03 19:29:37 +00:00
BasePath : "/api/v1" ,
Schemes : [ ] string { } ,
Title : "Veza Backend API" ,
Description : "Backend API for Veza platform." ,
InfoInstanceName : "swagger" ,
SwaggerTemplate : docTemplate ,
LeftDelim : "{{" ,
RightDelim : "}}" ,
}
func init ( ) {
swag . Register ( SwaggerInfo . InstanceName ( ) , SwaggerInfo )
}