{
  "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"]
    }
  }
}