4486 lines
122 KiB
JSON
Executable File
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"]
|
|
}
|
|
}
|
|
} |