create user with base AT and create

This commit is contained in:
2025-10-23 10:52:40 -06:00
parent 8baec559a8
commit 303bdc655d
12 changed files with 112 additions and 51 deletions
+4
View File
@@ -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],
+1 -1
View File
@@ -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')
+18 -6
View File
@@ -7,7 +7,7 @@ import { Alumno } from 'src/database/AT/entities/student.entity';
export class AlumnoService {
constructor(
@InjectRepository(Alumno, 'dbAT')
private readonly studentRepository: Repository<Alumno>,
private readonly alumnoRepository: Repository<Alumno>,
// @InjectRepository(Carrera, 'dbAT')
// private readonly carreraRepository: Repository<Carrera>,
) {}
@@ -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<Alumno> {
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<Alumno> {
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<Alumno> {
const student = await this.alumnoRepository.findOne({
where: { id_cuenta },
});
if (!student) {
throw new NotFoundException('Alumno not found');
}
return student;
@@ -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<AlumnoInscrito> {
return this.alumnoInscritoService.create(dto);
}
@Get()
async findAll(): Promise<AlumnoInscrito[]> {
return this.alumnoInscritoService.findAll();
@@ -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<AlumnoInscrito>,
) {}
async create(dto: CreateAlumnoInscritoDto): Promise<AlumnoInscrito> {
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<AlumnoInscrito[]> {
return this.alumnoInscritoRepo.find({
relations: ['alumno', 'periodo', 'plataforma'],
@@ -37,7 +18,7 @@ export class AlumnoInscritoService {
async findByAlumno(id_cuenta: number): Promise<AlumnoInscrito[]> {
return this.alumnoInscritoRepo.find({
where: { alumno: { id_cuenta }, periodo: { id_periodo: 27 } },
where: { alumno: { id_cuenta } },
relations: ['alumno', 'periodo', 'plataforma'],
});
}
@@ -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;
}
@@ -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();
}
}
+12
View File
@@ -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 {}
+21
View File
@@ -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<Periodo>,
) {}
async getLatestPeriodo() {
return await this.periodoRepository
.find({
order: { id_periodo: 'DESC' },
take: 1,
})
.then((periodos) => periodos[0]);
}
}
@@ -49,8 +49,6 @@ export class GoogleStrategy extends PassportStrategy(Strategy, 'google') {
const user = await this.personaService.validateOrCreateGoogleUser({
email,
nombre,
apellido,
});
done(null, user);
@@ -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],
+18 -15
View File
@@ -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<Persona>,
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,