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