{
    "openapi": "3.1.2",
    "info": {
        "title": "Game boards api",
        "description": "PLAY-CITY Documentation",
        "version": "1.0"
    },
    "paths": {
        "/api/resource.json": {
            "servers": [
                {
                    "url": "https://api.iqibir.online/api/v1",
                    "description": "PLAY-CITY Documentation"
                }
            ]
        },
        "/api/v1/auth/forgot-pwd-confirm": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Confirm password reset",
                "description": "Verifies the accept code sent to the user email and sets a new password.",
                "operationId": "302f7bc54a29131bcaae7c68ea581439",
                "requestBody": {
                    "description": "Password reset confirmation data",
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/App\\Auth\\Http\\v1\\Public\\Request\\DTO\\ForgotPwdConfirmDTO"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully reset password"
                    },
                    "422": {
                        "description": "Validation error (e.g. invalid code or mismatched passwords)"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/auth/forgot-pwd": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Send a password reset code to the user",
                "description": "Generates a password reset code and sends it to the provided user email.",
                "operationId": "3cd44c8fb37607eaaa7265a78d53640e",
                "requestBody": {
                    "description": "Email address of the user who forgot their password",
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "email"
                                ],
                                "properties": {
                                    "email": {
                                        "description": "User email address",
                                        "type": "string",
                                        "format": "email"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Email sent successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "description": "Success message",
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation error (e.g. email not found)"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/auth/oauth-fb/callback": {
            "get": {
                "tags": [
                    "Auth"
                ],
                "summary": "Facebook OAuth callback",
                "operationId": "01bfc725af62b6564d34a7fedc9564a4",
                "responses": {
                    "302": {
                        "description": "Redirect to SPA"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/auth/oauth-google/callback": {
            "get": {
                "tags": [
                    "Auth"
                ],
                "summary": "Google OAuth callback",
                "operationId": "ece6a6eed60eac38432f122c03503710",
                "responses": {
                    "302": {
                        "description": "Redirect to SPA"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/auth/oauth-fb/login": {
            "get": {
                "tags": [
                    "Auth"
                ],
                "summary": "Get Facebook OAuth redirect URL",
                "operationId": "10d393def30e07fc194186102e8b4b45",
                "parameters": [
                    {
                        "name": "ref",
                        "in": "query",
                        "description": "Referral code",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "redirect": {
                                            "type": "string",
                                            "format": "url"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/auth/oauth-google/login": {
            "get": {
                "tags": [
                    "Auth"
                ],
                "summary": "Get Google OAuth redirect URL",
                "operationId": "623956561d2be18ea4e192aeabf071c9",
                "parameters": [
                    {
                        "name": "ref",
                        "in": "query",
                        "description": "Referral code",
                        "required": false,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "redirect": {
                                            "type": "string",
                                            "format": "url"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "api/v1/auth/create": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Register a new user",
                "description": "Create an account and return a JWT cookie",
                "operationId": "4b9694cd0badc834f7b12f96ceaf3137",
                "requestBody": {
                    "description": "Registration details",
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/App\\Auth\\Http\\v1\\Public\\Request\\DTO\\RegisterDTO"
                            }
                        }
                    }
                },
                "responses": {
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    },
                    "200": {
                        "description": "Registration successful, JWT cookie set",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "user": {
                                            "description": "Authenticated user object",
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "example": 422
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Validation failed"
                                        },
                                        "errors": {
                                            "description": "Field validation errors",
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/api/v1/auth/restore": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Restore user account",
                "operationId": "508898bcad9447c6f6915582657997a6",
                "requestBody": {
                    "description": "Restore account request data",
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/App\\Auth\\Http\\v1\\Public\\Request\\DTO\\RestoreDTO"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successful response",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "result": {
                                            "description": "Boolean result of restoration",
                                            "type": "boolean"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation error (e.g. invalid code)"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/auth/restore/answer": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Send a restore code to the user",
                "operationId": "ba398a3daf57d3e68dc60982923a1d8e",
                "requestBody": {
                    "description": "Email address of the user who wants to restore their account",
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "email"
                                ],
                                "properties": {
                                    "email": {
                                        "description": "User email address",
                                        "type": "string",
                                        "format": "email"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Restore code sent successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "valid_second": {
                                            "description": "Time in seconds the code is valid for",
                                            "type": "integer"
                                        },
                                        "message": {
                                            "description": "Success message",
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation error (e.g. email not found)"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "api/v1/auth/sign": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Sign in Members",
                "description": "Create an account and return a JWT cookie",
                "operationId": "beb0c7e83973d0dc3524881403930096",
                "requestBody": {
                    "description": "Sign in credentials",
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/App\\Auth\\Http\\v1\\Public\\Request\\DTO\\SignDTO"
                            }
                        }
                    }
                },
                "responses": {
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    },
                    "200": {
                        "description": "Registration successful, JWT cookie set",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "user": {
                                            "description": "Authenticated user object",
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "example": 422
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Validation failed"
                                        },
                                        "errors": {
                                            "description": "Field validation errors",
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/api/v1/auth/validate-key": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Validate the accept key",
                "operationId": "ff9b0c265adfa4245e773ae127e9df55",
                "requestBody": {
                    "description": "Validation key data",
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "username",
                                    "key"
                                ],
                                "properties": {
                                    "username": {
                                        "description": "User username or email",
                                        "type": "string"
                                    },
                                    "key": {
                                        "description": "The accept key to validate",
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "204": {
                        "description": "Successfully validated the key"
                    },
                    "422": {
                        "description": "Validation error (invalid key or username)"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/auth/accept-invite": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Validate user info and send accept code",
                "operationId": "fcac59721b32adfeda072d236021eb5d",
                "requestBody": {
                    "description": "Validation info request data",
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/App\\Auth\\Http\\v1\\Public\\Request\\DTO\\ValidateInfoDTO"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Accept code sent successfully"
                    },
                    "422": {
                        "description": "Validation error (e.g. email or username already taken)"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/battleship/ready": {
            "post": {
                "tags": [
                    "Battleship"
                ],
                "summary": "Confirm ship placement",
                "operationId": "b6dc67d7ab8ef496553b28c9fb1a549a",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "roomId",
                                    "cells"
                                ],
                                "properties": {
                                    "roomId": {
                                        "type": "string",
                                        "example": "01arz3ndektsv4rrffq69g5fav"
                                    },
                                    "cells": {
                                        "type": "array",
                                        "items": {
                                            "required": [
                                                "x",
                                                "y",
                                                "hasShip",
                                                "state"
                                            ],
                                            "properties": {
                                                "x": {
                                                    "type": "integer"
                                                },
                                                "y": {
                                                    "type": "integer"
                                                },
                                                "hasShip": {
                                                    "type": "boolean"
                                                },
                                                "state": {
                                                    "type": "string",
                                                    "example": "idle"
                                                }
                                            },
                                            "type": "object"
                                        }
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Board saved",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Board saved. Waiting for opponent."
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "422": {
                        "description": "Validation error"
                    },
                    "429": {
                        "description": "Too Many Requests"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/battleship/rematch": {
            "post": {
                "tags": [
                    "Battleship"
                ],
                "summary": "Request a rematch",
                "description": "Requests a rematch after a game is finished. If both players request a rematch, a new room is created.",
                "operationId": "6a7187e031ff359969ee7dcf08bd655f",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "room_id"
                                ],
                                "properties": {
                                    "room_id": {
                                        "type": "string",
                                        "example": "01arz3ndektsv4rrffq69g5fav"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Rematch requested or new room created",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "status": {
                                            "type": "string",
                                            "example": "waiting",
                                            "enum": [
                                                "waiting",
                                                "created"
                                            ]
                                        },
                                        "newRoomId": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "example": "01arz3ndektsv4rrffq69g5fav"
                                        },
                                        "message": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "example": "Game is not finished"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/battleship/shoot": {
            "post": {
                "tags": [
                    "Battleship"
                ],
                "summary": "Take a shot",
                "operationId": "224b263fb70cc779a99d639874dd2d1d",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ShootDTO"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Shot processed",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Shot processed"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "422": {
                        "description": "Validation error"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/battleship/use-skill": {
            "post": {
                "tags": [
                    "Battleship"
                ],
                "summary": "Use a tactical skill (e.g. place a mine)",
                "description": "Applies a special skill or weapon to a target coordinate.",
                "operationId": "0739f819ecf6b698ddc0f8c0dc15d79b",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/ShootDTO"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Skill applied",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Skill applied"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "422": {
                        "description": "Validation error"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/battleship/state/{room_id}": {
            "get": {
                "tags": [
                    "Battleship"
                ],
                "summary": "Get the current match state",
                "operationId": "5c432b5634fa3108927a9b86ec570e36",
                "parameters": [
                    {
                        "name": "roomId",
                        "in": "path",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Current match state",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "exists": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "state": {
                                            "type": "object"
                                        },
                                        "my_id": {
                                            "type": "string",
                                            "example": "12345"
                                        },
                                        "time_left": {
                                            "type": "integer",
                                            "example": 10
                                        },
                                        "game_time_left": {
                                            "description": "Seconds remaining in the 30-minute global match timer",
                                            "type": "integer",
                                            "example": 1800
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "403": {
                        "description": "Forbidden"
                    },
                    "404": {
                        "description": "Match not found"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/battleship/surrender": {
            "post": {
                "tags": [
                    "Battleship"
                ],
                "summary": "Surrender the current match",
                "description": "Surrenders the active match and declares the opponent as the winner.",
                "operationId": "623c4862f8cf5ccc03b45124d8b03e95",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "room_id"
                                ],
                                "properties": {
                                    "room_id": {
                                        "type": "string",
                                        "example": "01arz3ndektsv4rrffq69g5fav"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Surrender processed",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "message": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "example": "Game is not active"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/battleship/ship-paste": {
            "post": {
                "tags": [
                    "Battleship"
                ],
                "summary": "Synchronizing the board during placement",
                "description": "Saves the intermediate result of the board and UI ships in Redis without declaring readiness.",
                "operationId": "69387bb32e1f987681079ea5e80e9363",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "roomId",
                                    "cells",
                                    "placedShips",
                                    "dockShips"
                                ],
                                "properties": {
                                    "roomId": {
                                        "type": "string"
                                    },
                                    "cells": {
                                        "type": "array",
                                        "items": {
                                            "type": "object"
                                        }
                                    },
                                    "placedShips": {
                                        "type": "array",
                                        "items": {
                                            "type": "object"
                                        }
                                    },
                                    "dockShips": {
                                        "type": "array",
                                        "items": {
                                            "type": "object"
                                        }
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Board synchronized",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "422": {
                        "description": "Validation error"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/battleship/timeout": {
            "post": {
                "tags": [
                    "Battleship"
                ],
                "summary": "Claim turn timeout",
                "description": "Switches turn to the opponent if the current player took too long to make a move.",
                "operationId": "0700a9b07fd015d0fe94c9bd946f3d4d",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "room_id"
                                ],
                                "properties": {
                                    "room_id": {
                                        "type": "string",
                                        "example": "01arz3ndektsv4rrffq69g5fav"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Timeout processed",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "success": {
                                            "type": "boolean",
                                            "example": true
                                        },
                                        "message": {
                                            "type": [
                                                "string",
                                                "null"
                                            ],
                                            "example": "Time is not up yet"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal server error"
                    }
                }
            }
        },
        "/api/v1/challenge/accept": {
            "post": {
                "tags": [
                    "Challenge"
                ],
                "summary": "Accept a challenge",
                "description": "Accept an incoming game challenge by providing the challenge ID.",
                "operationId": "b5989025d19fa47cc4eaa7186a399e51",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "challenge_id": {
                                        "description": "The ID of the challenge to accept",
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Challenge accepted successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Challenge expired or invalid",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/challenge/decline": {
            "post": {
                "tags": [
                    "Challenge"
                ],
                "summary": "Decline a challenge",
                "description": "Decline an incoming game challenge by providing the challenge ID.",
                "operationId": "d293209430ad1be03bf1f6fd6937ba37",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "challenge_id": {
                                        "description": "The ID of the challenge to decline",
                                        "type": "string"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Challenge declined or not found",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/challenge/send": {
            "post": {
                "tags": [
                    "Challenge"
                ],
                "summary": "Send a challenge",
                "description": "Send a new game challenge to a target player.",
                "operationId": "f61e12010063874e537d2711ec6046ce",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "target_id": {
                                        "description": "The ID of the target player",
                                        "type": "string"
                                    },
                                    "is_direct": {
                                        "description": "Whether it is a direct challenge",
                                        "type": "boolean"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Challenge sent successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        },
                                        "challenge": {
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Target player unavailable",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/game/room/{room}": {
            "get": {
                "tags": [
                    "Room"
                ],
                "summary": "Get room info",
                "description": "Get detailed information about a specific game room.",
                "operationId": "12bb58586b3ff4f841577dc1873af3ac",
                "parameters": [
                    {
                        "name": "room",
                        "in": "path",
                        "description": "The room ID",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Room information retrieved successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "room": {
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "404": {
                        "description": "Room not found or access denied",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/game/matchmaking/cancel": {
            "post": {
                "tags": [
                    "Matchmaking"
                ],
                "summary": "Cancel matchmaking",
                "description": "Cancel the current matchmaking search.",
                "operationId": "cb0650afb0baf4f5277220c2af0d7f68",
                "responses": {
                    "200": {
                        "description": "Search cancelled successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/game/matchmaking/join": {
            "post": {
                "tags": [
                    "Matchmaking"
                ],
                "summary": "Join matchmaking",
                "description": "Join the matchmaking queue to find an opponent.",
                "operationId": "0b7f2f5be9f21cae6ed806373ad5a01d",
                "responses": {
                    "200": {
                        "description": "Searching for opponent",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "message": {
                                            "type": "string"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/api/v1/lobby/my-room": {
            "get": {
                "tags": [
                    "Lobby"
                ],
                "summary": "Get my room",
                "description": "Retrieve the current active room for the authenticated user.",
                "operationId": "033f56b95a92d1b781a1b13b73b5db1c",
                "responses": {
                    "200": {
                        "description": "Room retrieved successfully"
                    },
                    "204": {
                        "description": "No active room found"
                    }
                }
            }
        },
        "/api/v1/member/active/{status}": {
            "post": {
                "tags": [
                    "Member"
                ],
                "summary": "Update member active status",
                "description": "Updates the online status of the currently authenticated member.",
                "operationId": "6684ce4df456acc8651c0a3ea4fd9020",
                "parameters": [
                    {
                        "name": "status",
                        "in": "path",
                        "description": "Status of the member (e.g. 1 for online, 0 for offline)",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Status updated successfully"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/member/avatar/regenerate": {
            "post": {
                "tags": [
                    "Member"
                ],
                "summary": "Regenerate avatar",
                "description": "Regenerates and assigns a new random avatar to the currently authenticated member.",
                "operationId": "74c60280f8b20b677539144ad96501d4",
                "responses": {
                    "200": {
                        "description": "Avatar was regenerated successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "properties": {
                                                "avatar": {
                                                    "type": "string",
                                                    "example": "https://example.com/avatars/new_avatar.png"
                                                }
                                            },
                                            "type": "object"
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Avatar was regenerated"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/member/account": {
            "post": {
                "tags": [
                    "Member"
                ],
                "summary": "Delete member account",
                "description": "Deletes the account of the currently authenticated member. Requires the member password.",
                "operationId": "42a34d783341c08aca0d4c4421156994",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "password"
                                ],
                                "properties": {
                                    "password": {
                                        "type": "string",
                                        "example": "secret123"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Account deleted successfully"
                    },
                    "400": {
                        "description": "Bad Request (e.g. invalid password)"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "delete": {
                "tags": [
                    "Member"
                ],
                "summary": "Delete member account",
                "description": "Deletes the account of the currently authenticated member. Requires the member password.",
                "operationId": "032e6895c0d47acf9ac111d697dd7047",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "password"
                                ],
                                "properties": {
                                    "password": {
                                        "type": "string",
                                        "example": "secret123"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Account deleted successfully"
                    },
                    "400": {
                        "description": "Bad Request (e.g. invalid password)"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/member": {
            "get": {
                "tags": [
                    "Member"
                ],
                "summary": "Get current member",
                "description": "Retrieves the profile and claims of the currently authenticated member.",
                "operationId": "bcdf9393d15e5cb29470f775ad8292bc",
                "responses": {
                    "200": {
                        "description": "Member details retrieved successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/MemberResource"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            },
            "put": {
                "tags": [
                    "Member"
                ],
                "summary": "Edit member profile",
                "description": "Updates the profile details of the currently authenticated member.",
                "operationId": "dca2233281ba246da146d16a81b3cd71",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "name": {
                                        "type": "string",
                                        "example": "John Doe"
                                    },
                                    "email": {
                                        "type": "string",
                                        "example": "john@example.com"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Successfully updated member details",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/MemberResource"
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Successfully updated member details."
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "400": {
                        "description": "Bad Request"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "422": {
                        "description": "Validation Error"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/member/{memberId}/settings": {
            "get": {
                "tags": [
                    "Member"
                ],
                "summary": "Get account settings",
                "description": "Retrieves the account settings for a specific member.",
                "operationId": "8fce53e6c9005be8a0f275d7947c8d1c",
                "parameters": [
                    {
                        "name": "memberId",
                        "in": "path",
                        "description": "ID of the member",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Account settings retrieved successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "$ref": "#/components/schemas/AccountSettingsResource"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "404": {
                        "description": "Member not found"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/member/referral": {
            "get": {
                "tags": [
                    "Member"
                ],
                "summary": "Get member referral token",
                "description": "Retrieves the referral token for the currently authenticated member.",
                "operationId": "ac472a1932e46c25cb8f21d00b7eb70e",
                "responses": {
                    "200": {
                        "description": "Referral token retrieved successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "properties": {
                                                "token": {
                                                    "type": [
                                                        "string",
                                                        "null"
                                                    ],
                                                    "example": "REF123456"
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/api/v1/member/referral/friends": {
            "get": {
                "tags": [
                    "Member"
                ],
                "summary": "Get member referral friends",
                "description": "Retrieves the list of friends invited via referral by the currently authenticated member.",
                "operationId": "64d42202c5c25e280c650adc3e964e45",
                "parameters": [
                    {
                        "name": "referralId",
                        "in": "query",
                        "description": "ID of the referral",
                        "required": true,
                        "schema": {
                            "type": "string",
                            "format": "uuid"
                        }
                    },
                    {
                        "name": "page",
                        "in": "query",
                        "description": "Page number for pagination",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 1
                        }
                    },
                    {
                        "name": "perPage",
                        "in": "query",
                        "description": "Number of items per page",
                        "required": false,
                        "schema": {
                            "type": "integer",
                            "default": 15
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "List of referral friends retrieved successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "type": "array",
                                            "items": {
                                                "$ref": "#/components/schemas/ReferralFriendsResource"
                                            }
                                        },
                                        "meta": {
                                            "properties": {
                                                "total": {
                                                    "type": "integer",
                                                    "example": 42
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "204": {
                        "description": "No Content - Referrals not found"
                    },
                    "401": {
                        "description": "Unauthorized"
                    },
                    "422": {
                        "description": "Validation Error"
                    },
                    "500": {
                        "description": "Internal Server Error"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    }
                ]
            }
        },
        "/member/referral-friends-count/{referral_id}": {
            "get": {
                "tags": [
                    "Member"
                ],
                "summary": "Get referral friends count",
                "description": "Retrieves the total count of friends referred by a member. The referral_id is optional.",
                "operationId": "76ba2edf43cb0ab7d9d02bd688684754",
                "parameters": [
                    {
                        "name": "referral_id",
                        "in": "path",
                        "description": "The referral ID to get the count for (optional)",
                        "required": false,
                        "schema": {
                            "type": [
                                "string",
                                "null"
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful retrieval of count",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "properties": {
                                                "total_count": {
                                                    "description": "Total number of referral friends",
                                                    "type": "integer",
                                                    "example": 42
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/member/opponent/{roomId}": {
            "get": {
                "tags": [
                    "Member"
                ],
                "summary": "Get opponent details",
                "description": "Retrieves the opponent details for a specific game room.",
                "operationId": "f318f240a3b2caa99e13e290aa9855bf",
                "parameters": [
                    {
                        "name": "roomId",
                        "in": "path",
                        "description": "The ID of the room",
                        "required": true,
                        "schema": {
                            "type": "string"
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Successful retrieval of opponent details",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "description": "Opponent member details",
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "404": {
                        "$ref": "#/components/responses/404"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/member/logout": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Logout member",
                "description": "Logout the currently authenticated member and clear their JWT cookie",
                "operationId": "1effe9c46d83beba4f81a8179a08c3a8",
                "responses": {
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    },
                    "422": {
                        "$ref": "#/components/responses/422"
                    },
                    "200": {
                        "description": "Logout successful"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/member/online-status/{status}": {
            "post": {
                "tags": [
                    "Member"
                ],
                "summary": "Update online status",
                "description": "Updates the online status for the currently authenticated member.",
                "operationId": "492664341275e6f9d7739993114cb8b8",
                "parameters": [
                    {
                        "name": "status",
                        "in": "path",
                        "description": "Online status (1 for online, 0 for offline)",
                        "required": true,
                        "schema": {
                            "type": "integer",
                            "enum": [
                                0,
                                1
                            ]
                        }
                    }
                ],
                "responses": {
                    "200": {
                        "description": "Status updated successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "properties": {
                                                "message": {
                                                    "type": "string",
                                                    "example": "Status updated successfully."
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/member/open-for-battle": {
            "post": {
                "tags": [
                    "Member"
                ],
                "summary": "Update open for battle status",
                "description": "Updates whether the member is open for battle.",
                "operationId": "5192a23f5a5eaf990700da2d68054639",
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "open"
                                ],
                                "properties": {
                                    "open": {
                                        "description": "Boolean indicating if the member is open for battle",
                                        "type": "boolean",
                                        "example": true
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Status updated successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "properties": {
                                                "message": {
                                                    "type": "string",
                                                    "example": "Successfully update"
                                                }
                                            },
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "422": {
                        "$ref": "#/components/responses/422"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/member/password": {
            "post": {
                "tags": [
                    "Member"
                ],
                "summary": "Add or update password",
                "description": "Adds or updates the password for the authenticated member.",
                "operationId": "c812a63fa9f8fe6849acb8f354ed6dfa",
                "requestBody": {
                    "description": "Password data",
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "required": [
                                    "password",
                                    "password_confirmation"
                                ],
                                "properties": {
                                    "password": {
                                        "description": "The new password",
                                        "type": "string",
                                        "format": "password",
                                        "example": "Secret123!"
                                    },
                                    "password_confirmation": {
                                        "description": "Password confirmation",
                                        "type": "string",
                                        "format": "password",
                                        "example": "Secret123!"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Password updated successfully, returns member details"
                    },
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "422": {
                        "$ref": "#/components/responses/422"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/member/refresh": {
            "post": {
                "tags": [
                    "Auth"
                ],
                "summary": "Refresh token for members",
                "description": "Refresh the JWT token for the currently authenticated member.",
                "operationId": "0aadcc032ebf7f0fed87b5f822306b6f",
                "responses": {
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    },
                    "200": {
                        "description": "Registration successful, JWT cookie set",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "_payload": {
                                            "$ref": "#/components/schemas/TokenSchema"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "422": {
                        "description": "Validation error",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "status": {
                                            "type": "integer",
                                            "example": 422
                                        },
                                        "message": {
                                            "type": "string",
                                            "example": "Validation failed"
                                        },
                                        "errors": {
                                            "description": "Field validation errors",
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        },
        "/member/account-settings": {
            "put": {
                "tags": [
                    "Member"
                ],
                "summary": "Update account settings",
                "description": "Updates the account settings for the currently authenticated member.",
                "operationId": "067a1d8d4fa9d1020f49c199b0f1b312",
                "requestBody": {
                    "description": "Account settings data",
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "properties": {
                                    "notifications_enabled": {
                                        "description": "Enable or disable notifications",
                                        "type": "boolean",
                                        "example": true
                                    },
                                    "language": {
                                        "description": "Preferred language code",
                                        "type": "string",
                                        "example": "en"
                                    }
                                },
                                "type": "object"
                            }
                        }
                    }
                },
                "responses": {
                    "200": {
                        "description": "Account settings updated successfully",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "properties": {
                                        "data": {
                                            "description": "Updated account settings",
                                            "type": "object"
                                        }
                                    },
                                    "type": "object"
                                }
                            }
                        }
                    },
                    "401": {
                        "$ref": "#/components/responses/401"
                    },
                    "422": {
                        "$ref": "#/components/responses/422"
                    },
                    "500": {
                        "$ref": "#/components/responses/500"
                    }
                },
                "security": [
                    {
                        "bearerAuth": []
                    },
                    {
                        "cookieAuth": []
                    }
                ]
            }
        }
    },
    "components": {
        "schemas": {
            "ApiResponse": {
                "properties": {
                    "success": {
                        "type": "boolean"
                    },
                    "status": {
                        "type": "integer"
                    },
                    "message": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "meta": {
                        "type": "object"
                    },
                    "accesses": {
                        "type": "object"
                    },
                    "data": {
                        "type": "object"
                    }
                },
                "type": "object"
            },
            "App\\Auth\\Http\\v1\\Public\\Request\\DTO\\ForgotPwdConfirmDTO": {
                "description": "Data Transfer Object for confirming a password reset",
                "required": [
                    "email",
                    "accept_code",
                    "password",
                    "password_confirm"
                ],
                "properties": {
                    "email": {
                        "description": "User email address",
                        "type": "string",
                        "format": "email"
                    },
                    "accept_code": {
                        "description": "The 6-digit accept code sent to the email",
                        "type": "string",
                        "maxLength": 6,
                        "minLength": 6
                    },
                    "password": {
                        "description": "New password",
                        "type": "string"
                    },
                    "password_confirm": {
                        "description": "Confirmation of the new password",
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "App\\Auth\\Http\\v1\\Public\\Request\\DTO\\RegisterDTO": {
                "description": "Data Transfer Object for user registration",
                "properties": {
                    "email": {
                        "description": "User email address",
                        "type": "string",
                        "format": "email"
                    },
                    "username": {
                        "description": "User chosen username",
                        "type": "string"
                    },
                    "accept_code": {
                        "description": "Accept code sent to email",
                        "type": "string"
                    },
                    "referral_code": {
                        "description": "Optional referral code",
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "password": {
                        "description": "User password",
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "type": "object"
            },
            "App\\Auth\\Http\\v1\\Public\\Request\\DTO\\RestoreDTO": {
                "description": "Data Transfer Object for account restoration confirmation",
                "properties": {
                    "email": {
                        "description": "User email address",
                        "type": "string",
                        "format": "email"
                    },
                    "code": {
                        "description": "Restore code sent to email",
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "App\\Auth\\Http\\v1\\Public\\Request\\DTO\\SignDTO": {
                "description": "Data Transfer Object for signing in",
                "properties": {
                    "email": {
                        "description": "User email address or username",
                        "type": "string"
                    },
                    "password": {
                        "description": "User password",
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "App\\Auth\\Http\\v1\\Public\\Request\\DTO\\ValidateInfoDTO": {
                "description": "Data Transfer Object for validating user info before registration",
                "properties": {
                    "email": {
                        "description": "User email address",
                        "type": "string",
                        "format": "email"
                    },
                    "password": {
                        "description": "User desired password",
                        "type": "string",
                        "minLength": 8
                    },
                    "username": {
                        "description": "User desired username",
                        "type": "string",
                        "minLength": 3
                    }
                },
                "type": "object"
            },
            "TokenSchema": {
                "title": "BearerSchema",
                "description": "Authentication token details",
                "required": [
                    "token",
                    "expires_at"
                ],
                "type": "object",
                "allOf": [
                    {
                        "$ref": "#/components/schemas/AbstractSchema"
                    },
                    {
                        "properties": {
                            "token": {
                                "description": "JWT token string",
                                "type": "string"
                            },
                            "expires_at": {
                                "description": "Token expiration timestamp",
                                "type": "integer"
                            }
                        },
                        "type": "object"
                    }
                ]
            },
            "CellDTO": {
                "title": "Cell Data",
                "description": "Data representing a single cell on the board",
                "required": [
                    "x",
                    "y",
                    "hasShip",
                    "state"
                ],
                "properties": {
                    "x": {
                        "type": "integer",
                        "example": 0
                    },
                    "y": {
                        "type": "integer",
                        "example": 0
                    },
                    "hasShip": {
                        "type": "boolean",
                        "example": true
                    },
                    "state": {
                        "type": "string",
                        "example": "idle",
                        "enum": [
                            "idle"
                        ]
                    }
                },
                "type": "object"
            },
            "ReadyDTO": {
                "title": "Ready Request Data",
                "description": "Data for setting ships and declaring readiness",
                "required": [
                    "roomId",
                    "cells",
                    "placedShips",
                    "dockShips"
                ],
                "properties": {
                    "roomId": {
                        "type": "string",
                        "example": "01ka3ymkdzjzz7d4xq9njqz3e1",
                        "maxLength": 26,
                        "minLength": 26
                    },
                    "cells": {
                        "type": "array",
                        "items": {
                            "$ref": "#/components/schemas/CellDTO"
                        },
                        "maxItems": 100,
                        "minItems": 100
                    },
                    "placedShips": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    },
                    "dockShips": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    }
                },
                "type": "object"
            },
            "ShootDTO": {
                "title": "Shoot Request Data",
                "description": "Shot coordinates and type of weapon used",
                "required": [
                    "roomId",
                    "x",
                    "y",
                    "weapon"
                ],
                "properties": {
                    "roomId": {
                        "description": "ULID room game",
                        "type": "string",
                        "example": "01arz3ndektsv4rrffq69g5fav"
                    },
                    "x": {
                        "description": "Coordinates X (from 0 to 9)",
                        "type": "integer",
                        "example": 3
                    },
                    "y": {
                        "description": "Coordinates Y (from 0 to 9)",
                        "type": "integer",
                        "example": 4
                    },
                    "weapon": {
                        "description": "Weapon type",
                        "type": "string",
                        "example": "regular",
                        "enum": [
                            "regular",
                            "cross",
                            "airplane",
                            "nuke",
                            "hydrogen",
                            "mine"
                        ]
                    }
                },
                "type": "object"
            },
            "BidStatus": {
                "type": "string",
                "enum": [
                    "pending",
                    "published",
                    "started",
                    "extended",
                    "closed"
                ]
            },
            "BidUnitStatus": {
                "type": "string",
                "enum": [
                    "pending",
                    "started",
                    "sold"
                ]
            },
            "BidEndedType": {
                "type": "string",
                "enum": [
                    "member_quantity",
                    "price_limit"
                ]
            },
            "AbstractSchema": {
                "description": "Abstract Base Schema"
            },
            "CursorSchema": {
                "properties": {
                    "items": {
                        "type": "array",
                        "items": {
                            "type": "object"
                        }
                    },
                    "cursor": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "prev_cursor": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "next_cursor": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "type": "object"
            },
            "FileDTO": {
                "title": "FileDTO",
                "required": [
                    "name",
                    "size",
                    "mime_type"
                ],
                "properties": {
                    "name": {
                        "type": "string",
                        "example": "image.webp"
                    },
                    "path": {
                        "type": "string",
                        "example": "https://ewfewfewfew.webp"
                    },
                    "bucket": {
                        "type": "string",
                        "example": "bucket"
                    },
                    "size": {
                        "type": "integer",
                        "example": 62814
                    },
                    "mime_type": {
                        "type": "string",
                        "example": "image/webp"
                    },
                    "uploaded_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "type": "object"
            },
            "GameResource": {
                "description": "Game resource representation",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "name": {
                        "type": "string"
                    },
                    "key": {
                        "type": "string"
                    },
                    "rating": {
                        "type": "number"
                    },
                    "online_count": {
                        "type": "integer"
                    },
                    "type": {
                        "type": "string"
                    },
                    "created": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "available": {
                        "type": "boolean"
                    },
                    "coming_soon": {
                        "type": "boolean"
                    },
                    "hot": {
                        "type": "boolean"
                    },
                    "top": {
                        "type": "boolean"
                    },
                    "new": {
                        "type": "boolean"
                    },
                    "path": {
                        "type": "string"
                    },
                    "description": {
                        "type": [
                            "string",
                            "null"
                        ]
                    },
                    "screensaver": {
                        "type": [
                            "string",
                            "null"
                        ]
                    }
                },
                "type": "object"
            },
            "RoomResource": {
                "description": "Room resource representation",
                "properties": {
                    "id": {
                        "type": "integer"
                    },
                    "document_id": {
                        "type": "string"
                    },
                    "room_number": {
                        "type": "integer"
                    },
                    "status": {
                        "type": "string"
                    },
                    "rate": {
                        "type": "number"
                    },
                    "created_at": {
                        "type": "string",
                        "format": "date-time"
                    },
                    "ended_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "started_at": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    },
                    "scheduled_start": {
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date-time"
                    }
                },
                "type": "object"
            },
            "AvailableRoomsSchema": {
                "title": "Available Rooms",
                "description": "Schema for available game rooms",
                "type": "object",
                "allOf": [
                    {
                        "$ref": "#/components/schemas/AbstractSchema"
                    },
                    {
                        "properties": {
                            "room": {
                                "oneOf": [
                                    {
                                        "$ref": "#/components/schemas/RoomSchema"
                                    },
                                    {
                                        "$ref": "#/components/schemas/AbstractSchema"
                                    },
                                    {
                                        "type": "null"
                                    }
                                ]
                            },
                            "members": {
                                "type": "array",
                                "items": {
                                    "$ref": "#/components/schemas/AbstractSchema"
                                }
                            },
                            "creator_id": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "example": "user_123"
                            },
                            "accesses": {
                                "type": "array",
                                "items": {
                                    "type": "string"
                                },
                                "example": []
                            }
                        },
                        "type": "object"
                    }
                ]
            },
            "GameSchema": {
                "title": "Game",
                "description": "Game model schema",
                "type": "object",
                "allOf": [
                    {
                        "$ref": "#/components/schemas/AbstractSchema"
                    },
                    {
                        "properties": {
                            "id": {
                                "type": "string",
                                "example": "01ka3ymkdzjzz7d4xq9njqz3e1"
                            },
                            "name": {
                                "type": "string",
                                "example": "Battleship"
                            },
                            "key": {
                                "type": "string",
                                "example": "battleship"
                            },
                            "description": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "example": "Naval combat game"
                            },
                            "available": {
                                "type": "boolean",
                                "example": true
                            },
                            "coming_soon": {
                                "type": "boolean",
                                "example": false
                            },
                            "rating": {
                                "type": "number",
                                "format": "float",
                                "example": 4.5
                            },
                            "online_count": {
                                "type": "integer",
                                "example": 100
                            },
                            "type": {
                                "type": "string",
                                "example": "1",
                                "enum": [
                                    "1"
                                ]
                            },
                            "created": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2026-02-06T07:00:40.000000Z"
                            },
                            "hot": {
                                "type": "boolean",
                                "example": true
                            },
                            "top": {
                                "type": "boolean",
                                "example": true
                            },
                            "new": {
                                "type": "boolean",
                                "example": false
                            },
                            "path": {
                                "type": "string",
                                "example": "battleship-board"
                            },
                            "screensaver": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "example": "game/game-1.png"
                            }
                        },
                        "type": "object"
                    }
                ]
            },
            "RoomSchema": {
                "title": "Room",
                "description": "Room model schema",
                "type": "object",
                "allOf": [
                    {
                        "$ref": "#/components/schemas/AbstractSchema"
                    },
                    {
                        "properties": {
                            "id": {
                                "type": "string",
                                "example": "01ka3ymkdzjzz7d4xq9njqz3e1"
                            },
                            "document_id": {
                                "type": "string",
                                "example": "doc_123456"
                            },
                            "room_number": {
                                "type": "integer",
                                "example": 1
                            },
                            "status": {
                                "type": "integer",
                                "example": 1,
                                "enum": [
                                    1,
                                    2,
                                    3,
                                    4,
                                    5
                                ]
                            },
                            "rate": {
                                "type": "string",
                                "example": "3.5"
                            },
                            "created_at": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2026-02-06T07:00:40.000000Z"
                            },
                            "ended_at": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date-time",
                                "example": null
                            },
                            "started_at": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date-time",
                                "example": null
                            },
                            "scheduled_at": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "format": "date-time",
                                "example": null
                            }
                        },
                        "type": "object"
                    }
                ]
            },
            "AddPasswordDTO": {
                "title": "Add Password DTO",
                "description": "Data transfer object for adding a password to an account",
                "required": [
                    "password",
                    "passwordConfirm",
                    "memberId"
                ],
                "properties": {
                    "password": {
                        "description": "The new password",
                        "type": "string",
                        "maxLength": 64,
                        "minLength": 4
                    },
                    "passwordConfirm": {
                        "description": "Confirmation of the new password",
                        "type": "string",
                        "maxLength": 64,
                        "minLength": 4
                    },
                    "memberId": {
                        "description": "The unique identifier of the member",
                        "type": "string",
                        "format": "uuid"
                    }
                },
                "type": "object"
            },
            "MemberReferralFriendsDTO": {
                "title": "Member Referral Friends DTO",
                "description": "Data transfer object for fetching a member's referred friends",
                "required": [
                    "skip",
                    "take"
                ],
                "properties": {
                    "skip": {
                        "description": "Number of records to skip for pagination",
                        "type": "integer",
                        "minimum": 0
                    },
                    "take": {
                        "description": "Number of records to take for pagination",
                        "type": "integer",
                        "minimum": 1
                    },
                    "referralId": {
                        "description": "Optional specific referral ID to filter by",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uuid"
                    }
                },
                "type": "object"
            },
            "UpdateMemberDTO": {
                "title": "Update Member DTO",
                "description": "Data transfer object for updating member profile information",
                "required": [
                    "id",
                    "username"
                ],
                "properties": {
                    "id": {
                        "description": "The unique identifier of the member",
                        "type": "string",
                        "format": "uuid"
                    },
                    "username": {
                        "description": "The member's new username",
                        "type": "string"
                    },
                    "fullName": {
                        "description": "The member's full name",
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255,
                        "minLength": 6
                    },
                    "dateBirth": {
                        "description": "The member's date of birth in YYYY-MM-DD format",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date"
                    }
                },
                "type": "object"
            },
            "UpdateSettingDTO": {
                "title": "Update Setting DTO",
                "description": "Data transfer object for updating a member's settings",
                "properties": {
                    "audioMasterVolume": {
                        "description": "Master volume level (0-100)",
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "audioMusicVolume": {
                        "description": "Music volume level (0-100)",
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "audioSfxVolume": {
                        "description": "SFX volume level (0-100)",
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "audioAmbientVolume": {
                        "description": "Ambient sound volume level (0-100)",
                        "type": [
                            "integer",
                            "null"
                        ]
                    },
                    "audioMute": {
                        "description": "Whether all audio is muted",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "graphicsQuality": {
                        "description": "Graphics quality preset",
                        "type": [
                            "string",
                            "null"
                        ],
                        "enum": [
                            "low",
                            "medium",
                            "high",
                            "ultra"
                        ]
                    },
                    "graphicsBloomEffects": {
                        "description": "Enable bloom effects",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "graphicsGlassmorphism": {
                        "description": "Enable glassmorphism effects",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "graphicsCameraShake": {
                        "description": "Enable camera shake",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "graphicsShowFps": {
                        "description": "Show frames per second",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "gameplayConfirmScrap": {
                        "description": "Require confirmation before scrapping items",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "gameplayAutoRepair": {
                        "description": "Enable automatic repair",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "gameplayAutoTarget": {
                        "description": "Enable automatic targeting",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "gameplayLanguage": {
                        "description": "Language code for gameplay (e.g., en, es)",
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 5
                    },
                    "notificationEmail": {
                        "description": "Enable email notifications",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "notificationSms": {
                        "description": "Enable SMS notifications",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "notificationPush": {
                        "description": "Enable push notifications",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "privacyPublicProfile": {
                        "description": "Make profile public",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "privacyShowOnline": {
                        "description": "Show online status to others",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "securityTwoFactor": {
                        "description": "Enable two-factor authentication",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    },
                    "securityLoginAlert": {
                        "description": "Enable login alerts",
                        "type": [
                            "boolean",
                            "null"
                        ]
                    }
                },
                "type": "object"
            },
            "AccountSettingUpdateRequest": {
                "title": "Account Setting Update Request",
                "description": "Request payload to update member account settings",
                "properties": {
                    "audio": {
                        "description": "Audio settings",
                        "properties": {
                            "master_volume": {
                                "type": [
                                    "integer",
                                    "null"
                                ],
                                "maximum": 100,
                                "minimum": 0
                            },
                            "music_volume": {
                                "type": [
                                    "integer",
                                    "null"
                                ],
                                "maximum": 100,
                                "minimum": 0
                            },
                            "sfx_volume": {
                                "type": [
                                    "integer",
                                    "null"
                                ],
                                "maximum": 100,
                                "minimum": 0
                            },
                            "ambient_volume": {
                                "type": [
                                    "integer",
                                    "null"
                                ],
                                "maximum": 100,
                                "minimum": 0
                            },
                            "mute": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            }
                        },
                        "type": [
                            "object",
                            "null"
                        ]
                    },
                    "graphics": {
                        "description": "Graphics settings",
                        "properties": {
                            "quality": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "enum": [
                                    "low",
                                    "medium",
                                    "high",
                                    "ultra"
                                ]
                            },
                            "bloom_effects": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "glassmorphism": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "camera_shake": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "show_fps": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            }
                        },
                        "type": [
                            "object",
                            "null"
                        ]
                    },
                    "gameplay": {
                        "description": "Gameplay settings",
                        "properties": {
                            "confirm_scrap": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "auto_repair": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "auto_target": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "language": {
                                "type": [
                                    "string",
                                    "null"
                                ],
                                "maxLength": 5
                            }
                        },
                        "type": [
                            "object",
                            "null"
                        ]
                    },
                    "notification": {
                        "description": "Notification settings",
                        "properties": {
                            "email": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "sms": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "push": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            }
                        },
                        "type": [
                            "object",
                            "null"
                        ]
                    },
                    "privacy": {
                        "description": "Privacy settings",
                        "properties": {
                            "public_profile": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "show_online": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            }
                        },
                        "type": [
                            "object",
                            "null"
                        ]
                    },
                    "security": {
                        "description": "Security settings",
                        "properties": {
                            "two_factor": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            },
                            "login_alert": {
                                "type": [
                                    "boolean",
                                    "null"
                                ]
                            }
                        },
                        "type": [
                            "object",
                            "null"
                        ]
                    }
                },
                "type": "object"
            },
            "AddPasswordRequest": {
                "title": "Add Password Request",
                "description": "Request payload for adding a new password",
                "required": [
                    "pwd",
                    "pwd_confirm"
                ],
                "properties": {
                    "pwd": {
                        "description": "The new password to set",
                        "type": "string",
                        "maxLength": 64,
                        "minLength": 4
                    },
                    "pwd_confirm": {
                        "description": "Password confirmation",
                        "type": "string",
                        "maxLength": 64,
                        "minLength": 4
                    }
                },
                "type": "object"
            },
            "DeleteAccountRequest": {
                "title": "Delete Account Request",
                "description": "Request payload for deleting a member account",
                "required": [
                    "password"
                ],
                "properties": {
                    "password": {
                        "description": "The member's current password for confirmation",
                        "type": "string"
                    }
                },
                "type": "object"
            },
            "EditMemberRequest": {
                "title": "Edit Member Request",
                "description": "Request payload to edit a member's basic information",
                "required": [
                    "username"
                ],
                "properties": {
                    "username": {
                        "description": "The new username for the member",
                        "type": "string"
                    },
                    "full_name": {
                        "description": "The full name of the member",
                        "type": [
                            "string",
                            "null"
                        ],
                        "maxLength": 255,
                        "minLength": 6
                    },
                    "date_birth": {
                        "description": "Date of birth of the member, must be at least 18 years ago",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "1990-01-01"
                    }
                },
                "type": "object"
            },
            "MemberReferralFriendsRequest": {
                "title": "Member Referral Friends Request",
                "description": "Request to fetch a list of referred friends with pagination",
                "required": [
                    "skip",
                    "take"
                ],
                "properties": {
                    "skip": {
                        "description": "Number of items to skip for pagination",
                        "type": "integer",
                        "minimum": 0
                    },
                    "take": {
                        "description": "Number of items to return",
                        "type": "integer",
                        "minimum": 1
                    },
                    "referral_id": {
                        "description": "Filter by a specific referral ID",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "uuid"
                    }
                },
                "type": "object"
            },
            "AudioResource": {
                "title": "Audio Resource",
                "description": "Represents the audio settings for a user account.",
                "properties": {
                    "masterVolume": {
                        "description": "Master volume level, usually between 0 and 100.",
                        "type": "integer",
                        "example": 80
                    },
                    "musicVolume": {
                        "description": "Music volume level, usually between 0 and 100.",
                        "type": "integer",
                        "example": 70
                    },
                    "sfxVolume": {
                        "description": "Sound effects volume level, usually between 0 and 100.",
                        "type": "integer",
                        "example": 100
                    },
                    "ambientVolume": {
                        "description": "Ambient sounds volume level, usually between 0 and 100.",
                        "type": "integer",
                        "example": 60
                    },
                    "mute": {
                        "description": "Indicates whether all audio is muted.",
                        "type": "boolean",
                        "example": false
                    }
                },
                "type": "object"
            },
            "CommonResource": {
                "title": "Common Resource",
                "description": "Represents common settings for a user account.",
                "properties": {
                    "mute": {
                        "description": "Indicates whether the user has globally muted settings.",
                        "type": "boolean",
                        "example": false
                    }
                },
                "type": "object"
            },
            "GameplayResource": {
                "title": "Gameplay Resource",
                "description": "Represents the gameplay settings for a user account.",
                "properties": {
                    "confirmScrap": {
                        "description": "Indicates whether to confirm before scrapping items.",
                        "type": "boolean",
                        "example": true
                    },
                    "autoRepair": {
                        "description": "Indicates whether auto-repair is enabled.",
                        "type": "boolean",
                        "example": false
                    },
                    "autoTarget": {
                        "description": "Indicates whether auto-targeting is enabled.",
                        "type": "boolean",
                        "example": true
                    },
                    "language": {
                        "description": "Preferred language code for the game.",
                        "type": "string",
                        "example": "en"
                    }
                },
                "type": "object"
            },
            "GraphicsResource": {
                "title": "Graphics Resource",
                "description": "Represents the graphics settings for a user account.",
                "properties": {
                    "quality": {
                        "description": "Graphics quality preset (e.g., low, medium, high).",
                        "type": "string",
                        "example": "high"
                    },
                    "bloomEffects": {
                        "description": "Indicates whether bloom effects are enabled.",
                        "type": "boolean",
                        "example": true
                    },
                    "glassmorphism": {
                        "description": "Indicates whether glassmorphism UI effects are enabled.",
                        "type": "boolean",
                        "example": true
                    },
                    "cameraShake": {
                        "description": "Indicates whether camera shake is enabled.",
                        "type": "boolean",
                        "example": true
                    },
                    "showFps": {
                        "description": "Indicates whether the FPS counter is visible.",
                        "type": "boolean",
                        "example": false
                    }
                },
                "type": "object"
            },
            "NotificationResource": {
                "title": "Notification Resource",
                "description": "Represents the notification preferences for a user account.",
                "properties": {
                    "email": {
                        "description": "Indicates whether email notifications are enabled.",
                        "type": "boolean",
                        "example": true
                    },
                    "sms": {
                        "description": "Indicates whether SMS notifications are enabled.",
                        "type": "boolean",
                        "example": false
                    },
                    "push": {
                        "description": "Indicates whether push notifications are enabled.",
                        "type": "boolean",
                        "example": true
                    }
                },
                "type": "object"
            },
            "PrivacyResource": {
                "title": "Privacy Resource",
                "description": "Represents the privacy settings for a user account.",
                "properties": {
                    "publicProfile": {
                        "description": "Indicates whether the profile is visible to the public.",
                        "type": "boolean",
                        "example": true
                    },
                    "showOnline": {
                        "description": "Indicates whether the online status is visible to others.",
                        "type": "boolean",
                        "example": true
                    }
                },
                "type": "object"
            },
            "SecurityResource": {
                "title": "Security Resource",
                "description": "Represents the security settings for a user account.",
                "properties": {
                    "twoFactor": {
                        "description": "Indicates whether two-factor authentication is enabled.",
                        "type": "boolean",
                        "example": false
                    },
                    "loginAlert": {
                        "description": "Indicates whether login alerts are enabled.",
                        "type": "boolean",
                        "example": true
                    }
                },
                "type": "object"
            },
            "AccountSettingsResource": {
                "title": "Account Settings Resource",
                "description": "Aggregates all account settings for a user.",
                "properties": {
                    "id": {
                        "description": "Unique identifier of the member.",
                        "type": "integer",
                        "example": 1
                    },
                    "audio": {
                        "$ref": "#/components/schemas/AudioResource",
                        "description": "Audio settings"
                    },
                    "graphics": {
                        "$ref": "#/components/schemas/GraphicsResource",
                        "description": "Graphics settings"
                    },
                    "gameplay": {
                        "$ref": "#/components/schemas/GameplayResource",
                        "description": "Gameplay settings"
                    },
                    "notification": {
                        "$ref": "#/components/schemas/NotificationResource",
                        "description": "Notification settings"
                    },
                    "privacy": {
                        "$ref": "#/components/schemas/PrivacyResource",
                        "description": "Privacy settings"
                    },
                    "security": {
                        "$ref": "#/components/schemas/SecurityResource",
                        "description": "Security settings"
                    }
                },
                "type": "object"
            },
            "MemberResource": {
                "title": "Member Resource",
                "description": "Detailed representation of a member profile.",
                "properties": {
                    "id": {
                        "description": "Unique identifier of the member.",
                        "type": "integer",
                        "example": 1
                    },
                    "account_id": {
                        "description": "Associated account identifier.",
                        "type": "integer",
                        "example": 123
                    },
                    "username": {
                        "description": "Username of the member.",
                        "type": "string",
                        "example": "johndoe"
                    },
                    "rank": {
                        "description": "Current rank label of the member.",
                        "type": "string",
                        "example": "Captain"
                    },
                    "email": {
                        "description": "Email address of the member.",
                        "type": "string",
                        "example": "john@example.com"
                    },
                    "online": {
                        "description": "Indicates whether the member is currently online.",
                        "type": "boolean",
                        "example": true
                    },
                    "created_at": {
                        "description": "ISO 8601 timestamp of when the member joined.",
                        "type": "string",
                        "format": "date-time",
                        "example": "2023-01-01T12:00:00Z"
                    },
                    "has_pwd": {
                        "description": "Indicates whether the member has set a password.",
                        "type": "boolean",
                        "example": true
                    },
                    "open_battle": {
                        "description": "Information about the currently open battle, if any.",
                        "type": [
                            "object",
                            "null"
                        ]
                    },
                    "avatar": {
                        "description": "URL or path to the member avatar.",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "https://example.com/avatar.png"
                    },
                    "full_name": {
                        "description": "Full name of the member.",
                        "type": [
                            "string",
                            "null"
                        ],
                        "example": "John Doe"
                    },
                    "date_birth": {
                        "description": "Date of birth of the member.",
                        "type": [
                            "string",
                            "null"
                        ],
                        "format": "date",
                        "example": "1990-01-01"
                    },
                    "claim": {
                        "description": "Additional claims or entitlements.",
                        "type": [
                            "object",
                            "null"
                        ]
                    }
                },
                "type": "object"
            },
            "PlayerResource": {
                "title": "Player Resource",
                "description": "Basic representation of a player in the game.",
                "properties": {
                    "id": {
                        "description": "Unique identifier of the player.",
                        "type": "integer",
                        "example": 1
                    },
                    "username": {
                        "description": "Username or full name of the player.",
                        "type": "string",
                        "example": "johndoe"
                    },
                    "rank": {
                        "description": "Current rank of the player.",
                        "type": "object"
                    },
                    "created_at": {
                        "description": "ISO 8601 timestamp of when the player joined.",
                        "type": "string",
                        "format": "date-time",
                        "example": "2023-01-01T12:00:00Z"
                    }
                },
                "type": "object"
            },
            "ReferralFriendsResource": {
                "title": "Referral Friends Resource",
                "description": "Represents a referral friend relationship and associated rewards.",
                "properties": {
                    "referral_id": {
                        "description": "Unique identifier of the referral.",
                        "type": "integer",
                        "example": 10
                    },
                    "member_id": {
                        "description": "Identifier of the referred member.",
                        "type": "integer",
                        "example": 42
                    },
                    "is_online": {
                        "description": "Indicates if the referred friend is online.",
                        "type": "boolean",
                        "example": false
                    },
                    "joined_at": {
                        "description": "Timestamp when the friend accepted the referral.",
                        "type": "string",
                        "format": "date-time",
                        "example": "2023-05-10T15:30:00Z"
                    },
                    "reward_amount": {
                        "description": "Amount rewarded for this referral.",
                        "type": "number",
                        "example": 50
                    },
                    "reward_amount_receiver": {
                        "description": "Amount rewarded to the receiver.",
                        "type": "number",
                        "example": 10
                    }
                },
                "type": "object"
            }
        },
        "responses": {
            "401": {
                "description": "Unauthorized – token missing or invalid",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "success": {
                                    "type": "boolean",
                                    "example": false
                                },
                                "status": {
                                    "type": "integer",
                                    "example": 401
                                },
                                "message": {
                                    "type": "string",
                                    "example": "Unauthorized"
                                },
                                "data": {
                                    "type": "object",
                                    "example": []
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "500": {
                "description": "Internal server error",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "success": {
                                    "type": "boolean",
                                    "example": false
                                },
                                "status": {
                                    "type": "integer",
                                    "example": 500
                                },
                                "message": {
                                    "type": "string",
                                    "example": "Internal server error"
                                },
                                "data": {
                                    "type": "object",
                                    "example": []
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "422": {
                "description": "Validation error",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "status": {
                                    "type": "integer",
                                    "example": 422
                                },
                                "message": {
                                    "type": "string",
                                    "example": "Validation failed"
                                },
                                "errors": {
                                    "description": "Field validation errors",
                                    "type": "object"
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "404": {
                "description": "Not found",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "success": {
                                    "type": "boolean",
                                    "example": false
                                },
                                "status": {
                                    "type": "integer",
                                    "example": 404
                                },
                                "message": {
                                    "type": "string",
                                    "example": "Not found"
                                },
                                "data": {
                                    "type": "object",
                                    "example": []
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "400": {
                "description": "Bad Request",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "success": {
                                    "type": "boolean",
                                    "example": false
                                },
                                "status": {
                                    "type": "integer",
                                    "example": 400
                                },
                                "message": {
                                    "type": "string",
                                    "example": "Bad Request"
                                },
                                "data": {
                                    "type": "object",
                                    "example": []
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            },
            "403": {
                "description": "Forbidden",
                "content": {
                    "application/json": {
                        "schema": {
                            "properties": {
                                "success": {
                                    "type": "boolean",
                                    "example": false
                                },
                                "status": {
                                    "type": "integer",
                                    "example": 403
                                },
                                "message": {
                                    "type": "string",
                                    "example": "Forbidden"
                                },
                                "data": {
                                    "type": "object",
                                    "example": []
                                }
                            },
                            "type": "object"
                        }
                    }
                }
            }
        },
        "securitySchemes": {
            "bearerAuth": {
                "type": "http",
                "bearerFormat": "JWT",
                "scheme": "bearer"
            },
            "cookieAuth": {
                "type": "apiKey",
                "name": "access_token",
                "in": "cookie"
            }
        }
    },
    "tags": [
        {
            "name": "Auth",
            "description": "Auth"
        },
        {
            "name": "Battleship",
            "description": "Battleship"
        },
        {
            "name": "Challenge",
            "description": "Challenge"
        },
        {
            "name": "Room",
            "description": "Room"
        },
        {
            "name": "Matchmaking",
            "description": "Matchmaking"
        },
        {
            "name": "Lobby",
            "description": "Lobby"
        },
        {
            "name": "Member",
            "description": "Member"
        }
    ]
}