sno-quiz/backend/docs/docs.go
2025-09-17 22:22:14 +03:00

2101 lines
72 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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}}",
"contact": {},
"version": "{{.Version}}"
},
"host": "{{.Host}}",
"basePath": "{{.BasePath}}",
"paths": {
"/api/admin/analytics": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Returns analytics data including user statistics, rewards, and quiz performance (admin/operator only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"admin"
],
"summary": "Get analytics data",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/operators": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Creates a new operator account (admin only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"admin"
],
"summary": "Create operator",
"parameters": [
{
"description": "Create operator request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.CreateOperatorRequest"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/operators/{id}": {
"delete": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Deletes an operator account (admin only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"admin"
],
"summary": "Delete operator",
"parameters": [
{
"type": "integer",
"description": "Operator Telegram ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/qrcodes": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Generates unique QR codes for rewards, quizzes, or shop items (admin/operator only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"qr"
],
"summary": "Generate QR codes",
"parameters": [
{
"description": "QR codes generation request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.GenerateQRCodesRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.GenerateQRCodesResponse"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/quizzes": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Creates a new quiz (admin/operator only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"quizzes"
],
"summary": "Create a new quiz",
"parameters": [
{
"description": "Quiz object",
"name": "quiz",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.Quiz"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.Quiz"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/quizzes/{id}": {
"put": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Updates an existing quiz (admin only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"quizzes"
],
"summary": "Update a quiz",
"parameters": [
{
"type": "integer",
"description": "Quiz ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "Updated quiz object",
"name": "quiz",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.Quiz"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.Quiz"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
},
"delete": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Deletes a quiz (admin only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"quizzes"
],
"summary": "Delete a quiz",
"parameters": [
{
"type": "integer",
"description": "Quiz ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/quizzes/{quiz_id}/questions": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Adds a new question to a quiz (admin/operator only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"questions"
],
"summary": "Create question",
"parameters": [
{
"type": "integer",
"description": "Quiz ID",
"name": "quiz_id",
"in": "path",
"required": true
},
{
"description": "Question object",
"name": "question",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.Question"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.Question"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/rewards": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Creates a new reward that users can purchase with stars (admin/operator only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"rewards"
],
"summary": "Create a new reward",
"parameters": [
{
"description": "Reward object",
"name": "reward",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.Reward"
}
}
],
"responses": {
"201": {
"description": "Created",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.Reward"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/rewards/{id}": {
"put": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Updates an existing reward (admin only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"rewards"
],
"summary": "Update a reward",
"parameters": [
{
"type": "integer",
"description": "Reward ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "Updated reward object",
"name": "reward",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.Reward"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.Reward"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
},
"delete": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Deletes a reward (admin only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"rewards"
],
"summary": "Delete a reward",
"parameters": [
{
"type": "integer",
"description": "Reward ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/admin/users/grant-stars": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Manually grants stars to a user (admin only)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"admin"
],
"summary": "Grant stars to user",
"parameters": [
{
"description": "Grant stars request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.GrantStarsRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/auth/me": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Returns information about the currently authenticated Telegram user",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"auth"
],
"summary": "Get current authenticated user",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/auth/validate": {
"post": {
"description": "Validates Telegram WebApp init data and returns user information",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"auth"
],
"summary": "Validate Telegram WebApp init data",
"parameters": [
{
"description": "Init data validation request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"type": "object",
"properties": {
"initData": {
"type": "string"
}
}
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/me": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Returns the current user's profile information including balance",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"user"
],
"summary": "Get current user profile",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.User"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/qr/validate": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Validates a QR code payload and processes the associated action",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"qr"
],
"summary": "Validate QR code payload",
"parameters": [
{
"description": "QR validation request",
"name": "request",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.QRValidateRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"401": {
"description": "Unauthorized",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/quizzes": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Returns a list of all active quizzes",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"quizzes"
],
"summary": "Get all active quizzes",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/models.Quiz"
}
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/quizzes/{id}": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Returns a single quiz with all its questions",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"quizzes"
],
"summary": "Get quiz by ID",
"parameters": [
{
"type": "integer",
"description": "Quiz ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.Quiz"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"404": {
"description": "Not Found",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/quizzes/{id}/can-repeat": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Checks if user can repeat a quiz and when it will be available",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"quizzes"
],
"summary": "Check if quiz can be repeated",
"parameters": [
{
"type": "integer",
"description": "Quiz ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.CanRepeatResponse"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/quizzes/{id}/submit": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Submits quiz answers and calculates score/stars earned",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"quizzes"
],
"summary": "Submit quiz answers",
"parameters": [
{
"type": "integer",
"description": "Quiz ID",
"name": "id",
"in": "path",
"required": true
},
{
"description": "Quiz submission",
"name": "submission",
"in": "body",
"required": true,
"schema": {
"$ref": "#/definitions/models.SubmissionRequest"
}
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "object"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/rewards": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Returns a list of all active rewards available for purchase",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"rewards"
],
"summary": "Get all active rewards",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/models.Reward"
}
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/rewards/{id}/purchase": {
"post": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Allows a user to purchase a reward using their stars",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"rewards"
],
"summary": "Purchase a reward",
"parameters": [
{
"type": "integer",
"description": "Reward ID",
"name": "id",
"in": "path",
"required": true
}
],
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"$ref": "#/definitions/models.Purchase"
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"400": {
"description": "Bad Request",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/user/purchases": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Returns the current user's purchase history",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"user"
],
"summary": "Get user purchase history",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/models.Purchase"
}
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
},
"/api/user/transactions": {
"get": {
"security": [
{
"ApiKeyAuth": []
}
],
"description": "Returns the current user's transaction history (earned/spent stars)",
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"tags": [
"user"
],
"summary": "Get user transaction history",
"responses": {
"200": {
"description": "OK",
"schema": {
"type": "object",
"properties": {
"data": {
"type": "array",
"items": {
"$ref": "#/definitions/models.Transaction"
}
},
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
},
"500": {
"description": "Internal Server Error",
"schema": {
"type": "object",
"properties": {
"message": {
"type": "string"
},
"success": {
"type": "boolean"
}
}
}
}
}
}
}
},
"definitions": {
"models.CanRepeatResponse": {
"type": "object",
"properties": {
"can_repeat": {
"type": "boolean"
},
"next_available_at": {
"type": "string"
}
}
},
"models.CreateOperatorRequest": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"telegram_id": {
"type": "integer"
}
}
},
"models.DeliveryType": {
"type": "string",
"enum": [
"physical",
"digital"
],
"x-enum-varnames": [
"Physical",
"Digital"
]
},
"models.GenerateQRCodesRequest": {
"type": "object",
"properties": {
"count": {
"description": "Number of codes to generate",
"type": "integer"
},
"type": {
"description": "e.g., \"reward\", \"quiz\"",
"type": "string"
},
"value": {
"description": "e.g., \"50\" for reward, \"1\" for quiz",
"type": "string"
}
}
},
"models.GenerateQRCodesResponse": {
"type": "object",
"properties": {
"tokens": {
"description": "List of generated unique tokens",
"type": "array",
"items": {
"type": "string"
}
}
}
},
"models.GrantStarsRequest": {
"type": "object",
"properties": {
"amount": {
"type": "integer"
},
"user_id": {
"type": "integer"
}
}
},
"models.Option": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"is_correct": {
"type": "boolean"
},
"text": {
"type": "string"
}
}
},
"models.Purchase": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"purchased_at": {
"type": "string"
},
"reward_id": {
"type": "integer"
},
"stars_spent": {
"type": "integer"
},
"status": {
"$ref": "#/definitions/models.PurchaseStatus"
},
"user_id": {
"type": "integer"
}
}
},
"models.PurchaseStatus": {
"type": "string",
"enum": [
"pending",
"delivered",
"cancelled"
],
"x-enum-varnames": [
"Pending",
"Delivered",
"Cancelled"
]
},
"models.QRValidateRequest": {
"type": "object",
"properties": {
"payload": {
"type": "string"
}
}
},
"models.Question": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"options": {
"description": "Stored as JSONB",
"type": "array",
"items": {
"$ref": "#/definitions/models.Option"
}
},
"order_index": {
"type": "integer"
},
"quiz_id": {
"type": "integer"
},
"text": {
"type": "string"
},
"type": {
"$ref": "#/definitions/models.QuestionType"
}
}
},
"models.QuestionType": {
"type": "string",
"enum": [
"single",
"multiple"
],
"x-enum-varnames": [
"Single",
"Multiple"
]
},
"models.Quiz": {
"type": "object",
"properties": {
"can_repeat": {
"type": "boolean"
},
"created_at": {
"type": "string"
},
"created_by": {
"type": "integer"
},
"description": {
"type": "string"
},
"has_timer": {
"type": "boolean"
},
"id": {
"type": "integer"
},
"image_url": {
"type": "string"
},
"is_active": {
"type": "boolean"
},
"questions": {
"description": "This field is for API responses, not DB storage",
"type": "array",
"items": {
"$ref": "#/definitions/models.Question"
}
},
"repeat_cooldown_hours": {
"type": "integer"
},
"reward_stars": {
"type": "integer"
},
"timer_per_question": {
"type": "integer"
},
"title": {
"type": "string"
}
}
},
"models.Reward": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"created_by": {
"type": "integer"
},
"delivery_type": {
"$ref": "#/definitions/models.DeliveryType"
},
"description": {
"type": "string"
},
"id": {
"type": "integer"
},
"image_url": {
"type": "string"
},
"instructions": {
"type": "string"
},
"is_active": {
"type": "boolean"
},
"price_stars": {
"type": "integer"
},
"stock": {
"type": "integer"
},
"title": {
"type": "string"
}
}
},
"models.SubmissionRequest": {
"type": "object",
"properties": {
"answers": {
"type": "array",
"items": {
"$ref": "#/definitions/models.UserAnswer"
}
}
}
},
"models.Transaction": {
"type": "object",
"properties": {
"amount": {
"type": "integer"
},
"created_at": {
"type": "string"
},
"description": {
"type": "string"
},
"type": {
"$ref": "#/definitions/models.TransactionType"
}
}
},
"models.TransactionType": {
"type": "string",
"enum": [
"earned",
"spent"
],
"x-enum-varnames": [
"TransactionEarned",
"TransactionSpent"
]
},
"models.User": {
"type": "object",
"properties": {
"created_at": {
"type": "string"
},
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
},
"stars_balance": {
"type": "integer"
},
"telegram_id": {
"type": "integer"
},
"username": {
"type": "string"
}
}
},
"models.UserAnswer": {
"type": "object",
"properties": {
"option_ids": {
"type": "array",
"items": {
"type": "integer"
}
},
"question_id": {
"type": "integer"
}
}
}
},
"securityDefinitions": {
"ApiKeyAuth": {
"type": "apiKey",
"name": "Authorization",
"in": "header"
},
"BasicAuth": {
"type": "basic"
}
}
}`
// SwaggerInfo holds exported Swagger Info so clients can modify it
var SwaggerInfo = &swag.Spec{
Version: "1.0",
Host: "localhost:8080",
BasePath: "/",
Schemes: []string{},
Title: "Telegram Quiz Mini App API",
Description: "API для Telegram Mini App с викторинами, QR-сканированием и внутренней валютой",
InfoInstanceName: "swagger",
SwaggerTemplate: docTemplate,
LeftDelim: "{{",
RightDelim: "}}",
}
func init() {
swag.Register(SwaggerInfo.InstanceName(), SwaggerInfo)
}