// 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.swagger.io/support", "email": "support@swagger.io" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" }, "version": "{{.Version}}" }, "host": "{{.Host}}", "basePath": "{{.BasePath}}", "paths": { "/agenda/list": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns all agendas for the specified event, regardless of status. Manager only.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Agenda" ], "summary": "List All Agendas", "parameters": [ { "type": "string", "description": "Event ID", "name": "event_id", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/service_agenda.AgendaListItem" } } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/agenda/my-list": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns the calling user's agenda submissions for the specified event. User must be a joined attendee (Lv10+).", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Agenda" ], "summary": "My Agenda List", "parameters": [ { "type": "string", "description": "Event ID", "name": "event_id", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/data.Agenda" } } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Not an Attendee", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/agenda/review": { "patch": { "security": [ { "Bearer": [] } ], "description": "Manager sets the status of an agenda to approved or rejected. Not allowed after agenda is published.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Agenda" ], "summary": "Review Agenda", "parameters": [ { "description": "Review Data", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_agenda.AgendaReviewData" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "400": { "description": "Invalid Input / Already Published", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event or Agenda Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/agenda/schedule": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns all approved and scheduled agenda items, sorted by start_time ascending. Returns 403 if the agenda has not been published.", "produces": [ "application/json" ], "tags": [ "Agenda" ], "summary": "Get Agenda Schedule", "parameters": [ { "type": "string", "description": "Event ID", "name": "event_id", "in": "query", "required": true } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/data.AgendaDoc" } } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Agenda Not Published", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } }, "patch": { "security": [ { "Bearer": [] } ], "description": "Manager sets start_time and end_time on an approved agenda item. Available even after publish.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Agenda" ], "summary": "Schedule Agenda", "parameters": [ { "description": "Schedule Data", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_agenda.AgendaScheduleData" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "400": { "description": "Invalid Input / Not Approved", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Agenda Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/agenda/submit": { "post": { "security": [ { "Bearer": [] } ], "description": "Creates a new agenda item for a specific attendance record.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Agenda" ], "summary": "Submit Agenda", "parameters": [ { "description": "Agenda Submission Data", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_agenda.SubmitData" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_agenda.SubmitResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/agenda/update": { "patch": { "security": [ { "Bearer": [] } ], "description": "Submitter may edit their own pending agendas before the event deadline. Managers may edit any agenda with no restrictions.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Agenda" ], "summary": "Update Agenda", "parameters": [ { "description": "Agenda Update Data", "name": "body", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_agenda.AgendaUpdateData" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "400": { "description": "Invalid Input / Not Pending / Deadline Passed", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Not Submitter", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Agenda Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/auth/exchange": { "post": { "security": [ { "Bearer": [] } ], "description": "Exchanges client credentials and user session for a specific redirect authorization code.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Exchange Auth Code", "parameters": [ { "description": "Exchange Request Credentials", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_auth.ExchangeData" } } ], "responses": { "200": { "description": "Successful exchange", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_auth.ExchangeResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/auth/magic": { "post": { "description": "Verifies Turnstile token and sends an authentication link via email. Returns the URI directly if debug mode is enabled.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Request Magic Link", "parameters": [ { "description": "Magic Link Request Data", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_auth.MagicData" } } ], "responses": { "200": { "description": "Successful request", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_auth.MagicResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Turnstile Verification Failed", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/auth/redirect": { "get": { "description": "Verifies the temporary email code, ensures the user exists (or creates one), validates the client's redirect URI, and finally performs a 302 redirect with a new authorization code.", "consumes": [ "application/x-www-form-urlencoded" ], "produces": [ "application/json", "text/html" ], "tags": [ "Authentication" ], "summary": "Handle Auth Callback and Redirect", "parameters": [ { "type": "string", "description": "Client Identifier", "name": "client_id", "in": "query", "required": true }, { "type": "string", "description": "Target Redirect URI", "name": "redirect_uri", "in": "query", "required": true }, { "type": "string", "description": "Temporary Verification Code", "name": "code", "in": "query", "required": true }, { "type": "string", "description": "Opaque state used to maintain state between the request and callback", "name": "state", "in": "query" } ], "responses": { "302": { "description": "Redirect to the provided RedirectUri with a new code", "schema": { "type": "string" } }, "400": { "description": "Invalid Input / Client Not Found / URI Mismatch", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Invalid or Expired Verification Code", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/auth/refresh": { "post": { "description": "Accepts a valid refresh token to issue a new access token and a rotated refresh token.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Refresh Access Token", "parameters": [ { "description": "Refresh Token Body", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_auth.RefreshData" } } ], "responses": { "200": { "description": "Successful rotation", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_auth.TokenResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Invalid Refresh Token", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/auth/token": { "post": { "description": "Verifies the provided authorization code and issues a pair of JWT tokens (Access and Refresh).", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Authentication" ], "summary": "Exchange Code for Token", "parameters": [ { "description": "Token Request Body", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_auth.TokenData" } } ], "responses": { "200": { "description": "Successful token issuance", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_auth.TokenResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Invalid or Expired Code", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/attendance": { "get": { "security": [ { "Bearer": [] } ], "description": "Retrieves the paginated list of attendees with optional filters. Only accessible by the event owner (Manager). Supports name substring search and KYC status filtering.", "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Get Attendance List", "parameters": [ { "type": "string", "description": "Event UUID", "name": "event_id", "in": "query", "required": true }, { "type": "string", "description": "Substring filter on attendee nickname", "name": "name", "in": "query" }, { "type": "string", "description": "KYC filter: 'with_kyc' or 'without_kyc'", "name": "kyc_status", "in": "query" }, { "type": "integer", "description": "Maximum number of results to return (default 20)", "name": "limit", "in": "query" }, { "type": "integer", "description": "Number of results to skip (default 0)", "name": "offset", "in": "query" }, { "type": "string", "description": "Sort field: 'checkin_at' (default) or 'id'", "name": "sort_by", "in": "query" }, { "type": "string", "description": "Sort direction: 'asc' or 'desc' (default)", "name": "sort_order", "in": "query" } ], "responses": { "200": { "description": "Successful retrieval", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/service_event.AttendanceListResponse" } } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Not Event Owner", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/checkin": { "get": { "security": [ { "Bearer": [] } ], "description": "Creates a temporary check-in code for the authenticated user and event.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Generate Check-in Code", "parameters": [ { "type": "string", "description": "Event UUID", "name": "event_id", "in": "query", "required": true } ], "responses": { "200": { "description": "Successfully generated code", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_event.CheckinResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Missing User ID / Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/checkin/query": { "get": { "description": "Returns the timestamp of when the user checked in, or null if not yet checked in.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Query Check-in Status", "parameters": [ { "type": "string", "description": "Event UUID", "name": "event_id", "in": "query", "required": true } ], "responses": { "200": { "description": "Current attendance status", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_event.CheckinQueryResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Record Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/checkin/submit": { "post": { "security": [ { "Bearer": [] } ], "description": "Submits the generated code to mark the user as attended.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Submit Check-in Code", "parameters": [ { "description": "Checkin Code Data", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_event.CheckinSubmitData" } } ], "responses": { "200": { "description": "Attendance marked successfully", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "400": { "description": "Invalid Code or Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/create": { "post": { "security": [ { "Bearer": [] } ], "description": "Allows a Lv30+ user to create a new event. Users at exactly Lv30 may only create events with type 'party'. Sets type and enable_kyc, which are immutable after creation.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Create an Event", "parameters": [ { "description": "Event Creation Details", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_event.EventCreateData" } } ], "responses": { "200": { "description": "Successfully created the event", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_event.EventCreateResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Missing User ID / Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Permission Denied / Type Not Allowed for this level", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error / Database Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/delete": { "delete": { "security": [ { "Bearer": [] } ], "description": "Permanently deletes an event. Requires Lv40+.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Delete an Event", "parameters": [ { "description": "Event to delete", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_event.EventDeleteData" } } ], "responses": { "200": { "description": "Successfully deleted", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/guide": { "get": { "security": [ { "Bearer": [] } ], "description": "Fetching attendance guide of an event using its UUID.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Get Event Guide", "parameters": [ { "type": "string", "description": "Event UUID", "name": "event_id", "in": "query", "required": true } ], "responses": { "200": { "description": "Successful retrieval", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_event.AttendanceGuideResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Missing User ID / Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/info": { "get": { "security": [ { "Bearer": [] } ], "description": "Fetches the name, start time, and end time of an event using its UUID.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Get Event Information", "parameters": [ { "type": "string", "description": "Event UUID", "name": "event_id", "in": "query", "required": true } ], "responses": { "200": { "description": "Successful retrieval", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_event.EventInfoResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Missing User ID / Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/join": { "post": { "security": [ { "Bearer": [] } ], "description": "Allows an authenticated user to join an event by providing the event ID. The user's role and state are initialized by the service.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Join an Event", "parameters": [ { "description": "Event Join Details (UserId and EventId are required)", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_event.EventJoinData" } } ], "responses": { "200": { "description": "Successfully joined the event", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_event.EventJoinResponse" } } } ] } }, "400": { "description": "Invalid Input or UUID Parse Failed", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Missing User ID / Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Unauthorized / Missing User ID / Event Limit Exceeded", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error / Database Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/list": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns a paginated list of events. Supports filtering by type and sorting. Lv30 users are automatically scoped to events they own.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "List Events", "parameters": [ { "type": "integer", "description": "Maximum number of events to return (default 20)", "name": "limit", "in": "query" }, { "type": "integer", "description": "Number of events to skip", "name": "offset", "in": "query", "required": true }, { "type": "string", "description": "Filter by event type: 'official' or 'party'", "name": "type", "in": "query" }, { "type": "string", "description": "Sort field: 'start_time' (default), 'end_time', 'name'", "name": "sort_by", "in": "query" }, { "type": "string", "description": "Sort direction: 'asc' or 'desc' (default)", "name": "sort_order", "in": "query" } ], "responses": { "200": { "description": "Successful paginated list retrieval", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_event.EventListResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/stats": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns join count, checkin count, KYC pass rate, and agenda submission count. Only accessible by the event owner (Manager).", "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Get Event Statistics", "parameters": [ { "type": "string", "description": "Event UUID", "name": "event_id", "in": "query", "required": true } ], "responses": { "200": { "description": "Statistics retrieved successfully", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_event.EventStatsResponse" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Not Event Owner", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/event/update": { "patch": { "security": [ { "Bearer": [] } ], "description": "Allows the event owner (Manager) to update name, subtitle, description, start_time, end_time, thumbnail, and is_agenda_published. Changes to type or enable_kyc are rejected. is_agenda_published is write-once: it can only be set to true (requires at least one agenda submission) and cannot be reverted.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "Event" ], "summary": "Update an Event", "parameters": [ { "description": "Fields to update (all optional except event_id)", "name": "request", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_event.EventUpdateData" } } ], "responses": { "200": { "description": "Successfully updated", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "400": { "description": "Invalid Input / Immutable Field / Agenda Pre-flight Failed", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Not Event Owner", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Event Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/kyc/query": { "post": { "security": [ { "Bearer": [] } ], "description": "Checks the current state of a KYC session and updates local database if approved.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "KYC" ], "summary": "Query KYC Status", "parameters": [ { "description": "KYC query data (KycId)", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_kyc.KycQueryData" } } ], "responses": { "200": { "description": "Query processed (success/pending/failed)", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_kyc.KycQueryResponse" } } } ] } }, "400": { "description": "Invalid UUID or input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/kyc/session": { "post": { "security": [ { "Bearer": [] } ], "description": "Initializes a KYC process (CNRid or Passport) and returns the status or redirect URI.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "KYC" ], "summary": "Create KYC Session", "parameters": [ { "description": "KYC session data (Type and Base64 Identity)", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_kyc.KycSessionData" } } ], "responses": { "200": { "description": "Session created successfully", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_kyc.KycSessionResponse" } } } ] } }, "400": { "description": "Invalid input or decode failed", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Missing User ID", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error / KYC Service Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/stats/global": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns total users, user counts per permission_level, and per-event join/checkin counts.", "produces": [ "application/json" ], "tags": [ "Stats" ], "summary": "Global Stats", "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_stats.GlobalStatsResponse" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/user/info": { "get": { "security": [ { "Bearer": [] } ], "description": "Fetches the complete profile data for the user associated with the provided session/token.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Get My User Information", "responses": { "200": { "description": "Successful profile retrieval", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_user.UserInfoData" } } } ] } }, "401": { "description": "Missing User ID / Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "User Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error (UUID Parse Failed)", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/user/info/{user_id}": { "get": { "security": [ { "Bearer": [] } ], "description": "Fetches the complete profile data for the user associated with the provided session/token.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Get Other User Information", "parameters": [ { "type": "string", "description": "Other user id", "name": "user_id", "in": "path", "required": true } ], "responses": { "200": { "description": "Successful profile retrieval", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "$ref": "#/definitions/service_user.UserInfoData" } } } ] } }, "401": { "description": "Missing User ID / Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "User Not Public", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "User Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error (UUID Parse Failed)", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/user/list": { "get": { "security": [ { "Bearer": [] } ], "description": "Returns a paginated list of users with permission_level included. Supports filtering by permission_level and sorting.", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "List Users (Admin)", "parameters": [ { "type": "string", "description": "Maximum number of users to return (default 20)", "name": "limit", "in": "query" }, { "type": "string", "description": "Number of users to skip", "name": "offset", "in": "query", "required": true }, { "type": "string", "description": "Sort field: 'id' (default) | 'permission_level'", "name": "sort_by", "in": "query" }, { "type": "string", "description": "Sort direction: 'asc' (default) | 'desc'", "name": "sort_order", "in": "query" }, { "type": "integer", "description": "Filter by exact permission level", "name": "permission_level", "in": "query" } ], "responses": { "200": { "description": "Successful paginated list retrieval", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/definitions/service_user.UserListResponse" } } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/user/update": { "patch": { "security": [ { "Bearer": [] } ], "description": "Updates specific profile fields such as username, nickname, subtitle, avatar (URL), and bio (Base64).\nValidation: Username (5-255 chars), Nickname (max 24 chars), Subtitle (max 32 chars).", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Update User Information", "parameters": [ { "description": "Updated User Profile Data", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_user.UserInfoUpdateData" } } ], "responses": { "200": { "description": "Successful profile update", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "401": { "description": "Unauthorized", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } }, "/user/update/{user_id}": { "patch": { "security": [ { "Bearer": [] } ], "description": "Lv40+ operators may update any user with a strictly lower permission_level. Editable fields: all profile fields plus permission_level (new value must be below operator's own level).", "consumes": [ "application/json" ], "produces": [ "application/json" ], "tags": [ "User" ], "summary": "Admin Update User", "parameters": [ { "type": "string", "description": "Target User ID", "name": "user_id", "in": "path", "required": true }, { "description": "Fields to update", "name": "payload", "in": "body", "required": true, "schema": { "$ref": "#/definitions/service_user.UserInfoUpdateData" } } ], "responses": { "200": { "description": "OK", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "400": { "description": "Invalid Input", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "403": { "description": "Permission Matrix Violation", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "404": { "description": "Target User Not Found", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } }, "500": { "description": "Internal Server Error", "schema": { "allOf": [ { "$ref": "#/definitions/utils.RespStatus" }, { "type": "object", "properties": { "data": { "type": "object" } } } ] } } } } } }, "definitions": { "data.Agenda": { "type": "object", "properties": { "agenda_id": { "type": "string" }, "attendance_id": { "type": "string" }, "description": { "description": "base64 encoded markdown", "type": "string" }, "end_time": { "type": "string" }, "id": { "type": "integer" }, "name": { "type": "string" }, "start_time": { "type": "string" }, "status": { "description": "pending | approved | rejected", "type": "string" }, "uuid": { "type": "string" } } }, "data.AgendaDoc": { "type": "object", "properties": { "agenda_id": { "type": "string" }, "attendance_id": { "type": "string" }, "description": { "type": "string" }, "end_time": { "type": "string" }, "name": { "type": "string" }, "start_time": { "type": "string" }, "status": { "type": "string" } } }, "data.EventStatDoc": { "type": "object", "properties": { "checkin_count": { "type": "integer" }, "event_id": { "type": "string" }, "join_count": { "type": "integer" }, "name": { "type": "string" } } }, "data.PermissionLevelCount": { "type": "object", "properties": { "count": { "type": "integer" }, "permission_level": { "type": "integer" } } }, "service_agenda.AgendaListItem": { "type": "object", "properties": { "agenda_id": { "type": "string" }, "attendance_id": { "type": "string" }, "description": { "type": "string" }, "end_time": { "type": "string" }, "name": { "type": "string" }, "start_time": { "type": "string" }, "status": { "type": "string" }, "user_profile": { "$ref": "#/definitions/service_agenda.AgendaUserProfile" } } }, "service_agenda.AgendaReviewData": { "type": "object", "required": [ "agenda_id", "event_id", "status" ], "properties": { "agenda_id": { "type": "string" }, "event_id": { "type": "string" }, "status": { "description": "approved | rejected", "type": "string" } } }, "service_agenda.AgendaScheduleData": { "type": "object", "required": [ "agenda_id", "end_time", "start_time" ], "properties": { "agenda_id": { "type": "string" }, "end_time": { "type": "string" }, "start_time": { "type": "string" } } }, "service_agenda.AgendaUpdateData": { "type": "object", "required": [ "agenda_id" ], "properties": { "agenda_id": { "type": "string" }, "description": { "type": "string" }, "name": { "type": "string" } } }, "service_agenda.AgendaUserProfile": { "type": "object", "properties": { "nickname": { "type": "string" }, "user_id": { "type": "string" }, "username": { "type": "string" } } }, "service_agenda.SubmitData": { "type": "object", "required": [ "description", "event_id", "name" ], "properties": { "description": { "type": "string" }, "event_id": { "type": "string" }, "name": { "type": "string" } } }, "service_agenda.SubmitResponse": { "type": "object", "properties": { "agenda_id": { "type": "string" } } }, "service_auth.ExchangeData": { "type": "object", "required": [ "client_id", "redirect_uri" ], "properties": { "client_id": { "type": "string" }, "redirect_uri": { "type": "string" }, "state": { "type": "string" } } }, "service_auth.ExchangeResponse": { "type": "object", "required": [ "redirect_uri" ], "properties": { "redirect_uri": { "type": "string" } } }, "service_auth.MagicData": { "type": "object", "required": [ "client_id", "email", "redirect_uri", "turnstile_token" ], "properties": { "client_id": { "type": "string" }, "client_ip": { "type": "string" }, "email": { "type": "string" }, "redirect_uri": { "type": "string" }, "state": { "type": "string" }, "turnstile_token": { "type": "string" } } }, "service_auth.MagicResponse": { "type": "object", "required": [ "uri" ], "properties": { "uri": { "type": "string" } } }, "service_auth.RefreshData": { "type": "object", "required": [ "refresh_token" ], "properties": { "refresh_token": { "type": "string" } } }, "service_auth.TokenData": { "type": "object", "required": [ "code" ], "properties": { "code": { "type": "string" } } }, "service_auth.TokenResponse": { "type": "object", "required": [ "access_token", "refresh_token" ], "properties": { "access_token": { "type": "string" }, "refresh_token": { "type": "string" } } }, "service_event.AttendanceGuideResponse": { "type": "object", "required": [ "attendance_guide" ], "properties": { "attendance_guide": { "type": "string" } } }, "service_event.AttendanceListResponse": { "type": "object", "required": [ "attendance_id", "user_info" ], "properties": { "attendance_id": { "type": "string" }, "checked_in_at": { "type": "string" }, "joined_at": { "type": "string" }, "kyc_info": {}, "kyc_status": { "type": "string" }, "kyc_type": { "type": "string" }, "user_info": { "$ref": "#/definitions/service_user.UserInfoData" } } }, "service_event.CheckinQueryResponse": { "type": "object", "properties": { "checkin_at": { "type": "string" } } }, "service_event.CheckinResponse": { "type": "object", "required": [ "checkin_code" ], "properties": { "checkin_code": { "type": "string" } } }, "service_event.CheckinSubmitData": { "type": "object", "required": [ "checkin_code" ], "properties": { "checkin_code": { "type": "string" } } }, "service_event.EventCreateData": { "type": "object", "required": [ "name", "type" ], "properties": { "attendance_guide": { "type": "string" }, "description": { "type": "string" }, "enable_kyc": { "type": "boolean" }, "end_time": { "type": "string" }, "limit": { "type": "integer" }, "name": { "type": "string" }, "quota": { "type": "integer" }, "start_time": { "type": "string" }, "subtitle": { "type": "string" }, "thumbnail": { "type": "string" }, "type": { "type": "string" } } }, "service_event.EventCreateResponse": { "type": "object", "required": [ "event_id" ], "properties": { "event_id": { "type": "string" } } }, "service_event.EventDeleteData": { "type": "object", "required": [ "event_id" ], "properties": { "event_id": { "type": "string" } } }, "service_event.EventInfoResponse": { "type": "object", "required": [ "enable_kyc", "end_time", "event_id", "name", "start_time", "subtitle", "type" ], "properties": { "checkin_count": { "type": "integer" }, "description": { "type": "string" }, "enable_kyc": { "type": "boolean" }, "end_time": { "type": "string" }, "event_id": { "type": "string" }, "is_agenda_published": { "type": "boolean" }, "is_checked_in": { "type": "boolean" }, "is_joined": { "type": "boolean" }, "join_count": { "type": "integer" }, "limit": { "type": "integer" }, "name": { "type": "string" }, "owner": { "type": "string" }, "quota": { "type": "integer" }, "start_time": { "type": "string" }, "subtitle": { "type": "string" }, "thumbnail": { "type": "string" }, "type": { "type": "string" } } }, "service_event.EventJoinData": { "type": "object", "required": [ "event_id" ], "properties": { "event_id": { "type": "string" }, "kyc_id": { "type": "string" } } }, "service_event.EventJoinResponse": { "type": "object", "required": [ "attendance_id" ], "properties": { "attendance_id": { "type": "string" } } }, "service_event.EventListItems": { "type": "object", "required": [ "enable_kyc", "end_time", "event_id", "name", "start_time", "subtitle", "type" ], "properties": { "checkin_count": { "type": "integer" }, "description": { "type": "string" }, "enable_kyc": { "type": "boolean" }, "end_time": { "type": "string" }, "event_id": { "type": "string" }, "is_agenda_published": { "type": "boolean" }, "is_checked_in": { "type": "boolean" }, "is_joined": { "type": "boolean" }, "join_count": { "type": "integer" }, "name": { "type": "string" }, "owner": { "type": "string" }, "start_time": { "type": "string" }, "subtitle": { "type": "string" }, "thumbnail": { "type": "string" }, "type": { "type": "string" } } }, "service_event.EventListResponse": { "type": "object", "properties": { "items": { "type": "array", "items": { "$ref": "#/definitions/service_event.EventListItems" } }, "total": { "type": "integer" } } }, "service_event.EventStatsResponse": { "type": "object", "properties": { "agenda_submission_count": { "type": "integer" }, "checkin_count": { "type": "integer" }, "join_count": { "type": "integer" }, "kyc_pass_rate": { "type": "number" } } }, "service_event.EventUpdateData": { "type": "object", "required": [ "event_id" ], "properties": { "attendance_guide": { "type": "string" }, "description": { "type": "string" }, "end_time": { "type": "string" }, "event_id": { "type": "string" }, "is_agenda_published": { "type": "boolean" }, "limit": { "type": "integer" }, "name": { "type": "string" }, "quota": { "type": "integer" }, "start_time": { "type": "string" }, "subtitle": { "type": "string" }, "thumbnail": { "type": "string" } } }, "service_kyc.KycQueryData": { "type": "object", "required": [ "kyc_id" ], "properties": { "kyc_id": { "type": "string" } } }, "service_kyc.KycQueryResponse": { "type": "object", "required": [ "status" ], "properties": { "status": { "description": "success | pending | failed", "type": "string" } } }, "service_kyc.KycSessionData": { "type": "object", "required": [ "identity", "type" ], "properties": { "identity": { "description": "base64 json", "type": "string" }, "type": { "description": "cnrid | passport", "type": "string" } } }, "service_kyc.KycSessionResponse": { "type": "object", "required": [ "status" ], "properties": { "kyc_id": { "type": "string" }, "redirect_uri": { "type": "string" }, "status": { "description": "success | processing", "type": "string" } } }, "service_stats.GlobalStatsResponse": { "type": "object", "properties": { "event_join_checkin": { "type": "array", "items": { "$ref": "#/definitions/data.EventStatDoc" } }, "total_users": { "type": "integer" }, "users_per_level": { "type": "array", "items": { "$ref": "#/definitions/data.PermissionLevelCount" } } } }, "service_user.UserInfoData": { "type": "object", "required": [ "allow_public", "email", "permission_level", "user_id", "username" ], "properties": { "allow_public": { "type": "boolean" }, "avatar": { "type": "string" }, "bio": { "type": "string" }, "email": { "type": "string" }, "nickname": { "type": "string" }, "permission_level": { "type": "integer" }, "subtitle": { "type": "string" }, "user_id": { "type": "string" }, "username": { "type": "string" } } }, "service_user.UserInfoUpdateData": { "type": "object", "properties": { "allow_public": { "type": "boolean" }, "avatar": { "type": "string" }, "bio": { "type": "string" }, "nickname": { "type": "string" }, "permission_level": { "type": "integer" }, "subtitle": { "type": "string" }, "user_id": { "type": "string" }, "username": { "type": "string" } } }, "service_user.UserListResponse": { "type": "object", "properties": { "avatar": { "type": "string" }, "email": { "type": "string" }, "nickname": { "type": "string" }, "permission_level": { "type": "integer" }, "subtitle": { "type": "string" }, "user_id": { "type": "string" }, "username": { "type": "string" } } }, "utils.RespStatus": { "type": "object", "required": [ "code", "data", "error_id", "status" ], "properties": { "code": { "type": "integer" }, "data": {}, "error_id": { "type": "string" }, "status": { "type": "string" } } } }, "securityDefinitions": { "Bearer": { "type": "apiKey", "name": "Authorization", "in": "header" } } }` // SwaggerInfo holds exported Swagger Info so clients can modify it var SwaggerInfo = &swag.Spec{ Version: "1.0", Host: "localhost:8000", BasePath: "/app/api/v1", Schemes: []string{"http", "https"}, Title: "NixCN CMS API", Description: "API Docs based on Gin framework", InfoInstanceName: "swagger", SwaggerTemplate: docTemplate, LeftDelim: "{{", RightDelim: "}}", } func init() { swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo) }