From 0a27caf7ed1b339a2f3f4e079060f87cb2188a47 Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Fri, 19 Sep 2025 17:15:05 -0600 Subject: [PATCH 1/2] add Ep receipt --- src/Operations/operations.controller.ts | 9 ++-- src/Operations/operations.module.ts | 4 ++ src/alumno/entities/student.entity.ts | 4 ++ src/alumno_sancion/alumno_sancion.service.ts | 1 - src/app.module.ts | 6 +++ .../detalle_servicio.module.ts | 1 + .../entities/detalle_servicio.entity.ts | 1 - src/periodo/periodo.controller.ts | 28 ----------- src/periodo/periodo.service.ts | 19 ------- src/recibo/dto/create-recibo.dto.ts | 17 +++++++ .../entities/recibo.entity.ts} | 19 ++----- src/recibo/recibo.controller.ts | 23 +++++++++ src/recibo/recibo.module.ts | 15 ++++++ src/recibo/recibo.service.ts | 50 +++++++++++++++++++ src/ticket/dto/create-ticket.dto.ts | 1 - src/ticket/dto/update-ticket.dto.ts | 4 -- src/ticket/ticket.controller.ts | 34 ------------- src/ticket/ticket.module.ts | 9 ---- src/ticket/ticket.service.ts | 26 ---------- src/user/entities/user.entity.ts | 4 ++ src/user/jwt.guard.ts | 5 ++ src/user/jwt.strategy.ts | 4 +- src/user/user.module.ts | 7 ++- src/user/user.service.ts | 17 ++++++- 24 files changed, 160 insertions(+), 148 deletions(-) create mode 100644 src/recibo/dto/create-recibo.dto.ts rename src/{ticket/entities/ticket.entity.ts => recibo/entities/recibo.entity.ts} (74%) create mode 100644 src/recibo/recibo.controller.ts create mode 100644 src/recibo/recibo.module.ts create mode 100644 src/recibo/recibo.service.ts delete mode 100644 src/ticket/dto/create-ticket.dto.ts delete mode 100644 src/ticket/dto/update-ticket.dto.ts delete mode 100644 src/ticket/ticket.controller.ts delete mode 100644 src/ticket/ticket.module.ts delete mode 100644 src/ticket/ticket.service.ts create mode 100644 src/user/jwt.guard.ts diff --git a/src/Operations/operations.controller.ts b/src/Operations/operations.controller.ts index 2b18dca..e3e50e9 100644 --- a/src/Operations/operations.controller.ts +++ b/src/Operations/operations.controller.ts @@ -1,12 +1,15 @@ -import { Body, Controller, Post } from "@nestjs/common"; +import { Body, Controller, Post, UseGuards } from "@nestjs/common"; import { OperationsService } from "./operations.services"; +import { chargePrintDto } from "./dto/operations.dto"; +import { JwtAuthGuard } from "src/user/jwt.guard"; @Controller('operations') export class OperationsController{ constructor(private readonly operationsService:OperationsService){} + @Post() - async Login(@Body() data) { - return this.operationsService.chargePrint(data,data.userid); + async Login(@Body() data:chargePrintDto) { + return this.operationsService.chargePrint(data,data.id_cuenta); } } \ No newline at end of file diff --git a/src/Operations/operations.module.ts b/src/Operations/operations.module.ts index c10a345..06ccb36 100644 --- a/src/Operations/operations.module.ts +++ b/src/Operations/operations.module.ts @@ -4,10 +4,14 @@ import { Alumno } from 'src/alumno/entities/student.entity'; import { DetalleServicio } from 'src/detalle_servicio/entities/detalle_servicio.entity'; import { OperationsController } from './operations.controller'; import { OperationsService } from './operations.services'; +import { DetalleServicioModule } from 'src/detalle_servicio/detalle_servicio.module'; +import { AlumnoModule } from 'src/alumno/student.module'; @Module({ imports: [ TypeOrmModule.forFeature([Alumno, DetalleServicio]), + DetalleServicioModule, + AlumnoModule, ], controllers: [OperationsController], providers: [OperationsService], diff --git a/src/alumno/entities/student.entity.ts b/src/alumno/entities/student.entity.ts index 6f3c7a1..ab6d1a3 100644 --- a/src/alumno/entities/student.entity.ts +++ b/src/alumno/entities/student.entity.ts @@ -1,5 +1,6 @@ import { AlumnoSancion } from 'src/alumno_sancion/entities/alumno_sancion.entity'; import { DetalleServicio } from 'src/detalle_servicio/entities/detalle_servicio.entity'; +import { Recibo } from 'src/recibo/entities/recibo.entity'; import { Column, Entity, @@ -95,4 +96,7 @@ export class Alumno { @OneToMany(() => AlumnoSancion, (alusancion) => alusancion.sancion) sanciones: AlumnoSancion[]; + + @OneToMany(() => Recibo, (recibo) => recibo.alum) + recibo: Recibo[]; } diff --git a/src/alumno_sancion/alumno_sancion.service.ts b/src/alumno_sancion/alumno_sancion.service.ts index f3152e6..b41c0f7 100644 --- a/src/alumno_sancion/alumno_sancion.service.ts +++ b/src/alumno_sancion/alumno_sancion.service.ts @@ -11,7 +11,6 @@ export class AlumnoSancionService { constructor( @InjectRepository(AlumnoSancion) private readonly alumnosancionRepository: Repository, - private readonly alumnoService: AlumnoService, private readonly sancionService: SancionService, ) {} diff --git a/src/app.module.ts b/src/app.module.ts index 69bc42a..9c76a29 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -17,6 +17,9 @@ import { SancionModule } from './sancion/sancion.module'; import { AlumnoSancionModule } from './alumno_sancion/alumno_sancion.module'; import { AlumnoSancion } from './alumno_sancion/entities/alumno_sancion.entity'; import { Sancion } from './sancion/entities/sancion.entity'; +import { OperationsModule } from './Operations/operations.module'; +import { Recibo } from './recibo/entities/recibo.entity'; +import { ReciboModule } from './recibo/recibo.module'; @Module({ imports: [ @@ -43,6 +46,7 @@ import { Sancion } from './sancion/entities/sancion.entity'; AlumnoSancion, Sancion, Carrera, + Recibo, ], synchronize: false, //Never change to true in production! }), @@ -54,6 +58,8 @@ import { Sancion } from './sancion/entities/sancion.entity'; ServicioModule, SancionModule, AlumnoSancionModule, + OperationsModule, + ReciboModule, ], controllers: [AppController], providers: [AppService], diff --git a/src/detalle_servicio/detalle_servicio.module.ts b/src/detalle_servicio/detalle_servicio.module.ts index 392fb3c..ac60f9e 100644 --- a/src/detalle_servicio/detalle_servicio.module.ts +++ b/src/detalle_servicio/detalle_servicio.module.ts @@ -5,5 +5,6 @@ import { DetalleServicioController } from './detalle_servicio.controller'; @Module({ controllers: [DetalleServicioController], providers: [DetalleServicioService], + exports:[DetalleServicioService] }) export class DetalleServicioModule {} diff --git a/src/detalle_servicio/entities/detalle_servicio.entity.ts b/src/detalle_servicio/entities/detalle_servicio.entity.ts index e829e3c..bf4f81a 100644 --- a/src/detalle_servicio/entities/detalle_servicio.entity.ts +++ b/src/detalle_servicio/entities/detalle_servicio.entity.ts @@ -44,7 +44,6 @@ export class DetalleServicio { @Column() id_servicio:number - @ManyToOne(() => Alumno, (id_cuenta) => id_cuenta.detalles_servicio, { eager: true, }) diff --git a/src/periodo/periodo.controller.ts b/src/periodo/periodo.controller.ts index c6a72c6..8e8dd64 100644 --- a/src/periodo/periodo.controller.ts +++ b/src/periodo/periodo.controller.ts @@ -1,34 +1,6 @@ import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; -import { PeriodoService } from './periodo.service'; -import { CreatePeriodoDto } from './dto/create-periodo.dto'; -import { UpdatePeriodoDto } from './dto/update-periodo.dto'; @Controller('periodo') export class PeriodoController { - constructor(private readonly periodoService: PeriodoService) {} - @Post() - create(@Body() createPeriodoDto: CreatePeriodoDto) { - return this.periodoService.create(createPeriodoDto); - } - - @Get() - findAll() { - return this.periodoService.findAll(); - } - - @Get(':id') - findOne(@Param('id') id: string) { - return this.periodoService.findOne(+id); - } - - @Patch(':id') - update(@Param('id') id: string, @Body() updatePeriodoDto: UpdatePeriodoDto) { - return this.periodoService.update(+id, updatePeriodoDto); - } - - @Delete(':id') - remove(@Param('id') id: string) { - return this.periodoService.remove(+id); - } } diff --git a/src/periodo/periodo.service.ts b/src/periodo/periodo.service.ts index b808232..cf80e3a 100644 --- a/src/periodo/periodo.service.ts +++ b/src/periodo/periodo.service.ts @@ -4,23 +4,4 @@ import { UpdatePeriodoDto } from './dto/update-periodo.dto'; @Injectable() export class PeriodoService { - create(createPeriodoDto: CreatePeriodoDto) { - return 'This action adds a new periodo'; - } - - findAll() { - return `This action returns all periodo`; - } - - findOne(id: number) { - return `This action returns a #${id} periodo`; - } - - update(id: number, updatePeriodoDto: UpdatePeriodoDto) { - return `This action updates a #${id} periodo`; - } - - remove(id: number) { - return `This action removes a #${id} periodo`; - } } diff --git a/src/recibo/dto/create-recibo.dto.ts b/src/recibo/dto/create-recibo.dto.ts new file mode 100644 index 0000000..f3cf390 --- /dev/null +++ b/src/recibo/dto/create-recibo.dto.ts @@ -0,0 +1,17 @@ +import { Type } from 'class-transformer'; +import { IsDate, IsNumber, IsString } from 'class-validator'; + +export class CreateReciboDto { + @IsNumber() + id_cuenta: number; + + @IsNumber() + monto: number; + + @IsString() + folio_recibo: string; + + @IsDate() + @Type(() => Date) + fecha_recibo: Date; +} diff --git a/src/ticket/entities/ticket.entity.ts b/src/recibo/entities/recibo.entity.ts similarity index 74% rename from src/ticket/entities/ticket.entity.ts rename to src/recibo/entities/recibo.entity.ts index 7e41380..1609f67 100644 --- a/src/ticket/entities/ticket.entity.ts +++ b/src/recibo/entities/recibo.entity.ts @@ -1,4 +1,3 @@ -export class Ticket {} import { Column, Entity, @@ -7,6 +6,7 @@ import { PrimaryGeneratedColumn, } from 'typeorm'; import { User } from '../../user/entities/user.entity'; +import { Alumno } from 'src/alumno/entities/student.entity'; @Entity({ name: 'recibo' }) export class Recibo { @@ -29,20 +29,11 @@ export class Recibo { monto: number; @Column({ name: 'fecha_recibo', type: 'date', nullable: false }) - fecha_recibo: Date | null; + fecha_recibo: Date ; - @Column({ - name: 'id_cuenta', - type: 'int', - }) - id_cuenta: number; - - @Column({ - name: 'id_usuario', - type: 'int', - nullable: false, - }) - id_usuario: number; + @ManyToOne(() => Alumno, (alum) => alum.id_cuenta, {}) + @JoinColumn({ name: 'id_cuenta' }) + alum: Alumno; @ManyToOne(() => User, (user) => user.id_usuario, {}) @JoinColumn({ name: 'id_usuario' }) diff --git a/src/recibo/recibo.controller.ts b/src/recibo/recibo.controller.ts new file mode 100644 index 0000000..b8c6169 --- /dev/null +++ b/src/recibo/recibo.controller.ts @@ -0,0 +1,23 @@ +import { + Controller, + Post, + Body, + UseGuards, + Req, +} from '@nestjs/common'; +import { ReciboService } from './recibo.service'; +import { CreateReciboDto } from './dto/create-recibo.dto'; +import { JwtAuthGuard } from 'src/user/jwt.guard'; + +@Controller('recibo') +export class ReciboController { + constructor(private readonly reciboService: ReciboService) {} + + @UseGuards(JwtAuthGuard) + @Post() + async createReceipt(@Body() data: CreateReciboDto, @Req() req: any) { + const userId = req.user.id; + return this.reciboService.create(data, +userId); + } +} +//IO diff --git a/src/recibo/recibo.module.ts b/src/recibo/recibo.module.ts new file mode 100644 index 0000000..acf1e8c --- /dev/null +++ b/src/recibo/recibo.module.ts @@ -0,0 +1,15 @@ +import { Module } from '@nestjs/common'; +import { ReciboService } from './recibo.service'; +import { ReciboController } from './recibo.controller'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Recibo } from './entities/recibo.entity'; +import { AlumnoModule } from 'src/alumno/student.module'; +import { UserModule } from 'src/user/user.module'; + +@Module({ + imports: [TypeOrmModule.forFeature([Recibo]), AlumnoModule, UserModule], + controllers: [ReciboController], + providers: [ReciboService], +}) +export class ReciboModule {} +//IO diff --git a/src/recibo/recibo.service.ts b/src/recibo/recibo.service.ts new file mode 100644 index 0000000..52ce527 --- /dev/null +++ b/src/recibo/recibo.service.ts @@ -0,0 +1,50 @@ +import { ConflictException, Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Recibo } from './entities/recibo.entity'; +import { Repository } from 'typeorm'; +import { CreateReciboDto } from './dto/create-recibo.dto'; +import { AlumnoService } from 'src/alumno/student.service'; +import { UserService } from 'src/user/user.service'; + +@Injectable() +export class ReciboService { + constructor( + @InjectRepository(Recibo) + private readonly reciboRepository:Repository, + private readonly alumnoService:AlumnoService, + private readonly usuarioService:UserService, + ){} + + async findOne(folio_recibo: string) { + const recibo = await this.reciboRepository.findOne({ + where: { folio_recibo }, + }); + return recibo; + } + + async create(data: CreateReciboDto, id_usuario: number) { + const {id_cuenta,folio_recibo} = data + const receipt = await this.findOne(folio_recibo) + + if(receipt){ + throw new ConflictException('Recibo ya existe'); + } + + const alumno = await this.alumnoService.findOne(id_cuenta) + const usuario = await this.usuarioService.findOne(id_usuario) + + console.log(usuario) + const recibo = this.reciboRepository.create({ + folio_recibo: data.folio_recibo, + monto: data.monto, + fecha_recibo: data.fecha_recibo, + alum: alumno, + user:usuario + }); + + console.log(recibo) + await this.reciboRepository.save(recibo) + return; + } +} +//IO \ No newline at end of file diff --git a/src/ticket/dto/create-ticket.dto.ts b/src/ticket/dto/create-ticket.dto.ts deleted file mode 100644 index 921b819..0000000 --- a/src/ticket/dto/create-ticket.dto.ts +++ /dev/null @@ -1 +0,0 @@ -export class CreateTicketDto {} diff --git a/src/ticket/dto/update-ticket.dto.ts b/src/ticket/dto/update-ticket.dto.ts deleted file mode 100644 index efaf3aa..0000000 --- a/src/ticket/dto/update-ticket.dto.ts +++ /dev/null @@ -1,4 +0,0 @@ -import { PartialType } from '@nestjs/mapped-types'; -import { CreateTicketDto } from './create-ticket.dto'; - -export class UpdateTicketDto extends PartialType(CreateTicketDto) {} diff --git a/src/ticket/ticket.controller.ts b/src/ticket/ticket.controller.ts deleted file mode 100644 index 92f458b..0000000 --- a/src/ticket/ticket.controller.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Controller, Get, Post, Body, Patch, Param, Delete } from '@nestjs/common'; -import { TicketService } from './ticket.service'; -import { CreateTicketDto } from './dto/create-ticket.dto'; -import { UpdateTicketDto } from './dto/update-ticket.dto'; - -@Controller('ticket') -export class TicketController { - constructor(private readonly ticketService: TicketService) {} - - @Post() - create(@Body() createTicketDto: CreateTicketDto) { - return this.ticketService.create(createTicketDto); - } - - @Get() - findAll() { - return this.ticketService.findAll(); - } - - @Get(':id') - findOne(@Param('id') id: string) { - return this.ticketService.findOne(+id); - } - - @Patch(':id') - update(@Param('id') id: string, @Body() updateTicketDto: UpdateTicketDto) { - return this.ticketService.update(+id, updateTicketDto); - } - - @Delete(':id') - remove(@Param('id') id: string) { - return this.ticketService.remove(+id); - } -} diff --git a/src/ticket/ticket.module.ts b/src/ticket/ticket.module.ts deleted file mode 100644 index 2790566..0000000 --- a/src/ticket/ticket.module.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { Module } from '@nestjs/common'; -import { TicketService } from './ticket.service'; -import { TicketController } from './ticket.controller'; - -@Module({ - controllers: [TicketController], - providers: [TicketService], -}) -export class TicketModule {} diff --git a/src/ticket/ticket.service.ts b/src/ticket/ticket.service.ts deleted file mode 100644 index e4d322a..0000000 --- a/src/ticket/ticket.service.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { CreateTicketDto } from './dto/create-ticket.dto'; -import { UpdateTicketDto } from './dto/update-ticket.dto'; - -@Injectable() -export class TicketService { - create(createTicketDto: CreateTicketDto) { - return 'This action adds a new ticket'; - } - - findAll() { - return `This action returns all ticket`; - } - - findOne(id: number) { - return `This action returns a #${id} ticket`; - } - - update(id: number, updateTicketDto: UpdateTicketDto) { - return `This action updates a #${id} ticket`; - } - - remove(id: number) { - return `This action removes a #${id} ticket`; - } -} diff --git a/src/user/entities/user.entity.ts b/src/user/entities/user.entity.ts index 19919d5..578756f 100644 --- a/src/user/entities/user.entity.ts +++ b/src/user/entities/user.entity.ts @@ -1,4 +1,5 @@ import { DetalleServicio } from 'src/detalle_servicio/entities/detalle_servicio.entity'; +import { Recibo } from 'src/recibo/entities/recibo.entity'; import { Column, Entity, @@ -58,4 +59,7 @@ export class User { (id_detalle_servicio) => id_detalle_servicio.id_perfil, ) detalles_servicio: DetalleServicio[]; + + @OneToMany(() => Recibo, (recibo) => recibo.user) + recibo: Recibo[]; } diff --git a/src/user/jwt.guard.ts b/src/user/jwt.guard.ts new file mode 100644 index 0000000..2155290 --- /dev/null +++ b/src/user/jwt.guard.ts @@ -0,0 +1,5 @@ +import { Injectable } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; + +@Injectable() +export class JwtAuthGuard extends AuthGuard('jwt') {} diff --git a/src/user/jwt.strategy.ts b/src/user/jwt.strategy.ts index ba6d3ae..df5ac83 100644 --- a/src/user/jwt.strategy.ts +++ b/src/user/jwt.strategy.ts @@ -1,7 +1,6 @@ import { Injectable } from '@nestjs/common'; import { PassportStrategy } from '@nestjs/passport'; import { ExtractJwt, Strategy } from 'passport-jwt'; -import { UserService } from './user.service'; import { ConfigService } from '@nestjs/config'; @Injectable() @@ -15,6 +14,7 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } async validate(payload: any) { - return { userId: payload.id, username: payload.usuario }; + console.log('payload:', payload); + return { id: payload.id, usuario: payload.usuario }; } } diff --git a/src/user/user.module.ts b/src/user/user.module.ts index ecbeb79..c2fcb49 100644 --- a/src/user/user.module.ts +++ b/src/user/user.module.ts @@ -21,11 +21,10 @@ import { JwtStrategy } from './jwt.strategy'; signOptions: { expiresIn: '1h' }, }; }, - }), ], controllers: [UserController], - providers: [UserService,JwtStrategy], - exports: [UserService], + providers: [UserService, JwtStrategy], + exports: [UserService,PassportModule,JwtModule], }) -export class UserModule { } +export class UserModule {} diff --git a/src/user/user.service.ts b/src/user/user.service.ts index 32af2af..1b5d42e 100644 --- a/src/user/user.service.ts +++ b/src/user/user.service.ts @@ -41,7 +41,20 @@ export class UserService { path: '/', }); - return res.json({ message: 'Inicio de sesión exitoso' }); + return res.json({ + message: 'Inicio de sesión exitoso', + access_token: token, + }); + } + + async findOne(id_usuario: number): Promise { + const student = await this.userRepository.findOne({ + where: { id_usuario }, + }); + if (!student) { + throw new NotFoundException(`Student not found`); + } + return student; } } -//IO \ No newline at end of file +//IO From 429678dc3b55f4e50c2a0b59278d3f87155866de Mon Sep 17 00:00:00 2001 From: IO420 <320154041@pcpuma.acatlan.unam.mx> Date: Fri, 19 Sep 2025 18:30:44 -0600 Subject: [PATCH 2/2] fixed entities --- src/Operations/operations.controller.ts | 30 +++++---- src/Operations/operations.module.ts | 4 ++ src/Operations/operations.services.ts | 61 ++++++++++++++++--- src/alumno/entities/student.entity.ts | 2 +- src/alumno/student.service.ts | 16 ++++- .../detalle_servicio.service.ts | 2 +- .../entities/detalle_servicio.entity.ts | 18 ++---- src/periodo/entities/periodo.entity.ts | 2 +- src/recibo/dto/create-recibo.dto.ts | 2 - src/recibo/recibo.controller.ts | 8 --- src/recibo/recibo.module.ts | 1 + src/recibo/recibo.service.ts | 41 +++---------- src/servicio/entities/servicio.entity.ts | 2 +- src/user/entities/user.entity.ts | 2 +- src/user/jwt.strategy.ts | 1 - 15 files changed, 113 insertions(+), 79 deletions(-) diff --git a/src/Operations/operations.controller.ts b/src/Operations/operations.controller.ts index e3e50e9..c7fdd6c 100644 --- a/src/Operations/operations.controller.ts +++ b/src/Operations/operations.controller.ts @@ -1,15 +1,23 @@ -import { Body, Controller, Post, UseGuards } from "@nestjs/common"; -import { OperationsService } from "./operations.services"; -import { chargePrintDto } from "./dto/operations.dto"; -import { JwtAuthGuard } from "src/user/jwt.guard"; +import { Body, Controller, Post, Req, UseGuards } from '@nestjs/common'; +import { OperationsService } from './operations.services'; +import { chargePrintDto } from './dto/operations.dto'; +import { JwtAuthGuard } from 'src/user/jwt.guard'; @Controller('operations') -export class OperationsController{ - constructor(private readonly operationsService:OperationsService){} +export class OperationsController { + constructor(private readonly operationsService: OperationsService) {} + @UseGuards(JwtAuthGuard) + @Post('impressions') + async chargePrint(@Body() data: chargePrintDto, @Req() req: any) { + const id_usuario = req.user.id; + return this.operationsService.chargePrint(data, id_usuario); + } - @Post() - async Login(@Body() data:chargePrintDto) { - return this.operationsService.chargePrint(data,data.id_cuenta); - } -} \ No newline at end of file + @UseGuards(JwtAuthGuard) + @Post('receipt') + async addCredit(@Body() data, @Req() req: any) { + const id_usuario = req.user.id; + return this.operationsService.addCredit(data, id_usuario); + } +} diff --git a/src/Operations/operations.module.ts b/src/Operations/operations.module.ts index 06ccb36..c1f994a 100644 --- a/src/Operations/operations.module.ts +++ b/src/Operations/operations.module.ts @@ -6,12 +6,16 @@ import { OperationsController } from './operations.controller'; import { OperationsService } from './operations.services'; import { DetalleServicioModule } from 'src/detalle_servicio/detalle_servicio.module'; import { AlumnoModule } from 'src/alumno/student.module'; +import { UserModule } from 'src/user/user.module'; +import { ReciboModule } from 'src/recibo/recibo.module'; @Module({ imports: [ TypeOrmModule.forFeature([Alumno, DetalleServicio]), DetalleServicioModule, AlumnoModule, + UserModule, + ReciboModule, ], controllers: [OperationsController], providers: [OperationsService], diff --git a/src/Operations/operations.services.ts b/src/Operations/operations.services.ts index 44e55a0..e523842 100644 --- a/src/Operations/operations.services.ts +++ b/src/Operations/operations.services.ts @@ -1,9 +1,17 @@ -import { BadRequestException, Injectable } from '@nestjs/common'; +import { + BadRequestException, + Injectable, + Req, + UseGuards, +} from '@nestjs/common'; import { AlumnoService } from 'src/alumno/student.service'; import { DetalleServicioService } from 'src/detalle_servicio/detalle_servicio.service'; import { DataSource } from 'typeorm'; import { chargePrintDto } from './dto/operations.dto'; import { CreateDetalleServicioDto } from 'src/detalle_servicio/dto/create-detalle_servicio.dto'; +import { UserService } from 'src/user/user.service'; +import { ReciboService } from 'src/recibo/recibo.service'; +import { CreateReciboDto } from 'src/recibo/dto/create-recibo.dto'; @Injectable() export class OperationsService { @@ -11,9 +19,11 @@ export class OperationsService { private readonly dataSource: DataSource, private readonly alumnoService: AlumnoService, private readonly detalleServicioService: DetalleServicioService, + private readonly userService: UserService, + private readonly reciboService: ReciboService, ) {} - async chargePrint(data: chargePrintDto, userId: number) { + async chargePrint(data: chargePrintDto, id_usuario: number) { const { monto, id_cuenta } = data; const queryRunner = this.dataSource.createQueryRunner(); @@ -27,10 +37,14 @@ export class OperationsService { throw new BadRequestException('Crédito insuficiente'); } - const detalleData: CreateDetalleServicioDto = { - ...data, - id_servicio: 1, - id_usuario: userId, + const user = await this.userService.findOne(id_usuario); + const alum = await this.alumnoService.findOne(id_cuenta) + + const detalleData = { + servicio: 1, + user, + alum, + monto, fecha_operacion: new Date(), }; @@ -39,7 +53,7 @@ export class OperationsService { queryRunner.manager, ); - await this.alumnoService.UpdateCredit( + await this.alumnoService.collectCredit( id_cuenta, monto, queryRunner.manager, @@ -54,4 +68,37 @@ export class OperationsService { await queryRunner.release(); } } + + async addCredit(data, id_usuario: number) { + const { id_cuenta, monto, fecha_recibo, folio_recibo } = data; + + const queryRunner = this.dataSource.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + + const user = await this.userService.findOne(id_usuario); + const alum = await this.alumnoService.findOne(id_cuenta); + + try { + const detalleData = { + folio_recibo, + user, + alum, + fecha_recibo, + monto, + }; + + await this.reciboService.create(detalleData, queryRunner.manager); + + await this.alumnoService.addCredit(id_cuenta, monto, queryRunner.manager); + + await queryRunner.commitTransaction(); + return { message: 'correct' }; + } catch (error) { + await queryRunner.rollbackTransaction(); + return { message: 'error', error: error.message }; + } finally { + await queryRunner.release(); + } + } } diff --git a/src/alumno/entities/student.entity.ts b/src/alumno/entities/student.entity.ts index ab6d1a3..12c8a93 100644 --- a/src/alumno/entities/student.entity.ts +++ b/src/alumno/entities/student.entity.ts @@ -84,7 +84,7 @@ export class Alumno { @Column({ name: 'generacion', type: 'int', width: 4, nullable: true }) generacion: number | null; - @OneToMany(() => DetalleServicio, (detalle) => detalle.id_cuenta) + @OneToMany(() => DetalleServicio, (detalle) => detalle.alum) detalles_servicio: DetalleServicio[]; @ManyToOne(() => Carrera, (carrera) => carrera.estudiantes, { diff --git a/src/alumno/student.service.ts b/src/alumno/student.service.ts index 5271288..787aa9c 100644 --- a/src/alumno/student.service.ts +++ b/src/alumno/student.service.ts @@ -36,7 +36,7 @@ export class AlumnoService { return student.credito; } - async UpdateCredit( + async collectCredit( id_cuenta: number, credit: number, manager: EntityManager, @@ -49,5 +49,19 @@ export class AlumnoService { .where({ id_cuenta }) .execute(); } + + async addCredit( + id_cuenta: number, + credit: number, + manager: EntityManager, + ) { + const repo = manager.getRepository(Alumno); + return await repo + .createQueryBuilder() + .update() + .set({ credito: () => `credito + ${credit}` }) + .where({ id_cuenta }) + .execute(); + } } //IO \ No newline at end of file diff --git a/src/detalle_servicio/detalle_servicio.service.ts b/src/detalle_servicio/detalle_servicio.service.ts index ea6b477..b074e17 100644 --- a/src/detalle_servicio/detalle_servicio.service.ts +++ b/src/detalle_servicio/detalle_servicio.service.ts @@ -5,7 +5,7 @@ import { CreateDetalleServicioDto } from './dto/create-detalle_servicio.dto'; @Injectable() export class DetalleServicioService { - async Create(data: CreateDetalleServicioDto, manager: EntityManager) { + async Create(data, manager: EntityManager) { const repo = manager.getRepository(DetalleServicio); const details = repo.create(data); return await repo.save(details); diff --git a/src/detalle_servicio/entities/detalle_servicio.entity.ts b/src/detalle_servicio/entities/detalle_servicio.entity.ts index bf4f81a..3a5c957 100644 --- a/src/detalle_servicio/entities/detalle_servicio.entity.ts +++ b/src/detalle_servicio/entities/detalle_servicio.entity.ts @@ -38,17 +38,11 @@ export class DetalleServicio { }) fecha_operacion: Date; - @Column() - id_cuenta:number - - @Column() - id_servicio:number - - @ManyToOne(() => Alumno, (id_cuenta) => id_cuenta.detalles_servicio, { + @ManyToOne(() => Alumno, (alum) => alum.detalles_servicio, { eager: true, }) @JoinColumn({ name: 'id_cuenta' }) - cuenta: Alumno; + alum: Alumno; @ManyToOne(() => Servicio, (id_servicio) => id_servicio.detalles_servicio, { eager: true, @@ -56,16 +50,16 @@ export class DetalleServicio { @JoinColumn({ name: 'id_servicio' }) servicio: Servicio; - @ManyToOne(() => User, (id_perfil) => id_perfil.detalles_servicio, { + @ManyToOne(() => User, (user) => user.detalles_servicio, { eager: true, }) @JoinColumn({ name: 'id_usuario' }) - id_perfil: User; + user: User; - @ManyToOne(() => Periodo, (id_periodo) => id_periodo.detalles_servicio, { + @ManyToOne(() => Periodo, (periodo) => periodo.detalles_servicio, { eager: true, nullable: true, }) @JoinColumn({ name: 'id_periodo' }) - id_periodo: Periodo; + periodo: Periodo; } diff --git a/src/periodo/entities/periodo.entity.ts b/src/periodo/entities/periodo.entity.ts index b1a6dcc..d98ad06 100644 --- a/src/periodo/entities/periodo.entity.ts +++ b/src/periodo/entities/periodo.entity.ts @@ -24,7 +24,7 @@ export class Periodo { @OneToMany( () => DetalleServicio, - (id_detalle_servicio) => id_detalle_servicio.id_periodo, + (id_detalle_servicio) => id_detalle_servicio.periodo, ) detalles_servicio: DetalleServicio[]; } diff --git a/src/recibo/dto/create-recibo.dto.ts b/src/recibo/dto/create-recibo.dto.ts index f3cf390..9cfa372 100644 --- a/src/recibo/dto/create-recibo.dto.ts +++ b/src/recibo/dto/create-recibo.dto.ts @@ -2,8 +2,6 @@ import { Type } from 'class-transformer'; import { IsDate, IsNumber, IsString } from 'class-validator'; export class CreateReciboDto { - @IsNumber() - id_cuenta: number; @IsNumber() monto: number; diff --git a/src/recibo/recibo.controller.ts b/src/recibo/recibo.controller.ts index b8c6169..57c0747 100644 --- a/src/recibo/recibo.controller.ts +++ b/src/recibo/recibo.controller.ts @@ -6,18 +6,10 @@ import { Req, } from '@nestjs/common'; import { ReciboService } from './recibo.service'; -import { CreateReciboDto } from './dto/create-recibo.dto'; -import { JwtAuthGuard } from 'src/user/jwt.guard'; @Controller('recibo') export class ReciboController { constructor(private readonly reciboService: ReciboService) {} - @UseGuards(JwtAuthGuard) - @Post() - async createReceipt(@Body() data: CreateReciboDto, @Req() req: any) { - const userId = req.user.id; - return this.reciboService.create(data, +userId); - } } //IO diff --git a/src/recibo/recibo.module.ts b/src/recibo/recibo.module.ts index acf1e8c..fa6cf67 100644 --- a/src/recibo/recibo.module.ts +++ b/src/recibo/recibo.module.ts @@ -10,6 +10,7 @@ import { UserModule } from 'src/user/user.module'; imports: [TypeOrmModule.forFeature([Recibo]), AlumnoModule, UserModule], controllers: [ReciboController], providers: [ReciboService], + exports:[ReciboService] }) export class ReciboModule {} //IO diff --git a/src/recibo/recibo.service.ts b/src/recibo/recibo.service.ts index 52ce527..9dd5344 100644 --- a/src/recibo/recibo.service.ts +++ b/src/recibo/recibo.service.ts @@ -1,20 +1,16 @@ import { ConflictException, Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Recibo } from './entities/recibo.entity'; -import { Repository } from 'typeorm'; +import { EntityManager, Repository } from 'typeorm'; import { CreateReciboDto } from './dto/create-recibo.dto'; -import { AlumnoService } from 'src/alumno/student.service'; -import { UserService } from 'src/user/user.service'; @Injectable() export class ReciboService { constructor( @InjectRepository(Recibo) - private readonly reciboRepository:Repository, - private readonly alumnoService:AlumnoService, - private readonly usuarioService:UserService, - ){} - + private readonly reciboRepository: Repository, + ) {} + async findOne(folio_recibo: string) { const recibo = await this.reciboRepository.findOne({ where: { folio_recibo }, @@ -22,29 +18,10 @@ export class ReciboService { return recibo; } - async create(data: CreateReciboDto, id_usuario: number) { - const {id_cuenta,folio_recibo} = data - const receipt = await this.findOne(folio_recibo) - - if(receipt){ - throw new ConflictException('Recibo ya existe'); - } - - const alumno = await this.alumnoService.findOne(id_cuenta) - const usuario = await this.usuarioService.findOne(id_usuario) - - console.log(usuario) - const recibo = this.reciboRepository.create({ - folio_recibo: data.folio_recibo, - monto: data.monto, - fecha_recibo: data.fecha_recibo, - alum: alumno, - user:usuario - }); - - console.log(recibo) - await this.reciboRepository.save(recibo) - return; + async create(data: CreateReciboDto, manager: EntityManager) { + const repo = manager.getRepository(Recibo); + const details = repo.create(data); + return await repo.save(details); } } -//IO \ No newline at end of file +//IO diff --git a/src/servicio/entities/servicio.entity.ts b/src/servicio/entities/servicio.entity.ts index 6aad2e3..9641a19 100644 --- a/src/servicio/entities/servicio.entity.ts +++ b/src/servicio/entities/servicio.entity.ts @@ -11,7 +11,7 @@ export class Servicio { @OneToMany( () => DetalleServicio, - (id_detalle_servicio) => id_detalle_servicio.id_servicio, + (id_detalle_servicio) => id_detalle_servicio.servicio, ) detalles_servicio: DetalleServicio[]; } diff --git a/src/user/entities/user.entity.ts b/src/user/entities/user.entity.ts index 578756f..d12377d 100644 --- a/src/user/entities/user.entity.ts +++ b/src/user/entities/user.entity.ts @@ -56,7 +56,7 @@ export class User { @OneToMany( () => DetalleServicio, - (id_detalle_servicio) => id_detalle_servicio.id_perfil, + (id_detalle_servicio) => id_detalle_servicio.user, ) detalles_servicio: DetalleServicio[]; diff --git a/src/user/jwt.strategy.ts b/src/user/jwt.strategy.ts index df5ac83..897524e 100644 --- a/src/user/jwt.strategy.ts +++ b/src/user/jwt.strategy.ts @@ -14,7 +14,6 @@ export class JwtStrategy extends PassportStrategy(Strategy) { } async validate(payload: any) { - console.log('payload:', payload); return { id: payload.id, usuario: payload.usuario }; } }