openapi: 3.0.0
info:
  title: API de Residencias
  version: 1.0.0
  description: API para gestionar residencias, con operaciones de registro y consulta.

paths:
  /auth/signup:
    post:
      tags:
        - Authentication
        - User
      summary: Registrar un nuevo usuario
      description: Crea un nuevo usuario sin ser habilitado.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/User.Dto'
      responses:
        '200':
          description: Usuario creado exitosamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User.ResponseDto'
        '400':
          description: Datos nulos/vacios o problemas internos con el mail.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
                ERROR_MAIL_SENDER:
                  value:
                    mensaje: Error enviando el correo
                    codigo: 1020
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residencia invalida, no encontrada
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                  value:
                    mensaje: Residencia invalida
                    codigo: 1006
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '406':
          description: Correo Invalido, tiene que ser un correo con extructura correcta.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CORREO_INVALIDO:
                  value:
                    mensaje: Email invalid
                    codigo: 1002
                    status: 406
                    timestamp: 2025-04-13T21:00:0
        '409':
            description: Usuario ya existente
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  USER_YA_EXISTE:
                    value:
                      mensaje: Usuario existente
                      codigo: 1014
                      status: 409
                      timestamp: 2025-04-13T21:00:0
  /auth/verify:
    post:
      tags:
        - Authentication
        - User
      summary: Activar un usuario ya creado pero sin estar activado
      description: Activa ese usuario para poder usar los endPoints.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Verify.Dto'
      responses:
        '200':
          description: Mnesaje indicando que ya esta activada.
          content:
            text/plain:
              schema:
                type: string
                example: verificado
        '400':
          description: Datos nulos/vacios
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Usuario invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalida
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '406':
          description: El codigo de verificación no es valido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                CODIGO_INVALIDO:
                  value:
                    mensaje: El codigo de verificación no es valido
                    codigo: 1017
                    status: 406
                    timestamp: 2025-04-13T21:00:00
                CORREO_INVALIDO:
                  value:
                    mensaje: Email invalid
                    codigo: 1002
                    status: 406
                    timestamp: 2025-04-13T21:00:0
        '410':
          description: El codigo de verificación ha expirado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CODIGO_EXPIRADO:
                  value:
                    mensaje: El codigo de verificación ha expirado
                    codigo: 1016
                    status: 410
                    timestamp: 2025-04-13T21:00:0
  /auth/login:
    post:
      tags:
        - Authentication
        - User
      summary: Login para obtener token.
      description: el token es para acceder a todos los endPoints ya que estan protegidos.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Login.Dto'
      responses:
        '200':
          description: Logeo completado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Login.ResponseDto'
        '400':
          description: Datos nulos/vacios
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Usuario invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalida
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '406':
          description: Correo Invalido, tiene que ser un correo con extructura correcta.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                CORREO_INVALIDO:
                  value:
                    mensaje: Email invalid
                    codigo: 1002
                    status: 406
                    timestamp: 2025-04-13T21:00:0
                USUARIO_NO_ACTIVADO:
                  value:
                    mensaje: Usuario no activado
                    codigo: 1015
                    status: 406
                    timestamp: 2025-04-13T21:00:0

  /auth/resend:
    post:
      tags:
        - Authentication
        - User
      summary: Renviar correo verificacion Code
      description: manda un correo del ususario
      parameters:
        - name: email
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: correo enviado exitosamente
          content:
            text/plain:
              schema:
                type: string
                example: enviado.
        '400':
          description: Datos nulos/vacios o problemas al enviar correo
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
                ERROR_MAIL_SENDER:
                  value:
                    mensaje: Error enviando el correo
                    codigo: 1020
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Usuario invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalida
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00

        '406':
          description: Correo Invalido, tiene que ser un correo con extructura correcta.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CORREO_INVALIDO:
                  value:
                    mensaje: Email invalid
                    codigo: 1002
                    status: 406
                    timestamp: 2025-04-13T21:00:0
        '409':
          description: El usuario ya esta activado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CORREO_INVALIDO:
                  value:
                    mensaje: El ususario ya esta activado
                    codigo: 1018
                    status: 409
                    timestamp: 2025-04-13T21:00:0


  /resi/{idResidencia}/get:
    get:
      tags:
        - Residencia
      summary: Busca la residencia por id ingresado en el path
      description: Devuelve un dto Response con la residencia encontrada.
      security:
        - bearerAuth: []
      parameters:
        - name: idResidencia
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Residencia encontrada
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Residencia.ResponseDto'
        '400':
          description: Datos nulos/vacios de la variable de la url
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residencia invalida, no encontrada
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                  value:
                    mensaje: Residencia invalida
                    codigo: 1006
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0

  /resi/getAll:
    get:
      tags:
        - Residencia
      summary: Lista de residencias.
      description: Devuelve una lisra de residencias registradas en el sistema para que el que se ingrese un usuario nuevo.
      responses:
        '200':
          description: Residencia encontrada
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Residencia.PublicResponseDto'

  /resi/resident/add:
    post:
      tags:
        - Residente
      summary: Registrar un nuevo residente.
      description: Crea un residente en una residencia existente en la base de datos, con ciertos campos.
      security:
        - bearerAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Residente.Dto'
      responses:
        '201':
          description: Residente registrado con existo
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Residente.ResponseDto'
        '400':
          description: Datos del cuerpo nulos/vacios o de la variable del path idResidencia
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residencia invalida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                  value:
                    mensaje: Residencia invalida
                    codigo: 1006
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0
        '406':
          description: Fecha invalida o docuemnto de identidad invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                FECHA_INVALIDO:
                  value:
                    mensaje: Fecha invalida
                    codigo: 1005
                    status: 406
                    timestamp: 2025-04-13T21:00:00
                DOCUMENTO_INVALIDO:
                  value:
                    mensaje: Documento de identidad no tiene el formato correcto
                    codigo: 1027
                    status: 406
                    timestamp: 2025-04-13T21:00:00
        '409':
          description: El documento de identidad ya existe en la residencia
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                DOCUMENTO_DUPLICADO:
                  value:
                    mensaje: Documento de identidad ya existente
                    codigo: 1028
                    status: 409
                    timestamp: 2025-04-13T21:00:00

  /resi/resident/{idResidente}/get:
    get:
      tags:
        - Residente
      summary: Busca el residente por id ingresado en el path
      description: Devuelve un dto Response con el residente encontrada.
      security:
        - bearerAuth: []
      parameters:
        - name: idResidente
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Residente encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Residente.ResponseDto'
        '400':
          description: Datos nulos/vacios de la variable de la url
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residente invalido, no encontrado.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENTE_INVALIDO:
                  value:
                    mensaje: Residente invalida
                    codigo: 1009
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0

  /resi/resident/getAll:
    get:
      tags:
        - Residente
      summary: Obtener residentes
      description: Devuelve una lista de residentes.  Y filtrado por los sigueintes parametros. Hay que tener en cuenta sigue una proridad, documento de identidad, fecha de nacimiento y mes/año
      security:
        - bearerAuth: []
      parameters:
        - name: fechaNacimiento
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha exacta de nacimiento del residente
        - name: minFNac
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha mínima de nacimiento
        - name: maxFNac
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha máxima de nacimiento
        - name: maxAge
          in: query
          required: false
          schema:
            type: integer
          description: Edad máxima del residente
        - name: minAge
          in: query
          required: false
          schema:
            type: integer
          description: Edad mínima del residente
        - name: idJuego
          in: query
          required: false
          schema:
            type: integer
          description: ID del juego con el que ha interactuado el residente
        - name: idEvento
          in: query
          required: false
          schema:
            type: integer
          description: ID del evento en el que ha participado el residente
        - name: filtrado
          in: query
          required: false
      responses:
        '200':
          description: Residente(s) econtrado(s)
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Residente.ResponseDto'
        '404':
          description: Residencia invalida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                value:
                  mensaje: Residencia invalida
                  codigo: 1006
                  status: 404
                  timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0
        '406':
          description: Rango de edad invalido, el minimo no puede ser mayor que el maximo.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RANGO_EDAD_INVALIDO:
                  value:
                    mensaje: Rango de edad invalido
                    codigo: 1029
                    status: 406
                    timestamp: 2025-04-13T21:00:00

  /resi/resident/getAll/bajas:
    get:
      tags:
        - Residente
      summary: Obtener residentes en baja
      description: Devuelve una lista de residentes en baja.
      security:
        - bearerAuth: []
      parameters:
        - name: fecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha exacta de baja del residente
        - name: minFecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha mínima de baja del residente
        - name: maxFecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha máxima de baja del residente
      responses:
        '200':
          description: Residente(s) econtrado(s)
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Residente.ResponseDto'
        '404':
          description: Residencia invalida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                value:
                  mensaje: Residencia invalida
                  codigo: 1006
                  status: 404
                  timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0

  /resi/resident/{idResidente}/baja:
    patch:
      tags:
        - Residente
      summary: Dar de baja a un residente
      description: Cambia el estado de un residente a baja.
      security:
        - bearerAuth: []
      parameters:
        - name: idResidente
          in: query
          required: true
          schema:
              type: integer
              format: int64
      responses:
        '200':
          description: Residente dado de baja
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Residente.ResponseDto'
        '400':
          description: Campos nulos/vacios de las variable path
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residencia invalida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                RESIDENCIA_INVALIDO:
                  value:
                    mensaje: Residencia invalida
                    codigo: 1006
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                RESIDENTE_INVALIDO:
                  value:
                    mensaje: Residente invalida
                    codigo: 1009
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0
        '406':
          description: Residente ya dado de baja
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENTE_BAJA:
                  value:
                    mensaje: Residente ya dado de baja
                    codigo: 1028
                    status: 406
                    timestamp: 2025-04-13T21:00:00


  /resi/resident/{idResidente}/update:
    patch:
      tags:
        - Residente
      summary: Actualiza los datos de un residente
      description: Campos como nombre, apellido, documentoIdentidad, fecha de nacimiento.
      security:
        - bearerAuth: []
      parameters:
        - name: idResidente
          in: query
          required: true
          schema:
            type: integer
            format: int64
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Residente.Dto'
      responses:
        '200':
          description: Residente actualizado
          content:
              application/json:
                schema:
                    $ref: '#/components/schemas/Residente.ResponseDto'
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0

        '406':
          description: Documento de identidad invalido o fecha invalida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                FECHA_INVALIDO:
                  value:
                    mensaje: Fecha invalida
                    codigo: 1005
                    status: 406
                    timestamp: 2025-04-13T21:00:00
                DOCUMENTO_INVALIDO:
                  value:
                    mensaje: Documento de identidad no tiene el formato correcto
                    codigo: 1027
                    status: 406
                    timestamp: 2025-04-13T21:00:00
                RESIDENTE_BAJA:
                  value:
                    mensaje: Residente ya dado de baja
                    codigo: 1028
                    status: 406
                    timestamp: 2025-04-13T21:00:00
        '409':
          description: El documento de identidad ya existe en la residencia
          content:
              application/json:
                schema:
                    $ref: '#/components/schemas/Error.ResponseDto'
                example:
                    DOCUMENTO_DUPLICADO:
                    value:
                        mensaje: Documento de identidad ya existente
                        codigo: 1028
                        status: 409
                        timestamp: 2025-04-13T21:00:00

  /resi/user/me:
    get:
      tags:
        - User
      summary: Obten info de mi user
      description: Te da toda la información del usuario que esta logueado.
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Usuario encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User.ResponseDto'

  /resi/user/{idUser}/get:
    get:
      tags:
        - User
      summary: Obtener usuario
      description: Busca el usuario por id ingresado en el path.
      security:
        - bearerAuth: []
      parameters:
        - name: idUser
          in: query
          required: true
          schema:
              type: integer
              format: int64
      responses:
        '200':
          description: Usuario encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User.ResponseDto'
        '400':
          description: Datos nulos/vacios de la variable de la url
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                value:
                  mensaje: Faltan campos obligatorios
                  codigo: 1001
                  status: 400
                  timestamp: 2025-04-13T21:00:00
        '404':
          description: Usuario invalido, no encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalido
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0

  /resi/user/getAll:
    get:
      tags:
        - User
      summary: Obtener ususarios.
      description: Devuelve una lista de residentes. Con filtrado.
      security:
        - bearerAuth: []
      parameters:
        - name: enabled
          in: query
          required: false
          schema:
            type: boolean
        - name: idJuego
          in: query
          required: false
          schema:
              type: integer
              format: int64
      responses:
        '200':
          description: Usuario(s) econtrado(s)
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/User.ResponseDto'
        '400':
          description: Campos nulos/vacios de la variable de la url
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residencia invalida, no encontrada
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                  value:
                    mensaje: Residencia invalida
                    codigo: 1006
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

  /resi/user/getAll/bajas:
    get:
      tags:
        - User
      summary: Obten lista de usuarios en baja
      description: Una lista de todos los usuarios dados de baja
      security:
        - bearerAuth: []
      parameters:
        - name: fecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha exacta de baja del usuario
        - name: minFecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha mínima de baja del usuario
        - name: maxFecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha máxima de baja del usuario
      responses:
        '404':
          description: Residencia invalida, no encontrada
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                  value:
                    mensaje: Residencia invalida
                    codigo: 1006
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00


  /resi/user/defaultImage:
    get:
      tags:
        - User
      summary: Obtienes foto perfil
      description: Obten el recurso default del img defecto del personaje .png
      security:
        - bearerAuth: []
      responses:
        '200':
          description: Recurso .PNG en binario con la imagen default de perfil.

  /resi/user/{idUser}/update:
    patch:
      tags:
        - User
      summary: Actualizar valores del user.
      description: Actualiza nombre, apellido y correo, no password (al hacer esto, se debe vovlver hacer el login por el token.)
      security:
        - bearerAuth: []
      parameters:
        - name: idUser
          in: query
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UserUpdate.Dto"
      responses:
        '200':
          description: Usuario actualizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User.ResponseDto'
        '400':
          description: Campos nulos/vacios de la variable de la url
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Usuario invalido, no encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalido
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00
        '406':
          description: correo invalido o usuario de baja
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                CORREO_INVALIDO:
                  value:
                    mensaje: Email invalid
                    codigo: 1002
                    status: 406
                    timestamp: 2025-04-13T21:00:00
                USUARIO_BAJA:
                  value:
                    mensaje: Usuario dado de baja
                    codigo: 1030
                    status: 406
                    timestamp: 2025-04-13T21:00:00

        '409':
          description: Correo duplicado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CORREO_DUPLICADO:
                  value:
                    mensaje: El correo ya existe en la base de datos.
                    codigo: 1003
                    status: 409
                    timestamp: 2025-04-13T21:00:00

  /resi/user/{idUser}/update/changePassword:
    patch:
      tags:
        - User
      summary: Actualizar password
      description: Cambia la contraseña de un usuario.
      security:
        - bearerAuth: []
      parameters:
        - name: idUser
          in: query
          required: true
      requestBody:
        content:
          application/json:
            schema:
              $ref: "#/components/schemas/UserUpdatePassword.Dto"
      responses:
        '200':
          description: Password actualizado correctamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User.ResponseDto'
        '400':
          description: Campos nulos/vacios de la variable de la url o del requestBody
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Usuario invalido, no encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalido
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00
        '406':
          description: Password invalido o usuario dado de baja
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                PASSWORD_INVALIDO:
                  value:
                    mensaje: Contraseña invalida
                    codigo: 1029
                    status: 406
                    timestamp: 2025-04-13T21:00:00
                USUARIO_BAJA:
                  value:
                    mensaje: Usuario dado de baja
                    codigo: 1030
                    status: 406
                    timestamp: 2025-04-13T21:00:00

  /resi/user/{idUser}/baja:
    patch:
      tags:
        - User
      summary: dar de baja a user
      description: Da de baja a un usuario.
      security:
        - bearerAuth: []
      parameters:
        - name: idUser
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Password actualizado correctamente.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/User.ResponseDto'
        '400':
          description: Campos nulos/vacios de la variable de la url o del requestBody
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Usuario invalido, no encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalido
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00
        '406':
          description: Usuario ya dado de baja
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                USUARIO_BAJA:
                  value:
                    mensaje: Usuario dado de baja
                    codigo: 1030
                    status: 406
                    timestamp: 2025-04-13T21:00:00





  /resi/juego/{idJuego}/get:
    get:
      tags:
        - MODULO - JUEGO
      summary: Obtener juego
      description: Devuelve un juego.
      parameters:
        - name: idJuego
          in: query
          required: true
          schema:
            type: integer
            format: int64
      responses:
        '200':
          description: Juego(s) encontrado(s)
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Juego.ResponseDto'
        '400':
          description: Datos nulos/vacios de la variable de la url
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Juego invalida, no existe en la base de datos.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                JUEGO_INVALIDO:
                  value:
                    mensaje: Juego invalida
                    codigo: 1008
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0

  /resi/juego/getAll:
    get:
      tags:
        - MODULO - JUEGO
      summary: Obtener lista de juego
      description: Devuelve una lista de juegos.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JuegoFiltre.Dto'
      responses:
        '200':
          description: Juego(s) encontrado(s)
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Juego.ResponseDto'
        '400':
          description: Datos nulos/vacios de la variable de la url
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residencia invalida, no existe en la base de datos.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                  value:
                    mensaje: Residencia invalida
                    codigo: 1006
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0

  /resi/registro/juego/{idJuego}/add:
    post:
      tags:
        - MODULO - JUEGO
      summary: Registrar un nuevo registro de juego.
      description: Crea un nuevo registro de juego validando campos obligatorios,existencia de las referencias y valores validos.
      security:
        - bearerAuth: []
      parameters:
        - name: idJuego
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegistroJuego.Dto'
      responses:
        '201':
          description: Registro de juego registrado con éxito
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistroJuego.ResponseDto'
        '400':
          description: Datos nulos/vacios .
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00

        '404':
          description: Juego, Residente o Usuario invalido, no esixte ninguna referencia en la base de datos de estas entidades
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                JUEGO_INVALIDO:
                  value:
                    mensaje: Juego invalida
                    codigo: 1008
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                RESIDENTE_INVALIDO:
                  value:
                    mensaje: Residente invalida
                    codigo: 1009
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalida
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:0
        '406':
          description: No valores negativos en el el campo de puntos/num
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                VALORES_NEGATIVOS:
                  value:
                    mensaje: No puede ser valores negativos
                    codigo: 1007
                    status: 406
                    timestamp: 2025-04-13T21:00:00

        '409':
          description: Conflicto con las referencias de la residencia, no coinciden
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CONFLICTO_REFERENCIAS:
                  value:
                    mensaje: Problemas con las referencias de las entidades, no corresponden a las mismas
                    codigo: 1011
                    status: 409
                    timestamp: 2025-04-13T21:00:00

  /resi/registro/{idRegistroJuego}/get:
    get:
      tags:
        - MODULO - JUEGO
      summary: Obtener registro de juego
      description: Devuelve los datos de una partida específica.
      security:
        - bearerAuth: []
      parameters:
        - name: idRegistroJuego
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Registro encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistroJuego.ResponseDto'
        '400':
          description: Datos nulos/vacios .
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: juego/ registro_juego invalido, no existe en la base de datos.
          content:
            application/json:
              schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                JUEGO_INVALIDO:
                  value:
                    mensaje: Juego invalida
                    codigo: 1008
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                REGISTRO_JUEGO_INVALIDO:
                  value:
                    mensaje: Registro Juego invalido
                    codigo: 1012
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

  /resi/registro/getAll:
    get:
      tags:
        - MODULO - JUEGO
      summary: Listar registros por dificultad
      description: Lista registros por dificultad y filtros opcionales.
      security:
        - bearerAuth: []
      parameters:
        - name: idJuego
          in: query
          required: false
          schema:
            type: integer
          description: ID del juego
        - name: idResidente
          in: query
          required: false
          schema:
            type: integer
          description: ID del residente
        - name: edad
          in: query
          required: false
          schema:
            type: integer
          description: Edad exacta del residente
        - name: minEdad
          in: query
          required: false
          schema:
            type: integer
          description: Edad mínima del residente
        - name: maxEdad
          in: query
          required: false
          schema:
            type: integer
          description: Edad máxima del residente
        - name: fecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha exacta del registro
        - name: minFecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha mínima del registro
        - name: maxFecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha máxima del registro
        - name: promedio
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar por registros con promedio exacto
        - name: masPromedio
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar por registros con duración mayor al promedio
        - name: menosPromedio
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar por registros con duración menor al promedio
        - name: filtrado
          in: query
          required: false
          schema:
            type: string
          description: Tipo de filtro personalizado (por enum o string si no está definido como schema)
        - name: dificultad
          in: query
          required: false
          schema:
            type: string
            enum: [ FACIL, MEDIO, DIFICIL ]
          description: Nivel de dificultad del juego
        - name: comentado
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar por registros que tienen comentarios
      responses:
        '200':
          description: Lista de registros encontrada
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/RegistroJuego.ResponseDto'
        '400':
          description: Datos nulos/vacios .
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Juego, Residente o Usuario invalido, no esixte ninguna referencia en la base de datos de estas entidades
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                JUEGO_INVALIDO:
                  value:
                    mensaje: Juego invalida
                    codigo: 1008
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                RESIDENTE_INVALIDO:
                  value:
                    mensaje: Residente invalida
                    codigo: 1009
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                USUARIO_INVALIDO:
                  value:
                    mensaje: Usuario invalida
                    codigo: 1010
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

  /resi/registro/{idRegistroJuego}/addComment:
    patch:
      tags:
        - MODULO - JUEGO
      summary: Añadir comentario a registro
      description: Actualiza la observación/comentario del registro.
      security:
        - bearerAuth: []
      parameters:
        - name: idRegistroJuego
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/RegistroJuego.UpdateDto'
      responses:
        '200':
          description: Comentario actualizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/RegistroJuego.ResponseDto'
        '400':
          description: Datos nulos/vacios .
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: juego/ registro_juego invalido, no existe en la base de datos.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                JUEGO_INVALIDO:
                  value:
                    mensaje: Juego invalida
                    codigo: 1008
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                REGISTRO_JUEGO_INVALIDO:
                  value:
                    mensaje: Registro Juego invalido
                    codigo: 1012
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

  /resi/registro/{idRegistroJuego}/delete:
    delete:
      tags:
        - MODULO - JUEGO
      summary: Eliminar registro de juego
      description: Elimina un registro de juego de forma permanente.
      security:
        - bearerAuth: []
      parameters:
        - name: idRegistroJuego
          in: path
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: Registro eliminado correctamente
        '400':
          description: Datos nulos/vacios .
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: juego/ registro_juego invalido, no existe en la base de datos.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                JUEGO_INVALIDO:
                  value:
                    mensaje: Juego invalida
                    codigo: 1008
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                REGISTRO_JUEGO_INVALIDO:
                  value:
                    mensaje: Registro Juego invalido
                    codigo: 1012
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

  /resi/registro/media_duracion:
    get:
      tags:
        - MODULO -JUEGO
      summary: Obtener media de duración de registros
      description: lista de registros de juegos y calcula la media de duración. por dia mes año.
      security:
        - bearerAuth: [ ]
      parameters:
        - name: tipo
          in: query
          required: false
          schema:
            type: string
            default: DIARIO
            enum: [ DIARIO, MENSUAL, ANUAL ]
          description: Tipo de agrupación temporal
        - name: dificultad
          in: query
          required: false
          schema:
            type: string
            enum: [ FACIL, MEDIO, DIFICIL ]
          description: Nivel de dificultad del juego
        - name: idJuego
          in: query
          required: false
          schema:
            type: integer
          description: ID del juego (si se omite, se consideran todos)
      responses:
          '200':
              description: Media de duración calculada correctamente
              content:
                  application/json:
                      schema:
                          type: object
                          properties:
                              media_duracion:
                                  type: number
                                  format: double
                                  description: Media de duración de los registros de juegos

          '400':
              description: Datos nulos/vacios .
              content:
                  application/json:
                      schema:
                          $ref: '#/components/schemas/Error.ResponseDto'
                      example:
                          CAMPOS_OBLIGATORIOS:
                              value:
                                  mensaje: Faltan campos obligatorios
                                  codigo: 1001
                                  status: 400
                                  timestamp: 2025-04-13T21:00:00
          '405':
            description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  ENDPOINT_PROTEGIDO:
                    value:
                      mensaje: Tiene que tener permiso para acceder aqui.
                      codigo: 1020
                      status: 405
                      timestamp: 2025-04-13T21:00:00

  /resi/registro/media_num:
    get:
      tags:
        - MODULO - JUEGO
      summary: lista con media de num de lso registros de juegos
      description: lista de registros de juegos y calcula la media de num. por dia mes año.
      security:
        - bearerAuth: []
      parameters:
        - name: tipo
          in: query
          required: false
          schema:
            type: string
            default: DIARIO
            enum: [ DIARIO, MENSUAL, ANUAL ]
          description: Tipo de agrupación temporal
        - name: dificultad
          in: query
          required: false
          schema:
            type: string
            enum: [ FACIL, MEDIO, DIFICIL ]
          description: Nivel de dificultad del juego
        - name: idJuego
          in: query
          required: false
          schema:
            type: integer
          description: ID del juego (si se omite, se consideran todos)
      responses:
        '200':
          description: Media de duración calculada correctamente
          content:
            application/json:
              schema:
                type: object
                properties:
                  media_duracion:
                    type: number
                    format: double
                    description: Media de duración de los registros de juegos

        '400':
          description: Datos nulos/vacios .
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00


  /resi/registro/resident/{idResidente}/media-duracion:
      get:
        tags:
          - MODULO - JUEGO
        summary: Obtener media de duración de juegos por residente
        description: Devuelve una lista con la duración media de los juegos jugados por un residente, agrupados por día, mes o año. Se puede filtrar por dificultad e ID de juego.
        security:
          - bearerAuth: []
        parameters:
          - name: idResidente
            in: path
            required: true
            schema:
              type: integer
            description: ID del residente
          - name: tipo
            in: query
            required: false
            schema:
              type: string
              default: DIARIO
              enum: [ DIARIO, MENSUAL, ANUAL ]
            description: Tipo de agrupación temporal
          - name: dificultad
            in: query
            required: false
            schema:
              type: string
              enum: [ FACIL, MEDIO, DIFICIL ]
            description: Nivel de dificultad del juego
          - name: idJuego
            in: query
            required: false
            schema:
              type: integer
            description: ID del juego (si se omite, se consideran todos)
        responses:
          '200':
            description: Media de duración calculada correctamente
            content:
              application/json:
                schema:
                  type: object
                  properties:
                    media_duracion:
                      type: number
                      format: double
                      description: Media de duración de los registros de juegos

          '400':
            description: Datos nulos/vacios .
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  CAMPOS_OBLIGATORIOS:
                    value:
                      mensaje: Faltan campos obligatorios
                      codigo: 1001
                      status: 400
                      timestamp: 2025-04-13T21:00:00
          '405':
            description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  ENDPOINT_PROTEGIDO:
                    value:
                      mensaje: Tiene que tener permiso para acceder aqui.
                      codigo: 1020
                      status: 405
                      timestamp: 2025-04-13T21:00:00

  /resident/{idResidente}/media-num:
    get:
      tags:
        - MODULO - JUEGO
      summary: Obtener media de errores por residente
      description: Devuelve una lista con el número medio de errores cometidos por un residente en los juegos, agrupados por día, mes o año. Permite filtrar por dificultad e ID de juego.
      security:
        - bearerAuth: []
      parameters:
        - name: idResidente
          in: path
          required: true
          schema:
            type: integer
          description: ID del residente
        - name: tipo
          in: query
          required: false
          schema:
            type: string
            default: DIARIO
            enum: [DIARIO, MENSUAL, ANUAL]
          description: Tipo de agrupación temporal
        - name: dificultad
          in: query
          required: false
          schema:
            type: string
            enum: [FACIL, MEDIO, DIFICIL]
          description: Nivel de dificultad del juego
        - name: idJuego
          in: query
          required: false
          schema:
            type: integer
          description: ID del juego (si se omite, se consideran todos)
      responses:
        '200':
          description: Media de duración calculada correctamente
          content:
            application/json:
              schema:
                type: object
                properties:
                  media_duracion:
                    type: number
                    format: double
                    description: Media de duración de los registros de juegos

        '400':
          description: Datos nulos/vacios .
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00


  /resi/evento/{idSalida}/participante/add:
    post:
      tags:
        - MODULO - EVENTO
      summary: Añadir un participante
      description: Registra un nuevo participante en un evento de salida.
      parameters:
        - name: idSalida
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Participante.Dto'
      responses:
        '200':
          description: Participante añadido correctamente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participante.ResponseDto'
        '400':
          description: Datos nulos/vacios o el evento no esta disponible.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
                EVENTO_SALIDA_NO_DISPONIBLE:
                  value:
                    mensaje: No se puede hacer nada con este evento ciertos problemas
                    codigo: 1024
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Evento/Residente no existe en esa residencia.
          content:
            application/json:
              schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                EVENTO_SALIDA_INVALIDO:
                  value:
                    mensaje: Evento de salida invalido
                    codigo: 1023
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                RESIDENTE_INVALIDO:
                  value:
                    mensaje: Residente invalido
                    codigo: 1009
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

        '406':
          description: Este residente ya participa en otro evento ese mismo dia
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                PARTICIPANTE_REGISTRADO:
                  value:
                    mensaje: Este residente ya participa en otro evento ese mismo dia
                    codigo: 1022
                    status: 406
                    timestamp: 2025-04-13T21:00:00


  /resi/evento/{idSalida}/participante/{idParticipante}/get:
    get:
      tags:
        - MODULO - EVENTO
      summary: Obtener un participante
      description: Obtiene los datos de un participante específico en un evento de salida.
      parameters:
        - name: idSalida
          in: path
          required: true
          schema:
            type: integer
        - name: idParticipante
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Participante encontrado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participante.ResponseDto'
        '400':
          description: campos nulos/vacios.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Evento/Participante no  existe en esa residencia.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                EVENTO_SALIDA_INVALIDO:
                  value:
                    mensaje: Evento de salida invalido
                    codigo: 1023
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                PARTICIPANTE_INVALIDO:
                  value:
                    mensaje: Participante invalido
                    codigo: 1025
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

  /resi/evento/{idSalida}/participante/getAll:
    get:
      summary: Obtener todos los participantes de una salida
      description: Devuelve una lista de participantes asociados a una salida, permitiendo aplicar filtros por residente, edad, sexo, opinión y asistencia.
      tags:
        - MODULO - EVENTO
      security:
        - bearerAuth: []
      parameters:
        - name: idSalida
          in: path
          required: true
          schema:
            type: integer
          description: ID de la salida o evento
        - name: idResidente
          in: query
          required: false
          schema:
            type: integer
          description: ID del residente
        - name: rM
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar por residentes mujeres
        - name: rH
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar por residentes hombres
        - name: minEdad
          in: query
          required: false
          schema:
            type: integer
          description: Edad mínima del residente
        - name: maxEdad
          in: query
          required: false
          schema:
            type: integer
          description: Edad máxima del residente
        - name: preOpinion
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar participantes con opinión previa
        - name: postOpinion
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar participantes con opinión posterior
        - name: asistenciPermitida
          in: query
          required: false
          schema:
            type: boolean
          description: Filtrar según si la asistencia fue permitida
      responses:
        '200':
          description: Lista de participantes
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Participante.ResponseDto'
        '400':
          description: Campos nulos/vacios.
          content:
              application/json:
                schema:
                    $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Evento invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                EVENTO_SALIDA_INVALIDO:
                  value:
                    mensaje: Evento de salida invalido
                    codigo: 1023
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

  /resi/evento/{idSalida}/participante/{idParticipante}/update:
    patch:
      tags:
        - MODULO - EVENTO
      summary: Actualizar participante
      description: Actualiza los datos de un participante existente en un evento de salida.
      parameters:
        - name: idSalida
          in: path
          required: true
          schema:
            type: integer
        - name: idParticipante
          in: path
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/Participante.UpdateDto'
      responses:
        '200':
          description: Participante actualizado
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participante.ResponseDto'
        '400':
          description: campos nulos/vacios o el evento no esta disponible.
          content:
            application/json:
              schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
                EVENTO_SALIDA_NO_DISPONIBLE:
                  value:
                    mensaje: No se puede hacer nada con este evento ciertos problemas
                    codigo: 1024
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Evento/Particicpante Invalido
          content:
            application/json:
              schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                EVENTO_SALIDA_INVALIDO:
                  value:
                    mensaje: Evento de salida invalido
                    codigo: 1023
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                PARTICIPANTE_INVALIDO:
                  value:
                    mensaje: Participante invalido
                    codigo: 1025
                    status: 404
                    timestamp: 2025-04-13T21:00:00

  /resi/evento/{idSalida}/participante/{idParticipante}/delete:
    delete:
      tags:
        - MODULO - EVENTO
      summary: Eliminar participante
      description: Elimina un participante de un evento de salida.
      parameters:
        - name: idSalida
          in: path
          required: true
          schema:
            type: integer
        - name: idParticipante
          in: path
          required: true
          schema:
            type: integer
      responses:
        '204':
          description: Participante eliminado correctamente
        '404':
          description: Evento/Particicpante Invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                EVENTO_SALIDA_INVALIDO:
                  value:
                    mensaje: Evento de salida invalido
                    codigo: 1023
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                PARTICIPANTE_INVALIDO:
                  value:
                    mensaje: Participante invalido
                    codigo: 1025
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

        '406':
          description: Participante inmutable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                PARTICIPANTE_INMUTABLE:
                  value:
                    mensaje: No se puede hacer esta operacion con el participante porque ahora mismo es inmutable
                    codigo: 1026
                    status: 406
                    timestamp: 2025-04-13T21:00:00

  paths:
    /resi/evento/{idEvento}/participante/{idParticipante}/addPreOpinion:
      patch:
        summary: Añadir opinión previa del participante
        description: Permite asignar una opinión previa de un participante a un evento/salida.
        tags:
          - MODULO - EVENTO
        parameters:
          - name: idEvento
            in: path
            required: true
            schema:
              type: integer
            description: ID del evento o salida
          - name: idParticipante
            in: path
            required: true
            schema:
              type: integer
            description: ID del participante
          - name: preOpinion
            in: query
            required: true
            schema:
              type: string
            description: Texto de la opinión previa del participante
        responses:
          '200':
            description: Opinión previa añadida correctamente
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Participante.ResponseDto'
          '404':
            description: Evento/Particicpante Invalido
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                examples:
                  EVENTO_SALIDA_INVALIDO:
                    value:
                      mensaje: Evento de salida invalido
                      codigo: 1023
                      status: 404
                      timestamp: 2025-04-13T21:00:00
                  PARTICIPANTE_INVALIDO:
                    value:
                      mensaje: Participante invalido
                      codigo: 1025
                      status: 404
                      timestamp: 2025-04-13T21:00:00
          '405':
            description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  ENDPOINT_PROTEGIDO:
                    value:
                      mensaje: Tiene que tener permiso para acceder aqui.
                      codigo: 1020
                      status: 405
                      timestamp: 2025-04-13T21:00:00

          '406':
            description: Participante inmutable
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  PARTICIPANTE_INMUTABLE:
                    value:
                      mensaje: No se puede hacer esta operacion con el participante porque ahora mismo es inmutable
                      codigo: 1026
                      status: 406
                      timestamp: 2025-04-13T21:00:00

  /resi/evento/{idEvento}/participante/{idParticipante}/addPostOpinion:
    patch:
      summary: Añadir opinión posterior del participante
      description: Permite registrar la opinión del participante después de un evento/salida.
      tags:
        - MODULO - EVENTO
      parameters:
        - name: idEvento
          in: path
          required: true
          schema:
            type: integer
          description: ID del evento o salida
        - name: idParticipante
          in: path
          required: true
          schema:
            type: integer
          description: ID del participante
        - name: postOpinion
          in: query
          required: true
          schema:
            type: string
          description: Texto de la opinión posterior del participante
      responses:
        '200':
          description: Opinión posterior añadida correctamente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participante.ResponseDto'
        '404':
          description: Evento/Particicpante Invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                EVENTO_SALIDA_INVALIDO:
                  value:
                    mensaje: Evento de salida invalido
                    codigo: 1023
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                PARTICIPANTE_INVALIDO:
                  value:
                    mensaje: Participante invalido
                    codigo: 1025
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00

        '406':
          description: Participante inmutable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                PARTICIPANTE_INMUTABLE:
                  value:
                    mensaje: No se puede hacer esta operacion con el participante porque ahora mismo es inmutable
                    codigo: 1026
                    status: 406
                    timestamp: 2025-04-13T21:00:00


  /resi/evento/{idEvento}/participante/{idParticipante}/changeRecursos:
      patch:
        summary: Cambiar recursos asignados a un participante
        description: Permite modificar los recuros humanos/materiales
        tags:
          - MODULO - EVENTO
        security:
          - bearerAuth: [ ]
        parameters:
          - name: idEvento
            in: path
            required: true
            schema:
              type: integer
            description: ID del evento o salida
          - name: idParticipante
            in: path
            required: true
            schema:
              type: integer
            description: ID del participante
          - name: rH
            in: query
            required: false
            schema:
              type: boolean
            description: Recurso humano asignado
          - name: rM
            in: query
            required: false
            schema:
              type: boolean
            description: Recurso material asignado
        responses:
          '200':
            description: Recursos modificados correctamente
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Participante.ResponseDto'
          '404':
            description: Evento/Particicpante Invalido
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                examples:
                  EVENTO_SALIDA_INVALIDO:
                    value:
                      mensaje: Evento de salida invalido
                      codigo: 1023
                      status: 404
                      timestamp: 2025-04-13T21:00:00
                  PARTICIPANTE_INVALIDO:
                    value:
                      mensaje: Participante invalido
                      codigo: 1025
                      status: 404
                      timestamp: 2025-04-13T21:00:00
          '405':
            description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  ENDPOINT_PROTEGIDO:
                    value:
                      mensaje: Tiene que tener permiso para acceder aqui.
                      codigo: 1020
                      status: 405
                      timestamp: 2025-04-13T21:00:00

          '406':
            description: Participante inmutable
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  PARTICIPANTE_INMUTABLE:
                    value:
                      mensaje: No se puede hacer esta operacion con el participante porque ahora mismo es inmutable
                      codigo: 1026
                      status: 406
                      timestamp: 2025-04-13T21:00:00

  /resi/evento/{idEvento}/participante/{idParticipante}/allow:
      post:
        summary: Aceptar participación del participante en evento
        description: Acepta la participación de un participante en un evento de salida.
        tags:
          - MODULO - EVENTO
        security:
          - bearerAuth: [ ]
        parameters:
          - name: idEvento
            in: path
            required: true
            schema:
              type: integer
            description: ID del evento o salida
          - name: idParticipante
            in: path
            required: true
            schema:
              type: integer
            description: ID del participante que se desea aceptar
        responses:
          '200':
            description: Participante aceptado correctamente
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Participante.ResponseDto'
          '404':
            description: Evento/Particicpante Invalido
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                examples:
                  EVENTO_SALIDA_INVALIDO:
                    value:
                      mensaje: Evento de salida invalido
                      codigo: 1023
                      status: 404
                      timestamp: 2025-04-13T21:00:00
                  PARTICIPANTE_INVALIDO:
                    value:
                      mensaje: Participante invalido
                      codigo: 1025
                      status: 404
                      timestamp: 2025-04-13T21:00:00
          '405':
            description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace  login.
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  ENDPOINT_PROTEGIDO:
                    value:
                      mensaje: Tiene que tener permiso para acceder aqui.
                      codigo: 1020
                      status: 405
                      timestamp: 2025-04-13T21:00:00

          '406':
            description: Participante inmutable
            content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  PARTICIPANTE_INMUTABLE:
                    value:
                      mensaje: No se puede hacer esta operacion con el participante porque ahora mismo es inmutable
                      codigo: 1026
                      status: 406
                      timestamp: 2025-04-13T21:00:00


  /resi/evento/{idEvento}/participante/{idParticipante}/deny:
    post:
      summary: Denegar participación del participante en evento
      description: Deniega la participación de un participante en un evento de salida.
      tags:
        - MODULO - EVENTO
      security:
        - bearerAuth: [ ]
      parameters:
        - name: idEvento
          in: path
          required: true
          schema:
            type: integer
          description: ID del evento o salida
        - name: idParticipante
          in: path
          required: true
          schema:
            type: integer
          description: ID del participante que se desea denegar
      responses:
        '200':
          description: Participante denegado correctamente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Participante.ResponseDto'
        '404':
          description: Evento/Particicpante Invalido
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              examples:
                EVENTO_SALIDA_INVALIDO:
                  value:
                    mensaje: Evento de salida invalido
                    codigo: 1023
                    status: 404
                    timestamp: 2025-04-13T21:00:00
                PARTICIPANTE_INVALIDO:
                  value:
                    mensaje: Participante invalido
                    codigo: 1025
                    status: 404
                    timestamp: 2025-04-13T21:00:00
        '405':
          description: Este endPoint esta protegido por ciertas cosas, debe tener un token. Que se le proporciona cada vez que hace login.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                ENDPOINT_PROTEGIDO:
                  value:
                    mensaje: Tiene que tener permiso para acceder aqui.
                    codigo: 1020
                    status: 405
                    timestamp: 2025-04-13T21:00:00
        '406':
          description: Participante inmutable
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                PARTICIPANTE_INMUTABLE:
                  value:
                    mensaje: No se puede hacer esta operacion con el participante porque ahora mismo es inmutable
                    codigo: 1026
                    status: 406
                    timestamp: 2025-04-13T21:00:00

  /resi//evento/add:
    post:
      tags:
        - MODULO - EVENTO
      summary: Crear un nuevo evento de salida
      description: Crea un nuevo evento de salida asociado a una residencia.
      security:
        - bearerAuth: [ ]
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventoSalida.Dto'
      responses:
        '200':
          description: Evento de salida creado exitosamente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventoSalida.ResponseDto'
        '400':
          description: datos nulos/vacios.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residencia invalida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                value:
                  mensaje: Residencia invalida
                  codigo: 1006
                  status: 404
                  timestamp: 2025-04-13T21:00:00
        '406':
          description: Fecha invalida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                FECHA_INVALIDA:
                value:
                  mensaje: La fecha no es valida
                  codigo: 1005
                  status: 406
                  timestamp: 2025-04-13T21:00:00
        '409':
          description: El nombre ya existe en otro evento de la residencia
          content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  NOMBRE_DUPLICADO:
                  value:
                    mensaje: Nombre ya existente
                    codigo: 1004
                    status: 409
                    timestamp: 2025-04-13T21:00:00

  /resi/evento/{idEventoSalida}/update:
    patch:
      tags:
        - MODULO - EVENTO
      summary: Actualizar un evento de salida
      description: Actualiza la fecha y el estado de un evento de salida existente.
      parameters:
        - name: idResidencia
          in: path
          required: true
          schema:
            type: integer
            example: 1
        - name: idEventoSalida
          in: path
          required: true
          schema:
            type: integer
            example: 10
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/EventoSalida.UpdateDto'
      responses:
        '200':
          description: Evento de salida actualizado exitosamente
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventoSalida.ResponseDto'
        '400':
          description: datos nulos/vacios.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                value:
                  mensaje: Faltan campos obligatorios
                  codigo: 1001
                  status: 400
                  timestamp: 2025-04-13T21:00:00
        '404':
          description: Evento invalido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                EVENTO_SALIDA_INVALIDO:
                value:
                  mensaje: Evento de salida invalido
                  codigo: 1023
                  status: 404
                  timestamp: 2025-04-13T21:00:00
  /resi/evento/{idEventoSalida}/delete:
    delete:
      tags:
        - MODULO - EVENTO
      summary: Eliminar un evento de salida
      description: Elimina un evento de salida, incluyendo sus participantes asociados.
      parameters:
        - name: idResidencia
          in: path
          required: true
          schema:
            type: integer
        - name: idEventoSalida
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: Evento de salida eliminado correctamente
        '400':
          description: Campos nulos/vacios.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                value:
                  mensaje: Faltan campos obligatorios
                  codigo: 1001
                  status: 400
                  timestamp: 2025-04-13T21:00:00
        '404':
          description: Evento invalido.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                EVENTO_SALIDA_INVALIDO:
                  value:
                    mensaje: Evento de salida invalido
                    codigo: 1023
                    status: 404
                    timestamp: 2025-04-13T21:00:00

  /resi/evento/{idEventoSalida}/get:
    get:
      tags:
        - MODULO - EVENTO
      summary: Obtener un evento de salida
      description: Obtiene los datos de un evento de salida específico.
      parameters:
        - name: idResidencia
          in: path
          required: true
          schema:
            type: integer
            example: 1
        - name: idEventoSalida
          in: path
          required: true
          schema:
            type: integer
            example: 10
      responses:
        '200':
          description: Datos del evento de salida
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/EventoSalida.ResponseDto'
        '400':
          description: Campos nulos/vacios.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Evento invalido.
          content:
              application/json:
                schema:
                  $ref: '#/components/schemas/Error.ResponseDto'
                example:
                  EVENTO_SALIDA_INVALIDO:
                    value:
                      mensaje: Evento de salida invalido
                      codigo: 1023
                      status: 404
                      timestamp: 2025-04-13T21:00:00

  /resi/{idResidencia}/evento/getAll:
    get:
      summary: Obtener listado de eventos de salida
      description: Devuelve todos los eventos de salida filtrados por fecha, estado, participantes y recursos asignados.
      tags:
        - MODULO - EVENTO
      security:
        - bearerAuth: [ ]
      parameters:
        - name: fecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha exacta del evento
        - name: minFecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha mínima del evento
        - name: maxFecha
          in: query
          required: false
          schema:
            type: string
            format: date
          description: Fecha máxima del evento
        - name: estado
          in: query
          required: false
          description: Estado del evento (PLANIFICADO, REALIZADO, CANCELADO...)
        - name: idResidente
          in: query
          required: false
          schema:
            type: integer
          description: ID del residente asociado al evento
        - name: idParticipante
          in: query
          required: false
          schema:
            type: integer
          description: ID del participante asociado al evento
        - name: minRH
          in: query
          required: false
          schema:
            type: integer
          description: Mínimo de recursos humanos asignados
        - name: maxRH
          in: query
          required: false
          schema:
            type: integer
          description: Máximo de recursos humanos asignados
        - name: minRM
          in: query
          required: false
          schema:
            type: integer
          description: Mínimo de recursos materiales asignados
        - name: maxRM
          in: query
          required: false
          schema:
            type: integer
          description: Máximo de recursos materiales asignados
      responses:
        '200':
          description: Lista de eventos de salida
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/EventoSalida.ResponseDto'
        '400':
          description: Campos nulos/vacios.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                CAMPOS_OBLIGATORIOS:
                  value:
                    mensaje: Faltan campos obligatorios
                    codigo: 1001
                    status: 400
                    timestamp: 2025-04-13T21:00:00
        '404':
          description: Residencia invalida.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error.ResponseDto'
              example:
                RESIDENCIA_INVALIDO:
                  value:
                    mensaje: Residencia invalida
                    codigo: 1006
                    status: 404
                    timestamp: 2025-04-13T21:00:00

