From 303bdc655d496237d2fd3bd3223bb6155ac436a3 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Thu, 23 Oct 2025 10:52:40 -0600 Subject: [PATCH] create user with base AT and create --- src/app.module.ts | 4 +++ src/modules/AT/alumno/student.controller.ts | 2 +- src/modules/AT/alumno/student.service.ts | 24 ++++++++++---- .../alumno_inscrito.controller.ts | 6 ---- .../alumno_inscrito.service.ts | 23 ++----------- .../AT/periodo/dto/create-periodo.dto.ts | 23 +++++++++++++ src/modules/AT/periodo/periodo.controller.ts | 11 +++++++ src/modules/AT/periodo/periodo.module.ts | 12 +++++++ src/modules/AT/periodo/periodo.service.ts | 21 ++++++++++++ .../Monedero/persona/google.strategy.ts | 2 -- .../Monedero/persona/persona.module.ts | 2 ++ .../Monedero/persona/persona.service.ts | 33 ++++++++++--------- 12 files changed, 112 insertions(+), 51 deletions(-) create mode 100644 src/modules/AT/periodo/dto/create-periodo.dto.ts create mode 100644 src/modules/AT/periodo/periodo.controller.ts create mode 100644 src/modules/AT/periodo/periodo.module.ts create mode 100644 src/modules/AT/periodo/periodo.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index 0628d1a..c5563a2 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -14,6 +14,8 @@ import { dbAT } from './database/config/AT.config'; import { dbMonedero } from './database/config/Monedero.config'; import { PagoKioscoModule } from './modules/Monedero/pago-kiosco/pago-kiosco.module'; import { AlumnoModule } from './modules/AT/alumno/student.module'; +import { AlumnoInscritoModule } from './modules/AT/alumno_inscrito/alumno_inscrito.module'; +import { PeriodoModule } from './modules/AT/periodo/periodo.module'; @Module({ imports: [ @@ -37,6 +39,8 @@ import { AlumnoModule } from './modules/AT/alumno/student.module'; NombreTransaccionModule, ////Module AT AlumnoModule, + AlumnoInscritoModule, + PeriodoModule, ], controllers: [AppController], providers: [AppService], diff --git a/src/modules/AT/alumno/student.controller.ts b/src/modules/AT/alumno/student.controller.ts index 9cdc72a..c44ccc7 100644 --- a/src/modules/AT/alumno/student.controller.ts +++ b/src/modules/AT/alumno/student.controller.ts @@ -1,4 +1,4 @@ -import { Controller, Get, Post, Param } from '@nestjs/common'; +import { Controller, Get, Param } from '@nestjs/common'; import { AlumnoService } from './student.service'; @Controller('student') diff --git a/src/modules/AT/alumno/student.service.ts b/src/modules/AT/alumno/student.service.ts index 51dfc17..9599ab9 100644 --- a/src/modules/AT/alumno/student.service.ts +++ b/src/modules/AT/alumno/student.service.ts @@ -7,7 +7,7 @@ import { Alumno } from 'src/database/AT/entities/student.entity'; export class AlumnoService { constructor( @InjectRepository(Alumno, 'dbAT') - private readonly studentRepository: Repository, + private readonly alumnoRepository: Repository, // @InjectRepository(Carrera, 'dbAT') // private readonly carreraRepository: Repository, ) {} @@ -22,12 +22,12 @@ export class AlumnoService { // } // const createStudent = { ...rest, carrera, fecha_registro: new Date() }; - // const student = this.studentRepository.create(createStudent); - // return await this.studentRepository.save(student); + // const student = this.alumnoRepository.create(createStudent); + // return await this.alumnoRepository.save(student); // } async findOne(id_cuenta: number): Promise { - const student = await this.studentRepository.findOne({ + const student = await this.alumnoRepository.findOne({ where: { id_cuenta }, select: { id_cuenta: true, nombre: true, credito: true }, }); @@ -40,12 +40,24 @@ export class AlumnoService { } async findOneByName(nombre: string): Promise { - const student = await this.studentRepository.findOne({ + const student = await this.alumnoRepository.findOne({ where: { nombre }, }); if (!student) { - throw new NotFoundException(`Student not found`); + throw new NotFoundException(`Alumno not found`); + } + + return student; + } + + async findOneById(id_cuenta: number): Promise { + const student = await this.alumnoRepository.findOne({ + where: { id_cuenta }, + }); + + if (!student) { + throw new NotFoundException('Alumno not found'); } return student; diff --git a/src/modules/AT/alumno_inscrito/alumno_inscrito.controller.ts b/src/modules/AT/alumno_inscrito/alumno_inscrito.controller.ts index 336bbb7..931efa1 100644 --- a/src/modules/AT/alumno_inscrito/alumno_inscrito.controller.ts +++ b/src/modules/AT/alumno_inscrito/alumno_inscrito.controller.ts @@ -1,17 +1,11 @@ import { Controller, Get, Post, Body, Param } from '@nestjs/common'; import { AlumnoInscritoService } from './alumno_inscrito.service'; -import { CreateAlumnoInscritoDto } from './dto/create-alumno_inscrito.dto'; import { AlumnoInscrito } from 'src/database/AT/entities/alumno_inscrito.entity'; @Controller('alumno-inscrito') export class AlumnoInscritoController { constructor(private readonly alumnoInscritoService: AlumnoInscritoService) {} - @Post() - async create(@Body() dto: CreateAlumnoInscritoDto): Promise { - return this.alumnoInscritoService.create(dto); - } - @Get() async findAll(): Promise { return this.alumnoInscritoService.findAll(); diff --git a/src/modules/AT/alumno_inscrito/alumno_inscrito.service.ts b/src/modules/AT/alumno_inscrito/alumno_inscrito.service.ts index b16c4c2..4939e56 100644 --- a/src/modules/AT/alumno_inscrito/alumno_inscrito.service.ts +++ b/src/modules/AT/alumno_inscrito/alumno_inscrito.service.ts @@ -1,5 +1,4 @@ -import { BadRequestException, Injectable } from '@nestjs/common'; -import { CreateAlumnoInscritoDto } from './dto/create-alumno_inscrito.dto'; +import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; import { AlumnoInscrito } from 'src/database/AT/entities/alumno_inscrito.entity'; @@ -11,24 +10,6 @@ export class AlumnoInscritoService { private readonly alumnoInscritoRepo: Repository, ) {} - async create(dto: CreateAlumnoInscritoDto): Promise { - const existing = await this.alumnoInscritoRepo.findOne({ - where: { - alumno: { id_cuenta: dto.id_cuenta }, - periodo: { id_periodo: dto.id_periodo }, - }, - }); - - if (existing) { - throw new BadRequestException( - 'El alumno ya está inscrito en este periodo y plataforma', - ); - } - - const alumnoInscrito = this.alumnoInscritoRepo.create(dto); - return this.alumnoInscritoRepo.save(alumnoInscrito); - } - async findAll(): Promise { return this.alumnoInscritoRepo.find({ relations: ['alumno', 'periodo', 'plataforma'], @@ -37,7 +18,7 @@ export class AlumnoInscritoService { async findByAlumno(id_cuenta: number): Promise { return this.alumnoInscritoRepo.find({ - where: { alumno: { id_cuenta }, periodo: { id_periodo: 27 } }, + where: { alumno: { id_cuenta } }, relations: ['alumno', 'periodo', 'plataforma'], }); } diff --git a/src/modules/AT/periodo/dto/create-periodo.dto.ts b/src/modules/AT/periodo/dto/create-periodo.dto.ts new file mode 100644 index 0000000..ea24c49 --- /dev/null +++ b/src/modules/AT/periodo/dto/create-periodo.dto.ts @@ -0,0 +1,23 @@ +import { + IsString, + Length, + IsDateString, + IsOptional, + IsBoolean, +} from 'class-validator'; + +export class CreatePeriodoDto { + @IsString() + @Length(6, 6) + semestre: string; + + @IsDateString() + fecha_inicio_servicio: string; + + @IsDateString() + fecha_fin_servicio: string; + + @IsOptional() + @IsBoolean() + activo?: boolean; +} diff --git a/src/modules/AT/periodo/periodo.controller.ts b/src/modules/AT/periodo/periodo.controller.ts new file mode 100644 index 0000000..443ba48 --- /dev/null +++ b/src/modules/AT/periodo/periodo.controller.ts @@ -0,0 +1,11 @@ +import { Controller, Get } from '@nestjs/common'; +import { PeriodoService } from './periodo.service'; + +@Controller('periodo') +export class PeriodoController { + constructor(private readonly periodoService: PeriodoService) {} + @Get('latest') + getLatestPeriodo() { + return this.periodoService.getLatestPeriodo(); + } +} diff --git a/src/modules/AT/periodo/periodo.module.ts b/src/modules/AT/periodo/periodo.module.ts new file mode 100644 index 0000000..f225350 --- /dev/null +++ b/src/modules/AT/periodo/periodo.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { PeriodoService } from './periodo.service'; +import { PeriodoController } from './periodo.controller'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Periodo } from 'src/database/AT/entities/periodo.entity'; + +@Module({ + imports: [TypeOrmModule.forFeature([Periodo], 'dbAT')], + controllers: [PeriodoController], + providers: [PeriodoService], +}) +export class PeriodoModule {} diff --git a/src/modules/AT/periodo/periodo.service.ts b/src/modules/AT/periodo/periodo.service.ts new file mode 100644 index 0000000..4d289e0 --- /dev/null +++ b/src/modules/AT/periodo/periodo.service.ts @@ -0,0 +1,21 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Periodo } from 'src/database/AT/entities/periodo.entity'; +import { Repository } from 'typeorm'; + +@Injectable() +export class PeriodoService { + constructor( + @InjectRepository(Periodo, 'dbAT') + private readonly periodoRepository: Repository, + ) {} + + async getLatestPeriodo() { + return await this.periodoRepository + .find({ + order: { id_periodo: 'DESC' }, + take: 1, + }) + .then((periodos) => periodos[0]); + } +} diff --git a/src/modules/Monedero/persona/google.strategy.ts b/src/modules/Monedero/persona/google.strategy.ts index 691eb97..0b510e9 100644 --- a/src/modules/Monedero/persona/google.strategy.ts +++ b/src/modules/Monedero/persona/google.strategy.ts @@ -49,8 +49,6 @@ export class GoogleStrategy extends PassportStrategy(Strategy, 'google') { const user = await this.personaService.validateOrCreateGoogleUser({ email, - nombre, - apellido, }); done(null, user); diff --git a/src/modules/Monedero/persona/persona.module.ts b/src/modules/Monedero/persona/persona.module.ts index 9507763..3c8352a 100644 --- a/src/modules/Monedero/persona/persona.module.ts +++ b/src/modules/Monedero/persona/persona.module.ts @@ -8,6 +8,7 @@ import { JwtModule } from '@nestjs/jwt'; import { GoogleStrategy } from './google.strategy'; import { JwtStrategy } from './jwt.strategy'; import { Persona } from 'src/database/Monedero/entities/persona.entity'; +import { AlumnoModule } from 'src/modules/AT/alumno/student.module'; @Module({ imports: [ @@ -24,6 +25,7 @@ import { Persona } from 'src/database/Monedero/entities/persona.entity'; }; }, }), + AlumnoModule, ], controllers: [PersonaController], providers: [PersonaService, GoogleStrategy, JwtStrategy], diff --git a/src/modules/Monedero/persona/persona.service.ts b/src/modules/Monedero/persona/persona.service.ts index 0761cba..4720e75 100644 --- a/src/modules/Monedero/persona/persona.service.ts +++ b/src/modules/Monedero/persona/persona.service.ts @@ -3,6 +3,7 @@ import { JwtService } from '@nestjs/jwt'; import { Repository } from 'typeorm'; import { InjectRepository } from '@nestjs/typeorm'; import { Persona } from 'src/database/Monedero/entities/persona.entity'; +import { AlumnoService } from 'src/modules/AT/alumno/student.service'; @Injectable() export class PersonaService { @@ -10,6 +11,8 @@ export class PersonaService { @InjectRepository(Persona, 'dbMonedero') private readonly personaRepository: Repository, private readonly jwtService: JwtService, + + private readonly alumnoService: AlumnoService, ) {} async findAll() { @@ -50,39 +53,39 @@ export class PersonaService { }; } - async validateOrCreateGoogleUser(data: { - email: string; - nombre: string; - apellido: string; - }) { + async validateOrCreateGoogleUser(data: { email: string }) { let persona = await this.findByEmail(data.email); if (!persona) { - const apellidoArray = data.apellido.split(' '); + const numeroIdentificar = data.email.split('@')[0]; + + const alum = await this.alumnoService.findOneById( + Number(numeroIdentificar), + ); + + const apellidoArray = alum.nombre.split(' '); const apellidoP = apellidoArray[0] || ''; const apellidoM = apellidoArray[1] || ''; - let realName; - const numeroIdentificar = data.email.split('@')[0]; + + const nombre = apellidoArray.slice(2).join(' '); let tipo; if (numeroIdentificar.length === 9) { tipo = 'Alumno'; - realName = apellidoArray.slice(2).join(' ') || ''; } else { tipo = 'Academico'; - realName = data.nombre; } persona = await this.create({ - nombre: realName || '', - apellidoP: apellidoP || '', - apellidoM: apellidoM || '', + nombre, + apellidoP, + apellidoM, password: '', fechaPasswordTem: new Date(), correo: data.email, - carreraAds: '', - cantidadCuenta: 0, + carreraAds: alum.carrera.carrera, + cantidadCuenta: alum.credito, usuario: numeroIdentificar, numeroIdentificar: numeroIdentificar || '', tipoUsuario: tipo,