{
    "swagger": "2.0",
    "info": {
        "description": "This is server for Yimaru.",
        "title": "Yimaru API",
        "termsOfService": "http://swagger.io/terms/",
        "contact": {
            "name": "API Support",
            "url": "http://www.swagger.io/support",
            "email": "support@swagger.io"
        },
        "license": {
            "name": "Apache 2.0",
            "url": "http://www.apache.org/licenses/LICENSE-2.0.html"
        },
        "version": "1.0.1"
    },
    "paths": {
        "/api/v1/admin": {
            "get": {
                "description": "Get all Admins",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "admin"
                ],
                "summary": "Get all Admins",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Page number",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page size",
                        "name": "page_size",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.AdminRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Create Admin",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "admin"
                ],
                "summary": "Create Admin",
                "parameters": [
                    {
                        "description": "Create admin",
                        "name": "manger",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.CreateAdminReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/admin/{id}": {
            "get": {
                "description": "Get a single admin by id",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "admin"
                ],
                "summary": "Get admin by id",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.AdminRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            },
            "put": {
                "description": "Update Admin",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "admin"
                ],
                "summary": "Update Admin",
                "parameters": [
                    {
                        "description": "Update Admin",
                        "name": "admin",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateAdminReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/assessment/questions": {
            "get": {
                "description": "Returns all active assessment questions from the initial assessment set",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "assessment-question"
                ],
                "summary": "List assessment questions",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "array",
                            "items": {
                                "$ref": "#/definitions/domain.QuestionWithDetails"
                            }
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Creates a new assessment question using the unified questions system",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "assessment-question"
                ],
                "summary": "Create assessment question",
                "parameters": [
                    {
                        "description": "Create question payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createQuestionReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/assessment/questions/{id}": {
            "get": {
                "description": "Returns a single assessment question with its options or answer",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "assessment-question"
                ],
                "summary": "Get assessment question by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.QuestionWithDetails"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/auth/google/android": {
            "post": {
                "tags": [
                    "auth"
                ],
                "summary": "Login via Google Android ID Token",
                "parameters": [
                    {
                        "description": "Google ID Token from Android",
                        "name": "idToken",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {}
            }
        },
        "/api/v1/auth/google/callback": {
            "get": {
                "tags": [
                    "auth"
                ],
                "summary": "Google login callback",
                "responses": {}
            }
        },
        "/api/v1/auth/google/login": {
            "get": {
                "tags": [
                    "auth"
                ],
                "summary": "Google login redirect",
                "responses": {}
            }
        },
        "/api/v1/auth/logout": {
            "post": {
                "description": "Logout user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Logout user",
                "parameters": [
                    {
                        "description": "Logout user",
                        "name": "logout",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.logoutReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/auth/refresh": {
            "post": {
                "description": "Refresh token",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Refresh token",
                "parameters": [
                    {
                        "description": "tokens",
                        "name": "refresh",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.refreshToken"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.loginUserRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/categories": {
            "get": {
                "description": "Returns a paginated list of all course categories",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "course-categories"
                ],
                "summary": "Get all course categories",
                "parameters": [
                    {
                        "type": "integer",
                        "default": 10,
                        "description": "Limit",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 0,
                        "description": "Offset",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Creates a new course category with the provided name",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "course-categories"
                ],
                "summary": "Create a new course category",
                "parameters": [
                    {
                        "description": "Create category payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createCourseCategoryReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/categories/{categoryId}/courses": {
            "get": {
                "description": "Returns a paginated list of courses under a specific category",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "courses"
                ],
                "summary": "Get courses by category",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Category ID",
                        "name": "categoryId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "default": 10,
                        "description": "Limit",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 0,
                        "description": "Offset",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/categories/{id}": {
            "get": {
                "description": "Returns a single course category by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "course-categories"
                ],
                "summary": "Get course category by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Category ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "description": "Updates a course category's name and/or active status",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "course-categories"
                ],
                "summary": "Update course category",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Category ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update category payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateCourseCategoryReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "description": "Deletes a course category by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "course-categories"
                ],
                "summary": "Delete course category",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Category ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/courses": {
            "post": {
                "description": "Creates a new course under a specific category",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "courses"
                ],
                "summary": "Create a new course",
                "parameters": [
                    {
                        "description": "Create course payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createCourseReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/courses/{courseId}/sub-courses": {
            "get": {
                "description": "Returns all sub-courses under a specific course",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-courses"
                ],
                "summary": "Get sub-courses by course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Course ID",
                        "name": "courseId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/courses/{courseId}/sub-courses/list": {
            "get": {
                "description": "Returns a list of active sub-courses under a specific course",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-courses"
                ],
                "summary": "List active sub-courses by course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Course ID",
                        "name": "courseId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/courses/{id}": {
            "get": {
                "description": "Returns a single course by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "courses"
                ],
                "summary": "Get course by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Course ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "description": "Updates a course's title, description, and/or active status",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "courses"
                ],
                "summary": "Update course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Course ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update course payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateCourseReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "description": "Deletes a course by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "courses"
                ],
                "summary": "Delete course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Course ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/learning-tree": {
            "get": {
                "description": "Returns the complete learning tree structure with courses and sub-courses",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "learning-tree"
                ],
                "summary": "Get full learning tree",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/sub-courses": {
            "post": {
                "description": "Creates a new sub-course under a specific course",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-courses"
                ],
                "summary": "Create a new sub-course",
                "parameters": [
                    {
                        "description": "Create sub-course payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createSubCourseReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/sub-courses/active": {
            "get": {
                "description": "Returns a list of all active sub-courses",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-courses"
                ],
                "summary": "List all active sub-courses",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/sub-courses/{id}": {
            "get": {
                "description": "Returns a single sub-course by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-courses"
                ],
                "summary": "Get sub-course by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Sub-course ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "description": "Deletes a sub-course by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-courses"
                ],
                "summary": "Delete sub-course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Sub-course ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "patch": {
                "description": "Updates a sub-course's fields",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-courses"
                ],
                "summary": "Update sub-course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Sub-course ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update sub-course payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateSubCourseReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/sub-courses/{id}/deactivate": {
            "put": {
                "description": "Deactivates a sub-course by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-courses"
                ],
                "summary": "Deactivate sub-course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Sub-course ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/sub-courses/{subCourseId}/videos": {
            "get": {
                "description": "Returns all videos under a specific sub-course",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Get videos by sub-course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Sub-course ID",
                        "name": "subCourseId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/sub-courses/{subCourseId}/videos/published": {
            "get": {
                "description": "Returns all published videos under a specific sub-course",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Get published videos by sub-course",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Sub-course ID",
                        "name": "subCourseId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/videos": {
            "post": {
                "description": "Creates a new video under a specific sub-course",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Create a new sub-course video",
                "parameters": [
                    {
                        "description": "Create video payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createSubCourseVideoReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/videos/vimeo": {
            "post": {
                "description": "Creates a video by uploading to Vimeo from a source URL",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Create a new sub-course video with Vimeo upload",
                "parameters": [
                    {
                        "description": "Create Vimeo video payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createVimeoVideoReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/videos/vimeo/import": {
            "post": {
                "description": "Creates a video record from an existing Vimeo video ID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Create a sub-course video from existing Vimeo video",
                "parameters": [
                    {
                        "description": "Create from Vimeo ID payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createVideoFromVimeoIDReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/videos/{id}": {
            "get": {
                "description": "Returns a single video by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Get sub-course video by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Video ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "description": "Updates a video's fields",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Update sub-course video",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Video ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update video payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateSubCourseVideoReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "description": "Archives a video by its ID (soft delete)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Delete sub-course video",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Video ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/course-management/videos/{id}/publish": {
            "put": {
                "description": "Publishes a video by its ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "sub-course-videos"
                ],
                "summary": "Publish sub-course video",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Video ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/logs": {
            "get": {
                "description": "Fetches application logs from MongoDB with pagination, level filtering, and search",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Logs"
                ],
                "summary": "Retrieve application logs with filtering and pagination",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Filter logs by level (debug, info, warn, error, dpanic, panic, fatal)",
                        "name": "level",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Search term to match against message or fields",
                        "name": "search",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 1,
                        "description": "Page number for pagination (default: 1)",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 50,
                        "description": "Number of items per page (default: 50, max: 100)",
                        "name": "limit",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Paginated list of application logs",
                        "schema": {
                            "$ref": "#/definitions/domain.LogResponse"
                        }
                    },
                    "400": {
                        "description": "Invalid request parameters",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal server error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/notifications/test-push": {
            "post": {
                "description": "Sends a test push notification to all registered devices of the current user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "notifications"
                ],
                "summary": "Send test push notification",
                "parameters": [
                    {
                        "description": "Test notification content",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "type": "object",
                            "properties": {
                                "message": {
                                    "type": "string"
                                },
                                "title": {
                                    "type": "string"
                                }
                            }
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/payments": {
            "get": {
                "description": "Returns the authenticated user's payment history",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Get payment history",
                "parameters": [
                    {
                        "type": "integer",
                        "default": 20,
                        "description": "Limit",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 0,
                        "description": "Offset",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/direct": {
            "post": {
                "description": "Creates a payment session and initiates direct payment (OTP-based)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Initiate direct payment",
                "parameters": [
                    {
                        "description": "Direct payment request",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.initiateDirectPaymentReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/direct/methods": {
            "get": {
                "description": "Returns list of payment methods that support direct payment (OTP-based)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Get direct payment methods",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/direct/verify-otp": {
            "post": {
                "description": "Verifies the OTP sent for direct payment methods (Amole, HelloCash, etc.)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Verify OTP for direct payment",
                "parameters": [
                    {
                        "description": "OTP verification request",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.verifyOTPReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/methods": {
            "get": {
                "description": "Returns list of supported ArifPay payment methods",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Get available payment methods",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/subscribe": {
            "post": {
                "description": "Creates a payment session for a subscription plan",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Initiate subscription payment",
                "parameters": [
                    {
                        "description": "Payment request",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.initiatePaymentReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/verify/{session_id}": {
            "get": {
                "description": "Checks the payment status with the payment provider",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Verify payment status",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Session ID",
                        "name": "session_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/webhook": {
            "post": {
                "description": "Processes payment notifications from ArifPay",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Handle ArifPay webhook",
                "parameters": [
                    {
                        "description": "Webhook payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.WebhookRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/{id}": {
            "get": {
                "description": "Returns details of a specific payment",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Get payment details",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Payment ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/payments/{id}/cancel": {
            "post": {
                "description": "Cancels a payment that is still pending",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "payments"
                ],
                "summary": "Cancel a pending payment",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Payment ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/question-sets": {
            "get": {
                "description": "Returns a paginated list of question sets filtered by type",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Get question sets by type",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Set type (PRACTICE, INITIAL_ASSESSMENT, QUIZ, EXAM, SURVEY)",
                        "name": "set_type",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "default": 10,
                        "description": "Limit",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 0,
                        "description": "Offset",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Creates a new question set (practice, assessment, quiz, exam, or survey)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Create a new question set",
                "parameters": [
                    {
                        "description": "Create question set payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createQuestionSetReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/question-sets/by-owner": {
            "get": {
                "description": "Returns question sets for a specific owner (e.g., sub-course)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Get question sets by owner",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Owner type (SUB_COURSE, COURSE, CATEGORY, STANDALONE)",
                        "name": "owner_type",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Owner ID",
                        "name": "owner_id",
                        "in": "query",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/question-sets/{id}": {
            "get": {
                "description": "Returns a question set with question count",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Get question set by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "description": "Updates a question set's properties",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Update a question set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update question set payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateQuestionSetReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "description": "Archives a question set (soft delete)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Delete a question set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/question-sets/{setId}/personas": {
            "get": {
                "description": "Returns all users assigned as personas to a question set (practice)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Get user personas for a question set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "setId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Links a user as a persona to a question set (practice)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Add a user as persona to a question set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "setId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Add user persona payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.addUserPersonaReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/question-sets/{setId}/personas/{userId}": {
            "delete": {
                "description": "Unlinks a user as persona from a question set (practice)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-sets"
                ],
                "summary": "Remove a user persona from a question set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "setId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "userId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/question-sets/{setId}/questions": {
            "get": {
                "description": "Returns all questions in a question set with details",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-set-items"
                ],
                "summary": "Get questions in set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "setId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Links a question to a question set",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-set-items"
                ],
                "summary": "Add question to set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "setId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Add question to set payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.addQuestionToSetReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/question-sets/{setId}/questions/{questionId}": {
            "delete": {
                "description": "Unlinks a question from a question set",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-set-items"
                ],
                "summary": "Remove question from set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "setId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Question ID",
                        "name": "questionId",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/question-sets/{setId}/questions/{questionId}/order": {
            "put": {
                "description": "Updates the display order of a question in a set",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "question-set-items"
                ],
                "summary": "Update question order in set",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question Set ID",
                        "name": "setId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Question ID",
                        "name": "questionId",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update order payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateQuestionOrderReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/questions": {
            "get": {
                "description": "Returns a paginated list of questions with optional filters",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "questions"
                ],
                "summary": "List questions",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Question type filter (MCQ, TRUE_FALSE, SHORT_ANSWER)",
                        "name": "question_type",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Difficulty level filter (EASY, MEDIUM, HARD)",
                        "name": "difficulty",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Status filter (DRAFT, PUBLISHED, INACTIVE)",
                        "name": "status",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 10,
                        "description": "Limit",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 0,
                        "description": "Offset",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Creates a new question with options (for MCQ/TRUE_FALSE) or short answers (for SHORT_ANSWER)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "questions"
                ],
                "summary": "Create a new question",
                "parameters": [
                    {
                        "description": "Create question payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createQuestionReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/questions/search": {
            "get": {
                "description": "Search questions by text",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "questions"
                ],
                "summary": "Search questions",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Search query",
                        "name": "q",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "default": 10,
                        "description": "Limit",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 0,
                        "description": "Offset",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/questions/{id}": {
            "get": {
                "description": "Returns a question with its options/short answers",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "questions"
                ],
                "summary": "Get question by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "description": "Updates a question and optionally replaces its options/short answers",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "questions"
                ],
                "summary": "Update a question",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update question payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateQuestionReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "description": "Archives a question (soft delete)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "questions"
                ],
                "summary": "Delete a question",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Question ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/sendSMS": {
            "post": {
                "description": "Sends an SMS message to a single phone number using AfroMessage",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Send single SMS via AfroMessage",
                "parameters": [
                    {
                        "description": "Send SMS request",
                        "name": "sendSMS",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.SendSingleAfroSMSReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/subscription-plans": {
            "get": {
                "description": "Returns all subscription plans",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "List subscription plans",
                "parameters": [
                    {
                        "type": "boolean",
                        "description": "Return only active plans",
                        "name": "active_only",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "description": "Creates a new subscription plan (admin only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Create a subscription plan",
                "parameters": [
                    {
                        "description": "Create plan payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.createPlanReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/subscription-plans/{id}": {
            "get": {
                "description": "Returns a single subscription plan by ID",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Get a subscription plan",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Plan ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "description": "Updates a subscription plan (admin only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Update a subscription plan",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Plan ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update plan payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updatePlanReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "description": "Deletes a subscription plan (admin only)",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Delete a subscription plan",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Plan ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/subscriptions": {
            "post": {
                "description": "Creates a new subscription for the authenticated user. For regular users, use /payments/subscribe instead.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Subscribe to a plan (Admin only - bypasses payment)",
                "deprecated": true,
                "parameters": [
                    {
                        "description": "Subscribe payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.subscribeReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/subscriptions/checkout": {
            "post": {
                "description": "Initiates payment for a subscription plan. Returns payment URL for checkout.",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Subscribe to a plan with payment",
                "parameters": [
                    {
                        "description": "Subscribe with payment payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.subscribeWithPaymentReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "409": {
                        "description": "User already has active subscription",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/subscriptions/history": {
            "get": {
                "description": "Returns the authenticated user's subscription history",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Get subscription history",
                "parameters": [
                    {
                        "type": "integer",
                        "default": 20,
                        "description": "Limit",
                        "name": "limit",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 0,
                        "description": "Offset",
                        "name": "offset",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    }
                }
            }
        },
        "/api/v1/subscriptions/me": {
            "get": {
                "description": "Returns the authenticated user's active subscription",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Get current subscription",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/subscriptions/status": {
            "get": {
                "description": "Returns whether the authenticated user has an active subscription",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Check subscription status",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    }
                }
            }
        },
        "/api/v1/subscriptions/{id}/auto-renew": {
            "put": {
                "description": "Enables or disables auto-renewal for a subscription",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Set auto-renew",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Subscription ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Auto-renew payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.autoRenewReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/subscriptions/{id}/cancel": {
            "post": {
                "description": "Cancels the user's subscription",
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "subscriptions"
                ],
                "summary": "Cancel subscription",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Subscription ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/super-login": {
            "post": {
                "description": "Login super-admin",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Login super-admin",
                "parameters": [
                    {
                        "description": "Login super-admin",
                        "name": "login",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.LoginRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.LoginAdminRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/t-approver/{id}": {
            "get": {
                "description": "Get a single admin by id",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "admin"
                ],
                "summary": "Get admin by id",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.AdminRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            },
            "put": {
                "description": "Update Admin",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "admin"
                ],
                "summary": "Update Admin",
                "parameters": [
                    {
                        "description": "Update Admin",
                        "name": "admin",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.updateAdminReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/team/login": {
            "post": {
                "description": "Authenticate a team member (internal staff) with email and password",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Login team member",
                "parameters": [
                    {
                        "description": "Team member login credentials",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.TeamMemberLoginReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/domain.Response"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/definitions/handlers.teamMemberLoginRes"
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/team/me": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get the authenticated team member's own profile",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Get my team profile",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/domain.Response"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/definitions/domain.TeamMemberResponse"
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/team/members": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get a paginated list of team members with optional filtering",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "List all team members",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Filter by team role (super_admin, admin, content_manager, support_agent, instructor, finance, hr, analyst)",
                        "name": "team_role",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filter by department",
                        "name": "department",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Filter by status (active, inactive, suspended, terminated)",
                        "name": "status",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Search by name, email, or phone number",
                        "name": "search",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page number (default: 1)",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Items per page (default: 10, max: 100)",
                        "name": "page_size",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/domain.Response"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/definitions/domain.TeamMemberResponse"
                                            }
                                        },
                                        "metadata": {
                                            "$ref": "#/definitions/domain.Pagination"
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Create a new internal team member (admin only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Create a new team member",
                "parameters": [
                    {
                        "description": "Team member creation payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.CreateTeamMemberReq"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/domain.Response"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/definitions/domain.TeamMemberResponse"
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/team/members/{id}": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Retrieve a team member's details by their ID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Get team member by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Team Member ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/domain.Response"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/definitions/domain.TeamMemberResponse"
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "put": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Update an existing team member's details (admin only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Update team member",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Team Member ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Team member update payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.UpdateTeamMemberReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Delete a team member (super admin only)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Delete team member",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Team Member ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/team/members/{id}/change-password": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Change a team member's password (requires current password)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Change team member password",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Team Member ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Password change payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.changePasswordReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/team/members/{id}/status": {
            "patch": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Update a team member's status (active, inactive, suspended, terminated)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Update team member status",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "Team Member ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Status update payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.UpdateTeamMemberStatusReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/team/stats": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get statistics about team members by status",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "team"
                ],
                "summary": "Get team member statistics",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "allOf": [
                                {
                                    "$ref": "#/definitions/domain.Response"
                                },
                                {
                                    "type": "object",
                                    "properties": {
                                        "data": {
                                            "$ref": "#/definitions/domain.TeamMemberStats"
                                        }
                                    }
                                }
                            ]
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "403": {
                        "description": "Forbidden",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/tenant": {
            "get": {
                "description": "Check if phone number or email exist",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Check if phone number or email exist",
                "parameters": [
                    {
                        "description": "Check phone number or email exist",
                        "name": "checkPhoneEmailExist",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.CheckPhoneEmailExistReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.CheckPhoneEmailExistRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user": {
            "put": {
                "description": "Updates user profile information (partial updates supported)",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Update user profile",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "user_id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Update user payload",
                        "name": "body",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.UpdateUserReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/delete/{id}": {
            "delete": {
                "description": "Delete a user by their ID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Delete user by ID",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/resetPassword": {
            "post": {
                "description": "Reset password",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Reset password",
                "parameters": [
                    {
                        "description": "Reset password",
                        "name": "resetPassword",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.ResetPasswordReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/search": {
            "post": {
                "description": "Search for user using name or phone",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Search for user using name or phone",
                "parameters": [
                    {
                        "description": "Search for using his name or phone",
                        "name": "searchUserByNameOrPhone",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.SearchUserByNameOrPhoneReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.UserProfileResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/sendResetCode": {
            "post": {
                "description": "Send reset code",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Send reset code",
                "parameters": [
                    {
                        "description": "Send reset code",
                        "name": "resetCode",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.ResetCodeReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/single/{id}": {
            "get": {
                "description": "Get a single user by id",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Get user by id",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.UserProfileResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/verify-otp": {
            "post": {
                "description": "Verify OTP for registration or other actions",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Verify OTP",
                "parameters": [
                    {
                        "description": "Verify OTP",
                        "name": "verifyOtp",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.VerifyOtpReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/{id}/profile-picture": {
            "post": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Uploads a profile picture for the specified user",
                "consumes": [
                    "multipart/form-data"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Upload profile picture",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "file",
                        "description": "Image file (jpg|png|webp)",
                        "name": "file",
                        "in": "formData",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/{user_id}/is-pending": {
            "get": {
                "description": "Returns whether the specified user has a status of \"pending\"",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Check if user status is pending",
                "parameters": [
                    {
                        "type": "string",
                        "description": "User ID",
                        "name": "user_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/user/{user_id}/is-profile-completed": {
            "get": {
                "description": "Returns the profile completion status and percentage for the specified user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Check if user profile is completed",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "user_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/users": {
            "get": {
                "description": "Get users with optional filters",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Get all users",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Role filter",
                        "name": "role",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Search query",
                        "name": "query",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page number",
                        "name": "page",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Page size",
                        "name": "page_size",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Created before (RFC3339)",
                        "name": "created_before",
                        "in": "query"
                    },
                    {
                        "type": "string",
                        "description": "Created after (RFC3339)",
                        "name": "created_after",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/vimeo/oembed": {
            "get": {
                "description": "Fetches oEmbed metadata for a Vimeo video URL",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Vimeo"
                ],
                "summary": "Get oEmbed data for a Vimeo URL",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Vimeo video URL",
                        "name": "url",
                        "in": "query",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "description": "Desired width",
                        "name": "width",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "description": "Desired height",
                        "name": "height",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/vimeo.OEmbedResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/vimeo/uploads/pull": {
            "post": {
                "description": "Initiates a pull upload where Vimeo fetches the video from a URL",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Vimeo"
                ],
                "summary": "Create a pull upload to Vimeo",
                "parameters": [
                    {
                        "description": "Pull Upload Request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.CreatePullUploadRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/handlers.VimeoUploadResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/vimeo/uploads/tus": {
            "post": {
                "description": "Initiates a TUS resumable upload and returns the upload link",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Vimeo"
                ],
                "summary": "Create a TUS resumable upload to Vimeo",
                "parameters": [
                    {
                        "description": "TUS Upload Request",
                        "name": "request",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.CreateTusUploadRequest"
                        }
                    }
                ],
                "responses": {
                    "201": {
                        "description": "Created",
                        "schema": {
                            "$ref": "#/definitions/handlers.VimeoUploadResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/vimeo/videos/{video_id}": {
            "get": {
                "description": "Retrieves video details from Vimeo by video ID",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Vimeo"
                ],
                "summary": "Get video information from Vimeo",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Vimeo Video ID",
                        "name": "video_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.VimeoVideoResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            },
            "delete": {
                "description": "Deletes a video from the Vimeo account",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Vimeo"
                ],
                "summary": "Delete a video from Vimeo",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Vimeo Video ID",
                        "name": "video_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "204": {
                        "description": "No Content"
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/vimeo/videos/{video_id}/embed": {
            "get": {
                "description": "Generates an embeddable player iframe for the video",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Vimeo"
                ],
                "summary": "Get embed code for a Vimeo video",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Vimeo Video ID",
                        "name": "video_id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "type": "integer",
                        "default": 640,
                        "description": "Player width",
                        "name": "width",
                        "in": "query"
                    },
                    {
                        "type": "integer",
                        "default": 360,
                        "description": "Player height",
                        "name": "height",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "Autoplay video",
                        "name": "autoplay",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "Loop video",
                        "name": "loop",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "Mute video",
                        "name": "muted",
                        "in": "query"
                    },
                    {
                        "type": "boolean",
                        "description": "Background mode (no controls)",
                        "name": "background",
                        "in": "query"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.VimeoEmbedResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/vimeo/videos/{video_id}/status": {
            "get": {
                "description": "Returns the current transcoding status of a video",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "Vimeo"
                ],
                "summary": "Get transcode status of a Vimeo video",
                "parameters": [
                    {
                        "type": "string",
                        "description": "Vimeo Video ID",
                        "name": "video_id",
                        "in": "path",
                        "required": true
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "type": "object",
                            "additionalProperties": {
                                "type": "string"
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/admin-login": {
            "post": {
                "description": "Login user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Login user",
                "parameters": [
                    {
                        "description": "Login admin",
                        "name": "login",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.LoginRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.LoginAdminRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/otp/resend": {
            "post": {
                "description": "Resend OTP if the previous one is expired",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "otp"
                ],
                "summary": "Resend OTP",
                "parameters": [
                    {
                        "description": "Resend OTP",
                        "name": "resendOtp",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.ResendOtpReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user-login": {
            "post": {
                "description": "Login user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "auth"
                ],
                "summary": "Login user",
                "parameters": [
                    {
                        "description": "Login user",
                        "name": "login",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.LoginRequest"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.loginUserRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "401": {
                        "description": "Unauthorized",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user/admin-profile": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get user profile",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Get user profile",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.AdminProfileRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user/checkPhoneEmailExist": {
            "post": {
                "description": "Check if phone number or email exist",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Check if phone number or email exist",
                "parameters": [
                    {
                        "description": "Check phone number or email exist",
                        "name": "checkPhoneEmailExist",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.CheckPhoneEmailExistReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/handlers.CheckPhoneEmailExistRes"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user/knowledge-level": {
            "put": {
                "description": "Updates the knowledge level of the specified user after initial assessment",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Update user's knowledge level",
                "parameters": [
                    {
                        "type": "integer",
                        "description": "User ID",
                        "name": "user_id",
                        "in": "path",
                        "required": true
                    },
                    {
                        "description": "Knowledge level",
                        "name": "knowledge_level",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.UpdateKnowledgeLevelReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.Response"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "404": {
                        "description": "Not Found",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/domain.ErrorResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user/register": {
            "post": {
                "description": "Register user",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Register user",
                "parameters": [
                    {
                        "description": "Register user",
                        "name": "registerUser",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/domain.RegisterUserReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user/resetPassword": {
            "post": {
                "description": "Reset tenant password",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Reset tenant password",
                "parameters": [
                    {
                        "description": "Reset password",
                        "name": "resetPassword",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.ResetPasswordReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user/sendRegisterCode": {
            "post": {
                "description": "Send register code",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Send register code",
                "parameters": [
                    {
                        "description": "Send register code",
                        "name": "registerCode",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.RegisterCodeReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user/sendResetCode": {
            "post": {
                "description": "Send reset code",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Send reset code",
                "parameters": [
                    {
                        "description": "Send reset code",
                        "name": "resetCode",
                        "in": "body",
                        "required": true,
                        "schema": {
                            "$ref": "#/definitions/handlers.ResetCodeReq"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        },
        "/api/v1/{tenant_slug}/user/user-profile": {
            "get": {
                "security": [
                    {
                        "Bearer": []
                    }
                ],
                "description": "Get user profile",
                "consumes": [
                    "application/json"
                ],
                "produces": [
                    "application/json"
                ],
                "tags": [
                    "user"
                ],
                "summary": "Get user profile",
                "responses": {
                    "200": {
                        "description": "OK",
                        "schema": {
                            "$ref": "#/definitions/domain.UserProfileResponse"
                        }
                    },
                    "400": {
                        "description": "Bad Request",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    },
                    "500": {
                        "description": "Internal Server Error",
                        "schema": {
                            "$ref": "#/definitions/response.APIResponse"
                        }
                    }
                }
            }
        }
    },
    "definitions": {
        "domain.AgeGroup": {
            "type": "string",
            "enum": [
                "UNDER_13",
                "13_17",
                "18_24",
                "25_34",
                "35_44",
                "45_54",
                "55_PLUS"
            ],
            "x-enum-varnames": [
                "AgeUnder13",
                "Age13To17",
                "Age18To24",
                "Age25To34",
                "Age35To44",
                "Age45To54",
                "Age55Plus"
            ]
        },
        "domain.CreateTeamMemberReq": {
            "type": "object",
            "required": [
                "email",
                "first_name",
                "last_name",
                "password",
                "team_role"
            ],
            "properties": {
                "bio": {
                    "type": "string"
                },
                "department": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "emergency_contact": {
                    "type": "string"
                },
                "employment_type": {
                    "type": "string"
                },
                "first_name": {
                    "type": "string"
                },
                "hire_date": {
                    "description": "YYYY-MM-DD",
                    "type": "string"
                },
                "job_title": {
                    "type": "string"
                },
                "last_name": {
                    "type": "string"
                },
                "password": {
                    "type": "string",
                    "minLength": 8
                },
                "permissions": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "phone_number": {
                    "type": "string"
                },
                "profile_picture_url": {
                    "type": "string"
                },
                "team_role": {
                    "type": "string"
                },
                "work_phone": {
                    "type": "string"
                }
            }
        },
        "domain.EmploymentType": {
            "type": "string",
            "enum": [
                "full_time",
                "part_time",
                "contract",
                "intern"
            ],
            "x-enum-varnames": [
                "EmploymentTypeFullTime",
                "EmploymentTypePartTime",
                "EmploymentTypeContract",
                "EmploymentTypeIntern"
            ]
        },
        "domain.ErrorResponse": {
            "type": "object",
            "properties": {
                "error": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                }
            }
        },
        "domain.LogEntry": {
            "type": "object",
            "properties": {
                "caller": {
                    "type": "string"
                },
                "env": {
                    "type": "string"
                },
                "fields": {
                    "type": "object",
                    "additionalProperties": true
                },
                "level": {
                    "type": "string"
                },
                "message": {
                    "type": "string"
                },
                "service": {
                    "type": "string"
                },
                "stacktrace": {
                    "type": "string"
                },
                "timestamp": {
                    "type": "string"
                }
            }
        },
        "domain.LogResponse": {
            "type": "object",
            "properties": {
                "data": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/domain.LogEntry"
                    }
                },
                "message": {
                    "type": "string"
                },
                "pagination": {
                    "$ref": "#/definitions/domain.Pagination"
                }
            }
        },
        "domain.LoginRequest": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string"
                },
                "otp_code": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                },
                "phone_number": {
                    "type": "string"
                }
            }
        },
        "domain.OtpMedium": {
            "type": "string",
            "enum": [
                "email",
                "sms"
            ],
            "x-enum-varnames": [
                "OtpMediumEmail",
                "OtpMediumSms"
            ]
        },
        "domain.Pagination": {
            "type": "object",
            "properties": {
                "current_page": {
                    "type": "integer"
                },
                "limit": {
                    "type": "integer"
                },
                "total": {
                    "type": "integer"
                },
                "total_pages": {
                    "type": "integer"
                }
            }
        },
        "domain.QuestionOption": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "isCorrect": {
                    "type": "boolean"
                },
                "optionOrder": {
                    "type": "integer",
                    "format": "int32"
                },
                "optionText": {
                    "type": "string"
                },
                "questionID": {
                    "type": "integer",
                    "format": "int64"
                }
            }
        },
        "domain.QuestionShortAnswer": {
            "type": "object",
            "properties": {
                "acceptableAnswer": {
                    "type": "string"
                },
                "createdAt": {
                    "type": "string"
                },
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "matchType": {
                    "type": "string"
                },
                "questionID": {
                    "type": "integer",
                    "format": "int64"
                }
            }
        },
        "domain.QuestionWithDetails": {
            "type": "object",
            "properties": {
                "createdAt": {
                    "type": "string"
                },
                "difficultyLevel": {
                    "type": "string"
                },
                "explanation": {
                    "type": "string"
                },
                "id": {
                    "type": "integer",
                    "format": "int64"
                },
                "options": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/domain.QuestionOption"
                    }
                },
                "points": {
                    "type": "integer",
                    "format": "int32"
                },
                "questionText": {
                    "type": "string"
                },
                "questionType": {
                    "type": "string"
                },
                "sampleAnswerVoicePrompt": {
                    "type": "string"
                },
                "shortAnswers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/domain.QuestionShortAnswer"
                    }
                },
                "status": {
                    "type": "string"
                },
                "tips": {
                    "type": "string"
                },
                "updatedAt": {
                    "type": "string"
                },
                "voicePrompt": {
                    "type": "string"
                }
            }
        },
        "domain.RegisterUserReq": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string"
                },
                "otp_medium": {
                    "$ref": "#/definitions/domain.OtpMedium"
                },
                "password": {
                    "type": "string"
                },
                "phone_number": {
                    "type": "string"
                },
                "role": {
                    "type": "string"
                }
            }
        },
        "domain.ResendOtpReq": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string"
                },
                "phone_number": {
                    "type": "string"
                }
            }
        },
        "domain.Response": {
            "type": "object",
            "properties": {
                "data": {},
                "message": {
                    "type": "string"
                },
                "metadata": {},
                "status_code": {
                    "type": "integer"
                },
                "success": {
                    "type": "boolean"
                }
            }
        },
        "domain.Role": {
            "type": "string",
            "enum": [
                "super_admin",
                "admin",
                "student",
                "instructor",
                "support"
            ],
            "x-enum-varnames": [
                "RoleSuperAdmin",
                "RoleAdmin",
                "RoleStudent",
                "RoleInstructor",
                "RoleSupport"
            ]
        },
        "domain.TeamMemberLoginReq": {
            "type": "object",
            "required": [
                "email",
                "password"
            ],
            "properties": {
                "email": {
                    "type": "string"
                },
                "password": {
                    "type": "string"
                }
            }
        },
        "domain.TeamMemberResponse": {
            "type": "object",
            "properties": {
                "bio": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "department": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "email_verified": {
                    "type": "boolean"
                },
                "employment_type": {
                    "$ref": "#/definitions/domain.EmploymentType"
                },
                "first_name": {
                    "type": "string"
                },
                "hire_date": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "job_title": {
                    "type": "string"
                },
                "last_login": {
                    "type": "string"
                },
                "last_name": {
                    "type": "string"
                },
                "permissions": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "phone_number": {
                    "type": "string"
                },
                "profile_picture_url": {
                    "type": "string"
                },
                "status": {
                    "$ref": "#/definitions/domain.TeamMemberStatus"
                },
                "team_role": {
                    "$ref": "#/definitions/domain.TeamRole"
                },
                "updated_at": {
                    "type": "string"
                },
                "work_phone": {
                    "type": "string"
                }
            }
        },
        "domain.TeamMemberStats": {
            "type": "object",
            "properties": {
                "active_count": {
                    "type": "integer"
                },
                "inactive_count": {
                    "type": "integer"
                },
                "suspended_count": {
                    "type": "integer"
                },
                "terminated_count": {
                    "type": "integer"
                },
                "total_count": {
                    "type": "integer"
                }
            }
        },
        "domain.TeamMemberStatus": {
            "type": "string",
            "enum": [
                "active",
                "inactive",
                "suspended",
                "terminated"
            ],
            "x-enum-varnames": [
                "TeamMemberStatusActive",
                "TeamMemberStatusInactive",
                "TeamMemberStatusSuspended",
                "TeamMemberStatusTerminated"
            ]
        },
        "domain.TeamRole": {
            "type": "string",
            "enum": [
                "super_admin",
                "admin",
                "content_manager",
                "support_agent",
                "instructor",
                "finance",
                "hr",
                "analyst"
            ],
            "x-enum-varnames": [
                "TeamRoleSuperAdmin",
                "TeamRoleAdmin",
                "TeamRoleContentManager",
                "TeamRoleSupportAgent",
                "TeamRoleInstructor",
                "TeamRoleFinance",
                "TeamRoleHR",
                "TeamRoleAnalyst"
            ]
        },
        "domain.UpdateKnowledgeLevelReq": {
            "type": "object",
            "properties": {
                "knowledge_level": {
                    "description": "BEGINNER, INTERMEDIATE, ADVANCED",
                    "type": "string"
                },
                "user_id": {
                    "type": "integer"
                }
            }
        },
        "domain.UpdateTeamMemberReq": {
            "type": "object",
            "properties": {
                "bio": {
                    "type": "string"
                },
                "department": {
                    "type": "string"
                },
                "emergency_contact": {
                    "type": "string"
                },
                "employment_type": {
                    "type": "string"
                },
                "first_name": {
                    "type": "string"
                },
                "hire_date": {
                    "type": "string"
                },
                "job_title": {
                    "type": "string"
                },
                "last_name": {
                    "type": "string"
                },
                "permissions": {
                    "type": "array",
                    "items": {
                        "type": "string"
                    }
                },
                "phone_number": {
                    "type": "string"
                },
                "profile_picture_url": {
                    "type": "string"
                },
                "team_role": {
                    "type": "string"
                },
                "work_phone": {
                    "type": "string"
                }
            }
        },
        "domain.UpdateTeamMemberStatusReq": {
            "type": "object",
            "required": [
                "status"
            ],
            "properties": {
                "status": {
                    "type": "string"
                }
            }
        },
        "domain.UpdateUserReq": {
            "type": "object",
            "properties": {
                "age_group": {
                    "$ref": "#/definitions/domain.AgeGroup"
                },
                "birth_day": {
                    "description": "YYYY-MM-DD",
                    "type": "string"
                },
                "country": {
                    "type": "string"
                },
                "education_level": {
                    "type": "string"
                },
                "favourite_topic": {
                    "type": "string"
                },
                "first_name": {
                    "type": "string"
                },
                "gender": {
                    "type": "string"
                },
                "initial_assessment_completed": {
                    "type": "boolean"
                },
                "knowledge_level": {
                    "type": "string"
                },
                "language_challange": {
                    "type": "string"
                },
                "language_goal": {
                    "type": "string"
                },
                "last_name": {
                    "type": "string"
                },
                "learning_goal": {
                    "type": "string"
                },
                "nick_name": {
                    "type": "string"
                },
                "occupation": {
                    "type": "string"
                },
                "preferred_language": {
                    "type": "string"
                },
                "profile_picture_url": {
                    "type": "string"
                },
                "region": {
                    "type": "string"
                }
            }
        },
        "domain.UserProfileResponse": {
            "type": "object",
            "properties": {
                "age_group": {
                    "type": "string"
                },
                "birth_day": {
                    "description": "formatted as YYYY-MM-DD",
                    "type": "string"
                },
                "country": {
                    "type": "string"
                },
                "created_at": {
                    "type": "string"
                },
                "education_level": {
                    "type": "string"
                },
                "email": {
                    "description": "UserName    string `json:\"user_name,omitempty\"`",
                    "type": "string"
                },
                "email_verified": {
                    "type": "boolean"
                },
                "favoutite_topic": {
                    "type": "string"
                },
                "first_name": {
                    "type": "string"
                },
                "gender": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "initial_assessment_completed": {
                    "description": "Profile fields",
                    "type": "boolean"
                },
                "language_challange": {
                    "type": "string"
                },
                "language_goal": {
                    "type": "string"
                },
                "last_login": {
                    "type": "string"
                },
                "last_name": {
                    "type": "string"
                },
                "learning_goal": {
                    "type": "string"
                },
                "nick_name": {
                    "type": "string"
                },
                "occupation": {
                    "type": "string"
                },
                "phone_number": {
                    "type": "string"
                },
                "phone_verified": {
                    "type": "boolean"
                },
                "preferred_language": {
                    "type": "string"
                },
                "profile_completed": {
                    "type": "boolean"
                },
                "profile_completion_percentage": {
                    "type": "integer"
                },
                "profile_picture_url": {
                    "type": "string"
                },
                "region": {
                    "type": "string"
                },
                "role": {
                    "$ref": "#/definitions/domain.Role"
                },
                "status": {
                    "$ref": "#/definitions/domain.UserStatus"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "domain.UserStatus": {
            "type": "string",
            "enum": [
                "PENDING",
                "ACTIVE",
                "SUSPENDED",
                "DEACTIVATED"
            ],
            "x-enum-varnames": [
                "UserStatusPending",
                "UserStatusActive",
                "UserStatusSuspended",
                "UserStatusDeactivated"
            ]
        },
        "domain.VerifyOtpReq": {
            "type": "object",
            "required": [
                "otp"
            ],
            "properties": {
                "email": {
                    "type": "string"
                },
                "otp": {
                    "type": "string"
                },
                "phone_number": {
                    "type": "string"
                }
            }
        },
        "domain.WebhookRequest": {
            "type": "object",
            "properties": {
                "nonce": {
                    "type": "string"
                },
                "notificationUrl": {
                    "type": "string"
                },
                "paymentMethod": {
                    "type": "string"
                },
                "phone": {
                    "type": "string"
                },
                "sessionId": {
                    "type": "string"
                },
                "totalAmount": {
                    "type": "integer"
                },
                "transaction": {
                    "type": "object",
                    "properties": {
                        "transactionId": {
                            "type": "string"
                        },
                        "transactionStatus": {
                            "type": "string"
                        }
                    }
                },
                "transactionStatus": {
                    "type": "string"
                },
                "uuid": {
                    "type": "string"
                }
            }
        },
        "handlers.AdminProfileRes": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "email_verified": {
                    "type": "boolean"
                },
                "first_name": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "last_login": {
                    "type": "string"
                },
                "last_name": {
                    "type": "string"
                },
                "phone_number": {
                    "type": "string"
                },
                "phone_verified": {
                    "type": "boolean"
                },
                "role": {
                    "$ref": "#/definitions/domain.Role"
                },
                "suspended": {
                    "type": "boolean"
                },
                "suspended_at": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "handlers.AdminRes": {
            "type": "object",
            "properties": {
                "created_at": {
                    "type": "string"
                },
                "email": {
                    "type": "string"
                },
                "email_verified": {
                    "type": "boolean"
                },
                "first_name": {
                    "type": "string"
                },
                "id": {
                    "type": "integer"
                },
                "last_login": {
                    "type": "string"
                },
                "last_name": {
                    "type": "string"
                },
                "phone_number": {
                    "type": "string"
                },
                "phone_verified": {
                    "type": "boolean"
                },
                "role": {
                    "$ref": "#/definitions/domain.Role"
                },
                "suspended": {
                    "type": "boolean"
                },
                "suspended_at": {
                    "type": "string"
                },
                "updated_at": {
                    "type": "string"
                }
            }
        },
        "handlers.CheckPhoneEmailExistReq": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string",
                    "example": "john.doe@example.com"
                },
                "phone_number": {
                    "type": "string",
                    "example": "1234567890"
                }
            }
        },
        "handlers.CheckPhoneEmailExistRes": {
            "type": "object",
            "properties": {
                "email_exist": {
                    "type": "boolean"
                },
                "phone_number_exist": {
                    "type": "boolean"
                }
            }
        },
        "handlers.CreateAdminReq": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string",
                    "example": "john.doe@example.com"
                },
                "first_name": {
                    "type": "string",
                    "example": "John"
                },
                "last_name": {
                    "type": "string",
                    "example": "Doe"
                },
                "password": {
                    "type": "string",
                    "example": "password123"
                },
                "phone_number": {
                    "type": "string",
                    "example": "1234567890"
                }
            }
        },
        "handlers.CreatePullUploadRequest": {
            "type": "object",
            "required": [
                "file_size",
                "name",
                "source_url"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "file_size": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                },
                "source_url": {
                    "type": "string"
                }
            }
        },
        "handlers.CreateTusUploadRequest": {
            "type": "object",
            "required": [
                "file_size",
                "name"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "file_size": {
                    "type": "integer"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "handlers.LoginAdminRes": {
            "type": "object",
            "properties": {
                "access_token": {
                    "type": "string"
                },
                "refresh_token": {
                    "type": "string"
                },
                "role": {
                    "type": "string"
                }
            }
        },
        "handlers.RegisterCodeReq": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string",
                    "example": "john.doe@example.com"
                },
                "phone_number": {
                    "type": "string",
                    "example": "1234567890"
                }
            }
        },
        "handlers.ResetCodeReq": {
            "type": "object",
            "properties": {
                "email": {
                    "type": "string",
                    "example": "john.doe@example.com"
                },
                "phone_number": {
                    "type": "string",
                    "example": "1234567890"
                }
            }
        },
        "handlers.ResetPasswordReq": {
            "type": "object"
        },
        "handlers.SearchUserByNameOrPhoneReq": {
            "type": "object",
            "properties": {
                "query": {
                    "type": "string"
                },
                "role": {
                    "$ref": "#/definitions/domain.Role"
                }
            }
        },
        "handlers.SendSingleAfroSMSReq": {
            "type": "object",
            "required": [
                "message",
                "recipient"
            ],
            "properties": {
                "message": {
                    "type": "string",
                    "example": "Hello world"
                },
                "recipient": {
                    "type": "string",
                    "example": "+251912345678"
                }
            }
        },
        "handlers.VimeoEmbedResponse": {
            "type": "object",
            "properties": {
                "embed_html": {
                    "type": "string"
                },
                "embed_url": {
                    "type": "string"
                },
                "video_id": {
                    "type": "string"
                }
            }
        },
        "handlers.VimeoUploadResponse": {
            "type": "object",
            "properties": {
                "link": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "upload_link": {
                    "type": "string"
                },
                "uri": {
                    "type": "string"
                },
                "vimeo_id": {
                    "type": "string"
                }
            }
        },
        "handlers.VimeoVideoResponse": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "duration": {
                    "type": "integer"
                },
                "embed_html": {
                    "type": "string"
                },
                "embed_url": {
                    "type": "string"
                },
                "height": {
                    "type": "integer"
                },
                "link": {
                    "type": "string"
                },
                "name": {
                    "type": "string"
                },
                "status": {
                    "type": "string"
                },
                "thumbnail_url": {
                    "type": "string"
                },
                "transcode_status": {
                    "type": "string"
                },
                "uri": {
                    "type": "string"
                },
                "vimeo_id": {
                    "type": "string"
                },
                "width": {
                    "type": "integer"
                }
            }
        },
        "handlers.addQuestionToSetReq": {
            "type": "object",
            "required": [
                "question_id"
            ],
            "properties": {
                "display_order": {
                    "type": "integer"
                },
                "question_id": {
                    "type": "integer"
                }
            }
        },
        "handlers.addUserPersonaReq": {
            "type": "object",
            "required": [
                "user_id"
            ],
            "properties": {
                "display_order": {
                    "type": "integer"
                },
                "user_id": {
                    "type": "integer"
                }
            }
        },
        "handlers.autoRenewReq": {
            "type": "object",
            "properties": {
                "auto_renew": {
                    "type": "boolean"
                }
            }
        },
        "handlers.changePasswordReq": {
            "type": "object",
            "required": [
                "current_password",
                "new_password"
            ],
            "properties": {
                "current_password": {
                    "type": "string",
                    "example": "oldpassword123"
                },
                "new_password": {
                    "type": "string",
                    "minLength": 8,
                    "example": "newpassword123"
                }
            }
        },
        "handlers.createCourseCategoryReq": {
            "type": "object",
            "required": [
                "name"
            ],
            "properties": {
                "name": {
                    "type": "string"
                }
            }
        },
        "handlers.createCourseReq": {
            "type": "object",
            "required": [
                "category_id",
                "title"
            ],
            "properties": {
                "category_id": {
                    "type": "integer"
                },
                "description": {
                    "type": "string"
                },
                "thumbnail": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "handlers.createPlanReq": {
            "type": "object",
            "required": [
                "currency",
                "duration_unit",
                "duration_value",
                "name",
                "price"
            ],
            "properties": {
                "currency": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "duration_unit": {
                    "type": "string",
                    "enum": [
                        "DAY",
                        "WEEK",
                        "MONTH",
                        "YEAR"
                    ]
                },
                "duration_value": {
                    "type": "integer",
                    "minimum": 1
                },
                "is_active": {
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                },
                "price": {
                    "type": "number",
                    "minimum": 0
                }
            }
        },
        "handlers.createQuestionReq": {
            "type": "object",
            "required": [
                "question_text",
                "question_type"
            ],
            "properties": {
                "difficulty_level": {
                    "type": "string"
                },
                "explanation": {
                    "type": "string"
                },
                "options": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/handlers.optionInput"
                    }
                },
                "points": {
                    "type": "integer"
                },
                "question_text": {
                    "type": "string"
                },
                "question_type": {
                    "type": "string",
                    "enum": [
                        "MCQ",
                        "TRUE_FALSE",
                        "SHORT_ANSWER"
                    ]
                },
                "sample_answer_voice_prompt": {
                    "type": "string"
                },
                "short_answers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/handlers.shortAnswerInput"
                    }
                },
                "status": {
                    "type": "string"
                },
                "tips": {
                    "type": "string"
                },
                "voice_prompt": {
                    "type": "string"
                }
            }
        },
        "handlers.createQuestionSetReq": {
            "type": "object",
            "required": [
                "set_type",
                "title"
            ],
            "properties": {
                "banner_image": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "owner_id": {
                    "type": "integer"
                },
                "owner_type": {
                    "type": "string"
                },
                "passing_score": {
                    "type": "integer"
                },
                "persona": {
                    "type": "string"
                },
                "set_type": {
                    "type": "string",
                    "enum": [
                        "PRACTICE",
                        "INITIAL_ASSESSMENT",
                        "QUIZ",
                        "EXAM",
                        "SURVEY"
                    ]
                },
                "shuffle_questions": {
                    "type": "boolean"
                },
                "status": {
                    "type": "string"
                },
                "sub_course_video_id": {
                    "type": "integer"
                },
                "time_limit_minutes": {
                    "type": "integer"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "handlers.createSubCourseReq": {
            "type": "object",
            "required": [
                "course_id",
                "level",
                "title"
            ],
            "properties": {
                "course_id": {
                    "type": "integer"
                },
                "description": {
                    "type": "string"
                },
                "display_order": {
                    "type": "integer"
                },
                "level": {
                    "description": "BEGINNER, INTERMEDIATE, ADVANCED",
                    "type": "string"
                },
                "thumbnail": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "handlers.createSubCourseVideoReq": {
            "type": "object",
            "required": [
                "duration",
                "sub_course_id",
                "title",
                "video_url"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "display_order": {
                    "type": "integer"
                },
                "duration": {
                    "type": "integer"
                },
                "instructor_id": {
                    "type": "string"
                },
                "resolution": {
                    "type": "string"
                },
                "status": {
                    "description": "DRAFT, PUBLISHED, INACTIVE, ARCHIVED",
                    "type": "string"
                },
                "sub_course_id": {
                    "type": "integer"
                },
                "thumbnail": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                },
                "video_url": {
                    "type": "string"
                },
                "visibility": {
                    "type": "string"
                }
            }
        },
        "handlers.createVideoFromVimeoIDReq": {
            "type": "object",
            "required": [
                "sub_course_id",
                "title",
                "vimeo_video_id"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "display_order": {
                    "type": "integer"
                },
                "instructor_id": {
                    "type": "string"
                },
                "sub_course_id": {
                    "type": "integer"
                },
                "title": {
                    "type": "string"
                },
                "vimeo_video_id": {
                    "type": "string"
                }
            }
        },
        "handlers.createVimeoVideoReq": {
            "type": "object",
            "required": [
                "file_size",
                "source_url",
                "sub_course_id",
                "title"
            ],
            "properties": {
                "description": {
                    "type": "string"
                },
                "display_order": {
                    "type": "integer"
                },
                "duration": {
                    "type": "integer"
                },
                "file_size": {
                    "type": "integer"
                },
                "instructor_id": {
                    "type": "string"
                },
                "resolution": {
                    "type": "string"
                },
                "source_url": {
                    "type": "string"
                },
                "sub_course_id": {
                    "type": "integer"
                },
                "thumbnail": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                },
                "visibility": {
                    "type": "string"
                }
            }
        },
        "handlers.initiateDirectPaymentReq": {
            "type": "object",
            "required": [
                "email",
                "payment_method",
                "phone",
                "plan_id"
            ],
            "properties": {
                "email": {
                    "type": "string"
                },
                "payment_method": {
                    "type": "string"
                },
                "phone": {
                    "type": "string"
                },
                "plan_id": {
                    "type": "integer"
                }
            }
        },
        "handlers.initiatePaymentReq": {
            "type": "object",
            "required": [
                "email",
                "phone",
                "plan_id"
            ],
            "properties": {
                "email": {
                    "type": "string"
                },
                "phone": {
                    "type": "string"
                },
                "plan_id": {
                    "type": "integer"
                }
            }
        },
        "handlers.loginUserRes": {
            "type": "object",
            "properties": {
                "access_token": {
                    "type": "string"
                },
                "refresh_token": {
                    "type": "string"
                },
                "role": {
                    "type": "string"
                },
                "user_id": {
                    "type": "integer"
                }
            }
        },
        "handlers.logoutReq": {
            "type": "object",
            "required": [
                "refresh_token"
            ],
            "properties": {
                "device_token": {
                    "type": "string",
                    "example": "\u003cfcm-device-token\u003e"
                },
                "refresh_token": {
                    "type": "string",
                    "example": "\u003crefresh-token\u003e"
                }
            }
        },
        "handlers.optionInput": {
            "type": "object",
            "required": [
                "option_text"
            ],
            "properties": {
                "is_correct": {
                    "type": "boolean"
                },
                "option_order": {
                    "type": "integer"
                },
                "option_text": {
                    "type": "string"
                }
            }
        },
        "handlers.refreshToken": {
            "type": "object",
            "required": [
                "access_token",
                "refresh_token"
            ],
            "properties": {
                "access_token": {
                    "type": "string",
                    "example": "\u003cjwt-token\u003e"
                },
                "refresh_token": {
                    "type": "string",
                    "example": "\u003crefresh-token\u003e"
                }
            }
        },
        "handlers.shortAnswerInput": {
            "type": "object",
            "required": [
                "acceptable_answer"
            ],
            "properties": {
                "acceptable_answer": {
                    "type": "string"
                },
                "match_type": {
                    "type": "string"
                }
            }
        },
        "handlers.subscribeReq": {
            "type": "object",
            "required": [
                "plan_id"
            ],
            "properties": {
                "payment_method": {
                    "type": "string"
                },
                "payment_reference": {
                    "type": "string"
                },
                "plan_id": {
                    "type": "integer"
                }
            }
        },
        "handlers.subscribeWithPaymentReq": {
            "type": "object",
            "required": [
                "email",
                "phone",
                "plan_id"
            ],
            "properties": {
                "email": {
                    "type": "string"
                },
                "phone": {
                    "type": "string"
                },
                "plan_id": {
                    "type": "integer"
                }
            }
        },
        "handlers.teamMemberLoginRes": {
            "type": "object",
            "properties": {
                "access_token": {
                    "type": "string",
                    "example": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
                },
                "member_id": {
                    "type": "integer",
                    "example": 1
                },
                "refresh_token": {
                    "type": "string",
                    "example": ""
                },
                "team_role": {
                    "type": "string",
                    "example": "admin"
                }
            }
        },
        "handlers.updateAdminReq": {
            "type": "object",
            "properties": {
                "first_name": {
                    "type": "string",
                    "example": "John"
                },
                "last_name": {
                    "type": "string",
                    "example": "Doe"
                },
                "suspended": {
                    "type": "boolean",
                    "example": false
                }
            }
        },
        "handlers.updateCourseCategoryReq": {
            "type": "object",
            "properties": {
                "is_active": {
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                }
            }
        },
        "handlers.updateCourseReq": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "is_active": {
                    "type": "boolean"
                },
                "thumbnail": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "handlers.updatePlanReq": {
            "type": "object",
            "properties": {
                "currency": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "duration_unit": {
                    "type": "string"
                },
                "duration_value": {
                    "type": "integer"
                },
                "is_active": {
                    "type": "boolean"
                },
                "name": {
                    "type": "string"
                },
                "price": {
                    "type": "number"
                }
            }
        },
        "handlers.updateQuestionOrderReq": {
            "type": "object",
            "required": [
                "display_order"
            ],
            "properties": {
                "display_order": {
                    "type": "integer"
                }
            }
        },
        "handlers.updateQuestionReq": {
            "type": "object",
            "properties": {
                "difficulty_level": {
                    "type": "string"
                },
                "explanation": {
                    "type": "string"
                },
                "options": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/handlers.optionInput"
                    }
                },
                "points": {
                    "type": "integer"
                },
                "question_text": {
                    "type": "string"
                },
                "question_type": {
                    "type": "string"
                },
                "sample_answer_voice_prompt": {
                    "type": "string"
                },
                "short_answers": {
                    "type": "array",
                    "items": {
                        "$ref": "#/definitions/handlers.shortAnswerInput"
                    }
                },
                "status": {
                    "type": "string"
                },
                "tips": {
                    "type": "string"
                },
                "voice_prompt": {
                    "type": "string"
                }
            }
        },
        "handlers.updateQuestionSetReq": {
            "type": "object",
            "properties": {
                "banner_image": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "passing_score": {
                    "type": "integer"
                },
                "persona": {
                    "type": "string"
                },
                "shuffle_questions": {
                    "type": "boolean"
                },
                "status": {
                    "type": "string"
                },
                "sub_course_video_id": {
                    "type": "integer"
                },
                "time_limit_minutes": {
                    "type": "integer"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "handlers.updateSubCourseReq": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "display_order": {
                    "type": "integer"
                },
                "is_active": {
                    "type": "boolean"
                },
                "level": {
                    "type": "string"
                },
                "thumbnail": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                }
            }
        },
        "handlers.updateSubCourseVideoReq": {
            "type": "object",
            "properties": {
                "description": {
                    "type": "string"
                },
                "display_order": {
                    "type": "integer"
                },
                "duration": {
                    "type": "integer"
                },
                "resolution": {
                    "type": "string"
                },
                "status": {
                    "description": "DRAFT, PUBLISHED, INACTIVE, ARCHIVED",
                    "type": "string"
                },
                "thumbnail": {
                    "type": "string"
                },
                "title": {
                    "type": "string"
                },
                "video_url": {
                    "type": "string"
                },
                "visibility": {
                    "type": "string"
                }
            }
        },
        "handlers.verifyOTPReq": {
            "type": "object",
            "required": [
                "otp",
                "session_id"
            ],
            "properties": {
                "otp": {
                    "type": "string"
                },
                "session_id": {
                    "type": "string"
                }
            }
        },
        "response.APIResponse": {
            "type": "object",
            "properties": {
                "data": {},
                "message": {
                    "type": "string"
                },
                "metadata": {},
                "page": {
                    "type": "integer"
                },
                "status": {
                    "$ref": "#/definitions/response.Status"
                },
                "timestamp": {
                    "type": "string"
                },
                "total": {
                    "type": "integer"
                }
            }
        },
        "response.Status": {
            "type": "string",
            "enum": [
                "error",
                "success"
            ],
            "x-enum-varnames": [
                "Error",
                "Success"
            ]
        },
        "vimeo.OEmbedResponse": {
            "type": "object",
            "properties": {
                "author_name": {
                    "type": "string"
                },
                "author_url": {
                    "type": "string"
                },
                "description": {
                    "type": "string"
                },
                "duration": {
                    "type": "integer"
                },
                "height": {
                    "type": "integer"
                },
                "html": {
                    "type": "string"
                },
                "is_plus": {
                    "type": "string"
                },
                "provider_name": {
                    "type": "string"
                },
                "provider_url": {
                    "type": "string"
                },
                "thumbnail_height": {
                    "type": "integer"
                },
                "thumbnail_url": {
                    "type": "string"
                },
                "thumbnail_width": {
                    "type": "integer"
                },
                "title": {
                    "type": "string"
                },
                "type": {
                    "type": "string"
                },
                "version": {
                    "type": "string"
                },
                "video_id": {
                    "type": "integer"
                },
                "width": {
                    "type": "integer"
                }
            }
        }
    },
    "securityDefinitions": {
        "Bearer": {
            "type": "apiKey",
            "name": "Authorization",
            "in": "header"
        }
    }
}