components:
  schemas:
    Verify.Dto:
      type: object
      required:
        -email
        -verificationConde
      properties:
        email:
          type: string
          example: kevinolarte.ko@gmail.com
        verificationCode:
          type: string
          example: 6394829

    Login.Dto:
      type: object
      required:
        - email
        - password
      properties:
        email:
          type: string
          example: contacto@resilapaz.com
        password:
          type: string
          example: 1234Residencia

    Login.ResponseDto:
      type: object
      required:
        - token
        - expiresIn
      properties:
        token:
          type: string
          example: yJhbGciOiJIUzI1NiJ9.eyJlbWFpbCI6Imtldmlub2xhcnRlLmtvQGdtYWlsLmNvbSIsInN1YiI6Imtldmlub2xhcnRlLmtvQGdtYWlsLmNvbSIsImlhdCI6MTc0NTA3NTc1NywiZXhwIjoxNzQ1MTYyMTU3fQ._jxW3tu7hG8NPVPZaNc6iMS5HjAyiQycUZl4SFc_a8
        expiresIn:
          type: integer
          format: int64
          example: 6400000

    Residencia.Dto:
      type: object
      required:
        - nombre
        - email
      properties:
        nombre:
          type: string
          example: Residencia La Paz
        email:
          type: string
          example: contacto@resilapaz.com

    Residencia.ResponseDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 1
        nombre:
          type: string
          example: Residencia La Paz
        email:
          type: string
          example: contacto@resilapaz.com

    Residencia.PublicResponseDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 1
        nombre:
          type: string
          example: Residencia La Paz
        email:
          type: string
          example: contacto@resilapaz.com

    Residente.Dto:
      type: object
      required:
        - nombre
        - apellido
        - fechaNacimiento
        - idResidencia
        - documentoIdentidad
      properties:
        nombre:
          type: string
          example: Carlos
        apellido:
          type: string
          example: Pérez
        fechaNacimiento:
          type: string
          format: date
          example: 1945-06-15
        idResidencia:
          type: integer
          format: int64
          example: 1
        documentoIdentidad:
            type: string
            example: Y8440460X

    Residente.ResponseDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 101
        nombre:
          type: string
          example: Carlos
        apellido:
          type: string
          example: Pérez
        fechaNacimiento:
          type: string
          format: date
          example: 1945-06-15
        idResidencia:
          type: integer
          format: int64
          example: 1
        documentoIdentidad:
          type: string
          example: Y8440460X
        baja:
          type: boolean
          example: false

    User.Dto:
      type: object
      required:
        - nombre
        - apellido
        - email
        - password
        - idResidencia
      properties:
        nombre:
          type: string
          example: Juan
        apellido:
          type: string
          example: García
        email:
          type: string
          format: email
          example: juan.garcia@ejemplo.com
        password:
          type: string
          example: 1234secure
        idResidencia:
          type: integer
          format: int64
          example: 2

    UserUpdate.Dto:
      type: object
      properties:
        nombre:
          type: string
          example: Juan
        apellido:
          type: string
          example: Garcia
        email:
          type: string
          example: juan.garcia@ejemplo.com

    UserUpdatePassword.Dto:
        type: object
        required:
          - oldPassword
          - newPassword
        properties:
          oldPassword:
            type: string
            example: 1234secure
          newPassword:
            type: string
            example: 1234newsecure

    MediaRegistroDTO:
      type: object
      properties:
        fecha:
          type: string
          format: date
          description: Fecha del agrupamiento (día, mes o año)
        media:
          type: number
          format: double
          description: Media de errores o duración de los registros de juego


    User.ResponseDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 5
        nombre:
          type: string
          example: Juan
        apellido:
          type: string
          example: García
        email:
          type: string
          format: email
          example: juan.garcia@ejemplo.com
        enabled:
          type: boolean
          example: true
        idResidencia:
          type: integer
          format: int64
          example: 2

    Juego.Dto:
      type: object
      required:
        - nombre
      properties:
        nombre:
          type: string
          example: Memoria Visual

    JuegoFiltre.Dto:
      type: object
      properties:
        nombre:
          type: string
          example: tres en ralla
        maxRegistro:
          type: boolean
          example: true
    Juego.ResponseDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 1
        nombre:
          type: string
          example: Memoria Visual
        idResidencia:
          type: integer
          format: int64
          example: 3

    JuegoUpdate.Dto:
      type: object
      properties:
          nombre:
            type: string
            example: Memoria Visual

    RegistroJuego.Dto:
      type: object
      properties:
        idResidente:
          type: integer
          format: int64
          example: 5
        num:
          type: integer
          example: 2
        duracion:
          type: number
          format: double
          example: 120.5
        dificultad:
          type: string
          enum: [ FACIL, MEDIA, DIFICIL ]
          example: MEDIA

    RegistroJuego.UpdateDto:
      type: object
      properties:
        observacion:
          type: string
          example: Muy lento

    RegistroJuego.ResponseDto:
      type: object
      properties:
        id:
          type: integer
          format: int64
          example: 42
        idResidente:
          type: integer
          format: int64
          example: 5
        idJuego:
          type: integer
          format: int64
          example: 1
        idUsario:
          type: integer
          format: int64
          example: 3
        num:
          type: integer
          example: 2
        duracion:
          type: number
          format: double
          example: 120.5
        dificultad:
          type: integer
          format: int64
          example: 1
        fecha:
          type: string
          format: date-time
          example: "2025-04-16T10:15:30"

    Participante.Dto:
      type: object
      properties:
        idResidente:
          type: integer
          example: 1
        asistencia:
          type: boolean
          example: true
        preOpinion:
          type: string
          example: Me va gustar mucho

    Participante.GetDto:
      type: object
      properties:
        asistencia:
          type: boolean
          example: true

    Participante.UpdateDto:
      type: object
      properties:
        asistencia:
          type: boolean
          example: true
        preOpinion:
          type: string
          example: Me va gustar mucho
        postOpinion:
            type: string
            example: Me gusto mucho

    Participante.ResponseDto:
      type: object
      properties:
        id:
          type: integer
          example: 1
        idSalida:
            type: integer
            example: 1
        idResidente:
            type: integer
            example: 1
        ayuda:
            type: boolean
            example: true
        preOpinion:
            type: string
            example: Me va gustar mucho
        postOpinion:
            type: string
            example: Me gusto mucho

    EventoSalida.Dto:
      type: object
      properties:
        nombre:
          type: string
          example: Excursión al parque
        descripcion:
          type: string
          example: Salida al parque municipal con los residentes.
        fecha:
          type: string
          format: date
          example: 2025-05-15

    EventoSalida.GetDto:
      type: object
      properties:
        fecha:
          type: string
          format: date
          example: 2025-05-15
        estado:
          type: string
          enum: [ ABIERTA, REALIZADA, CANCELADA ]

    EventoSalida.UpdateDto:
      type: object
      properties:
        nombre:
          type: string
          example: Excursión al parque
        descripcion:
          type: string
          example: Salida al parque municipal con los residentes.
        fecha:
          type: string
          format: date
          example: 2025-05-15
        estado:
          type: string
          enum: [ ABIERTA, REALIZADA, CANCELADA ]

    EventoSalida.ResponseDto:
      type: object
      properties:
        id:
          type: integer
          example: 10
        nombre:
          type: string
          example: Excursión al parque
        descripcion:
          type: string
          example: Salida al parque municipal con los residentes.
        fechaInicio:
          type: string
          format: date
          example: 2025-05-15
        estado:
          type: string
          enum: [ ABIERTA, REALIZADA, CANCELADA ]
        residenciaId:
          type: integer
          example: 1

    Error.ResponseDto:
      type: object
      properties:
        mensaje:
          type: string
        codigo:
          type: integer
        status:
          type: integer
        timestamp:
          type: string
          format: date-time
      example:
        mensaje: Faltan campos obligatorios
        codigo: 1001
        status: 400
        timestamp: 2025-04-13T21:00:00

    ResidenteFiltrado:
      type: string
      enum:
        - TODOS
        - ACTIVOS
        - INACTIVOS

  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT