DanzApp-BE-Test / swagger /docs /swagger.json
lifedebugger's picture
Deploy files from GitHub repository
4727a74
{
"schemes": [
"https"
],
"swagger": "2.0",
"info": {
"description": "Backend API documentation",
"title": "Go Boilerplate API",
"contact": {
"name": "Abdan Hafidz",
"email": "admin@example.com"
},
"license": {
"name": "MIT",
"url": "https://opensource.org/licenses/MIT"
},
"version": "1.0.0"
},
"host": "lifedebugger-danzapp-be-test.hf.space",
"basePath": "/",
"paths": {
"/api/v1/assistants/{id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Return detailed information about an assistant (instructor) including nested previews of their classes.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Assistants"
],
"summary": "Get Assistant Detail",
"parameters": [
{
"type": "string",
"description": "Assistant ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.AssistantDetail"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/auth/otp/request": {
"post": {
"description": "Trigger an OTP code via WhatsApp for phone number verification.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Request OTP",
"parameters": [
{
"description": "OTP Request Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.OTPRequestInput"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.OTPRequestResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/auth/otp/verify": {
"post": {
"description": "Validate the OTP code provided by the user and return authentication token.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Verify OTP",
"parameters": [
{
"description": "OTP Verification Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.OTPVerifyInput"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.OTPVerifyResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/authentication/change-password": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Update password for the logged-in user.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Change Password",
"parameters": [
{
"description": "Password Change Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.ChangePasswordRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.AuthenticatedUser"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/authentication/login": {
"post": {
"description": "Authenticate user via email/username and password.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Sign In",
"parameters": [
{
"description": "Sign In Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.SignInRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.AuthenticatedUser"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/authentication/register": {
"post": {
"description": "Register a new user with name, email, username and password.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Auth"
],
"summary": "Sign Up",
"parameters": [
{
"description": "Sign Up Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.SignUpRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/entities.User"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/authentication/role/{userId}": {
"put": {
"description": "Update user role. Note: This is an older endpoint, consider using /api/v1/users/me/roles instead.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Users"
],
"summary": "Update User Role (Legacy)",
"parameters": [
{
"type": "string",
"description": "User ID",
"name": "userId",
"in": "path",
"required": true
},
{
"description": "Role Update Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateUserRoleRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/entities.User"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/classes": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Get class booking details by booking ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Class Booking"
],
"summary": "Get Class Booking Detail",
"parameters": [
{
"type": "string",
"description": "Booking ID",
"name": "booking_id",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.CreateClassBookingResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Book a specific slot and type of a class. Returns Xendit checkout URL if payment is required.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Class Booking"
],
"summary": "Book a Class",
"parameters": [
{
"description": "Class Booking Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.BookClassRequest"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/dto.BookClassResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/classes/create": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Create a class booking with a specific payload (direct booking)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Class Booking"
],
"summary": "Create a new Class Booking (Direct)",
"parameters": [
{
"description": "Class Booking Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.CreateClassBookingRequest"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/dto.CreateClassBookingResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/classes/delete": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Delete a class booking record by booking ID.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Class Booking"
],
"summary": "Delete a Class Booking",
"parameters": [
{
"type": "string",
"description": "Booking ID",
"name": "booking_id",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/classes/filters": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Get a list of class bookings filtered by user ID",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Class Booking"
],
"summary": "Get Class Bookings By Filter",
"parameters": [
{
"type": "string",
"description": "User ID",
"name": "user_id",
"in": "query",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.CreateClassBookingResponse"
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/classes/reduce-capacity": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Reduce available capacity of a specific ticket type in a slot for a class",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Class Booking"
],
"summary": "Reduce Capacity",
"parameters": [
{
"description": "Reduce Capacity Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.ReduceCapacityRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.ClassBookingOptionsResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/classes/update": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Partially update a class booking. JSON fields (payment_details, available_slots, available_types) are deep-merged — only provided keys are overwritten.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Class Booking"
],
"summary": "Partially Update a Class Booking",
"parameters": [
{
"type": "string",
"description": "Booking ID",
"name": "booking_id",
"in": "query",
"required": true
},
{
"description": "Fields to update",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateClassBookingRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.UpdateClassBookingResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/classes/{classId}/options": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Get available slots and class types for a specific class to be booked.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Class Booking"
],
"summary": "Get Class Booking Options",
"parameters": [
{
"type": "string",
"description": "Class ID",
"name": "classId",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.ClassBookingOptionsResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/events": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Book a specific package for an approved event. Returns Xendit checkout URL if payment is required.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Event Booking"
],
"summary": "Book an event",
"parameters": [
{
"description": "Booking Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.BookEventRequest"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/dto.EventBookingResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/events/event/{event_id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a list of all bookings for a specific event. Intended for event owners/admins.",
"produces": [
"application/json"
],
"tags": [
"Event Booking"
],
"summary": "Get all bookings for an event",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.EventBookingResponse"
}
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/events/me": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a list of event bookings made by the authenticated user.",
"produces": [
"application/json"
],
"tags": [
"Event Booking"
],
"summary": "Get my event bookings",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.EventBookingResponse"
}
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/bookings/events/{booking_id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns full details of a specific event booking by booking ID.",
"produces": [
"application/json"
],
"tags": [
"Event Booking"
],
"summary": "Get event booking detail",
"parameters": [
{
"type": "string",
"description": "Booking ID",
"name": "booking_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.EventBookingResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Update booking or payment status of an event booking. Used by admin.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Event Booking"
],
"summary": "Update event booking status",
"parameters": [
{
"type": "string",
"description": "Booking ID",
"name": "booking_id",
"in": "path",
"required": true
},
{
"description": "Fields to update",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateEventBookingRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.EventBookingResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"delete": {
"security": [
{
"BearerAuth": []
}
],
"description": "Cancel a booking made by the authenticated user.",
"produces": [
"application/json"
],
"tags": [
"Event Booking"
],
"summary": "Cancel event booking",
"parameters": [
{
"type": "string",
"description": "Booking ID",
"name": "booking_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"403": {
"description": "Forbidden",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/class-categories": {
"get": {
"description": "Get master list of class categories",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Master Data"
],
"summary": "Get Class Categories",
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.CategoryResponseWrapper"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/classes": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Allows an instructor to create/host a new class. Automatically creates an instructor profile if one doesn't exist.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Classes"
],
"summary": "Host a Class",
"parameters": [
{
"description": "Class Creation Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.CreateClassRequest"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/entities.Class"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"403": {
"description": "Forbidden",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/classes/favorites": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of classes favorited by the authenticated user. Response structure matches /api/v1/classes/search.",
"produces": [
"application/json"
],
"tags": [
"Classes"
],
"summary": "Get favorite classes",
"parameters": [
{
"type": "integer",
"description": "Page (default: 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Limit (default: 10)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.SearchClassesResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/classes/filters": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns available filter options for class search",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Classes"
],
"summary": "Get Class Filters Metadata",
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.FiltersMetadataResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/classes/search": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Search classes with filters and sorting options",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Classes"
],
"summary": "Search for Classes",
"parameters": [
{
"type": "string",
"description": "Search query",
"name": "q",
"in": "query"
},
{
"type": "string",
"description": "Location name",
"name": "location_name",
"in": "query"
},
{
"type": "number",
"description": "User latitude",
"name": "latitude",
"in": "query"
},
{
"type": "number",
"description": "User longitude",
"name": "longitude",
"in": "query"
},
{
"type": "string",
"default": "nearest",
"description": "Sort by (nearest|popular|rating|newest)",
"name": "sort_by",
"in": "query"
},
{
"type": "integer",
"default": 1,
"description": "Page number",
"name": "page",
"in": "query"
},
{
"type": "integer",
"default": 10,
"description": "Items per page",
"name": "limit",
"in": "query"
},
{
"type": "string",
"default": "class",
"description": "View type",
"name": "view_type",
"in": "query"
},
{
"type": "string",
"default": "all",
"description": "Category",
"name": "category",
"in": "query"
},
{
"type": "string",
"description": "Dance type",
"name": "dance_type",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.SearchClassesResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/classes/{class_id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Return comprehensive class information needed to render the detail page.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Classes"
],
"summary": "Get Class Details",
"parameters": [
{
"type": "string",
"description": "Class ID",
"name": "class_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.ClassDetailResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Update details of an existing class",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Classes"
],
"summary": "Update a Class",
"parameters": [
{
"type": "string",
"description": "Class ID",
"name": "class_id",
"in": "path",
"required": true
},
{
"description": "Class Update Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateClassRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/entities.Class"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"delete": {
"security": [
{
"BearerAuth": []
}
],
"description": "Delete an existing class",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Classes"
],
"summary": "Delete a Class",
"parameters": [
{
"type": "string",
"description": "Class ID",
"name": "class_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/classes/{class_id}/favorite": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Adds the class to favorites if not already favorited, removes it if already favorited.",
"produces": [
"application/json"
],
"tags": [
"Classes"
],
"summary": "Toggle Class Favorite",
"parameters": [
{
"type": "string",
"description": "Class ID",
"name": "class_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/event-categories": {
"get": {
"description": "Get master list of event categories",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Master Data"
],
"summary": "Get Event Categories",
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.CategoryResponseWrapper"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/events": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of approved events visible to members.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "List approved events",
"parameters": [
{
"type": "integer",
"description": "Page (default: 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Limit (default: 10)",
"name": "limit",
"in": "query"
},
{
"type": "string",
"description": "Search by title",
"name": "search",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.EventListResponse"
}
}
}
},
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Allows an instructor (DI) to create a new event. Starts in PENDING_APPROVAL status.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Create an event",
"parameters": [
{
"description": "Event Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.CreateEventRequest"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/entities.Event"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/events/favorites": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of events favorited by the authenticated user. Response structure matches /api/v1/events.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Get favorite events",
"parameters": [
{
"type": "integer",
"description": "Page (default: 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Limit (default: 10)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.EventListResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/events/me": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of events created by the authenticated instructor.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Get my events",
"parameters": [
{
"type": "integer",
"description": "Page (default: 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Limit (default: 10)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.EventListResponse"
}
}
}
}
},
"/api/v1/events/packages/{package_id}": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Partially update a ticket package. Only the event owner can do this.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Update an event package",
"parameters": [
{
"type": "string",
"description": "Package ID",
"name": "package_id",
"in": "path",
"required": true
},
{
"description": "Fields to update",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateEventPackageRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/entities.EventPackage"
}
}
}
},
"delete": {
"security": [
{
"BearerAuth": []
}
],
"description": "Remove a ticket package from an event. Only the event owner can do this.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Delete an event package",
"parameters": [
{
"type": "string",
"description": "Package ID",
"name": "package_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/api/v1/events/pending": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns events awaiting approval. Accessible by admin/DI approvers.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "List pending events (approval queue)",
"parameters": [
{
"type": "integer",
"description": "Page (default: 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Limit (default: 10)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.EventListResponse"
}
}
}
}
},
"/api/v1/events/{event_id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns full event details for the member-facing detail page.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Get event detail",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.EventDetailResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Partially update an event owned by the authenticated instructor.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Update an event",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
},
{
"description": "Fields to update",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateEventRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/entities.Event"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"403": {
"description": "Forbidden",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"delete": {
"security": [
{
"BearerAuth": []
}
],
"description": "Delete an event owned by the authenticated instructor.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Delete an event",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"403": {
"description": "Forbidden",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/events/{event_id}/approve": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Approve a pending event so it becomes visible to members.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Approve an event",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/api/v1/events/{event_id}/favorite": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Adds the event to favorites if not already favorited, removes it if already favorited.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Toggle Event Favorite",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/events/{event_id}/instructors": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Link a partner instructor to an event. Only the event owner can do this.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Add instructor to event",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
},
{
"description": "Instructor Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.AddEventInstructorRequest"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/entities.EventInstructor"
}
}
}
}
},
"/api/v1/events/{event_id}/instructors/{instructor_id}": {
"delete": {
"security": [
{
"BearerAuth": []
}
],
"description": "Unlink a partner instructor from an event. Only the event owner can do this.",
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Remove instructor from event",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
},
{
"type": "string",
"description": "Instructor ID",
"name": "instructor_id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/api/v1/events/{event_id}/packages": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Add a ticket package to an event. Only the event owner can do this.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Add package to event",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
},
{
"description": "Package Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.CreateEventPackageRequest"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"$ref": "#/definitions/entities.EventPackage"
}
}
}
}
},
"/api/v1/events/{event_id}/reject": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Reject a pending event with an optional reason.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Events"
],
"summary": "Reject an event",
"parameters": [
{
"type": "string",
"description": "Event ID",
"name": "event_id",
"in": "path",
"required": true
},
{
"description": "Rejection reason",
"name": "request",
"in": "body",
"schema": {
"$ref": "#/definitions/dto.EventApprovalRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
}
}
}
},
"/api/v1/home": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Return all sections needed by the home page in one aggregated response.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Home Dashboard"
],
"summary": "Get Home Page Data",
"parameters": [
{
"type": "string",
"description": "Selected date for schedule card section (YYYY-MM-DD)",
"name": "date",
"in": "query"
},
{
"type": "number",
"description": "User latitude",
"name": "latitude",
"in": "query"
},
{
"type": "number",
"description": "User longitude",
"name": "longitude",
"in": "query"
},
{
"type": "string",
"description": "User city",
"name": "city",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.HomeResponseWrapper"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/payment/callback": {
"post": {
"description": "Receive and process payment status updates from Xendit",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Payment"
],
"summary": "Handle Xendit Payment Callback",
"parameters": [
{
"description": "Xendit Callback Payload",
"name": "request",
"in": "body",
"required": true,
"schema": {
"type": "object",
"additionalProperties": true
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.SuccessResponse-any"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/schedules": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Get a list of class or event schedules based on date range, city, filters, etc.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Home Dashboard"
],
"summary": "Get Schedule List",
"parameters": [
{
"type": "string",
"description": "Exact date (YYYY-MM-DD)",
"name": "date",
"in": "query"
},
{
"type": "string",
"description": "Start date range (YYYY-MM-DD)",
"name": "start_date",
"in": "query"
},
{
"type": "string",
"description": "End date range (YYYY-MM-DD)",
"name": "end_date",
"in": "query"
},
{
"type": "string",
"description": "Filter by city",
"name": "city",
"in": "query"
},
{
"type": "string",
"description": "Filter by class level (e.g., beginner)",
"name": "level",
"in": "query"
},
{
"type": "string",
"description": "Filter by class category (e.g., salsa)",
"name": "category",
"in": "query"
},
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Items per page (default: 10, max: 100)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.ScheduleListResponseWrapper"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/upload": {
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Upload an image or file to storage and receive a public URL back.",
"consumes": [
"multipart/form-data"
],
"produces": [
"application/json"
],
"tags": [
"Upload"
],
"summary": "Upload a media file",
"parameters": [
{
"type": "file",
"description": "File to upload",
"name": "file",
"in": "formData",
"required": true
},
{
"type": "string",
"description": "Folder name (default: uploads)",
"name": "folder",
"in": "formData"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": {
"type": "string"
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/users/me": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Get current logged-in user profile, including roles and about details.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Users"
],
"summary": "Get My Profile",
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.UserProfileResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/users/me/about": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Update user's personal details like gender, dance level, and description.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Users"
],
"summary": "Update About You",
"parameters": [
{
"description": "Update Profile Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateAboutYouRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.UserProfileResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/users/me/roles": {
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Update user's primary role (member, instructor, venue_owner).",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Users"
],
"summary": "Assign Role",
"parameters": [
{
"description": "Role Assignment Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateUserRolesRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.UserProfileResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/users/{id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Get public profile and roles of another user by their ID.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Users"
],
"summary": "Get User Details",
"parameters": [
{
"type": "string",
"description": "User ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.UserProfileResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/venues": {
"get": {
"description": "Returns a paginated list of all venues.",
"produces": [
"application/json"
],
"tags": [
"Venue"
],
"summary": "Get all venues",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Items per page (default: 10, max: 50)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.VenueListResponse"
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"post": {
"security": [
{
"BearerAuth": []
}
],
"description": "Submit the Add Venue form with detailed location, facilities, specs, and photos URLs.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Venue"
],
"summary": "Create a new venue",
"parameters": [
{
"description": "Create Venue Form Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.CreateVenueRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.VenueResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/venues/me": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns a paginated list of venues owned by the current user.",
"produces": [
"application/json"
],
"tags": [
"Venue"
],
"summary": "Get owner's venues",
"parameters": [
{
"type": "integer",
"description": "Page number (default: 1)",
"name": "page",
"in": "query"
},
{
"type": "integer",
"description": "Items per page (default: 10, max: 50)",
"name": "limit",
"in": "query"
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.VenueListResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
},
"/api/v1/venues/{id}": {
"get": {
"security": [
{
"BearerAuth": []
}
],
"description": "Returns the full detail of a venue by its ID.",
"produces": [
"application/json"
],
"tags": [
"Venue"
],
"summary": "Get venue detail",
"parameters": [
{
"type": "string",
"description": "Venue ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.VenueDetailResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"put": {
"security": [
{
"BearerAuth": []
}
],
"description": "Update the details of an existing venue owned by the current user.",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"Venue"
],
"summary": "Update an existing venue",
"parameters": [
{
"type": "string",
"description": "Venue ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "Update Venue Form Data",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/dto.UpdateVenueRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"$ref": "#/definitions/dto.VenueDetailResponse"
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"403": {
"description": "Forbidden",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
},
"delete": {
"security": [
{
"BearerAuth": []
}
],
"description": "Delete an existing venue owned by the current user if it has no classes attached.",
"produces": [
"application/json"
],
"tags": [
"Venue"
],
"summary": "Delete a venue",
"parameters": [
{
"type": "string",
"description": "Venue ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"additionalProperties": true
}
},
"400": {
"description": "Bad Request",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"401": {
"description": "Unauthorized",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"403": {
"description": "Forbidden",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
},
"404": {
"description": "Not Found",
"schema": {
"$ref": "#/definitions/dto.ErrorResponse"
}
}
}
}
}
},
"definitions": {
"dto.AddEventInstructorRequest": {
"type": "object",
"required": [
"instructor_id",
"partner_capacity"
],
"properties": {
"instructor_id": {
"type": "string"
},
"partner_capacity": {
"type": "integer",
"minimum": 0
}
}
},
"dto.AssistantClassPreview": {
"type": "object",
"properties": {
"description": {
"type": "string"
},
"id": {
"type": "string"
},
"image_urls": {
"type": "array",
"items": {
"type": "string"
}
},
"title": {
"type": "string"
}
}
},
"dto.AssistantDetail": {
"type": "object",
"properties": {
"cancellation_policy": {
"type": "array",
"items": {
"type": "string"
}
},
"class_previews": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.AssistantClassPreview"
}
},
"id": {
"type": "string"
},
"is_favorited": {
"type": "boolean"
},
"pricing": {
"$ref": "#/definitions/dto.AssistantPricing"
},
"profile": {
"$ref": "#/definitions/dto.AssistantProfile"
},
"specializations": {
"type": "array",
"items": {
"type": "string"
}
}
}
},
"dto.AssistantPricing": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"display_range": {
"type": "string"
},
"max_price": {
"type": "integer"
},
"min_price": {
"type": "integer"
}
}
},
"dto.AssistantProfile": {
"type": "object",
"properties": {
"avatar_url": {
"type": "string"
},
"name": {
"type": "string"
},
"rank": {
"type": "string"
}
}
},
"dto.AuthenticatedUser": {
"type": "object",
"properties": {
"token": {
"type": "string"
},
"user": {
"$ref": "#/definitions/entities.User"
}
}
},
"dto.BookClassRequest": {
"type": "object",
"required": [
"class_id",
"slot_ids",
"type_id"
],
"properties": {
"class_id": {
"type": "string"
},
"slot_ids": {
"type": "array",
"minItems": 1,
"items": {
"type": "string"
}
},
"type_id": {
"type": "string"
}
}
},
"dto.BookClassResponse": {
"type": "object",
"properties": {
"base_amount": {
"type": "number"
},
"booking_id": {
"type": "string"
},
"checkout_url": {
"type": "string"
},
"payment_status": {
"type": "string"
},
"service_fee": {
"type": "number"
},
"status": {
"type": "string"
},
"tax": {
"type": "number"
},
"total_amount": {
"type": "number"
},
"xendit_invoice_id": {
"type": "string"
}
}
},
"dto.BookEventRequest": {
"type": "object",
"required": [
"event_id",
"package_id"
],
"properties": {
"event_id": {
"type": "string"
},
"package_id": {
"type": "string"
},
"partner_instructor_id": {
"type": "string"
}
}
},
"dto.CategoryResponse": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"image_url": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"dto.CategoryResponseWrapper": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.CategoryResponse"
}
},
"success": {
"type": "boolean"
}
}
},
"dto.ChangePasswordRequest": {
"type": "object",
"required": [
"new_password",
"old_password"
],
"properties": {
"new_password": {
"type": "string"
},
"old_password": {
"type": "string"
}
}
},
"dto.ClassBooking": {
"type": "object",
"properties": {
"booking_type": {
"type": "string"
},
"button_text": {
"type": "string"
},
"is_bookable": {
"type": "boolean"
},
"starting_price": {
"$ref": "#/definitions/dto.PriceData"
}
}
},
"dto.ClassBookingOptionsResponse": {
"type": "object",
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"class_id": {
"type": "string"
}
}
},
"dto.ClassDescription": {
"type": "object",
"properties": {
"full_text": {
"type": "string"
},
"is_truncated": {
"type": "boolean"
},
"short_text": {
"type": "string"
}
}
},
"dto.ClassDetailResponse": {
"type": "object",
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"booking": {
"$ref": "#/definitions/dto.ClassBooking"
},
"cancellation_policy": {
"type": "array",
"items": {
"type": "string"
}
},
"capacity": {
"type": "integer"
},
"class_id": {
"type": "string"
},
"custom_field": {
"type": "object"
},
"description": {
"$ref": "#/definitions/dto.ClassDescription"
},
"details": {
"type": "array",
"items": {
"type": "string"
}
},
"extra_lessons": {
"$ref": "#/definitions/dto.ClassExtraLessons"
},
"favorite": {
"$ref": "#/definitions/dto.ClassFavorite"
},
"gallery": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.ClassGalleryItem"
}
},
"hero_image_url": {
"type": "string"
},
"house_dancer": {
"$ref": "#/definitions/dto.ClassHouseDancer"
},
"instructor": {
"$ref": "#/definitions/dto.ClassInstructor"
},
"location": {
"$ref": "#/definitions/dto.ClassLocation"
},
"rating": {
"$ref": "#/definitions/dto.ClassRating"
},
"schedule_type": {
"description": "Core Fields synced from Host Class",
"type": "string"
},
"share": {
"$ref": "#/definitions/dto.ClassShare"
},
"summary": {
"$ref": "#/definitions/dto.ClassSummary"
},
"tags": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.ClassTag"
}
},
"title": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
"dto.ClassExtraLessons": {
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"description": {
"type": "string"
}
}
},
"dto.ClassFavorite": {
"type": "object",
"properties": {
"is_favorited": {
"type": "boolean"
}
}
},
"dto.ClassGalleryItem": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"image_url": {
"type": "string"
},
"thumbnail_url": {
"type": "string"
}
}
},
"dto.ClassHouseDancer": {
"type": "object",
"properties": {
"available": {
"type": "boolean"
},
"description": {
"type": "string"
},
"price": {
"$ref": "#/definitions/dto.PriceData"
}
}
},
"dto.ClassInstructor": {
"type": "object",
"properties": {
"avatar_url": {
"type": "string"
},
"id": {
"type": "string"
},
"is_message_enabled": {
"type": "boolean"
},
"name": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"title": {
"type": "string"
}
}
},
"dto.ClassLocation": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"area_text": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"map_preview_url": {
"type": "string"
},
"venue_name": {
"type": "string"
}
}
},
"dto.ClassRating": {
"type": "object",
"properties": {
"average": {
"type": "number"
},
"count": {
"type": "integer"
}
}
},
"dto.ClassSearchResult": {
"type": "object",
"properties": {
"class_id": {
"type": "string"
},
"distance_km": {
"type": "number"
},
"is_favorited": {
"type": "boolean"
},
"location_text": {
"type": "string"
},
"price": {
"$ref": "#/definitions/dto.PriceInfo"
},
"schedule_text": {
"type": "string"
},
"thumbnail_url": {
"type": "string"
},
"title": {
"type": "string"
}
}
},
"dto.ClassShare": {
"type": "object",
"properties": {
"share_text": {
"type": "string"
},
"share_url": {
"type": "string"
}
}
},
"dto.ClassSummary": {
"type": "object",
"properties": {
"date": {
"$ref": "#/definitions/dto.DateDisplay"
},
"location": {
"$ref": "#/definitions/dto.SummaryLocation"
},
"starting_price": {
"$ref": "#/definitions/dto.PriceData"
}
}
},
"dto.ClassTag": {
"type": "object",
"properties": {
"key": {
"type": "string"
},
"label": {
"type": "string"
}
}
},
"dto.CreateClassBookingRequest": {
"type": "object",
"required": [
"class_id"
],
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"class_id": {
"type": "string"
},
"payment_details": {
"type": "object"
},
"status": {
"type": "string"
}
}
},
"dto.CreateClassBookingResponse": {
"type": "object",
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"booking_id": {
"type": "string"
},
"class_id": {
"type": "string"
},
"payment_details": {
"type": "object"
},
"status": {
"type": "string"
},
"user_id": {
"type": "string"
}
}
},
"dto.CreateClassRequest": {
"type": "object",
"required": [
"capacity",
"schedule_type",
"title"
],
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"capacity": {
"type": "integer"
},
"custom_field": {
"type": "object"
},
"description": {
"type": "string"
},
"schedule_type": {
"type": "string"
},
"title": {
"type": "string"
},
"venue_id": {
"type": "string"
}
}
},
"dto.CreateEventPackageRequest": {
"type": "object",
"required": [
"name",
"price"
],
"properties": {
"custom_field": {
"type": "object"
},
"description": {
"type": "string"
},
"name": {
"type": "string",
"maxLength": 100,
"minLength": 1
},
"partner_included": {
"type": "boolean"
},
"price": {
"type": "number",
"minimum": 0
}
}
},
"dto.CreateEventRequest": {
"type": "object",
"required": [
"capacity",
"end_time",
"event_date",
"schedule_type",
"start_time",
"title"
],
"properties": {
"capacity": {
"type": "integer",
"minimum": 1
},
"description": {
"type": "string"
},
"end_time": {
"type": "string"
},
"entrance_fee": {
"type": "number"
},
"event_date": {
"type": "string"
},
"event_media": {
"type": "object"
},
"schedule_type": {
"type": "string"
},
"start_time": {
"type": "string"
},
"title": {
"type": "string",
"maxLength": 200,
"minLength": 2
},
"venue_id": {
"type": "string"
}
}
},
"dto.CreateVenueRequest": {
"type": "object",
"required": [
"address",
"capacity",
"city",
"name",
"province"
],
"properties": {
"address": {
"type": "string"
},
"capacity": {
"type": "integer"
},
"city": {
"type": "string"
},
"closing_time": {
"type": "string"
},
"description": {
"type": "object",
"additionalProperties": true
},
"extra_facilities": {
"type": "array",
"items": {
"type": "string"
}
},
"facilities": {
"type": "array",
"items": {
"type": "string"
}
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"minimum_consumption": {
"type": "number"
},
"name": {
"type": "string"
},
"opening_time": {
"type": "string"
},
"province": {
"type": "string"
},
"venue_media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
}
}
},
"dto.CurrentLocation": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"label": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
}
}
},
"dto.DateDisplay": {
"type": "object",
"properties": {
"display": {
"type": "string"
},
"raw": {
"type": "string"
}
}
},
"dto.ErrorResponse": {
"type": "object",
"properties": {
"errors": {},
"message": {},
"meta_data": {},
"status": {
"type": "string"
}
}
},
"dto.EventApprovalRequest": {
"type": "object",
"properties": {
"reason": {
"description": "Reason is required only when action is \"reject\".",
"type": "string"
}
}
},
"dto.EventBookingResponse": {
"type": "object",
"properties": {
"booking_id": {
"type": "string"
},
"booking_status": {
"type": "string"
},
"checkout_url": {
"type": "string"
},
"created_at": {
"type": "string"
},
"event_id": {
"type": "string"
},
"event_title": {
"type": "string"
},
"package_id": {
"type": "string"
},
"package_name": {
"type": "string"
},
"partner_instructor_id": {
"type": "string"
},
"payment_method": {
"type": "string"
},
"payment_status": {
"type": "string"
},
"total_amount": {
"type": "number"
},
"user_id": {
"type": "string"
},
"xendit_invoice_id": {
"type": "string"
}
}
},
"dto.EventDetailResponse": {
"type": "object",
"properties": {
"approval_status": {
"type": "string"
},
"booking_count": {
"type": "integer"
},
"capacity": {
"type": "integer"
},
"description": {
"type": "string"
},
"end_time": {
"type": "string"
},
"entrance_fee": {
"type": "number"
},
"event_date": {
"type": "string"
},
"event_id": {
"type": "string"
},
"fee_display": {
"type": "string"
},
"hero_image_url": {
"type": "string"
},
"host": {
"$ref": "#/definitions/dto.EventHostInfo"
},
"instructors": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.EventInstructorResponse"
}
},
"is_bookable": {
"type": "boolean"
},
"location": {
"$ref": "#/definitions/dto.EventLocation"
},
"packages": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.EventPackageResponse"
}
},
"schedule_type": {
"type": "string"
},
"share": {
"$ref": "#/definitions/dto.EventShare"
},
"start_time": {
"type": "string"
},
"title": {
"type": "string"
}
}
},
"dto.EventHostInfo": {
"type": "object",
"properties": {
"avatar_url": {
"type": "string"
},
"name": {
"type": "string"
},
"user_id": {
"type": "string"
}
}
},
"dto.EventInstructorResponse": {
"type": "object",
"properties": {
"avatar_url": {
"type": "string"
},
"event_id": {
"type": "string"
},
"id": {
"type": "string"
},
"instructor_id": {
"type": "string"
},
"instructor_name": {
"type": "string"
},
"partner_capacity": {
"type": "integer"
}
}
},
"dto.EventListItem": {
"type": "object",
"properties": {
"approval_status": {
"type": "string"
},
"area_text": {
"type": "string"
},
"booking_count": {
"type": "integer"
},
"capacity": {
"type": "integer"
},
"entrance_fee": {
"type": "number"
},
"event_date": {
"type": "string"
},
"fee_display": {
"type": "string"
},
"id": {
"type": "string"
},
"start_time": {
"type": "string"
},
"thumbnail_url": {
"type": "string"
},
"title": {
"type": "string"
},
"venue_name": {
"type": "string"
}
}
},
"dto.EventListResponse": {
"type": "object",
"properties": {
"events": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.EventListItem"
}
},
"pagination": {
"$ref": "#/definitions/dto.Pagination"
}
}
},
"dto.EventLocation": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"area_text": {
"type": "string"
},
"city": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"province": {
"type": "string"
},
"venue_name": {
"type": "string"
}
}
},
"dto.EventPackageResponse": {
"type": "object",
"properties": {
"description": {
"type": "string"
},
"event_id": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"partner_included": {
"type": "boolean"
},
"price": {
"type": "number"
},
"price_display": {
"type": "string"
}
}
},
"dto.EventShare": {
"type": "object",
"properties": {
"share_text": {
"type": "string"
},
"share_url": {
"type": "string"
}
}
},
"dto.Facility": {
"type": "object",
"properties": {
"icon": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"dto.FilterOption": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"is_default": {
"type": "boolean"
},
"label": {
"type": "string"
}
}
},
"dto.FiltersMetadataResponse": {
"type": "object",
"properties": {
"categories": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.FilterOption"
}
},
"dance_types": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.FilterOption"
}
},
"sort_options": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.SortOption"
}
},
"view_types": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.FilterOption"
}
}
}
},
"dto.HomeBeginnerClassSection": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"image_url": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
"dto.HomeDay": {
"type": "object",
"properties": {
"date": {
"type": "string"
},
"day_name_short": {
"type": "string"
},
"day_number": {
"type": "integer"
},
"has_schedule": {
"type": "boolean"
},
"is_selected": {
"type": "boolean"
}
}
},
"dto.HomeEventSection": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"image_url": {
"type": "string"
},
"name": {
"type": "string"
},
"type": {
"type": "string"
}
}
},
"dto.HomeHeroBanner": {
"type": "object",
"properties": {
"badge_text": {
"type": "string"
},
"cta_target_id": {
"type": "string"
},
"cta_text": {
"type": "string"
},
"cta_type": {
"type": "string"
},
"id": {
"type": "string"
},
"image_url": {
"type": "string"
},
"subtitle": {
"type": "string"
},
"title": {
"type": "string"
}
}
},
"dto.HomeNotifications": {
"type": "object",
"properties": {
"unread_count": {
"type": "integer"
}
}
},
"dto.HomePromoStrip": {
"type": "object",
"properties": {
"cta_target_id": {
"type": "string"
},
"cta_text": {
"type": "string"
},
"cta_type": {
"type": "string"
},
"id": {
"type": "string"
},
"text": {
"type": "string"
}
}
},
"dto.HomeResponse": {
"type": "object",
"properties": {
"beginner_class_sections": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.HomeBeginnerClassSection"
}
},
"event_sections": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.HomeEventSection"
}
},
"hero_banners": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.HomeHeroBanner"
}
},
"notifications": {
"$ref": "#/definitions/dto.HomeNotifications"
},
"promo_strip": {
"$ref": "#/definitions/dto.HomePromoStrip"
},
"search": {
"$ref": "#/definitions/dto.HomeSearch"
},
"user": {
"$ref": "#/definitions/dto.HomeUser"
},
"week_schedule": {
"$ref": "#/definitions/dto.HomeWeekSchedule"
}
}
},
"dto.HomeResponseWrapper": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/dto.HomeResponse"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
},
"dto.HomeSearch": {
"type": "object",
"properties": {
"placeholder": {
"type": "string"
}
}
},
"dto.HomeUser": {
"type": "object",
"properties": {
"avatar_url": {
"type": "string"
},
"first_name": {
"type": "string"
},
"full_name": {
"type": "string"
},
"id": {
"type": "string"
}
}
},
"dto.HomeWeekSchedule": {
"type": "object",
"properties": {
"days": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.HomeDay"
}
},
"end_date": {
"type": "string"
},
"items": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.ScheduleItem"
}
},
"selected_date": {
"type": "string"
},
"start_date": {
"type": "string"
},
"view_all_url": {
"type": "string"
},
"week_label": {
"type": "string"
}
}
},
"dto.OTPAuth": {
"type": "object",
"properties": {
"access_token": {
"type": "string"
},
"expires_in_seconds": {
"type": "integer"
},
"refresh_token": {
"type": "string"
},
"token_type": {
"type": "string"
}
}
},
"dto.OTPRequestInput": {
"type": "object",
"required": [
"channel",
"phone_number",
"purpose"
],
"properties": {
"app_name": {
"type": "string"
},
"channel": {
"type": "string"
},
"device_id": {
"type": "string"
},
"locale": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"purpose": {
"type": "string"
}
}
},
"dto.OTPRequestResponse": {
"type": "object",
"properties": {
"channel": {
"type": "string"
},
"expires_in_seconds": {
"type": "integer"
},
"masked_destination": {
"type": "string"
},
"otp_length": {
"type": "integer"
},
"otp_request_id": {
"type": "string"
},
"resend_available_in_seconds": {
"type": "integer"
}
}
},
"dto.OTPVerifiedUser": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"is_new_user": {
"type": "boolean"
},
"name": {
"type": "string"
},
"phone_number": {
"type": "string"
}
}
},
"dto.OTPVerifyInput": {
"type": "object",
"required": [
"otp_code",
"otp_request_id",
"phone_number",
"purpose"
],
"properties": {
"device_id": {
"type": "string"
},
"otp_code": {
"type": "string"
},
"otp_request_id": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"purpose": {
"type": "string"
}
}
},
"dto.OTPVerifyResponse": {
"type": "object",
"properties": {
"auth": {
"$ref": "#/definitions/dto.OTPAuth"
},
"user": {
"$ref": "#/definitions/dto.OTPVerifiedUser"
}
}
},
"dto.Pagination": {
"type": "object",
"properties": {
"has_next_page": {
"type": "boolean"
},
"limit": {
"type": "integer"
},
"page": {
"type": "integer"
},
"total_items": {
"type": "integer"
},
"total_pages": {
"type": "integer"
}
}
},
"dto.PaginationMeta": {
"type": "object",
"properties": {
"limit": {
"type": "integer"
},
"page": {
"type": "integer"
},
"total_items": {
"type": "integer"
},
"total_pages": {
"type": "integer"
}
}
},
"dto.PriceData": {
"type": "object",
"properties": {
"amount": {
"type": "integer"
},
"currency": {
"type": "string"
},
"display": {
"type": "string"
}
}
},
"dto.PriceInfo": {
"type": "object",
"properties": {
"currency": {
"type": "string"
},
"display": {
"type": "string"
},
"max_amount": {
"type": "number"
},
"min_amount": {
"type": "number"
}
}
},
"dto.ReduceCapacityRequest": {
"type": "object",
"required": [
"booking_id",
"class_id",
"number_to_reduce",
"slot_id",
"type_id"
],
"properties": {
"booking_id": {
"type": "string"
},
"class_id": {
"type": "string"
},
"number_to_reduce": {
"type": "integer"
},
"slot_id": {
"type": "string"
},
"type_id": {
"type": "string"
}
}
},
"dto.RoleDTO": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"role": {
"type": "string"
}
}
},
"dto.ScheduleItem": {
"type": "object",
"properties": {
"city": {
"type": "string"
},
"class_id": {
"type": "string"
},
"date": {
"type": "string"
},
"display_time": {
"type": "string"
},
"end_time": {
"type": "string"
},
"is_booked": {
"type": "boolean"
},
"schedule_id": {
"type": "string"
},
"start_time": {
"type": "string"
},
"studio_name": {
"type": "string"
},
"teacher_name": {
"type": "string"
},
"title": {
"type": "string"
}
}
},
"dto.ScheduleListItem": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"available_slots": {
"type": "integer"
},
"category": {
"type": "string"
},
"city": {
"type": "string"
},
"class_id": {
"type": "string"
},
"date": {
"type": "string"
},
"display_time": {
"type": "string"
},
"end_time": {
"type": "string"
},
"is_booked": {
"type": "boolean"
},
"level": {
"type": "string"
},
"price": {
"$ref": "#/definitions/dto.PriceData"
},
"schedule_id": {
"type": "string"
},
"start_time": {
"type": "string"
},
"studio_name": {
"type": "string"
},
"teacher_name": {
"type": "string"
},
"thumbnail_url": {
"type": "string"
},
"title": {
"type": "string"
}
}
},
"dto.ScheduleListResponse": {
"type": "object",
"properties": {
"items": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.ScheduleListItem"
}
},
"pagination": {
"$ref": "#/definitions/dto.PaginationMeta"
}
}
},
"dto.ScheduleListResponseWrapper": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/dto.ScheduleListResponse"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
},
"dto.SearchClassesResponse": {
"type": "object",
"properties": {
"current_location": {
"$ref": "#/definitions/dto.CurrentLocation"
},
"nearby_classes": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.ClassSearchResult"
}
},
"pagination": {
"$ref": "#/definitions/dto.Pagination"
},
"previous_classes": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.ClassSearchResult"
}
},
"search_context": {
"$ref": "#/definitions/dto.SearchContext"
}
}
},
"dto.SearchContext": {
"type": "object",
"properties": {
"query": {
"type": "string"
},
"selected_filters": {
"type": "object",
"additionalProperties": true
},
"sort_by": {
"type": "string"
},
"view_type": {
"type": "string"
}
}
},
"dto.SignInRequest": {
"type": "object",
"required": [
"email_or_username",
"password"
],
"properties": {
"email_or_username": {
"type": "string"
},
"password": {
"type": "string"
}
}
},
"dto.SignUpRequest": {
"type": "object",
"required": [
"email",
"password",
"username"
],
"properties": {
"email": {
"type": "string"
},
"name": {
"type": "string"
},
"password": {
"type": "string"
},
"username": {
"type": "string"
}
}
},
"dto.SortOption": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"is_default": {
"type": "boolean"
},
"label": {
"type": "string"
}
}
},
"dto.SuccessResponse-any": {
"type": "object",
"properties": {
"data": {},
"message": {},
"meta_data": {},
"status": {
"type": "string"
}
}
},
"dto.SummaryLocation": {
"type": "object",
"properties": {
"display": {
"type": "string"
},
"venue_name": {
"type": "string"
}
}
},
"dto.UpdateAboutYouRequest": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"city": {
"type": "string"
},
"dance_level": {
"type": "string"
},
"description": {
"type": "string"
},
"email": {
"type": "string"
},
"full_name": {
"type": "string"
},
"gender": {
"type": "string"
},
"id": {
"type": "string"
},
"interest": {
"type": "array",
"items": {
"type": "string"
}
},
"is_instructor": {
"type": "boolean"
},
"is_member": {
"type": "boolean"
},
"is_vo": {
"type": "boolean"
},
"nickname": {
"type": "string"
},
"other_interest": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"profile_media": {
"type": "string"
},
"province": {
"type": "string"
},
"rank": {
"type": "string"
},
"roles": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.RoleDTO"
}
}
}
},
"dto.UpdateClassBookingRequest": {
"type": "object",
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"class_id": {
"type": "string"
},
"payment_details": {
"type": "object"
},
"status": {
"type": "string"
}
}
},
"dto.UpdateClassBookingResponse": {
"type": "object",
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"booking_id": {
"type": "string"
},
"class_id": {
"type": "string"
},
"payment_details": {
"type": "object"
},
"status": {
"type": "string"
},
"user_id": {
"type": "string"
}
}
},
"dto.UpdateClassRequest": {
"type": "object",
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"capacity": {
"type": "integer"
},
"custom_field": {
"type": "object"
},
"description": {
"type": "string"
},
"schedule_type": {
"type": "string"
},
"title": {
"type": "string"
},
"venue_id": {
"type": "string"
}
}
},
"dto.UpdateEventBookingRequest": {
"type": "object",
"properties": {
"booking_status": {
"type": "string"
},
"payment_status": {
"type": "string"
}
}
},
"dto.UpdateEventPackageRequest": {
"type": "object",
"properties": {
"custom_field": {
"type": "object"
},
"description": {
"type": "string"
},
"name": {
"type": "string"
},
"partner_included": {
"type": "boolean"
},
"price": {
"type": "number"
}
}
},
"dto.UpdateEventRequest": {
"type": "object",
"properties": {
"capacity": {
"type": "integer"
},
"description": {
"type": "string"
},
"end_time": {
"type": "string"
},
"entrance_fee": {
"type": "number"
},
"event_date": {
"type": "string"
},
"event_media": {
"type": "object"
},
"schedule_type": {
"type": "string"
},
"start_time": {
"type": "string"
},
"title": {
"type": "string"
},
"venue_id": {
"type": "string"
}
}
},
"dto.UpdateUserRoleRequest": {
"type": "object",
"required": [
"role"
],
"properties": {
"role": {
"type": "string"
}
}
},
"dto.UpdateUserRolesRequest": {
"type": "object",
"required": [
"role"
],
"properties": {
"role": {
"type": "string"
}
}
},
"dto.UpdateVenueRequest": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"capacity": {
"type": "integer"
},
"city": {
"type": "string"
},
"closing_time": {
"type": "string"
},
"description": {
"type": "object",
"additionalProperties": true
},
"extra_facilities": {
"type": "array",
"items": {
"type": "string"
}
},
"facilities": {
"type": "array",
"items": {
"type": "string"
}
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"minimum_consumption": {
"type": "number"
},
"name": {
"type": "string"
},
"opening_time": {
"type": "string"
},
"province": {
"type": "string"
},
"venue_media": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": true
}
}
}
},
"dto.UserProfileResponse": {
"type": "object",
"properties": {
"age": {
"type": "integer"
},
"city": {
"type": "string"
},
"dance_level": {
"type": "string"
},
"description": {
"type": "string"
},
"email": {
"type": "string"
},
"full_name": {
"type": "string"
},
"gender": {
"type": "string"
},
"id": {
"type": "string"
},
"interest": {
"type": "array",
"items": {
"type": "string"
}
},
"is_instructor": {
"type": "boolean"
},
"is_member": {
"type": "boolean"
},
"is_vo": {
"type": "boolean"
},
"nickname": {
"type": "string"
},
"other_interest": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"profile_media": {
"type": "string"
},
"province": {
"type": "string"
},
"rank": {
"type": "string"
},
"roles": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.UserRoleResponse"
}
},
"updated_at": {
"type": "string"
}
}
},
"dto.UserRoleResponse": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"role": {
"type": "string"
}
}
},
"dto.VenueDetailMap": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"venue_name": {
"type": "string"
}
}
},
"dto.VenueDetailOwner": {
"type": "object",
"properties": {
"avatar_url": {
"type": "string"
},
"name": {
"type": "string"
},
"role": {
"type": "string"
}
}
},
"dto.VenueDetailRatings": {
"type": "object",
"properties": {
"food": {
"type": "number"
},
"music": {
"type": "number"
},
"parking": {
"type": "number"
},
"price": {
"type": "number"
},
"sound": {
"type": "number"
}
}
},
"dto.VenueDetailResponse": {
"type": "object",
"properties": {
"deletable": {
"type": "boolean"
},
"description": {
"type": "string"
},
"extra_facilities": {
"type": "array",
"items": {
"type": "string"
}
},
"facilities": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.Facility"
}
},
"hero_images": {
"type": "array",
"items": {
"type": "string"
}
},
"id": {
"type": "string"
},
"map": {
"$ref": "#/definitions/dto.VenueDetailMap"
},
"owner": {
"$ref": "#/definitions/dto.VenueDetailOwner"
},
"ratings": {
"$ref": "#/definitions/dto.VenueDetailRatings"
},
"summary": {
"$ref": "#/definitions/dto.VenueDetailSummary"
},
"title": {
"type": "string"
}
}
},
"dto.VenueDetailSummary": {
"type": "object",
"properties": {
"location": {
"$ref": "#/definitions/dto.VenueDetailSummaryLocation"
},
"price": {
"$ref": "#/definitions/dto.VenueDetailSummaryPrice"
},
"space_area": {
"$ref": "#/definitions/dto.VenueDetailSummarySpaceArea"
}
}
},
"dto.VenueDetailSummaryLocation": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"dto.VenueDetailSummaryPrice": {
"type": "object",
"properties": {
"display": {
"type": "string"
}
}
},
"dto.VenueDetailSummarySpaceArea": {
"type": "object",
"properties": {
"display": {
"type": "string"
}
}
},
"dto.VenueListResponse": {
"type": "object",
"properties": {
"pagination": {
"$ref": "#/definitions/dto.Pagination"
},
"venues": {
"type": "array",
"items": {
"$ref": "#/definitions/dto.VenueResponse"
}
}
}
},
"dto.VenueResponse": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"image": {
"type": "string"
},
"latitude": {
"type": "number"
},
"location": {
"type": "string"
},
"longitude": {
"type": "number"
},
"name": {
"type": "string"
},
"price": {
"type": "string"
},
"rooms": {
"type": "string"
},
"status": {
"type": "string"
}
}
},
"entities.Class": {
"type": "object",
"properties": {
"available_slots": {
"type": "object"
},
"available_types": {
"type": "object"
},
"capacity": {
"type": "integer"
},
"class_media": {
"type": "object"
},
"created_at": {
"type": "string"
},
"custom_field": {
"type": "object"
},
"description": {
"type": "object"
},
"end_time": {
"type": "string"
},
"id": {
"type": "string"
},
"instructor": {
"$ref": "#/definitions/entities.Instructor"
},
"instructor_id": {
"type": "string"
},
"price": {
"type": "number"
},
"schedule_type": {
"type": "string"
},
"start_time": {
"type": "string"
},
"title": {
"type": "string"
},
"venue": {
"$ref": "#/definitions/entities.Venue"
},
"venue_id": {
"type": "string"
}
}
},
"entities.Event": {
"type": "object",
"properties": {
"approval_status": {
"description": "Approval workflow",
"type": "string"
},
"capacity": {
"type": "integer"
},
"created_at": {
"type": "string"
},
"description": {
"type": "object"
},
"end_time": {
"type": "string"
},
"entrance_fee": {
"type": "number"
},
"event_date": {
"type": "string"
},
"event_media": {
"type": "object"
},
"host_user": {
"$ref": "#/definitions/entities.User"
},
"host_user_id": {
"type": "string"
},
"id": {
"type": "string"
},
"instructors": {
"type": "array",
"items": {
"$ref": "#/definitions/entities.EventInstructor"
}
},
"packages": {
"type": "array",
"items": {
"$ref": "#/definitions/entities.EventPackage"
}
},
"rejection_reason": {
"type": "string"
},
"schedule_type": {
"type": "string"
},
"start_time": {
"type": "string"
},
"title": {
"type": "string"
},
"updated_at": {
"type": "string"
},
"venue": {
"$ref": "#/definitions/entities.Venue"
},
"venue_id": {
"type": "string"
}
}
},
"entities.EventInstructor": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"event": {
"$ref": "#/definitions/entities.Event"
},
"event_id": {
"type": "string"
},
"id": {
"type": "string"
},
"instructor": {
"$ref": "#/definitions/entities.Instructor"
},
"instructor_id": {
"type": "string"
},
"partner_capacity": {
"type": "integer"
}
}
},
"entities.EventPackage": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"description": {
"type": "object"
},
"event": {
"$ref": "#/definitions/entities.Event"
},
"event_id": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"partner_included": {
"type": "boolean"
},
"price": {
"type": "number"
}
}
},
"entities.Facility": {
"type": "object",
"properties": {
"icon": {
"type": "string"
},
"id": {
"type": "string"
},
"name": {
"type": "string"
}
}
},
"entities.Instructor": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"id": {
"type": "string"
},
"introduction": {
"type": "object"
},
"profile_media": {
"type": "object"
},
"rank": {
"type": "string"
},
"specialization": {
"type": "object"
},
"user": {
"$ref": "#/definitions/entities.User"
},
"user_id": {
"type": "string"
}
}
},
"entities.User": {
"type": "object",
"properties": {
"additional_details": {
"type": "object"
},
"age": {
"type": "integer"
},
"city": {
"type": "string"
},
"created_at": {
"type": "string"
},
"dance_level": {
"type": "string"
},
"description": {
"type": "string"
},
"email": {
"type": "string"
},
"full_name": {
"type": "string"
},
"gender": {
"type": "string"
},
"id": {
"type": "string"
},
"interests": {
"type": "object"
},
"is_instructor": {
"type": "boolean"
},
"is_member": {
"type": "boolean"
},
"is_vo": {
"type": "boolean"
},
"nickname": {
"type": "string"
},
"other_interest": {
"type": "string"
},
"password_hash": {
"type": "string"
},
"phone_number": {
"type": "string"
},
"prefed_language": {
"type": "string"
},
"profile_media": {
"type": "string"
},
"province": {
"type": "string"
},
"rank": {
"type": "string"
},
"roles": {
"type": "array",
"items": {
"$ref": "#/definitions/entities.UserRole"
}
},
"updated_at": {
"type": "string"
}
}
},
"entities.UserRole": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"id": {
"type": "string"
},
"role": {
"type": "string"
},
"user": {
"$ref": "#/definitions/entities.User"
},
"user_id": {
"type": "string"
}
}
},
"entities.Venue": {
"type": "object",
"properties": {
"address": {
"type": "string"
},
"capacity": {
"type": "integer"
},
"city": {
"type": "string"
},
"closing_time": {
"type": "string"
},
"created_at": {
"type": "string"
},
"description": {
"type": "object"
},
"extra_facilities": {
"type": "array",
"items": {
"type": "string"
}
},
"facilities": {
"type": "array",
"items": {
"$ref": "#/definitions/entities.Facility"
}
},
"id": {
"type": "string"
},
"latitude": {
"type": "number"
},
"longitude": {
"type": "number"
},
"minimum_consumption": {
"type": "number"
},
"name": {
"type": "string"
},
"opening_time": {
"type": "string"
},
"owner": {
"$ref": "#/definitions/entities.VenueOwner"
},
"owner_id": {
"type": "string"
},
"province": {
"type": "string"
},
"rating_food": {
"type": "number"
},
"rating_music": {
"type": "number"
},
"rating_parking": {
"type": "number"
},
"rating_price": {
"type": "number"
},
"rating_sound": {
"type": "number"
},
"venue_media": {
"type": "object"
},
"verification_status": {
"type": "string"
}
}
},
"entities.VenueOwner": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"id": {
"type": "string"
},
"user": {
"$ref": "#/definitions/entities.User"
},
"user_id": {
"type": "string"
}
}
}
},
"securityDefinitions": {
"BearerAuth": {
"type": "apiKey",
"name": "Authorization",
"in": "header"
}
}
}