Files
pcpuma_unam_api/src/modulo/modulo.service.ts
T

170 lines
5.6 KiB
TypeScript
Raw Normal View History

2022-04-16 13:05:27 -05:00
import {
ConflictException,
Injectable,
NotFoundException,
} from '@nestjs/common';
2022-04-04 20:02:54 -05:00
import { InjectRepository } from '@nestjs/typeorm';
2022-10-01 15:09:04 -05:00
import { FindOptionsWhere, Repository } from 'typeorm';
2022-05-04 11:22:17 -05:00
import { Institucion } from '../institucion/entity/institucion.entity';
2022-04-16 14:37:17 -05:00
import { Modulo } from './entity/modulo.entity';
2022-09-25 01:03:33 -05:00
import { InformacionModuloView } from './entity/views/informacion-modulo.view';
2022-09-25 11:18:06 -05:00
import { MinInformacionModuloView } from './entity/views/min-informacion-modulo.view';
2022-08-15 14:29:53 -05:00
import { Operador } from '../operador/entity/operador.entity';
2022-04-17 21:55:00 -05:00
import { InstitucionService } from '../institucion/institucion.service';
2022-04-04 20:02:54 -05:00
@Injectable()
export class ModuloService {
constructor(
2022-04-18 16:55:19 -05:00
@InjectRepository(Modulo) private repository: Repository<Modulo>,
2022-09-25 01:03:33 -05:00
@InjectRepository(InformacionModuloView)
private informacionModuloView: Repository<InformacionModuloView>,
2022-09-25 11:18:06 -05:00
@InjectRepository(MinInformacionModuloView)
private minInformacionModuloView: Repository<MinInformacionModuloView>,
private institucionService: InstitucionService,
2022-04-04 20:02:54 -05:00
) {}
2022-08-01 01:58:47 -05:00
async create(admin: Operador, modulo: string) {
return this.existeModulo(admin.institucion, modulo)
2022-05-02 15:50:00 -05:00
.then(() =>
this.repository.save(
this.repository.create({
2022-08-01 01:58:47 -05:00
institucion: admin.institucion,
2022-05-02 15:50:00 -05:00
modulo,
}),
),
)
2022-06-23 23:04:47 -05:00
.then((_) => ({
message: 'Se creó correctamente un nuevo módulo.',
}));
2022-05-02 15:50:00 -05:00
}
async existeModulo(id_institucion: number | Institucion, modulo: string) {
const institucion =
typeof id_institucion === 'number'
2022-09-25 01:03:33 -05:00
? await this.institucionService.findInfoInstitucionById(id_institucion)
2022-05-02 15:50:00 -05:00
: id_institucion;
2022-09-25 11:18:06 -05:00
return this.minInformacionModuloView
2022-09-25 01:03:33 -05:00
.findOne({
where: { id_institucion: institucion.id_institucion, modulo },
})
.then((existeModulo) => {
if (existeModulo)
throw new ConflictException(
2022-06-23 23:04:47 -05:00
'Ya existe un módulo en esta institución con este nombre, intente con otro nombre.',
);
2022-09-25 01:03:33 -05:00
return;
2022-07-19 08:25:58 -05:00
});
2022-04-16 14:37:17 -05:00
}
findById(id_modulo: number) {
2022-08-23 17:12:09 -05:00
return this.repository.findOne({ where: { id_modulo } }).then((modulo) => {
2022-06-26 12:47:00 -05:00
if (!modulo) throw new NotFoundException('No existe este id módulo.');
2022-04-16 14:37:17 -05:00
return modulo;
});
}
2022-06-06 15:00:36 -05:00
async findModulo(
id_institucion: number | Institucion,
modulo: string,
validarNoExiste = true,
) {
const institucion =
typeof id_institucion === 'number'
2022-09-25 01:03:33 -05:00
? await this.institucionService.findInfoInstitucionById(id_institucion)
2022-06-06 15:00:36 -05:00
: id_institucion;
2022-08-23 17:12:09 -05:00
return this.repository
.findOne({ where: { institucion, modulo } })
.then((modulo) => {
if (validarNoExiste && !modulo)
throw new ConflictException('No existe este módulo.');
return modulo;
});
2022-06-06 15:00:36 -05:00
}
2022-09-25 01:03:33 -05:00
findInfoModuloById(id_modulo: number) {
return this.informacionModuloView
.findOne({ where: { id_modulo } })
.then((infoModulo) => {
if (!infoModulo)
throw new NotFoundException('No existe este id módulo.');
return this.repository.create({
id_modulo: infoModulo.id_modulo,
2022-09-25 11:18:06 -05:00
institucion: {
id_institucion: infoModulo.id_institucion,
},
});
});
}
findMinInfoModuloById(id_modulo: number) {
return this.minInformacionModuloView
.findOne({ where: { id_modulo } })
.then((infoModulo) => {
if (!infoModulo)
throw new NotFoundException('No existe este id módulo.');
return this.repository.create({
id_modulo: infoModulo.id_modulo,
activo: infoModulo.activo_modulo === 1,
2022-09-25 01:03:33 -05:00
modulo: infoModulo.modulo,
institucion: {
id_institucion: infoModulo.id_institucion,
institucion: infoModulo.institucion,
2022-09-25 11:18:06 -05:00
activo: infoModulo.activo_institucion === 1,
2022-09-25 01:03:33 -05:00
},
});
});
}
2022-09-25 11:18:06 -05:00
async findMinInfoModuloAll(id_institucion: number, activo = 0) {
2022-09-25 01:03:33 -05:00
return this.institucionService
.findInfoInstitucionById(id_institucion)
.then((institucion) => {
2022-10-01 15:09:04 -05:00
const busqueda: FindOptionsWhere<MinInformacionModuloView> = {
2022-09-25 01:03:33 -05:00
id_institucion: institucion.id_institucion,
};
2022-09-25 11:18:06 -05:00
if (activo) busqueda.activo_modulo = activo;
2022-09-25 23:27:25 -05:00
return this.minInformacionModuloView.find({ where: busqueda });
2022-09-25 01:03:33 -05:00
})
.then((infoModulos) => {
const modulos: Modulo[] = [];
for (let i = 0; i < infoModulos.length; i++)
modulos.push(
this.repository.create({
id_modulo: infoModulos[i].id_modulo,
2022-09-25 11:18:06 -05:00
activo: infoModulos[i].activo_modulo === 1,
2022-09-25 01:03:33 -05:00
modulo: infoModulos[i].modulo,
institucion: {
id_institucion: infoModulos[i].id_institucion,
2022-09-25 11:18:06 -05:00
activo: infoModulos[i].activo_institucion === 1,
2022-09-25 01:03:33 -05:00
institucion: infoModulos[i].institucion,
},
}),
);
return modulos;
});
}
2022-08-01 01:58:47 -05:00
update(admin: Operador, attrs: Partial<Modulo>) {
2022-09-25 01:03:33 -05:00
return this.findInfoModuloById(attrs.id_modulo)
2022-04-21 22:08:59 -05:00
.then(async (modulo) => {
2022-08-01 01:58:47 -05:00
if (
admin.institucion.id_institucion != modulo.institucion.id_institucion
)
throw new ConflictException(
2022-08-01 02:59:35 -05:00
'No puedes actualizar la información de este módulo porque no le pertenece a tu institución.',
2022-08-01 01:58:47 -05:00
);
2022-04-21 22:08:59 -05:00
if (attrs.modulo)
2022-05-02 15:50:00 -05:00
await this.existeModulo(modulo.institucion, attrs.modulo);
2022-04-16 13:05:27 -05:00
Object.assign(modulo, attrs);
2022-04-18 16:55:19 -05:00
return this.repository.save(modulo);
2022-04-16 13:07:55 -05:00
})
2022-04-18 16:55:19 -05:00
.then((_) => ({
2022-06-23 23:04:47 -05:00
message: 'Se guardaron los cambios correctamente.',
2022-04-16 13:07:55 -05:00
}));
2022-04-16 13:05:27 -05:00
}
2022-04-04 20:02:54 -05:00
}