{
  "openapi": "3.0.0",
  "paths": {
    "/api/v1/articles": {
      "post": {
        "operationId": "ArticlesController_create",
        "summary": "Create Article",
        "description": "Creates a new article with the provided details.",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateArticleDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleEntity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["articles"]
      },
      "get": {
        "operationId": "ArticlesController_findAll",
        "summary": "Find All Articles",
        "description": "Retrieves a list of all articles with pagination support.",
        "parameters": [
          {
            "name": "page",
            "required": true,
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "pageSize",
            "required": true,
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ArticleEntity"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["articles"]
      }
    },
    "/api/v1/articles/drafts": {
      "get": {
        "operationId": "ArticlesController_findDrafts",
        "summary": "Find Draft Articles",
        "description": "Retrieves a list of draft articles with pagination support.",
        "parameters": [
          {
            "name": "page",
            "required": true,
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "pageSize",
            "required": true,
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ArticleEntity"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["articles"]
      }
    },
    "/api/v1/articles/{id}": {
      "get": {
        "operationId": "ArticlesController_findOne",
        "summary": "Find Article by ID",
        "description": "Retrieves an article by its unique identifier.",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["articles"]
      },
      "patch": {
        "operationId": "ArticlesController_update",
        "summary": "Update Article",
        "description": "Updates an article with the provided details.",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateArticleDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ArticleEntity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["articles"]
      },
      "delete": {
        "operationId": "ArticlesController_remove",
        "summary": "Remove Article",
        "description": "Deletes an article by its unique identifier.",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "204": {
            "description": ""
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["articles"]
      }
    },
    "/api/v1/users": {
      "post": {
        "operationId": "UsersController_create",
        "summary": "Create User",
        "description": "Creates a new user.",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateUserDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserEntity"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["users"],
        "security": [
          {
            "bearer": []
          }
        ]
      },
      "get": {
        "operationId": "UsersController_findAll",
        "summary": "Find All Users",
        "description": "Retrieves a list of all users.",
        "parameters": [
          {
            "name": "page",
            "required": true,
            "in": "query",
            "schema": {
              "type": "number"
            }
          },
          {
            "name": "pageSize",
            "required": true,
            "in": "query",
            "schema": {
              "type": "number"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/UserEntity"
                  }
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["users"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/users/{id}": {
      "get": {
        "operationId": "UsersController_findOne",
        "summary": "Find User by ID",
        "description": "Retrieves a user by its ID.",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserEntity"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["users"],
        "security": [
          {
            "bearer": []
          }
        ]
      },
      "patch": {
        "operationId": "UsersController_update",
        "summary": "Update User",
        "description": "Updates a user with the provided details.",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateUserDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserEntity"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["users"],
        "security": [
          {
            "bearer": []
          }
        ]
      },
      "delete": {
        "operationId": "UsersController_remove",
        "summary": "Remove User",
        "description": "Deletes a user by their unique identifier.",
        "parameters": [
          {
            "name": "id",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserEntity"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["users"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/auth/email/login": {
      "post": {
        "operationId": "AuthController_login",
        "summary": "User Login",
        "description": "Logs the user into the system and returns access tokens",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthEmailLoginDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthEntity"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "403": {
            "description": "Please activate your account before proceeding",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"]
      }
    },
    "/api/v1/auth/email/register": {
      "post": {
        "operationId": "AuthController_register",
        "summary": "User Registration",
        "description": "Registers a new user with email and password",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "description": "Specifies the preferred language for API responses. Supported values are: en (English), de (German), pl (Polish)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthRegisterLoginDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserEntity"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Missing or invalid registration details"
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"]
      }
    },
    "/api/v1/auth/email/confirm": {
      "post": {
        "operationId": "AuthController_confirmEmail",
        "summary": "Confirm Email",
        "description": "Confirms the user's email address using the provided confirmation hash.",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "description": "Specifies the preferred language for API responses. Supported values are: en (English), de (German), pl (Polish)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthConfirmEmailDto"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request - Invalid or expired hash code"
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"]
      }
    },
    "/api/v1/auth/email/resend": {
      "post": {
        "operationId": "AuthController_resendVerificationEmail",
        "summary": "Resend Verification Email",
        "description": "Resend the verification email to the user's email address.",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "description": "Specifies the preferred language for API responses. Supported values are: en (English), de (German), pl (Polish)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthResendVerificationEmailDto"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request - Invalid email format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"]
      }
    },
    "/api/v1/auth/forgot/password": {
      "post": {
        "operationId": "AuthController_forgotPassword",
        "summary": "Forgot Password",
        "description": "Initiates the password reset process by sending an email with a reset link to the user's email address.",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "description": "Specifies the preferred language for API responses. Supported values are: en (English), de (German), pl (Polish)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthForgotPasswordDto"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request - Invalid email format",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"]
      }
    },
    "/api/v1/auth/reset/password": {
      "post": {
        "operationId": "AuthController_resetPassword",
        "summary": "Reset Password",
        "description": "Resets the user's password using the provided reset password hash.",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthResetPasswordDto"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request - Invalid or expired hash code",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"]
      }
    },
    "/api/v1/auth/email/change": {
      "post": {
        "operationId": "AuthController_emailChange",
        "summary": "Initialize Email Change",
        "description": "Initiates the process to change the user's email address. After initialization, the user must confirm the email address change through another endpoint.",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "description": "Specifies the preferred language for API responses. Supported values are: en (English), de (German), pl (Polish)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthEmailChangeDto"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request - Invalid or expired hash code",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/auth/email/change-confirm": {
      "post": {
        "operationId": "AuthController_confirmEmailChange",
        "summary": "Confirm Email Change",
        "description": "Confirms the change of a user's email address using a verification code sent to the new email. This endpoint validates the verification code (hash) received by the user to complete the email address change process.",
        "parameters": [
          {
            "name": "Accept-Language",
            "in": "header",
            "description": "Specifies the preferred language for API responses. Supported values are: en (English), de (German), pl (Polish)",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthConfirmEmailChangeDto"
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request - Invalid or expired hash code",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/auth/me": {
      "get": {
        "operationId": "AuthController_me",
        "summary": "Get Current User",
        "description": "Retrieves information about the current authenticated user",
        "parameters": [],
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UserEntity"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"],
        "security": [
          {
            "bearer": []
          }
        ]
      },
      "patch": {
        "operationId": "AuthController_update",
        "summary": "Update Current User",
        "description": "Updates information about the current authenticated user",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthUpdateDto"
              }
            }
          }
        },
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "404": {
            "description": "User not found"
          },
          "422": {
            "description": "Missing old password / Incorrect old password / Missing password",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"],
        "security": [
          {
            "bearer": []
          }
        ]
      },
      "delete": {
        "operationId": "AuthController_delete",
        "summary": "Delete Current User",
        "description": "Deletes the current authenticated user",
        "parameters": [],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/auth/refresh": {
      "post": {
        "operationId": "AuthController_refresh",
        "summary": "Refresh Access Token",
        "description": "Refreshes the access token using the refresh token",
        "parameters": [],
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RefreshEntity"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/auth/logout": {
      "post": {
        "operationId": "AuthController_logout",
        "summary": "Logout",
        "description": "Logs the user out of the system",
        "parameters": [],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/auth/logout/all": {
      "post": {
        "operationId": "AuthController_logoutAll",
        "summary": "Logout all sessions",
        "description": "Logs the user out of all active sessions to enhance security in case of unauthorized access or when changing sensitive account information like passwords",
        "parameters": [],
        "responses": {
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorUnauthorizedEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/files/upload": {
      "post": {
        "operationId": "FilesController_uploadFile",
        "summary": "Upload File",
        "description": "Uploads a file with a specified category.",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "multipart/form-data": {
              "schema": {
                "type": "object",
                "properties": {
                  "file": {
                    "type": "string",
                    "format": "binary"
                  },
                  "category": {
                    "type": "string"
                  }
                }
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FileEntity"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - No file selected or missing user ID."
          },
          "500": {
            "description": "Internal server error"
          }
        },
        "tags": ["files"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/files/{fileName}": {
      "get": {
        "operationId": "FilesController_download",
        "summary": "Download File",
        "description": "Downloads the specified file.",
        "parameters": [
          {
            "name": "fileName",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "403": {
            "description": "Forbidden - You do not have permission to view this file or file does not exist."
          },
          "500": {
            "description": "Internal server error"
          }
        },
        "tags": ["files"],
        "security": [
          {
            "bearer": []
          }
        ]
      },
      "delete": {
        "operationId": "FilesController_deleteFile",
        "summary": "Delete File",
        "description": "Deletes the specified file.",
        "parameters": [
          {
            "name": "fileName",
            "required": true,
            "in": "path",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "403": {
            "description": "Forbidden - You do not have permission to delete this file or file does not exist."
          },
          "500": {
            "description": "Internal server error"
          }
        },
        "tags": ["files"],
        "security": [
          {
            "bearer": []
          }
        ]
      }
    },
    "/api/v1/auth/google/login": {
      "post": {
        "operationId": "AuthGoogleController_login",
        "summary": "Login with Google",
        "description": "Logs the user into the system using Google authentication",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthGoogleLoginDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successfully logged in with Google",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthEntity"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Error during Google token verification or processing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Invalid or expired Google token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth-social"]
      }
    },
    "/api/v1/auth/facebook/login": {
      "post": {
        "operationId": "AuthFacebookController_login",
        "summary": "Login with Facebook",
        "description": "Logs the user into the system using Facebook authentication",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthFacebookLoginDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successfully logged in with Facebook",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthEntity"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Error during Facebook token verification or processing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Invalid or expired Facebook token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth-social"]
      }
    },
    "/api/v1/auth/apple/login": {
      "post": {
        "operationId": "AuthAppleController_login",
        "summary": "Login with Apple",
        "description": "Logs the user into the system using Apple authentication",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/AuthAppleLoginDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Successfully logged in with Apple",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AuthEntity"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Error during Apple token verification or processing",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "422": {
            "description": "Unprocessable Entity - Invalid or expired Apple token",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["auth-social"]
      }
    },
    "/api/v1/health": {
      "get": {
        "operationId": "HealthController_check",
        "summary": "Check Health",
        "description": "Performs a health check, verifying the database, frontend domain, and cache connectivity.",
        "parameters": [],
        "responses": {
          "200": {
            "description": "The health check result.",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/HealthEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorEntity"
                }
              }
            }
          },
          "503": {
            "description": "One or more health checks failed"
          }
        },
        "tags": ["health"]
      }
    },
    "/api/v1/system/app-updates/check": {
      "post": {
        "operationId": "SystemController_checkForAppUpdate",
        "parameters": [],
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CheckUpdateDto"
              }
            }
          }
        },
        "responses": {
          "201": {
            "description": "Details about application from AppStore or PlayStore based on provided os",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AppVersionStatusEntity"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request - Missing or invalid app details"
          },
          "422": {
            "description": "Validation Error - One or more fields did not pass validation",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorValidationEntity"
                }
              }
            }
          },
          "429": {
            "description": "ThrottlerException: Too Many Requests",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorTooManyRequestsEntity"
                }
              }
            }
          },
          "500": {
            "description": "Internal server error",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ErrorServerEntity"
                }
              }
            }
          }
        },
        "tags": ["system"]
      }
    }
  },
  "info": {
    "title": "API",
    "description": "API documentation for the starter-kit project in NestJS by BinarApps. The API allows management of users, sessions and offers various functions for logged in users. Contains examples of authentication, authorization, and CRUD for selected resources.",
    "version": "1.0",
    "contact": {
      "name": "BinarApps",
      "url": "https://binarapps.com",
      "email": "l.jeziorski@binarapps.com"
    }
  },
  "tags": [],
  "servers": [],
  "components": {
    "securitySchemes": {
      "bearer": {
        "scheme": "bearer",
        "bearerFormat": "JWT",
        "type": "http"
      }
    },
    "schemas": {
      "ErrorServerEntity": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Type of error",
            "example": "Server Error"
          },
          "statusCode": {
            "type": "number",
            "description": "HTTP status code indicating the error",
            "example": 500
          }
        },
        "required": ["error", "statusCode"]
      },
      "CreateArticleDto": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "published": {
            "type": "boolean",
            "default": false
          }
        },
        "required": ["title", "body"]
      },
      "AuthorPublicDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string"
          },
          "firstName": {
            "type": "string"
          },
          "lastName": {
            "type": "string"
          }
        },
        "required": ["email", "firstName", "lastName"]
      },
      "ArticleEntity": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number"
          },
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string",
            "nullable": true
          },
          "body": {
            "type": "string"
          },
          "published": {
            "type": "boolean"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string"
          },
          "deletedAt": {
            "format": "date-time",
            "type": "string"
          },
          "authorId": {
            "type": "string",
            "nullable": true
          },
          "author": {
            "$ref": "#/components/schemas/AuthorPublicDto"
          }
        },
        "required": [
          "id",
          "title",
          "body",
          "published",
          "createdAt",
          "updatedAt",
          "deletedAt",
          "author"
        ]
      },
      "ErrorValidationEntity": {
        "type": "object",
        "properties": {
          "statusCode": {
            "type": "number",
            "description": "HTTP status code indicating the error",
            "example": 422
          },
          "errors": {
            "type": "object",
            "description": "Object containing field-specific validation errors",
            "example": {
              "email": "Invalid email format."
            },
            "additionalProperties": {
              "type": "string"
            }
          }
        },
        "required": ["statusCode", "errors"]
      },
      "UpdateArticleDto": {
        "type": "object",
        "properties": {
          "title": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "body": {
            "type": "string"
          },
          "published": {
            "type": "boolean",
            "default": false
          }
        }
      },
      "ErrorUnauthorizedEntity": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Type of error",
            "example": "Unauthorized"
          },
          "statusCode": {
            "type": "number",
            "description": "HTTP status code indicating the error",
            "example": 401
          }
        },
        "required": ["error", "statusCode"]
      },
      "ErrorEntity": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string",
            "description": "Message describing the error",
            "example": "An error occurred while processing your request"
          },
          "error": {
            "type": "string",
            "description": "Type of error",
            "example": "Forbidden"
          },
          "statusCode": {
            "type": "number",
            "description": "HTTP status code indicating the error",
            "example": 403
          }
        },
        "required": ["message", "error", "statusCode"]
      },
      "RoleDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the role."
          }
        },
        "required": ["id"]
      },
      "StatusDto": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the status."
          }
        },
        "required": ["id"]
      },
      "CreateUserDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "example@binarapps.com",
            "description": "The email address of the user."
          },
          "password": {
            "type": "string",
            "example": "NewSecurePassword123!",
            "description": "The password for the user account."
          },
          "firstName": {
            "type": "string",
            "example": "John",
            "description": "The first name of the user."
          },
          "lastName": {
            "type": "string",
            "example": "Doe",
            "description": "The last name of the user."
          },
          "locale": {
            "type": "string",
            "example": "en-US",
            "description": "IETF language tags (e.g., en-US)."
          },
          "role": {
            "description": "The role assigned to the user.",
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleDto"
              }
            ]
          },
          "status": {
            "description": "The status of the user account.",
            "allOf": [
              {
                "$ref": "#/components/schemas/StatusDto"
              }
            ]
          }
        },
        "required": ["email", "password", "firstName", "lastName", "locale", "role", "status"]
      },
      "Role": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 2,
            "description": "Role ID, where 1 is for User and 2 is for Admin",
            "enum": [1, 2]
          },
          "name": {
            "type": "string",
            "example": "USER",
            "description": "Role name, which can be either user or admin",
            "enum": ["ADMIN", "USER"]
          }
        },
        "required": ["id", "name"]
      },
      "Status": {
        "type": "object",
        "properties": {
          "id": {
            "type": "number",
            "example": 1,
            "description": "The unique identifier of the status."
          },
          "name": {
            "type": "string",
            "example": "active",
            "description": "The name of the status."
          }
        },
        "required": ["id", "name"]
      },
      "LastConsentEntity": {
        "type": "object",
        "properties": {
          "termsAccepted": {
            "type": "boolean",
            "example": true,
            "description": "Whether the terms were accepted."
          },
          "privacyPolicyAccepted": {
            "type": "boolean",
            "example": true,
            "description": "Whether the privacy policy was accepted."
          },
          "termsVersion": {
            "type": "string",
            "example": "1.0",
            "description": "Version of terms."
          },
          "privacyPolicyVersion": {
            "type": "string",
            "example": "1.0",
            "description": "Version of privacy policy."
          },
          "createdAt": {
            "format": "date-time",
            "type": "string",
            "example": "2023-01-01T00:00:00.000Z",
            "description": "The date and time when the consents were last created or the user agreed to the terms for the first time."
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string",
            "example": "2023-01-02T00:00:00.000Z",
            "description": "The date and time of the last update to the consents, indicating when the user last modified their agreement or the consents were refreshed."
          }
        },
        "required": [
          "termsAccepted",
          "privacyPolicyAccepted",
          "termsVersion",
          "privacyPolicyVersion",
          "createdAt",
          "updatedAt"
        ]
      },
      "UserEntity": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "a1b2c3d4-e5f6-7890-g1h2-i3j4k5l6m7n8"
          },
          "createdAt": {
            "format": "date-time",
            "type": "string",
            "example": "2022-01-01T00:00:00.000Z"
          },
          "updatedAt": {
            "format": "date-time",
            "type": "string",
            "example": "2022-02-01T00:00:00.000Z"
          },
          "deletedAt": {
            "format": "date-time",
            "type": "string",
            "example": null
          },
          "email": {
            "type": "string",
            "example": "user@example.com"
          },
          "firstName": {
            "type": "string",
            "example": "John"
          },
          "lastName": {
            "type": "string",
            "example": "Doe"
          },
          "provider": {
            "type": "string",
            "example": "google"
          },
          "socialId": {
            "type": "string",
            "example": "102209777480561953757"
          },
          "locale": {
            "type": "string",
            "example": "en-US"
          },
          "role": {
            "example": {
              "id": 2,
              "name": "USER"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/Role"
              }
            ]
          },
          "status": {
            "example": {
              "id": 1,
              "name": "ACTIVE"
            },
            "allOf": [
              {
                "$ref": "#/components/schemas/Status"
              }
            ]
          },
          "consent": {
            "$ref": "#/components/schemas/LastConsentEntity"
          }
        },
        "required": [
          "id",
          "createdAt",
          "updatedAt",
          "deletedAt",
          "email",
          "firstName",
          "lastName",
          "provider",
          "socialId",
          "locale",
          "role",
          "status"
        ]
      },
      "UpdateUserDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "example@binarapps.com",
            "description": "The updated email address of the user."
          },
          "password": {
            "type": "string",
            "example": "NewSecurePassword123!",
            "description": "The updated password for the user account."
          },
          "firstName": {
            "type": "string",
            "example": "John",
            "description": "The updated first name of the user."
          },
          "lastName": {
            "type": "string",
            "example": "Doe",
            "description": "The updated last name of the user."
          },
          "locale": {
            "type": "string",
            "example": "en-US",
            "description": "IETF language tags (e.g., en-US)."
          },
          "role": {
            "description": "The updated role assigned to the user.",
            "allOf": [
              {
                "$ref": "#/components/schemas/RoleDto"
              }
            ]
          },
          "status": {
            "description": "The updated status of the user account.",
            "allOf": [
              {
                "$ref": "#/components/schemas/StatusDto"
              }
            ]
          },
          "provider": {
            "type": "string",
            "description": "The provider associated with the user account."
          },
          "socialId": {
            "type": "string",
            "description": "The social ID associated with the user account."
          }
        },
        "required": ["provider", "socialId"]
      },
      "AuthEmailLoginDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "example@binarapps.com",
            "description": "The email address used for logging in."
          },
          "password": {
            "type": "string",
            "example": "YourSecurePassword123!",
            "description": "The password used for logging in."
          }
        },
        "required": ["email", "password"]
      },
      "AuthEntity": {
        "type": "object",
        "properties": {
          "accessToken": {
            "type": "string",
            "description": "The access token for authentication.",
            "example": "eyJhb...adQssw5c"
          },
          "refreshToken": {
            "type": "string",
            "description": "The refresh token for refreshing the access token.",
            "example": "eyJhb...adQssw5c"
          },
          "tokenExpires": {
            "type": "number",
            "description": "The expiry timestamp of the access token.",
            "example": 1708531622031
          },
          "user": {
            "description": "The user entity associated with the authentication.",
            "allOf": [
              {
                "$ref": "#/components/schemas/UserEntity"
              }
            ]
          }
        },
        "required": ["accessToken", "refreshToken", "tokenExpires", "user"]
      },
      "ErrorTooManyRequestsEntity": {
        "type": "object",
        "properties": {
          "error": {
            "type": "string",
            "description": "Type of error",
            "example": "ThrottlerException: Too Many Requests"
          },
          "statusCode": {
            "type": "number",
            "description": "HTTP status code indicating the error",
            "example": 429
          }
        },
        "required": ["error", "statusCode"]
      },
      "AuthRegisterLoginDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "example@binarapps.com"
          },
          "password": {
            "type": "string",
            "example": "NewSecurePassword123!"
          },
          "firstName": {
            "type": "string",
            "example": "Jon"
          },
          "lastName": {
            "type": "string",
            "example": "Doe"
          },
          "locale": {
            "type": "string",
            "example": "en-US",
            "description": "IETF language tags (e.g., en-US)."
          },
          "termsAccepted": {
            "type": "boolean",
            "example": true
          },
          "privacyPolicyAccepted": {
            "type": "boolean",
            "example": true
          }
        },
        "required": [
          "email",
          "password",
          "firstName",
          "lastName",
          "locale",
          "termsAccepted",
          "privacyPolicyAccepted"
        ]
      },
      "AuthConfirmEmailDto": {
        "type": "object",
        "properties": {
          "hash": {
            "type": "string",
            "example": "a1b2c3d4e5f6g7h8i9j0",
            "description": "The confirmation hash received in the email."
          }
        },
        "required": ["hash"]
      },
      "AuthResendVerificationEmailDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "example@binarapps.com",
            "description": "The email address associated with the user account."
          }
        },
        "required": ["email"]
      },
      "AuthForgotPasswordDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "example@binarapps.com",
            "description": "The email address associated with the user account."
          }
        },
        "required": ["email"]
      },
      "AuthResetPasswordDto": {
        "type": "object",
        "properties": {
          "password": {
            "type": "string",
            "example": "NewSecurePassword123!",
            "description": "The new password for resetting the user's password."
          },
          "hash": {
            "type": "string",
            "example": "a1b2c3d4e5f6g7h8i9j0",
            "description": "The hash token required for resetting the user's password."
          }
        },
        "required": ["password", "hash"]
      },
      "AuthEmailChangeDto": {
        "type": "object",
        "properties": {
          "email": {
            "type": "string",
            "example": "example@binarapps.com",
            "description": "The email address associated with the user account."
          }
        },
        "required": ["email"]
      },
      "AuthConfirmEmailChangeDto": {
        "type": "object",
        "properties": {
          "hash": {
            "type": "string",
            "example": "a1b2c3d4e5f6g7h8i9j0",
            "description": "The confirmation hash received in the email."
          }
        },
        "required": ["hash"]
      },
      "AuthUpdateDto": {
        "type": "object",
        "properties": {
          "firstName": {
            "type": "string",
            "example": "John",
            "description": "The first name of the user."
          },
          "lastName": {
            "type": "string",
            "example": "Doe",
            "description": "The last name of the user."
          },
          "locale": {
            "type": "string",
            "example": "en-US",
            "description": "IETF language tags (e.g., en-US)."
          },
          "password": {
            "type": "string",
            "example": "NewSecurePassword123!",
            "description": "The new password for updating user credentials."
          },
          "oldPassword": {
            "type": "string",
            "example": "OldSecurePassword123!",
            "description": "The old password required for security verification when updating user credentials."
          }
        }
      },
      "RefreshEntity": {
        "type": "object",
        "properties": {
          "accessToken": {
            "type": "string",
            "example": "eyJhb...adQssw5c",
            "description": "The access token for authentication."
          },
          "refreshToken": {
            "type": "string",
            "example": "eyJhb...adQssw5c",
            "description": "The refresh token for refreshing the access token."
          },
          "tokenExpires": {
            "type": "number",
            "example": 1708531622031,
            "description": "The expiry date of the access token."
          }
        },
        "required": ["accessToken", "refreshToken", "tokenExpires"]
      },
      "FileEntity": {
        "type": "object",
        "properties": {
          "id": {
            "type": "string",
            "example": "cbcfa8b8-3a25-4adb-a9c6-e325f0d0f3ae",
            "description": "Unique identifier of the file"
          },
          "path": {
            "type": "string",
            "example": "/uploads/avatars/cbcfa8b8-3a25-4adb-a9c6-e325f0d0f3ae.png",
            "description": "Path to access the file"
          },
          "category": {
            "type": "string",
            "example": "avatar",
            "description": "Category of the file",
            "nullable": true
          },
          "createdAt": {
            "format": "date-time",
            "type": "string",
            "example": "2024-02-27T12:34:56.789Z",
            "description": "Creation date of the file"
          },
          "mimeType": {
            "type": "string",
            "example": "image/png",
            "description": "MIME type of the file"
          },
          "name": {
            "type": "string",
            "example": "profile-picture.png",
            "description": "Name of the file"
          },
          "size": {
            "type": "number",
            "example": 102400,
            "description": "Size of the file in bytes"
          },
          "userId": {
            "type": "string",
            "example": "123e4567-e89b-12d3-a456-426614174000",
            "description": "Identifier of the user who owns the file"
          }
        },
        "required": ["id", "path", "category", "createdAt", "mimeType", "name", "size", "userId"]
      },
      "AuthGoogleLoginDto": {
        "type": "object",
        "properties": {
          "accessToken": {
            "type": "string",
            "example": "EAAJ3MZA...ZDZD",
            "description": "Google Access token obtained after user authentication using Google OAuth. Use this token to authenticate the request to the application."
          }
        },
        "required": ["accessToken"]
      },
      "AuthFacebookLoginDto": {
        "type": "object",
        "properties": {
          "accessToken": {
            "type": "string",
            "example": "EAAJ3MZA...ZDZD",
            "description": "Access token obtained from Facebook after successful authentication."
          }
        },
        "required": ["accessToken"]
      },
      "AuthAppleLoginDto": {
        "type": "object",
        "properties": {
          "idToken": {
            "type": "string",
            "example": "eyJra...vbmNlIn0",
            "description": "The identity token issued by Apple, encoded in JWT format."
          },
          "firstName": {
            "type": "string",
            "example": "John",
            "description": "The first name of the user. This field is optional and can be provided by Apple during the first sign-in."
          },
          "lastName": {
            "type": "string",
            "example": "Doe",
            "description": "The last name of the user. This field is optional and can be provided by Apple during the first sign-in."
          }
        },
        "required": ["idToken"]
      },
      "HealthCheckStatusDto": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "The status of the component",
            "example": "up"
          }
        },
        "required": ["status"]
      },
      "HealthCheckInfoDto": {
        "type": "object",
        "properties": {
          "db": {
            "description": "The status of the database connection",
            "allOf": [
              {
                "$ref": "#/components/schemas/HealthCheckStatusDto"
              }
            ]
          },
          "domain": {
            "description": "The status of the domain",
            "allOf": [
              {
                "$ref": "#/components/schemas/HealthCheckStatusDto"
              }
            ]
          },
          "cache": {
            "description": "The status of the cache",
            "allOf": [
              {
                "$ref": "#/components/schemas/HealthCheckStatusDto"
              }
            ]
          }
        },
        "required": ["db", "domain", "cache"]
      },
      "HealthEntity": {
        "type": "object",
        "properties": {
          "status": {
            "type": "string",
            "description": "Overall health status",
            "example": "ok"
          },
          "info": {
            "description": "Detailed info about each component's health",
            "allOf": [
              {
                "$ref": "#/components/schemas/HealthCheckInfoDto"
              }
            ]
          },
          "error": {
            "type": "object",
            "description": "Details of any errors encountered during the health check",
            "example": {}
          },
          "details": {
            "description": "Detailed health check results for each component",
            "allOf": [
              {
                "$ref": "#/components/schemas/HealthCheckInfoDto"
              }
            ]
          }
        },
        "required": ["status", "info", "error", "details"]
      },
      "CheckUpdateDto": {
        "type": "object",
        "properties": {
          "os": {
            "type": "string",
            "example": "ios",
            "description": "The operating system for which to check the update. Can be either \"android\" or \"ios\".",
            "enum": ["android", "ios"]
          },
          "currentVersion": {
            "type": "string",
            "example": "1.2.0",
            "description": "The current version of the app installed on the device."
          }
        },
        "required": ["os", "currentVersion"]
      },
      "AppVersionStatusEntity": {
        "type": "object",
        "properties": {
          "latestVersion": {
            "type": "string",
            "example": "1.5.0",
            "description": "The latest version of the app available in the app store."
          },
          "minimumVersion": {
            "type": "string",
            "example": "1.0.0",
            "description": "The minimum version of the app that still functions correctly without mandatory updates."
          },
          "updateRequired": {
            "type": "boolean",
            "example": true,
            "description": "Indicates whether an update is required to continue using the app."
          },
          "appId": {
            "type": "string",
            "example": "com.example.com",
            "description": "AppId of application in AppStore(AppStore Bundle ID) or PlayStore(Google Play Store app ID)"
          },
          "currentVersionReleaseDate": {
            "format": "date-time",
            "type": "string",
            "example": "2.0.0",
            "description": "The current version of the app."
          }
        },
        "required": [
          "latestVersion",
          "minimumVersion",
          "updateRequired",
          "appId",
          "currentVersionReleaseDate"
        ]
      }
    }
  },
  "externalDocs": {
    "description": "JSON",
    "url": "/docs-json"
  }
}
