{ "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>>", "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>", "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>", "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>>", "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>", "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>", "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>", "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>", "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>", "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>", "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>", "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>", "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>", "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", "statuses": [ { "status": 200, "description": "", "contentTypes": [ "application/json" ], "schemaTypes": [ "array" ], "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", "statuses": [ { "status": 200, "description": "", "contentTypes": [ "application/json" ], "schemaTypes": [ "array" ], "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", "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", "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", "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", "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", "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", "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", "statuses": [ { "status": 200, "description": "", "contentTypes": [ "application/json" ], "schemaTypes": [ "array" ], "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>", "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"] } } }