Files
iddaai-be/mds/backend_endpoints_swagger_summary.json
fahricansecer 2f0b85a0c7
Deploy Iddaai Backend / build-and-deploy (push) Failing after 18s
first (part 2: other directories)
2026-04-16 15:11:25 +03:00

4486 lines
122 KiB
JSON
Executable File

{
"generatedAt": "2026-03-25T00:30:00.000Z",
"generatedBy": "src/scripts/export-swagger-endpoints-summary.ts",
"project": "Suggest-Bet-BE",
"swagger": {
"docsPath": "/api/docs",
"globalPrefix": "/api",
"endpointCountInSwagger": 60,
"endpointCountTotal": 60,
"warnings": [
"Swagger output reflects loaded modules for current environment.",
"This export forces REDIS_ENABLED=true to include conditional Prediction endpoints."
]
},
"stats": {
"byTag": [
{
"tag": "Admin",
"count": 11
},
{
"tag": "Analysis",
"count": 2
},
{
"tag": "Auth",
"count": 4
},
{
"tag": "Coupon",
"count": 6
},
{
"tag": "Health",
"count": 3
},
{
"tag": "Leagues",
"count": 8
},
{
"tag": "Matches",
"count": 4
},
{
"tag": "Predictions",
"count": 7
},
{
"tag": "Spor Toto",
"count": 10
},
{
"tag": "Users",
"count": 5
}
],
"endpointsWithoutSummary": [],
"endpointsWithoutResponseSchema": [
{
"operationId": "AdminController_getAnalyticsOverview",
"method": "GET",
"path": "/api/admin/analytics/overview"
},
{
"operationId": "AdminController_getAllSettings",
"method": "GET",
"path": "/api/admin/settings"
},
{
"operationId": "AdminController_updateSetting",
"method": "PUT",
"path": "/api/admin/settings/{key}"
},
{
"operationId": "AdminController_getAllUsageLimits",
"method": "GET",
"path": "/api/admin/usage-limits"
},
{
"operationId": "AdminController_resetAllUsageLimits",
"method": "POST",
"path": "/api/admin/usage-limits/reset-all"
},
{
"operationId": "AdminController_getAllUsers",
"method": "GET",
"path": "/api/admin/users"
},
{
"operationId": "AdminController_deleteUser",
"method": "DELETE",
"path": "/api/admin/users/{id}"
},
{
"operationId": "AdminController_getUserById",
"method": "GET",
"path": "/api/admin/users/{id}"
},
{
"operationId": "AdminController_updateUserRole",
"method": "PUT",
"path": "/api/admin/users/{id}/role"
},
{
"operationId": "AdminController_updateUserSubscription",
"method": "PUT",
"path": "/api/admin/users/{id}/subscription"
},
{
"operationId": "AdminController_toggleUserActive",
"method": "PUT",
"path": "/api/admin/users/{id}/toggle-active"
},
{
"operationId": "AnalysisController_analyzeMatches",
"method": "POST",
"path": "/api/analysis/analyze-matches"
},
{
"operationId": "AnalysisController_getHistory",
"method": "GET",
"path": "/api/analysis/history"
},
{
"operationId": "AuthController_logout",
"method": "POST",
"path": "/api/auth/logout"
},
{
"operationId": "CouponsController_analyzeMatch",
"method": "POST",
"path": "/api/coupon/analyze-match"
},
{
"operationId": "CouponsController_createCoupon",
"method": "POST",
"path": "/api/coupon/create"
},
{
"operationId": "CouponsController_getDailyBanko",
"method": "POST",
"path": "/api/coupon/daily-banko"
},
{
"operationId": "CouponsController_getHistory",
"method": "GET",
"path": "/api/coupon/history"
},
{
"operationId": "CouponsController_getUserStats",
"method": "GET",
"path": "/api/coupon/my-stats"
},
{
"operationId": "CouponsController_suggestCoupon",
"method": "POST",
"path": "/api/coupon/suggest"
},
{
"operationId": "HealthController_liveness",
"method": "GET",
"path": "/api/health/live"
},
{
"operationId": "LeaguesController_getLeagues",
"method": "GET",
"path": "/api/leagues"
},
{
"operationId": "LeaguesController_getLeagueById",
"method": "GET",
"path": "/api/leagues/{id}"
},
{
"operationId": "LeaguesController_getCountries",
"method": "GET",
"path": "/api/leagues/countries"
},
{
"operationId": "LeaguesController_getCountryById",
"method": "GET",
"path": "/api/leagues/countries/{id}"
},
{
"operationId": "LeaguesController_getTeamById",
"method": "GET",
"path": "/api/leagues/teams/{id}"
},
{
"operationId": "LeaguesController_getTeamMatches",
"method": "GET",
"path": "/api/leagues/teams/{id}/matches"
},
{
"operationId": "LeaguesController_getHeadToHead",
"method": "GET",
"path": "/api/leagues/teams/h2h"
},
{
"operationId": "LeaguesController_searchTeams",
"method": "GET",
"path": "/api/leagues/teams/search"
},
{
"operationId": "MatchesController_listMatches",
"method": "GET",
"path": "/api/matches"
},
{
"operationId": "MatchesController_getMatchDetails",
"method": "GET",
"path": "/api/matches/{id}"
},
{
"operationId": "PredictionsController_getPrediction",
"method": "GET",
"path": "/api/predictions/{matchId}"
},
{
"operationId": "PredictionsController_generateSmartCoupon",
"method": "POST",
"path": "/api/predictions/smart-coupon"
},
{
"operationId": "UsersController_findAll",
"method": "GET",
"path": "/api/users"
},
{
"operationId": "UsersController_findOne",
"method": "GET",
"path": "/api/users/{id}"
},
{
"operationId": "UsersController_update",
"method": "PUT",
"path": "/api/users/{id}"
},
{
"operationId": "UsersController_restore",
"method": "POST",
"path": "/api/users/{id}/restore"
}
]
},
"endpoints": [
{
"inSwagger": true,
"operationId": "AdminController_getAnalyticsOverview",
"method": "GET",
"path": "/api/admin/analytics/overview",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Get system analytics overview",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "getAnalyticsOverview",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_getAllSettings",
"method": "GET",
"path": "/api/admin/settings",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Get all app settings",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ApiResponse<Record<string, string>>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "getAllSettings",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_updateSetting",
"method": "PUT",
"path": "/api/admin/settings/{key}",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Update an app setting",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "key",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "data",
"type": "{ value: string }",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<ApiResponse<{ key: string; value: string }>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "updateSetting",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_getAllUsageLimits",
"method": "GET",
"path": "/api/admin/usage-limits",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Get all usage limits",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "page",
"in": "query",
"required": false,
"description": "Page number",
"type": "number",
"enum": [],
"default": 1,
"format": null
},
{
"name": "limit",
"in": "query",
"required": false,
"description": "Items per page",
"type": "number",
"enum": [],
"default": 10,
"format": null
},
{
"name": "sortBy",
"in": "query",
"required": false,
"description": "Field to sort by",
"type": "string",
"enum": [],
"default": null,
"format": null
},
{
"name": "sortOrder",
"in": "query",
"required": false,
"description": "Sort order",
"type": "string(asc | desc)",
"enum": [
"asc",
"desc"
],
"default": "desc",
"format": null
},
{
"name": "search",
"in": "query",
"required": false,
"description": "Search query",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "getAllUsageLimits",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_resetAllUsageLimits",
"method": "POST",
"path": "/api/admin/usage-limits/reset-all",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Reset all usage limits",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ApiResponse<{ count: number }>>",
"statuses": [
{
"status": 201,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "resetAllUsageLimits",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_getAllUsers",
"method": "GET",
"path": "/api/admin/users",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Get all users (admin)",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "page",
"in": "query",
"required": false,
"description": "Page number",
"type": "number",
"enum": [],
"default": 1,
"format": null
},
{
"name": "limit",
"in": "query",
"required": false,
"description": "Items per page",
"type": "number",
"enum": [],
"default": 10,
"format": null
},
{
"name": "sortBy",
"in": "query",
"required": false,
"description": "Field to sort by",
"type": "string",
"enum": [],
"default": null,
"format": null
},
{
"name": "sortOrder",
"in": "query",
"required": false,
"description": "Sort order",
"type": "string(asc | desc)",
"enum": [
"asc",
"desc"
],
"default": "desc",
"format": null
},
{
"name": "search",
"in": "query",
"required": false,
"description": "Search query",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ApiResponse<PaginatedData<UserResponseDto>>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "getAllUsers",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_deleteUser",
"method": "DELETE",
"path": "/api/admin/users/{id}",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Soft delete a user",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ApiResponse<null>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "deleteUser",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_getUserById",
"method": "GET",
"path": "/api/admin/users/{id}",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Get user by ID",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ApiResponse<UserResponseDto>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "getUserById",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_updateUserRole",
"method": "PUT",
"path": "/api/admin/users/{id}/role",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Update user role",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "data",
"type": "{ role: UserRole }",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<ApiResponse<UserResponseDto>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "updateUserRole",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_updateUserSubscription",
"method": "PUT",
"path": "/api/admin/users/{id}/subscription",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Update user subscription",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "data",
"type": "{ subscriptionStatus: string; subscriptionExpiresAt?: string }",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<ApiResponse<UserResponseDto>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "updateUserSubscription",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AdminController_toggleUserActive",
"method": "PUT",
"path": "/api/admin/users/{id}/toggle-active",
"tag": "Admin",
"tags": [
"Admin"
],
"summary": "Toggle user active status",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ApiResponse<UserResponseDto>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "AdminController",
"methodName": "toggleUserActive",
"filePath": "src/modules/admin/admin.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AnalysisController_analyzeMatches",
"method": "POST",
"path": "/api/analysis/analyze-matches",
"tag": "Analysis",
"tags": [
"Analysis"
],
"summary": "Analyze multiple matches for coupon",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "body",
"type": "{ matchIds: string[] }",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Analysis successful",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Analysis successful"
}
},
{
"status": 400,
"description": "Invalid input",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Invalid input"
}
},
{
"status": 429,
"description": "Usage limit exceeded",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Usage limit exceeded"
}
}
]
},
"source": {
"controller": "AnalysisController",
"methodName": "analyzeMatches",
"filePath": "src/modules/analysis/analysis.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AnalysisController_getHistory",
"method": "GET",
"path": "/api/analysis/history",
"tag": "Analysis",
"tags": [
"Analysis"
],
"summary": "Get analysis history",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "History retrieved",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "History retrieved"
}
}
]
},
"source": {
"controller": "AnalysisController",
"methodName": "getHistory",
"filePath": "src/modules/analysis/analysis.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AuthController_login",
"method": "POST",
"path": "/api/auth/login",
"tag": "Auth",
"tags": [
"Auth"
],
"summary": "Login with email and password",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": {
"required": true,
"contentTypes": [
"application/json"
],
"schemaTypes": [
"LoginDto"
],
"schemaRefs": [
"LoginDto"
],
"raw": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/LoginDto"
}
}
}
}
},
"tsBodyParams": [
{
"name": "dto",
"type": "LoginDto",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<ApiResponse<TokenResponseDto>>",
"statuses": [
{
"status": 200,
"description": "Login successful",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"TokenResponseDto"
],
"schemaRefs": [
"TokenResponseDto"
],
"hasSchema": true,
"raw": {
"description": "Login successful",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TokenResponseDto"
}
}
}
}
}
]
},
"source": {
"controller": "AuthController",
"methodName": "login",
"filePath": "src/modules/auth/auth.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AuthController_logout",
"method": "POST",
"path": "/api/auth/logout",
"tag": "Auth",
"tags": [
"Auth"
],
"summary": "Logout and invalidate refresh token",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": {
"required": true,
"contentTypes": [
"application/json"
],
"schemaTypes": [
"RefreshTokenDto"
],
"schemaRefs": [
"RefreshTokenDto"
],
"raw": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RefreshTokenDto"
}
}
}
}
},
"tsBodyParams": [
{
"name": "dto",
"type": "RefreshTokenDto",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<ApiResponse<null>>",
"statuses": [
{
"status": 200,
"description": "Logout successful",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Logout successful"
}
}
]
},
"source": {
"controller": "AuthController",
"methodName": "logout",
"filePath": "src/modules/auth/auth.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AuthController_refreshToken",
"method": "POST",
"path": "/api/auth/refresh",
"tag": "Auth",
"tags": [
"Auth"
],
"summary": "Refresh access token",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": {
"required": true,
"contentTypes": [
"application/json"
],
"schemaTypes": [
"RefreshTokenDto"
],
"schemaRefs": [
"RefreshTokenDto"
],
"raw": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RefreshTokenDto"
}
}
}
}
},
"tsBodyParams": [
{
"name": "dto",
"type": "RefreshTokenDto",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<ApiResponse<TokenResponseDto>>",
"statuses": [
{
"status": 200,
"description": "Token refreshed successfully",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"TokenResponseDto"
],
"schemaRefs": [
"TokenResponseDto"
],
"hasSchema": true,
"raw": {
"description": "Token refreshed successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TokenResponseDto"
}
}
}
}
}
]
},
"source": {
"controller": "AuthController",
"methodName": "refreshToken",
"filePath": "src/modules/auth/auth.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "AuthController_register",
"method": "POST",
"path": "/api/auth/register",
"tag": "Auth",
"tags": [
"Auth"
],
"summary": "Register a new user",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": {
"required": true,
"contentTypes": [
"application/json"
],
"schemaTypes": [
"RegisterDto"
],
"schemaRefs": [
"RegisterDto"
],
"raw": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/RegisterDto"
}
}
}
}
},
"tsBodyParams": [
{
"name": "dto",
"type": "RegisterDto",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<ApiResponse<TokenResponseDto>>",
"statuses": [
{
"status": 200,
"description": "User registered successfully",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"TokenResponseDto"
],
"schemaRefs": [
"TokenResponseDto"
],
"hasSchema": true,
"raw": {
"description": "User registered successfully",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TokenResponseDto"
}
}
}
}
}
]
},
"source": {
"controller": "AuthController",
"methodName": "register",
"filePath": "src/modules/auth/auth.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "CouponsController_analyzeMatch",
"method": "POST",
"path": "/api/coupon/analyze-match",
"tag": "Coupon",
"tags": [
"Coupon"
],
"summary": "Analyze single match with V20 model",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "matchId",
"type": "string",
"bodyKey": "matchId"
}
]
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Match analysis",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Match analysis"
}
}
]
},
"source": {
"controller": "CouponsController",
"methodName": "analyzeMatch",
"filePath": "src/modules/coupons/coupons.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "CouponsController_createCoupon",
"method": "POST",
"path": "/api/coupon/create",
"tag": "Coupon",
"tags": [
"Coupon"
],
"summary": "Create and save a user coupon",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": {
"required": true,
"contentTypes": [
"application/json"
],
"schemaTypes": [
"CreateCouponDto"
],
"schemaRefs": [
"CreateCouponDto"
],
"raw": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/CreateCouponDto"
}
}
}
}
},
"tsBodyParams": [
{
"name": "dto",
"type": "CreateCouponDto",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 201,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "CouponsController",
"methodName": "createCoupon",
"filePath": "src/modules/coupons/coupons.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "CouponsController_getDailyBanko",
"method": "POST",
"path": "/api/coupon/daily-banko",
"tag": "Coupon",
"tags": [
"Coupon"
],
"summary": "Generate a high-confidence banko combo (2 matches)",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "matchIds",
"type": "string[]",
"bodyKey": "matchIds"
}
]
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "CouponsController",
"methodName": "getDailyBanko",
"filePath": "src/modules/coupons/coupons.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "CouponsController_getHistory",
"method": "GET",
"path": "/api/coupon/history",
"tag": "Coupon",
"tags": [
"Coupon"
],
"summary": "Get coupon history",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "limit",
"in": "query",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "History retrieved",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "History retrieved"
}
}
]
},
"source": {
"controller": "CouponsController",
"methodName": "getHistory",
"filePath": "src/modules/coupons/coupons.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "CouponsController_getUserStats",
"method": "GET",
"path": "/api/coupon/my-stats",
"tag": "Coupon",
"tags": [
"Coupon"
],
"summary": "Get user betting statistics",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "CouponsController",
"methodName": "getUserStats",
"filePath": "src/modules/coupons/coupons.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "CouponsController_suggestCoupon",
"method": "POST",
"path": "/api/coupon/suggest",
"tag": "Coupon",
"tags": [
"Coupon"
],
"summary": "Suggest Smart Coupon",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "body",
"type": "{\n matchIds: string[];\n strategy?: 'SAFE' | 'BALANCED' | 'AGGRESSIVE' | 'VALUE' | 'MIRACLE';\n maxMatches?: number;\n minConfidence?: number;\n }",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Smart Coupon generated",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Smart Coupon generated"
}
}
]
},
"source": {
"controller": "CouponsController",
"methodName": "suggestCoupon",
"filePath": "src/modules/coupons/coupons.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "HealthController_check",
"method": "GET",
"path": "/api/health",
"tag": "Health",
"tags": [
"Health"
],
"summary": "Basic health check",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "The Health Check is successful",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"object"
],
"schemaRefs": [],
"hasSchema": true,
"raw": {
"description": "The Health Check is successful",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"example": "ok"
},
"info": {
"type": "object",
"example": {
"database": {
"status": "up"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
},
"nullable": true
},
"error": {
"type": "object",
"example": {},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
},
"nullable": true
},
"details": {
"type": "object",
"example": {
"database": {
"status": "up"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
}
}
}
}
}
}
}
},
{
"status": 503,
"description": "The Health Check is not successful",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"object"
],
"schemaRefs": [],
"hasSchema": true,
"raw": {
"description": "The Health Check is not successful",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"example": "error"
},
"info": {
"type": "object",
"example": {
"database": {
"status": "up"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
},
"nullable": true
},
"error": {
"type": "object",
"example": {
"redis": {
"status": "down",
"message": "Could not connect"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
},
"nullable": true
},
"details": {
"type": "object",
"example": {
"database": {
"status": "up"
},
"redis": {
"status": "down",
"message": "Could not connect"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
}
}
}
}
}
}
}
}
]
},
"source": {
"controller": "HealthController",
"methodName": "check",
"filePath": "src/modules/health/health.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "HealthController_liveness",
"method": "GET",
"path": "/api/health/live",
"tag": "Health",
"tags": [
"Health"
],
"summary": "Liveness check",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "HealthController",
"methodName": "liveness",
"filePath": "src/modules/health/health.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "HealthController_readiness",
"method": "GET",
"path": "/api/health/ready",
"tag": "Health",
"tags": [
"Health"
],
"summary": "Readiness check (includes database)",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "The Health Check is successful",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"object"
],
"schemaRefs": [],
"hasSchema": true,
"raw": {
"description": "The Health Check is successful",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"example": "ok"
},
"info": {
"type": "object",
"example": {
"database": {
"status": "up"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
},
"nullable": true
},
"error": {
"type": "object",
"example": {},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
},
"nullable": true
},
"details": {
"type": "object",
"example": {
"database": {
"status": "up"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
}
}
}
}
}
}
}
},
{
"status": 503,
"description": "The Health Check is not successful",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"object"
],
"schemaRefs": [],
"hasSchema": true,
"raw": {
"description": "The Health Check is not successful",
"content": {
"application/json": {
"schema": {
"type": "object",
"properties": {
"status": {
"type": "string",
"example": "error"
},
"info": {
"type": "object",
"example": {
"database": {
"status": "up"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
},
"nullable": true
},
"error": {
"type": "object",
"example": {
"redis": {
"status": "down",
"message": "Could not connect"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
},
"nullable": true
},
"details": {
"type": "object",
"example": {
"database": {
"status": "up"
},
"redis": {
"status": "down",
"message": "Could not connect"
}
},
"additionalProperties": {
"type": "object",
"required": [
"status"
],
"properties": {
"status": {
"type": "string"
}
},
"additionalProperties": true
}
}
}
}
}
}
}
}
]
},
"source": {
"controller": "HealthController",
"methodName": "readiness",
"filePath": "src/modules/health/health.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "LeaguesController_getLeagues",
"method": "GET",
"path": "/api/leagues",
"tag": "Leagues",
"tags": [
"Leagues"
],
"summary": "Get all leagues",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "sport",
"in": "query",
"required": false,
"description": null,
"type": "string(football | basketball)",
"enum": [
"football",
"basketball"
],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "LeaguesController",
"methodName": "getLeagues",
"filePath": "src/modules/leagues/leagues.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "LeaguesController_getLeagueById",
"method": "GET",
"path": "/api/leagues/{id}",
"tag": "Leagues",
"tags": [
"Leagues"
],
"summary": "Get league by ID",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": "League ID",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "LeaguesController",
"methodName": "getLeagueById",
"filePath": "src/modules/leagues/leagues.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "LeaguesController_getCountries",
"method": "GET",
"path": "/api/leagues/countries",
"tag": "Leagues",
"tags": [
"Leagues"
],
"summary": "Get all countries",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "List of countries",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "List of countries"
}
}
]
},
"source": {
"controller": "LeaguesController",
"methodName": "getCountries",
"filePath": "src/modules/leagues/leagues.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "LeaguesController_getCountryById",
"method": "GET",
"path": "/api/leagues/countries/{id}",
"tag": "Leagues",
"tags": [
"Leagues"
],
"summary": "Get country by ID with leagues",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Country ID",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "LeaguesController",
"methodName": "getCountryById",
"filePath": "src/modules/leagues/leagues.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "LeaguesController_getTeamById",
"method": "GET",
"path": "/api/leagues/teams/{id}",
"tag": "Leagues",
"tags": [
"Leagues"
],
"summary": "Get team by ID",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Team ID",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "LeaguesController",
"methodName": "getTeamById",
"filePath": "src/modules/leagues/leagues.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "LeaguesController_getTeamMatches",
"method": "GET",
"path": "/api/leagues/teams/{id}/matches",
"tag": "Leagues",
"tags": [
"Leagues"
],
"summary": "Get team's recent matches",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Team ID",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [
{
"name": "limit",
"in": "query",
"required": false,
"description": null,
"type": "number",
"enum": [],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "LeaguesController",
"methodName": "getTeamMatches",
"filePath": "src/modules/leagues/leagues.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "LeaguesController_getHeadToHead",
"method": "GET",
"path": "/api/leagues/teams/h2h",
"tag": "Leagues",
"tags": [
"Leagues"
],
"summary": "Get head-to-head matches between two teams",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "team1",
"in": "query",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
},
{
"name": "team2",
"in": "query",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
},
{
"name": "limit",
"in": "query",
"required": false,
"description": null,
"type": "number",
"enum": [],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "LeaguesController",
"methodName": "getHeadToHead",
"filePath": "src/modules/leagues/leagues.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "LeaguesController_searchTeams",
"method": "GET",
"path": "/api/leagues/teams/search",
"tag": "Leagues",
"tags": [
"Leagues"
],
"summary": "Search teams by name",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "q",
"in": "query",
"required": true,
"description": "Search query",
"type": "string",
"enum": [],
"default": null,
"format": null
},
{
"name": "sport",
"in": "query",
"required": false,
"description": null,
"type": "string(football | basketball)",
"enum": [
"football",
"basketball"
],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": ""
}
}
]
},
"source": {
"controller": "LeaguesController",
"methodName": "searchTeams",
"filePath": "src/modules/leagues/leagues.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "MatchesController_listMatches",
"method": "GET",
"path": "/api/matches",
"tag": "Matches",
"tags": [
"Matches"
],
"summary": "List matches with pagination",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "page",
"in": "query",
"required": false,
"description": null,
"type": "number",
"enum": [],
"default": null,
"format": null
},
{
"name": "limit",
"in": "query",
"required": false,
"description": null,
"type": "number",
"enum": [],
"default": null,
"format": null
},
{
"name": "sport",
"in": "query",
"required": false,
"description": null,
"type": "string(football | basketball)",
"enum": [
"football",
"basketball"
],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Paginated list of matches",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Paginated list of matches"
}
}
]
},
"source": {
"controller": "MatchesController",
"methodName": "listMatches",
"filePath": "src/modules/matches/matches.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "MatchesController_getMatchDetails",
"method": "GET",
"path": "/api/matches/{id}",
"tag": "Matches",
"tags": [
"Matches"
],
"summary": "Get full match details by ID",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": "Match ID",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Match details with lineups, stats, odds, events",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Match details with lineups, stats, odds, events"
}
},
{
"status": 404,
"description": "Match not found",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Match not found"
}
}
]
},
"source": {
"controller": "MatchesController",
"methodName": "getMatchDetails",
"filePath": "src/modules/matches/matches.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "MatchesController_getActiveLeagues",
"method": "GET",
"path": "/api/matches/leagues/active",
"tag": "Matches",
"tags": [
"Matches"
],
"summary": "Get active leagues with upcoming/live matches",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "sport",
"in": "query",
"required": false,
"description": null,
"type": "string(football | basketball)",
"enum": [
"football",
"basketball"
],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ActiveLeagueDto[]>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"array<ActiveLeagueDto>"
],
"schemaRefs": [
"ActiveLeagueDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ActiveLeagueDto"
}
}
}
}
}
}
]
},
"source": {
"controller": "MatchesController",
"methodName": "getActiveLeagues",
"filePath": "src/modules/matches/matches.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "MatchesController_queryMatches",
"method": "POST",
"path": "/api/matches/query",
"tag": "Matches",
"tags": [
"Matches"
],
"summary": "Advanced match query with filters",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": {
"required": true,
"contentTypes": [
"application/json"
],
"schemaTypes": [
"MatchQueryDto"
],
"schemaRefs": [
"MatchQueryDto"
],
"raw": {
"required": true,
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MatchQueryDto"
}
}
}
}
},
"tsBodyParams": [
{
"name": "queryDto",
"type": "MatchQueryDto",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<LeagueWithMatchesDto[]>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"array<LeagueWithMatchesDto>"
],
"schemaRefs": [
"LeagueWithMatchesDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/LeagueWithMatchesDto"
}
}
}
}
}
}
]
},
"source": {
"controller": "MatchesController",
"methodName": "queryMatches",
"filePath": "src/modules/matches/matches.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "PredictionsController_getPrediction",
"method": "GET",
"path": "/api/predictions/{matchId}",
"tag": "Predictions",
"tags": [
"Predictions"
],
"summary": "Get prediction for a specific match",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": true
},
"request": {
"parameters": {
"path": [
{
"name": "matchId",
"in": "path",
"required": true,
"description": "Match ID",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<MatchPredictionDto>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"MatchPredictionDto"
],
"schemaRefs": [
"MatchPredictionDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MatchPredictionDto"
}
}
}
}
},
{
"status": 404,
"description": "Match not found",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Match not found"
}
}
]
},
"source": {
"controller": "PredictionsController",
"methodName": "getPrediction",
"filePath": "src/modules/predictions/predictions.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "PredictionsController_generatePrediction",
"method": "POST",
"path": "/api/predictions/generate",
"tag": "Predictions",
"tags": [
"Predictions"
],
"summary": "Generate prediction with provided match data",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "body",
"type": "any",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<MatchPredictionDto>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"MatchPredictionDto"
],
"schemaRefs": [
"MatchPredictionDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/MatchPredictionDto"
}
}
}
}
}
]
},
"source": {
"controller": "PredictionsController",
"methodName": "generatePrediction",
"filePath": "src/modules/predictions/predictions.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "PredictionsController_checkHealth",
"method": "GET",
"path": "/api/predictions/health",
"tag": "Predictions",
"tags": [
"Predictions"
],
"summary": "Check AI Engine health status",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<AIHealthDto>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"AIHealthDto"
],
"schemaRefs": [
"AIHealthDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/AIHealthDto"
}
}
}
}
}
]
},
"source": {
"controller": "PredictionsController",
"methodName": "checkHealth",
"filePath": "src/modules/predictions/predictions.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "PredictionsController_getHistory",
"method": "GET",
"path": "/api/predictions/history",
"tag": "Predictions",
"tags": [
"Predictions"
],
"summary": "Get prediction history and accuracy statistics",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<PredictionHistoryResponseDto>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"PredictionHistoryResponseDto"
],
"schemaRefs": [
"PredictionHistoryResponseDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/PredictionHistoryResponseDto"
}
}
}
}
}
]
},
"source": {
"controller": "PredictionsController",
"methodName": "getHistory",
"filePath": "src/modules/predictions/predictions.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "PredictionsController_generateSmartCoupon",
"method": "POST",
"path": "/api/predictions/smart-coupon",
"tag": "Predictions",
"tags": [
"Predictions"
],
"summary": "Generate Smart Coupon with V20 AI recommendations",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": [
{
"name": "body",
"type": "{\n matchIds: string[];\n strategy?: string;\n maxMatches?: number;\n minConfidence?: number;\n }",
"bodyKey": null
}
]
},
"response": {
"tsReturnType": "Promise<any>",
"statuses": [
{
"status": 200,
"description": "Smart coupon generated successfully",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Smart coupon generated successfully"
}
}
]
},
"source": {
"controller": "PredictionsController",
"methodName": "generateSmartCoupon",
"filePath": "src/modules/predictions/predictions.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "PredictionsController_getUpcoming",
"method": "GET",
"path": "/api/predictions/upcoming",
"tag": "Predictions",
"tags": [
"Predictions"
],
"summary": "Get predictions for upcoming matches",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<UpcomingPredictionsDto>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"UpcomingPredictionsDto"
],
"schemaRefs": [
"UpcomingPredictionsDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UpcomingPredictionsDto"
}
}
}
}
}
]
},
"source": {
"controller": "PredictionsController",
"methodName": "getUpcoming",
"filePath": "src/modules/predictions/predictions.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "PredictionsController_getValueBets",
"method": "GET",
"path": "/api/predictions/value-bets",
"tag": "Predictions",
"tags": [
"Predictions"
],
"summary": "Get value betting opportunities (EV+)",
"description": null,
"auth": {
"swaggerSecurityRequired": false,
"swaggerSecuritySchemes": [],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ValueBetDto[]>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"array<ValueBetDto>"
],
"schemaRefs": [
"ValueBetDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ValueBetDto"
}
}
}
}
}
}
]
},
"source": {
"controller": "PredictionsController",
"methodName": "getValueBets",
"filePath": "src/modules/predictions/predictions.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "UsersController_findAll",
"method": "GET",
"path": "/api/users",
"tag": "Users",
"tags": [
"Users"
],
"summary": "Get all records with pagination",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [
{
"name": "page",
"in": "query",
"required": false,
"description": "Page number",
"type": "number",
"enum": [],
"default": 1,
"format": null
},
{
"name": "limit",
"in": "query",
"required": false,
"description": "Items per page",
"type": "number",
"enum": [],
"default": 10,
"format": null
},
{
"name": "sortBy",
"in": "query",
"required": false,
"description": "Field to sort by",
"type": "string",
"enum": [],
"default": null,
"format": null
},
{
"name": "sortOrder",
"in": "query",
"required": false,
"description": "Sort order",
"type": "string(asc | desc)",
"enum": [
"asc",
"desc"
],
"default": "desc",
"format": null
},
{
"name": "search",
"in": "query",
"required": false,
"description": "Search query",
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Records retrieved successfully",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Records retrieved successfully"
}
}
]
},
"source": null
},
{
"inSwagger": true,
"operationId": "UsersController_findOne",
"method": "GET",
"path": "/api/users/{id}",
"tag": "Users",
"tags": [
"Users"
],
"summary": "Get a record by ID",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Record retrieved successfully",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Record retrieved successfully"
}
},
{
"status": 404,
"description": "Record not found",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Record not found"
}
}
]
},
"source": null
},
{
"inSwagger": true,
"operationId": "UsersController_update",
"method": "PUT",
"path": "/api/users/{id}",
"tag": "Users",
"tags": [
"Users"
],
"summary": "Update an existing record",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Record updated successfully",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Record updated successfully"
}
},
{
"status": 404,
"description": "Record not found",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Record not found"
}
}
]
},
"source": null
},
{
"inSwagger": true,
"operationId": "UsersController_restore",
"method": "POST",
"path": "/api/users/{id}/restore",
"tag": "Users",
"tags": [
"Users"
],
"summary": "Restore a soft-deleted record",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [
{
"name": "id",
"in": "path",
"required": true,
"description": null,
"type": "string",
"enum": [],
"default": null,
"format": null
}
],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": null,
"statuses": [
{
"status": 200,
"description": "Record restored successfully",
"contentTypes": [],
"schemaTypes": [],
"schemaRefs": [],
"hasSchema": false,
"raw": {
"description": "Record restored successfully"
}
}
]
},
"source": null
},
{
"inSwagger": true,
"operationId": "UsersController_getMe",
"method": "GET",
"path": "/api/users/me",
"tag": "Users",
"tags": [
"Users"
],
"summary": "Get current authenticated user profile",
"description": null,
"auth": {
"swaggerSecurityRequired": true,
"swaggerSecuritySchemes": [
"bearer"
],
"hasPublicDecorator": false
},
"request": {
"parameters": {
"path": [],
"query": [],
"header": [],
"cookie": []
},
"body": null,
"tsBodyParams": []
},
"response": {
"tsReturnType": "Promise<ApiResponse<UserResponseDto>>",
"statuses": [
{
"status": 200,
"description": "",
"contentTypes": [
"application/json"
],
"schemaTypes": [
"UserResponseDto"
],
"schemaRefs": [
"UserResponseDto"
],
"hasSchema": true,
"raw": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/UserResponseDto"
}
}
}
}
}
]
},
"source": {
"controller": "UsersController",
"methodName": "getMe",
"filePath": "src/modules/users/users.controller.ts"
}
},
{
"inSwagger": true,
"operationId": "SporTotoController_syncFromApi",
"method": "POST",
"path": "/api/spor-toto/sync",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Sync current bulletin from Spor Toto API",
"description": "Fetches the latest bulletin from sportotov2.iddaa.com and upserts it into the database.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [], "query": [], "header": [], "cookie": [] }, "body": null, "tsBodyParams": [] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any }>", "statuses": [{ "status": 200, "description": "Sync result with action (created/updated/unchanged)" }] },
"source": { "controller": "SporTotoController", "methodName": "syncFromApi", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_listBulletins",
"method": "GET",
"path": "/api/spor-toto/bulletins",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "List Spor Toto bulletins",
"description": "Returns a paginated list of bulletins, optionally filtered by status.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [], "query": [{ "name": "status", "required": false, "schema": { "enum": ["ACTIVE", "COMPLETED", "CANCELLED"], "type": "string" } }, { "name": "limit", "required": false, "schema": { "type": "number" } }], "header": [], "cookie": [] }, "body": null, "tsBodyParams": [] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any[] }>", "statuses": [{ "status": 200, "description": "Array of bulletins with matches and results" }] },
"source": { "controller": "SporTotoController", "methodName": "listBulletins", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_getBulletin",
"method": "GET",
"path": "/api/spor-toto/bulletins/{id}",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Get bulletin details",
"description": "Returns a single bulletin with all 15 matches, results, and dividend info.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [{ "name": "id", "required": true, "schema": { "type": "string" }, "description": "Bulletin UUID" }], "query": [], "header": [], "cookie": [] }, "body": null, "tsBodyParams": [] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any }>", "statuses": [{ "status": 200, "description": "Bulletin with matches and results" }, { "status": 404, "description": "Bulletin not found" }] },
"source": { "controller": "SporTotoController", "methodName": "getBulletin", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_createBulletin",
"method": "POST",
"path": "/api/spor-toto/bulletins",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Create a bulletin manually",
"description": "Creates a new bulletin with 15 matches. Fails if gameCycleNo already exists.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [], "query": [], "header": [], "cookie": [] }, "body": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateBulletinDto" } } } }, "tsBodyParams": ["dto: CreateBulletinDto"] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any }>", "statuses": [{ "status": 201, "description": "Created bulletin with matches" }, { "status": 409, "description": "Bulletin with this gameCycleNo already exists" }] },
"source": { "controller": "SporTotoController", "methodName": "createBulletin", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_updateResults",
"method": "PATCH",
"path": "/api/spor-toto/bulletins/{id}/results",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Update bulletin match results",
"description": "Updates individual match results and optionally upserts dividend/prize data.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [{ "name": "id", "required": true, "schema": { "type": "string" }, "description": "Bulletin UUID" }], "query": [], "header": [], "cookie": [] }, "body": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UpdateResultsDto" } } } }, "tsBodyParams": ["dto: UpdateResultsDto"] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any }>", "statuses": [{ "status": 200, "description": "Updated bulletin with results" }, { "status": 404, "description": "Bulletin not found" }] },
"source": { "controller": "SporTotoController", "methodName": "updateResults", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_getBulletinStats",
"method": "GET",
"path": "/api/spor-toto/bulletins/{id}/stats",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Get bulletin pool & EV statistics",
"description": "Returns pool distribution (35/20/20/25), expected value calculations, and rollover analysis.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [{ "name": "id", "required": true, "schema": { "type": "string" }, "description": "Bulletin UUID" }], "query": [], "header": [], "cookie": [] }, "body": null, "tsBodyParams": [] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any }>", "statuses": [{ "status": 200, "description": "Pool distribution and EV stats" }] },
"source": { "controller": "SporTotoController", "methodName": "getBulletinStats", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_getRolloverHistory",
"method": "GET",
"path": "/api/spor-toto/history",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Get rollover history and trends",
"description": "Returns the last N bulletins with rollover amounts and consecutive rollover streak.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [], "query": [{ "name": "limit", "required": false, "schema": { "type": "number" }, "description": "Number of results (default: 20)" }], "header": [], "cookie": [] }, "body": null, "tsBodyParams": [] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any[] }>", "statuses": [{ "status": 200, "description": "Rollover history with trend data" }] },
"source": { "controller": "SporTotoController", "methodName": "getRolloverHistory", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_generateColumns",
"method": "POST",
"path": "/api/spor-toto/columns/generate",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Generate Spor Toto columns (full or reduced system)",
"description": "Takes match selections (1/X/2 per match) and generates columns via Cartesian product or random sampling.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [], "query": [], "header": [], "cookie": [] }, "body": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateColumnsDto" } } } }, "tsBodyParams": ["dto: GenerateColumnsDto"] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any }>", "statuses": [{ "status": 200, "description": "Generated columns with strategy, cost, and column strings" }] },
"source": { "controller": "SporTotoController", "methodName": "generateColumns", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_evaluateColumns",
"method": "POST",
"path": "/api/spor-toto/columns/evaluate",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Evaluate columns against results",
"description": "Compares generated column strings against actual match results. Returns correct count per column.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [], "query": [], "header": [], "cookie": [] }, "body": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/EvaluateColumnsDto" } } } }, "tsBodyParams": ["dto: EvaluateColumnsDto"] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any }>", "statuses": [{ "status": 200, "description": "Evaluation results with correct counts per column" }] },
"source": { "controller": "SporTotoController", "methodName": "evaluateColumns", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
},
{
"inSwagger": true,
"operationId": "SporTotoController_generatePrediction",
"method": "POST",
"path": "/api/spor-toto/predict",
"tag": "Spor Toto",
"tags": ["Spor Toto"],
"summary": "Generate AI predictions with contrarian strategy",
"description": "Analyzes bulletin matches via AI Engine V20+, applies contrarian parimutüel strategy, generates optimized system coupons. 4 strategies: CONSERVATIVE, BALANCED, AGGRESSIVE, FORMULA_6PCT.",
"auth": { "swaggerSecurityRequired": false, "swaggerSecuritySchemes": [], "hasPublicDecorator": true },
"request": { "parameters": { "path": [], "query": [], "header": [], "cookie": [] }, "body": { "required": true, "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GeneratePredictionDto" } } } }, "tsBodyParams": ["dto: GeneratePredictionDto"] },
"response": { "tsReturnType": "Promise<{ success: boolean; data: any }>", "statuses": [{ "status": 200, "description": "Prediction result with per-match analysis, system coupon, and EV report" }] },
"source": { "controller": "SporTotoController", "methodName": "generatePrediction", "filePath": "src/modules/spor-toto/spor-toto.controller.ts" }
}
],
"referencedSchemas": {
"ActiveLeagueDto": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"code": {
"type": "string"
},
"countryName": {
"type": "string"
},
"countryFlag": {
"type": "string"
},
"matchCount": {
"type": "number"
},
"liveCount": {
"type": "number"
}
},
"required": [
"id",
"name",
"matchCount",
"liveCount"
]
},
"AIHealthDto": {
"type": "object",
"properties": {
"status": {
"type": "string"
},
"modelLoaded": {
"type": "boolean"
},
"predictionServiceReady": {
"type": "boolean"
}
},
"required": [
"status",
"modelLoaded",
"predictionServiceReady"
]
},
"CreateCouponDto": {
"type": "object",
"properties": {}
},
"LeagueWithMatchesDto": {
"type": "object",
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"code": {
"type": "string"
},
"country": {
"type": "object"
},
"sport": {
"type": "string"
},
"matches": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MatchResponseDto"
}
}
},
"required": [
"id",
"name",
"country",
"sport",
"matches"
]
},
"LoginDto": {
"type": "object",
"properties": {
"email": {
"type": "string",
"example": "user@example.com"
},
"password": {
"type": "string",
"example": "password123"
}
},
"required": [
"email",
"password"
]
},
"MatchPredictionDto": {
"type": "object",
"properties": {
"model_version": {
"type": "string"
},
"match_info": {
"$ref": "#/components/schemas/MatchInfoDto"
},
"data_quality": {
"$ref": "#/components/schemas/DataQualityDto"
},
"risk": {
"$ref": "#/components/schemas/RiskDto"
},
"engine_breakdown": {
"$ref": "#/components/schemas/EngineBreakdownDto"
},
"main_pick": {
"nullable": true,
"allOf": [
{
"$ref": "#/components/schemas/MatchPickDto"
}
]
},
"bet_advice": {
"$ref": "#/components/schemas/MatchBetAdviceDto"
},
"bet_summary": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MatchBetSummaryItemDto"
}
},
"supporting_picks": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MatchPickDto"
}
},
"aggressive_pick": {
"nullable": true,
"allOf": [
{
"$ref": "#/components/schemas/AggressivePickDto"
}
]
},
"scenario_top5": {
"type": "array",
"items": {
"$ref": "#/components/schemas/ScenarioTop5ItemDto"
}
},
"score_prediction": {
"$ref": "#/components/schemas/ScorePredictionDto"
},
"market_board": {
"type": "object"
},
"reasoning_factors": {
"type": "array",
"items": {
"type": "string"
}
}
},
"required": [
"model_version",
"match_info",
"data_quality",
"risk",
"engine_breakdown",
"main_pick",
"bet_advice",
"bet_summary",
"supporting_picks",
"aggressive_pick",
"scenario_top5",
"score_prediction",
"market_board",
"reasoning_factors"
]
},
"MatchQueryDto": {
"type": "object",
"properties": {
"sport": {
"type": "string",
"enum": [
"football",
"basketball"
],
"default": "football"
},
"limit": {
"type": "number",
"default": 50
},
"leagueId": {
"type": "string"
},
"status": {
"type": "string",
"description": "Filter by status: LIVE, Finished, etc."
},
"date": {
"type": "string",
"description": "Single date filter (YYYY-MM-DD)"
},
"team": {
"$ref": "#/components/schemas/TeamFilterDto"
},
"odds": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OddFilterDto"
}
},
"dateRange": {
"$ref": "#/components/schemas/DateRangeDto"
}
},
"required": [
"sport"
]
},
"PredictionHistoryResponseDto": {
"type": "object",
"properties": {
"stats": {
"$ref": "#/components/schemas/PredictionHistoryStatsDto"
},
"history": {
"type": "array",
"items": {
"type": "object"
}
}
},
"required": [
"stats",
"history"
]
},
"RefreshTokenDto": {
"type": "object",
"properties": {
"refreshToken": {
"type": "string"
}
},
"required": [
"refreshToken"
]
},
"RegisterDto": {
"type": "object",
"properties": {
"email": {
"type": "string",
"example": "user@example.com"
},
"password": {
"type": "string",
"example": "password123",
"minLength": 8
},
"firstName": {
"type": "string",
"example": "John"
},
"lastName": {
"type": "string",
"example": "Doe"
}
},
"required": [
"email",
"password"
]
},
"TokenResponseDto": {
"type": "object",
"properties": {
"accessToken": {
"type": "string"
},
"refreshToken": {
"type": "string"
},
"expiresIn": {
"type": "number"
},
"user": {
"$ref": "#/components/schemas/UserInfoDto"
}
},
"required": [
"accessToken",
"refreshToken",
"expiresIn",
"user"
]
},
"UpcomingPredictionsDto": {
"type": "object",
"properties": {
"count": {
"type": "number"
},
"matches": {
"type": "array",
"items": {
"$ref": "#/components/schemas/MatchPredictionDto"
}
},
"modelVersion": {
"type": "string"
}
},
"required": [
"count",
"matches",
"modelVersion"
]
},
"UserResponseDto": {
"type": "object",
"properties": {}
},
"ValueBetDto": {
"type": "object",
"properties": {
"matchId": {
"type": "string"
},
"matchName": {
"type": "string"
},
"betType": {
"type": "string"
},
"prediction": {
"type": "string"
},
"confidence": {
"type": "number"
},
"odd": {
"type": "number"
},
"expectedValue": {
"type": "number"
}
},
"required": [
"matchId",
"matchName",
"betType",
"prediction",
"confidence",
"odd",
"expectedValue"
]
},
"CreateBulletinDto": {
"type": "object",
"properties": {
"gameCycleNo": { "type": "number", "example": 1234 },
"weekNumber": { "type": "number", "example": 12 },
"deadline": { "type": "string", "format": "date-time" },
"matches": { "type": "array", "items": { "type": "object", "properties": { "matchOrder": { "type": "number" }, "homeTeam": { "type": "string" }, "awayTeam": { "type": "string" }, "leagueName": { "type": "string" }, "matchDate": { "type": "string", "format": "date-time" }, "mbs": { "type": "number" } } } }
},
"required": ["gameCycleNo", "weekNumber", "deadline", "matches"]
},
"UpdateResultsDto": {
"type": "object",
"properties": {
"results": { "type": "array", "items": { "type": "object", "properties": { "matchOrder": { "type": "number" }, "result": { "type": "string", "enum": ["1", "0", "2"] }, "homeScore": { "type": "number" }, "awayScore": { "type": "number" } } } },
"dividend": { "type": "object", "properties": { "prize15": { "type": "number" }, "prize14": { "type": "number" }, "prize13": { "type": "number" }, "prize12": { "type": "number" } } }
},
"required": ["results"]
},
"GenerateColumnsDto": {
"type": "object",
"properties": {
"bulletinId": { "type": "string", "description": "Bulletin UUID" },
"selections": { "type": "array", "items": { "type": "object", "properties": { "matchOrder": { "type": "number" }, "picks": { "type": "array", "items": { "type": "string", "enum": ["1", "0", "2"] } } } } },
"maxColumns": { "type": "number", "description": "Max columns for reduced system (optional)" }
},
"required": ["bulletinId", "selections"]
},
"EvaluateColumnsDto": {
"type": "object",
"properties": {
"bulletinId": { "type": "string", "description": "Bulletin UUID" },
"columns": { "type": "array", "items": { "type": "string" }, "description": "Array of 15-char column strings (e.g. '1X210X2101X2012')" }
},
"required": ["bulletinId", "columns"]
},
"GeneratePredictionDto": {
"type": "object",
"properties": {
"bulletinId": { "type": "string", "description": "Bulletin UUID" },
"strategy": { "type": "string", "enum": ["CONSERVATIVE", "BALANCED", "AGGRESSIVE", "FORMULA_6PCT"], "description": "Prediction strategy (default: BALANCED)" },
"contraBias": { "type": "number", "description": "Contrarian bias factor 0-1 (default: 0.3)" }
},
"required": ["bulletinId"]
}
}
}