const moment = require('moment'); const validar = require('../../helper/validar'); const Prestamo = require('../../db/tablas/Prestamo'); const Usuario = require('../../db/tablas/Carrera'); const TipoUsuario = require('../../db/tablas/TipoUsuario'); const TipoCarrito = require('../../db/tablas/TipoCarrito'); const Carrito = require('../../db/tablas/Carrito'); const Equipo = require('../../db/tablas/Equipo'); const Status = require('../../db/tablas/Status'); const Programa = require('../../db/tablas/Programa'); const Modulo = require('../../db/tablas/Modulo'); const pedir = async (body) => { const ahora = moment(); const idUsuario = validar.validarId(body.idUsuario); const idTipoCarrito = validar.validarId(body.idTipoCarrito); const idPrograma = body.idPrograma ? validar.validarId(body.idPrograma) : null; const idModulo = idPrograma ? 1 : validar.validarId(body.idModulo); let equipo = {}; return Usuario.findOne({ where: { idUsuario } }) .then((res) => { if (!res) throw new Error('Ese usuario no existe.'); if (res.multa) throw new Error( 'Este usuario tiene una multa activa, no puede solicitar un equipo de computo.' ); return Prestamo.findOne({ where: { idUsuario }, include: [{ model: Equipo, where: { activo: true } }], }); }) .then((res) => { if (res) throw new Error( 'Este usuario ya cuenta con un prestamo activo. No sepuede solicitar otro equipo de computo.' ); return Equipo.findOne({ where: { activo: false }, include: [ { model: Carrito, include: [ { model: TipoCarrito, where: { idTipoCarrito } }, { model: Modulo, where: { idModulo } }, ], }, { model: Status, where: { idStatus: 1 } }, { model: Programa, where: { idPrograma: idPrograma ? idPrograma : null }, }, ], }); }) .then((res) => { if (!res) throw new Error( 'No hay un equipo de computo con las características solicitadas disponible. Intenta más tarde o con otras características.' ); equipo = res; equipo.activo = true; return Equipo.update( { activo: true }, { where: { idEquipo: equipo.idEquipo } } ); }) .then((res) => Prestamo.create({ horaInicio: ahora.add(10, 'm'), horaFin: ahora.add(130, 'm'), idUsuario, idEquipo: equipo.idEquipo, }) ) .then((res) => ({ equipo })); }; module.exports = pedir;