Realiza todas las validaciones, ejecuta los cambios que implica una reserva en el registro del usuario y de la instancia de clase correspondiente.
Detalle descriptivo
Se rechaza reserva si el perfil tiene un estado inactivo, suspendido o congelado.
Se obtiene el ID del gimnasio activo del documento del perfil del usuario.
Se busca la instancia para la que se desea hacer la reserva en la base de datos del gimnasio. Si no existe se rechaza.
Si no existe la clase o el horario que indica la instancia, se rechaza.
Se verifica que se esté reservando antes de que termine la clase.
Si el gimnasio establece un tiempo de apertura para reservas; se puede reservar desde esos minutos antes de la hora de inicio de la clase. Se rechaza si se está reservando antes del plazo.
Si el gimnasio establece un tiempo minimo de antelaciónpara reservas; se puede reservar hasta esos minutos antes de la hora de inicio de la clase. Se rechaza si se está reservando después del plazo.
[INSERTAR GRAFICO DE TIEMPO]
Se revisa si ya se ha reservado revisando la información de participantes de la instancia. Si no se indica membresía a utilizar (con membresiaID), se rechaza si el usuario ya tiene una reserva para la instancia. Por otro lado, si se indica una membresía a utilizar, sólo se rechazará si el usuario ya tiene una reserva con *esa* membresía. En caso de rechazarse, se responde como si la reserva hubiera sido exitosa, con los datos de la reserva existente.
Se revisa que queden cupos para la instancia, según la cantidad de participantes y el límite de cupos del horario.
Si no se indica membresía a utilizar, se utiliza laReservaIdonea
Si se indica membresía a utilizar, se utiliza calcularPosibilidadesDeReserva
Si se indica membresía a utilizar, se utiliza calcularPosibilidadesDeReserva
Argumentos
perfil(objeto)Documento del perfil correspondiente al usuario conectado, contiene, entre otros, info del gimnasio activo, membresías y pagos
instanciaID(string)Identificador de la instancia de clase correspondiente a una clase, horario y fecha específica.
membresiaID(string)opcional Identificador de la membresía a utilizar