From d88679f854e82c2c358df30d791cf632ea3569d9 Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Fri, 10 Feb 2023 16:48:47 -0600 Subject: [PATCH 01/15] first steps for the generation of the event table together with its services --- src/app.module.ts | 6 ++++-- src/events/event.entity.ts | 18 +++++++++++++++++ src/events/events.controller.ts | 35 +++++++++++++++++++++++++++++++++ src/events/events.service.ts | 6 ++++++ 4 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 src/events/event.entity.ts create mode 100644 src/events/events.controller.ts create mode 100644 src/events/events.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index 8662803..ad4b079 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,10 +1,12 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; +import { EventsController } from './events/events.controller'; +import { EventsService } from './events/events.service'; @Module({ imports: [], - controllers: [AppController], - providers: [AppService], + controllers: [AppController, EventsController], + providers: [AppService, EventsService], }) export class AppModule {} diff --git a/src/events/event.entity.ts b/src/events/event.entity.ts new file mode 100644 index 0000000..9079d51 --- /dev/null +++ b/src/events/event.entity.ts @@ -0,0 +1,18 @@ +export class event { + //evento_identificador:string + id_event: number //id_evento + event_name: string //nombre + desciption:string //descripcion + start_date:Date //fecha_inicio + end_date:Date //fecha_fin + regitration_deadline:Date //fecha_limite_inscripcionme + schedule:Date //horarior + requirements: string + modality: string //modalidad + place: string //lugar + registration_fee: string //cuota_inscripcionl + sponsor: string //patrocinador + type_acreditation: string //tipo_acreditacion + event_type: string //tipo_evento + state: boolean //estado +} \ No newline at end of file diff --git a/src/events/events.controller.ts b/src/events/events.controller.ts new file mode 100644 index 0000000..ca542db --- /dev/null +++ b/src/events/events.controller.ts @@ -0,0 +1,35 @@ +import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post } from '@nestjs/common'; + +@Controller('events') +export class EventsController { + @Get() + getEvents(): string{ + return "Aqui irán los eventos" + } + +/* @Get(':id') + getEvent(@Param() params){ + return `El evento que estamos llamando es: ${params.id}` + } */ + + @Get(':id') + getEvent(@Param('id') id: string): string{ + return `El evento que estamos llamando es: ${id}` + } + + @Post() +/* @HttpCode(HttpStatus.NO_CONTENT) esta linea es para no teornar nada*/ + createEvent(@Body('message') message: string){ + return `el evento creado es: ${message}` + } + + @Delete(':id') + deleteEvent(@Param('id') id:string): string{ + return `Estamos borrando el evento: ${id}` + } + + @Patch(':id') + updateEvent(@Param('id') id:string, @Body() body){ + return `Actualizando el evento: ${id}` + } +} \ No newline at end of file diff --git a/src/events/events.service.ts b/src/events/events.service.ts new file mode 100644 index 0000000..b9672fc --- /dev/null +++ b/src/events/events.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class EventsService { + +} -- 2.43.0 From bc84b7d63de967447dc64c22b2c1d47df524265a Mon Sep 17 00:00:00 2001 From: jorge alvarado Date: Mon, 13 Feb 2023 13:24:30 -0600 Subject: [PATCH 02/15] creacion de dto para event y algunos servicios --- package-lock.json | 79 ++++++++++++++++++++++++++++++ package.json | 3 ++ src/app.controller.spec.ts | 22 --------- src/app.module.ts | 9 ++-- src/events/dto/create-event.dto.ts | 55 +++++++++++++++++++++ src/events/event.entity.ts | 66 +++++++++++++++++++------ src/events/events.controller.ts | 63 +++++++++++++++--------- src/events/events.module.ts | 10 ++++ src/events/events.service.ts | 69 +++++++++++++++++++++++++- 9 files changed, 307 insertions(+), 69 deletions(-) delete mode 100644 src/app.controller.spec.ts create mode 100644 src/events/dto/create-event.dto.ts create mode 100644 src/events/events.module.ts diff --git a/package-lock.json b/package-lock.json index 3732974..ce38b61 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,9 @@ "@nestjs/common": "^9.0.0", "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.0", + "moment": "^2.29.4", "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0" }, @@ -2087,6 +2090,11 @@ "@types/superagent": "*" } }, + "node_modules/@types/validator": { + "version": "13.7.12", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.12.tgz", + "integrity": "sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA==" + }, "node_modules/@types/yargs": { "version": "17.0.22", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", @@ -3100,6 +3108,21 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "node_modules/class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "node_modules/class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "dependencies": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -5896,6 +5919,11 @@ "node": ">= 0.8.0" } }, + "node_modules/libphonenumber-js": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.19.tgz", + "integrity": "sha512-MDZ1zLIkfSDZV5xBta3nuvbEOlsnKCPe4z5r3hyup/AXveevkl9A1eSWmLhd2FX4k7pJDe4MrLeQsux0HI/VWg==" + }, "node_modules/lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -6179,6 +6207,14 @@ "mkdirp": "bin/cmd.js" } }, + "node_modules/moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==", + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -8084,6 +8120,14 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, + "node_modules/validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==", + "engines": { + "node": ">= 0.10" + } + }, "node_modules/vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", @@ -10003,6 +10047,11 @@ "@types/superagent": "*" } }, + "@types/validator": { + "version": "13.7.12", + "resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.7.12.tgz", + "integrity": "sha512-YVtyAPqpefU+Mm/qqnOANW6IkqKpCSrarcyV269C8MA8Ux0dbkEuQwM/4CjL47kVEM2LgBef/ETfkH+c6+moFA==" + }, "@types/yargs": { "version": "17.0.22", "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.22.tgz", @@ -10736,6 +10785,21 @@ "integrity": "sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==", "dev": true }, + "class-transformer": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/class-transformer/-/class-transformer-0.5.1.tgz", + "integrity": "sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==" + }, + "class-validator": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz", + "integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==", + "requires": { + "@types/validator": "^13.7.10", + "libphonenumber-js": "^1.10.14", + "validator": "^13.7.0" + } + }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -12841,6 +12905,11 @@ "type-check": "~0.4.0" } }, + "libphonenumber-js": { + "version": "1.10.19", + "resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.19.tgz", + "integrity": "sha512-MDZ1zLIkfSDZV5xBta3nuvbEOlsnKCPe4z5r3hyup/AXveevkl9A1eSWmLhd2FX4k7pJDe4MrLeQsux0HI/VWg==" + }, "lines-and-columns": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", @@ -13050,6 +13119,11 @@ "minimist": "^1.2.6" } }, + "moment": { + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -14419,6 +14493,11 @@ } } }, + "validator": { + "version": "13.9.0", + "resolved": "https://registry.npmjs.org/validator/-/validator-13.9.0.tgz", + "integrity": "sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==" + }, "vary": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", diff --git a/package.json b/package.json index 3932781..3faac17 100644 --- a/package.json +++ b/package.json @@ -23,6 +23,9 @@ "@nestjs/common": "^9.0.0", "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", + "class-transformer": "^0.5.1", + "class-validator": "^0.14.0", + "moment": "^2.29.4", "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0" }, diff --git a/src/app.controller.spec.ts b/src/app.controller.spec.ts deleted file mode 100644 index d22f389..0000000 --- a/src/app.controller.spec.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { Test, TestingModule } from '@nestjs/testing'; -import { AppController } from './app.controller'; -import { AppService } from './app.service'; - -describe('AppController', () => { - let appController: AppController; - - beforeEach(async () => { - const app: TestingModule = await Test.createTestingModule({ - controllers: [AppController], - providers: [AppService], - }).compile(); - - appController = app.get(AppController); - }); - - describe('root', () => { - it('should return "Hello World!"', () => { - expect(appController.getHello()).toBe('Hello World!'); - }); - }); -}); diff --git a/src/app.module.ts b/src/app.module.ts index ad4b079..93ffdcb 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,12 +1,11 @@ import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; -import { EventsController } from './events/events.controller'; -import { EventsService } from './events/events.service'; +import { eventsModule } from './events/events.module'; @Module({ - imports: [], - controllers: [AppController, EventsController], - providers: [AppService, EventsService], + imports: [eventsModule], + controllers: [AppController], + providers: [AppService], }) export class AppModule {} diff --git a/src/events/dto/create-event.dto.ts b/src/events/dto/create-event.dto.ts new file mode 100644 index 0000000..a992b6e --- /dev/null +++ b/src/events/dto/create-event.dto.ts @@ -0,0 +1,55 @@ +import { IsString } from "class-validator"; +import { IsBoolean, IsDate, IsNumber } from "class-validator"; + +export class CreateEventDto { + @IsNumber() + id_event: number + + @IsString() + event_name: string + + @IsString() + desciption:string + + @IsNumber() + limit: number + + @IsDate() + start_date:Date + + @IsDate() + end_date:Date + + @IsDate() + regitration_deadline:Date + + @IsString() + start_time:string + + @IsString() + end_time:string + + @IsString() + requirements: string + + @IsString() + modality: string + + @IsString() + place: string + + @IsNumber() + registration_fee: number + + @IsString() + sponsor: string + + @IsString() + type_acreditation: string + + @IsString() + event_type: string + + @IsBoolean() + active: boolean +} \ No newline at end of file diff --git a/src/events/event.entity.ts b/src/events/event.entity.ts index 9079d51..4337830 100644 --- a/src/events/event.entity.ts +++ b/src/events/event.entity.ts @@ -1,18 +1,52 @@ +import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() export class event { - //evento_identificador:string - id_event: number //id_evento - event_name: string //nombre - desciption:string //descripcion - start_date:Date //fecha_inicio - end_date:Date //fecha_fin - regitration_deadline:Date //fecha_limite_inscripcionme - schedule:Date //horarior - requirements: string - modality: string //modalidad - place: string //lugar - registration_fee: string //cuota_inscripcionl - sponsor: string //patrocinador - type_acreditation: string //tipo_acreditacion - event_type: string //tipo_evento - state: boolean //estado + @PrimaryGeneratedColumn() + id_evento: number + + @Column() + evento_identificador: string + + @Column() + nombre: string + + @Column() + fecha_inicio: Date + + @Column() + fecha_fin: Date + + @Column() + horario: string + + @Column() + requisitos: string + + @Column() + modalidad: string + + @Column() + lugar: string + + @Column() + cuota_inscripcion: number + + @Column() + patrocinador: string + + @Column() + tipo_acreditacion: string + + @Column() + fecha_limite_inscripcion: string + + @Column() + tipo_evento: string + + @Column() + estado: boolean + + @Column() + descripcion: string } \ No newline at end of file diff --git a/src/events/events.controller.ts b/src/events/events.controller.ts index ca542db..6edc184 100644 --- a/src/events/events.controller.ts +++ b/src/events/events.controller.ts @@ -1,35 +1,50 @@ -import { Body, Controller, Delete, Get, HttpCode, HttpStatus, Param, Patch, Post } from '@nestjs/common'; +import { + Body, + Controller, + Delete, + Get, + HttpCode, + HttpStatus, + Param, + Patch, + Post, +} from '@nestjs/common'; +import { CreateEventDto } from './dto/create-event.dto'; +import { event } from './event.entity'; +import { EventsService } from './events.service'; @Controller('events') export class EventsController { - @Get() - getEvents(): string{ - return "Aqui irán los eventos" - } + constructor(private readonly eventsServices: EventsService) {} -/* @Get(':id') + @Get() + getEvents(): event[] { + return this.eventsServices.getEvents(); + } + + /* @Get(':id') getEvent(@Param() params){ return `El evento que estamos llamando es: ${params.id}` } */ - @Get(':id') - getEvent(@Param('id') id: string): string{ - return `El evento que estamos llamando es: ${id}` - } + @Get(':id') + getEvent(@Param('id') id: string): event { + return this.eventsServices.getEvent(parseInt(id)); + } - @Post() -/* @HttpCode(HttpStatus.NO_CONTENT) esta linea es para no teornar nada*/ - createEvent(@Body('message') message: string){ - return `el evento creado es: ${message}` - } + @Post() + createEvent(@Body() body: CreateEventDto): string { + this.eventsServices.createEvent(body); + return 'evento creado con exito'; + } - @Delete(':id') - deleteEvent(@Param('id') id:string): string{ - return `Estamos borrando el evento: ${id}` - } + @Delete(':id') + deleteEvent(@Param('id') id: string) { + return this.eventsServices.deleteEvent(parseInt(id)); + } - @Patch(':id') - updateEvent(@Param('id') id:string, @Body() body){ - return `Actualizando el evento: ${id}` - } -} \ No newline at end of file + @Patch(':id') + updateEvent(@Param('id') id: string, @Body() body) { + return `Actualizando el evento: ${id}`; + } +} diff --git a/src/events/events.module.ts b/src/events/events.module.ts new file mode 100644 index 0000000..ce0c450 --- /dev/null +++ b/src/events/events.module.ts @@ -0,0 +1,10 @@ +import { Module } from "@nestjs/common"; +import { EventsController } from "./events.controller"; +import { EventsService } from "./events.service"; + +@Module({ + controllers: [EventsController], + providers: [EventsService], +}) + +export class eventsModule {} diff --git a/src/events/events.service.ts b/src/events/events.service.ts index b9672fc..9190baa 100644 --- a/src/events/events.service.ts +++ b/src/events/events.service.ts @@ -1,6 +1,71 @@ -import { Injectable } from '@nestjs/common'; +import { Injectable, NotFoundException } from '@nestjs/common'; +import { event } from './event.entity'; +import * as moment from 'moment'; +import { CreateEventDto } from './dto/create-event.dto'; @Injectable() export class EventsService { - + private events: event[] = [ + { + id_event: 1, //id_evento + event_name: 'Platica de ejemplo', //nombre + desciption: 'Esta platica servira como ejemplo', //descripcion + limit: 30, //limite + start_date: new Date('2023-02-20'), //fecha_inicio + end_date: new Date('2023-02-20'), //fecha_fin + regitration_deadline: new Date('2023-02-19'), //fecha_limite_inscripcionme + start_time: '13:00', //hora de inicio + end_time: '14:00', //hora de fin + requirements: 'Sin requerimientos de hardware ni conocimiento', + modality: 'mixta', //modalidad + place: 'CEDETEC', //lugar + registration_fee: 0.0, //cuota_inscripcionl + sponsor: 'CIDWA', //patrocinador + type_acreditation: 'nose', //tipo_acreditacion + event_type: 'Platica', //tipo_evento + active: true, //estado + } + ]; + + getEvents(): event[]{ + return this.events + } + + getEvent(id: number): event{ + const eventGetting = this.events.find((item) => item.id_event === id); + if(!eventGetting){ + throw new NotFoundException("Evento no encontrado") + } + return eventGetting + } + + createEvent(body: CreateEventDto){ + this.events.push({ + id_event: (Math.floor(Math.random()*20000) + 1 ), + event_name: body.event_name, + desciption: body.desciption, + limit: body.limit, + start_date: body.start_date, + end_date: body.end_date, + regitration_deadline: body.regitration_deadline, + start_time: body.start_time, + end_time: body.end_time, + requirements: body.requirements, + modality: body.modality, + place: body.place, + registration_fee: body.registration_fee, + sponsor: body.sponsor, + type_acreditation: body.type_acreditation, + event_type: body.event_type, + active: body.active, + }) + } + + deleteEvent(id: number){ + const index = this.events.findIndex((event) => event.id_event === id); + if(index >= 0){ + this.events.splice(index, 1) + } + } + } -- 2.43.0 From acf2bb3856c728fa4d1a29d78ec2097a8280b353 Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Thu, 16 Feb 2023 16:49:52 -0600 Subject: [PATCH 03/15] se creo el servicio para guardar participantes --- .env | 19 + package-lock.json | 1135 +++++++++++++++-- package.json | 6 +- src/app.module.ts | 32 +- .../dto/registrarParticipanteDto.dto.ts | 22 + .../evento-participante.controller.ts | 15 + .../evento-participante.module.ts | 13 + .../evento-participante.service.ts | 34 + .../eventoParticipante.entity.ts | 20 + src/eventos/dto/actualizarEvento.dto.ts | 31 + src/eventos/dto/crearEvento.dto.ts | 32 + src/eventos/evento.entity.ts | 65 + src/eventos/eventos.controller.ts | 36 + src/eventos/eventos.module.ts | 12 + src/eventos/eventos.service.ts | 37 + src/events/dto/create-event.dto.ts | 55 - src/events/event.entity.ts | 52 - src/events/events.controller.ts | 50 - src/events/events.module.ts | 10 - src/events/events.service.ts | 71 -- src/main.ts | 2 +- src/participante/participante.controller.ts | 5 + src/participante/participante.entity.ts | 44 + src/participante/participante.module.ts | 12 + src/participante/participante.service.ts | 34 + 25 files changed, 1488 insertions(+), 356 deletions(-) create mode 100644 .env create mode 100644 src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts create mode 100644 src/evento-participante/evento-participante/evento-participante.controller.ts create mode 100644 src/evento-participante/evento-participante/evento-participante.module.ts create mode 100644 src/evento-participante/evento-participante/evento-participante.service.ts create mode 100644 src/evento-participante/evento-participante/eventoParticipante.entity.ts create mode 100644 src/eventos/dto/actualizarEvento.dto.ts create mode 100644 src/eventos/dto/crearEvento.dto.ts create mode 100644 src/eventos/evento.entity.ts create mode 100644 src/eventos/eventos.controller.ts create mode 100644 src/eventos/eventos.module.ts create mode 100644 src/eventos/eventos.service.ts delete mode 100644 src/events/dto/create-event.dto.ts delete mode 100644 src/events/event.entity.ts delete mode 100644 src/events/events.controller.ts delete mode 100644 src/events/events.module.ts delete mode 100644 src/events/events.service.ts create mode 100644 src/participante/participante.controller.ts create mode 100644 src/participante/participante.entity.ts create mode 100644 src/participante/participante.module.ts create mode 100644 src/participante/participante.service.ts diff --git a/.env b/.env new file mode 100644 index 0000000..25debad --- /dev/null +++ b/.env @@ -0,0 +1,19 @@ +PORT=5089 + +DB_HOST=localhost +DB_USER=root +DB_PASS=password +DB_NAME=cedetec_proyectos + + +SALT_ROUNDS = 10 + +KEY = +CADUCIDAD_TOKEN = 1800000 + +TOKEN_KEY = +TOKEN_EXPIRATION = 1800000 + + +EMAIL= +EMAIL_PASS= \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ce38b61..38f7f1c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,13 +10,17 @@ "license": "UNLICENSED", "dependencies": { "@nestjs/common": "^9.0.0", + "@nestjs/config": "^2.3.1", "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", + "@nestjs/typeorm": "^9.0.1", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "moment": "^2.29.4", + "pg": "^8.9.0", "reflect-metadata": "^0.1.13", - "rxjs": "^7.2.0" + "rxjs": "^7.2.0", + "typeorm": "^0.3.12" }, "devDependencies": { "@nestjs/cli": "^9.0.0", @@ -812,7 +816,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "devOptional": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -824,7 +828,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, + "devOptional": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -1391,7 +1395,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6.0.0" } @@ -1433,7 +1437,7 @@ "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "devOptional": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.17", @@ -1544,6 +1548,30 @@ } } }, + "node_modules/@nestjs/config": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-2.3.1.tgz", + "integrity": "sha512-Ckzel0NZ9CWhNsLfE1hxfDuxJuEbhQvGxSlmZ1/X8awjRmAA/g3kT6M1+MO1SHj1wMtPyUfd9WpwkiqFbiwQgA==", + "dependencies": { + "dotenv": "16.0.3", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21", + "uuid": "9.0.0" + }, + "peerDependencies": { + "@nestjs/common": "^7.0.0 || ^8.0.0 || ^9.0.0", + "reflect-metadata": "^0.1.13", + "rxjs": "^6.0.0 || ^7.2.0" + } + }, + "node_modules/@nestjs/config/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/@nestjs/core": { "version": "9.3.7", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.3.7.tgz", @@ -1734,6 +1762,21 @@ } } }, + "node_modules/@nestjs/typeorm": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-9.0.1.tgz", + "integrity": "sha512-A2BgLIPsMtmMI0bPKEf4bmzgFPsnvHqNBx3KkvaJ7hJrBQy0OqYOb+Rr06ifblKWDWS2tUPNrAFQbZjtk3PI+g==", + "dependencies": { + "uuid": "8.3.2" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0", + "@nestjs/core": "^8.0.0 || ^9.0.0", + "reflect-metadata": "^0.1.13", + "rxjs": "^7.2.0", + "typeorm": "^0.3.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1825,29 +1868,34 @@ "@sinonjs/commons": "^2.0.0" } }, + "node_modules/@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + }, "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "devOptional": true }, "node_modules/@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "devOptional": true }, "node_modules/@types/babel__core": { "version": "7.20.0", @@ -2023,7 +2071,7 @@ "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true + "devOptional": true }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -2472,7 +2520,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true, + "devOptional": true, "bin": { "acorn": "bin/acorn" }, @@ -2502,7 +2550,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.4.0" } @@ -2580,7 +2628,6 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, "engines": { "node": ">=8" } @@ -2599,6 +2646,11 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "node_modules/anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -2612,6 +2664,14 @@ "node": ">= 8" } }, + "node_modules/app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -2621,13 +2681,12 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "node_modules/array-flatten": { "version": "1.1.1", @@ -2765,14 +2824,12 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, "funding": [ { "type": "github", @@ -2958,6 +3015,14 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "node_modules/buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==", + "engines": { + "node": ">=4" + } + }, "node_modules/busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -3135,6 +3200,76 @@ "node": ">=8" } }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/cli-highlight/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "engines": { + "node": ">=10" + } + }, "node_modules/cli-spinners": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", @@ -3175,7 +3310,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -3359,7 +3493,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "devOptional": true }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -3375,11 +3509,22 @@ "node": ">= 8" } }, + "node_modules/date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==", + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "dependencies": { "ms": "2.1.2" }, @@ -3474,7 +3619,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, + "devOptional": true, "engines": { "node": ">=0.3.1" } @@ -3512,6 +3657,22 @@ "node": ">=6.0.0" } }, + "node_modules/dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==", + "engines": { + "node": ">=12" + } + }, + "node_modules/dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==", + "engines": { + "node": ">=12" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -3538,8 +3699,7 @@ "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "node_modules/encodeurl": { "version": "1.0.2", @@ -3590,7 +3750,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, "engines": { "node": ">=6" } @@ -4373,8 +4532,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "node_modules/fsevents": { "version": "2.3.2", @@ -4408,7 +4566,6 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -4571,6 +4728,14 @@ "node": ">=8" } }, + "node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "engines": { + "node": "*" + } + }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -4616,7 +4781,6 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, "funding": [ { "type": "github", @@ -4689,7 +4853,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -4818,7 +4981,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, "engines": { "node": ">=8" } @@ -5820,7 +5982,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "dependencies": { "argparse": "^2.0.1" }, @@ -5957,8 +6118,7 @@ "node_modules/lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "node_modules/lodash.memoize": { "version": "4.1.2", @@ -6065,7 +6225,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "node_modules/makeerror": { "version": "1.0.12", @@ -6218,8 +6378,7 @@ "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "node_modules/multer": { "version": "1.4.4-lts.1", @@ -6244,6 +6403,16 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -6368,7 +6537,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "dependencies": { "wrappy": "1" } @@ -6508,6 +6676,11 @@ "node": ">=6" } }, + "node_modules/packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, "node_modules/parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -6538,6 +6711,24 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -6593,6 +6784,80 @@ "node": ">=8" } }, + "node_modules/pg": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.9.0.tgz", + "integrity": "sha512-ZJM+qkEbtOHRuXjmvBtOgNOXOtLSbxiMiUVMgE4rV6Zwocy03RicCVvDXgx8l4Biwo8/qORUnEqn2fdQzV7KCg==", + "dependencies": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.5.0", + "pg-pool": "^3.5.2", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + }, + "engines": { + "node": ">= 8.0.0" + }, + "peerDependencies": { + "pg-native": ">=3.0.1" + }, + "peerDependenciesMeta": { + "pg-native": { + "optional": true + } + } + }, + "node_modules/pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "node_modules/pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/pg-pool": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", + "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "peerDependencies": { + "pg": ">=8.0" + } + }, + "node_modules/pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "node_modules/pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "dependencies": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "dependencies": { + "split2": "^4.1.0" + } + }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6693,6 +6958,41 @@ "node": ">=4" } }, + "node_modules/postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==", + "engines": { + "node": ">=4" + } + }, + "node_modules/postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "dependencies": { + "xtend": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -6939,7 +7239,6 @@ "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -7111,6 +7410,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "node_modules/schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -7262,6 +7566,18 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -7369,6 +7685,14 @@ "deprecated": "Please use @jridgewell/sourcemap-codec instead", "dev": true }, + "node_modules/split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==", + "engines": { + "node": ">= 10.x" + } + }, "node_modules/sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -7442,7 +7766,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -7456,7 +7779,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "dependencies": { "ansi-regex": "^5.0.1" }, @@ -7688,6 +8010,25 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -7837,7 +8178,7 @@ "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, + "devOptional": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -8005,11 +8346,215 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "node_modules/typeorm": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.12.tgz", + "integrity": "sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA==", + "dependencies": { + "@sqltools/formatter": "^1.2.5", + "app-root-path": "^3.1.0", + "buffer": "^6.0.3", + "chalk": "^4.1.2", + "cli-highlight": "^2.1.11", + "date-fns": "^2.29.3", + "debug": "^4.3.4", + "dotenv": "^16.0.3", + "glob": "^8.1.0", + "js-yaml": "^4.1.0", + "mkdirp": "^2.1.3", + "reflect-metadata": "^0.1.13", + "sha.js": "^2.4.11", + "tslib": "^2.5.0", + "uuid": "^9.0.0", + "xml2js": "^0.4.23", + "yargs": "^17.6.2" + }, + "bin": { + "typeorm": "cli.js", + "typeorm-ts-node-commonjs": "cli-ts-node-commonjs.js", + "typeorm-ts-node-esm": "cli-ts-node-esm.js" + }, + "engines": { + "node": ">= 12.9.0" + }, + "funding": { + "url": "https://opencollective.com/typeorm" + }, + "peerDependencies": { + "@google-cloud/spanner": "^5.18.0", + "@sap/hana-client": "^2.12.25", + "better-sqlite3": "^7.1.2 || ^8.0.0", + "hdb-pool": "^0.1.6", + "ioredis": "^5.0.4", + "mongodb": "^3.6.0", + "mssql": "^7.3.0", + "mysql2": "^2.2.5 || ^3.0.1", + "oracledb": "^5.1.0", + "pg": "^8.5.1", + "pg-native": "^3.0.0", + "pg-query-stream": "^4.0.0", + "redis": "^3.1.1 || ^4.0.0", + "sql.js": "^1.4.0", + "sqlite3": "^5.0.3", + "ts-node": "^10.7.0", + "typeorm-aurora-data-api-driver": "^2.0.0" + }, + "peerDependenciesMeta": { + "@google-cloud/spanner": { + "optional": true + }, + "@sap/hana-client": { + "optional": true + }, + "better-sqlite3": { + "optional": true + }, + "hdb-pool": { + "optional": true + }, + "ioredis": { + "optional": true + }, + "mongodb": { + "optional": true + }, + "mssql": { + "optional": true + }, + "mysql2": { + "optional": true + }, + "oracledb": { + "optional": true + }, + "pg": { + "optional": true + }, + "pg-native": { + "optional": true + }, + "pg-query-stream": { + "optional": true + }, + "redis": { + "optional": true + }, + "sql.js": { + "optional": true + }, + "sqlite3": { + "optional": true + }, + "ts-node": { + "optional": true + }, + "typeorm-aurora-data-api-driver": { + "optional": true + } + } + }, + "node_modules/typeorm/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/typeorm/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/typeorm/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/typeorm/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/typeorm/node_modules/mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/typeorm/node_modules/uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, + "devOptional": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -8094,11 +8639,19 @@ "node": ">= 0.4.0" } }, + "node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "devOptional": true }, "node_modules/v8-to-istanbul": { "version": "9.0.1", @@ -8336,7 +8889,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -8352,8 +8904,7 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "node_modules/write-file-atomic": { "version": "4.0.2", @@ -8368,6 +8919,26 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, + "node_modules/xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "engines": { + "node": ">=4.0" + } + }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -8380,7 +8951,6 @@ "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true, "engines": { "node": ">=10" } @@ -8404,7 +8974,6 @@ "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "dev": true, "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -8422,7 +8991,6 @@ "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, "engines": { "node": ">=12" } @@ -8431,7 +8999,7 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, + "devOptional": true, "engines": { "node": ">=6" } @@ -9035,7 +9603,7 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, + "devOptional": true, "requires": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -9044,7 +9612,7 @@ "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, + "devOptional": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -9489,7 +10057,7 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true + "devOptional": true }, "@jridgewell/set-array": { "version": "1.1.2", @@ -9524,7 +10092,7 @@ "version": "1.4.14", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true + "devOptional": true }, "@jridgewell/trace-mapping": { "version": "0.3.17", @@ -9600,6 +10168,24 @@ "uid": "2.0.1" } }, + "@nestjs/config": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@nestjs/config/-/config-2.3.1.tgz", + "integrity": "sha512-Ckzel0NZ9CWhNsLfE1hxfDuxJuEbhQvGxSlmZ1/X8awjRmAA/g3kT6M1+MO1SHj1wMtPyUfd9WpwkiqFbiwQgA==", + "requires": { + "dotenv": "16.0.3", + "dotenv-expand": "10.0.0", + "lodash": "4.17.21", + "uuid": "9.0.0" + }, + "dependencies": { + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } + } + }, "@nestjs/core": { "version": "9.3.7", "resolved": "https://registry.npmjs.org/@nestjs/core/-/core-9.3.7.tgz", @@ -9711,6 +10297,14 @@ "tslib": "2.5.0" } }, + "@nestjs/typeorm": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@nestjs/typeorm/-/typeorm-9.0.1.tgz", + "integrity": "sha512-A2BgLIPsMtmMI0bPKEf4bmzgFPsnvHqNBx3KkvaJ7hJrBQy0OqYOb+Rr06ifblKWDWS2tUPNrAFQbZjtk3PI+g==", + "requires": { + "uuid": "8.3.2" + } + }, "@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -9782,29 +10376,34 @@ "@sinonjs/commons": "^2.0.0" } }, + "@sqltools/formatter": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@sqltools/formatter/-/formatter-1.2.5.tgz", + "integrity": "sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==" + }, "@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "devOptional": true }, "@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "devOptional": true }, "@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "devOptional": true }, "@tsconfig/node16": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==", - "dev": true + "devOptional": true }, "@types/babel__core": { "version": "7.20.0", @@ -9980,7 +10579,7 @@ "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "dev": true + "devOptional": true }, "@types/parse-json": { "version": "4.0.0", @@ -10337,7 +10936,7 @@ "version": "8.8.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", - "dev": true + "devOptional": true }, "acorn-import-assertions": { "version": "1.8.0", @@ -10357,7 +10956,7 @@ "version": "8.2.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", - "dev": true + "devOptional": true }, "ajv": { "version": "8.12.0", @@ -10406,8 +11005,7 @@ "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", @@ -10417,6 +11015,11 @@ "color-convert": "^2.0.1" } }, + "any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, "anymatch": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", @@ -10427,6 +11030,11 @@ "picomatch": "^2.0.4" } }, + "app-root-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-3.1.0.tgz", + "integrity": "sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==" + }, "append-field": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", @@ -10436,13 +11044,12 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "devOptional": true }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", - "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==" }, "array-flatten": { "version": "1.1.1", @@ -10552,14 +11159,12 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, "binary-extensions": { "version": "2.2.0", @@ -10689,6 +11294,11 @@ "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" }, + "buffer-writer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/buffer-writer/-/buffer-writer-2.0.0.tgz", + "integrity": "sha512-a7ZpuTZU1TRtnwyCNW3I5dc0wWNC3VR9S++Ewyk2HHZdrO3CQJqSpd+95Us590V6AL7JqUAH2IwZ/398PmNFgw==" + }, "busboy": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", @@ -10809,6 +11419,59 @@ "restore-cursor": "^3.1.0" } }, + "cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "requires": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" + } + } + }, "cli-spinners": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.7.0.tgz", @@ -10835,7 +11498,6 @@ "version": "8.0.1", "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", @@ -10982,7 +11644,7 @@ "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "devOptional": true }, "cross-spawn": { "version": "7.0.3", @@ -10995,11 +11657,15 @@ "which": "^2.0.1" } }, + "date-fns": { + "version": "2.29.3", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.29.3.tgz", + "integrity": "sha512-dDCnyH2WnnKusqvZZ6+jA1O51Ibt8ZMRNkDZdyAyK4YfbDwa/cEmuztzG5pk6hqlp9aSBPYcjOlktquahGwGeA==" + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -11067,7 +11733,7 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "devOptional": true }, "diff-sequences": { "version": "29.4.2", @@ -11093,6 +11759,16 @@ "esutils": "^2.0.2" } }, + "dotenv": { + "version": "16.0.3", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.0.3.tgz", + "integrity": "sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==" + }, + "dotenv-expand": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", + "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==" + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -11113,8 +11789,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "encodeurl": { "version": "1.0.2", @@ -11158,8 +11833,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "escape-html": { "version": "1.0.3", @@ -11759,8 +12433,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" }, "fsevents": { "version": "2.3.2", @@ -11783,8 +12456,7 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "get-intrinsic": { "version": "1.2.0", @@ -11896,6 +12568,11 @@ "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", "dev": true }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==" + }, "html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -11931,8 +12608,7 @@ "ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" }, "ignore": { "version": "5.2.4", @@ -11970,7 +12646,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -12073,8 +12748,7 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "is-generator-fn": { "version": "2.1.0", @@ -12832,7 +13506,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "requires": { "argparse": "^2.0.1" } @@ -12934,8 +13607,7 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "lodash.memoize": { "version": "4.1.2", @@ -13016,7 +13688,7 @@ "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "devOptional": true }, "makeerror": { "version": "1.0.12", @@ -13127,8 +13799,7 @@ "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "multer": { "version": "1.4.4-lts.1", @@ -13150,6 +13821,16 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "requires": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -13245,7 +13926,6 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, "requires": { "wrappy": "1" } @@ -13342,6 +14022,11 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "packet-reader": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/packet-reader/-/packet-reader-1.0.0.tgz", + "integrity": "sha512-HAKu/fG3HpHFO0AA8WE8q2g+gBJaZ9MG7fcKk+IJPLTGAD6Psw4443l+9DGRbOIh3/aXr7Phy0TjilYivJo5XQ==" + }, "parent-module": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", @@ -13363,6 +14048,26 @@ "lines-and-columns": "^1.1.6" } }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==" + }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" + } + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -13403,6 +14108,61 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pg": { + "version": "8.9.0", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.9.0.tgz", + "integrity": "sha512-ZJM+qkEbtOHRuXjmvBtOgNOXOtLSbxiMiUVMgE4rV6Zwocy03RicCVvDXgx8l4Biwo8/qORUnEqn2fdQzV7KCg==", + "requires": { + "buffer-writer": "2.0.0", + "packet-reader": "1.0.0", + "pg-connection-string": "^2.5.0", + "pg-pool": "^3.5.2", + "pg-protocol": "^1.6.0", + "pg-types": "^2.1.0", + "pgpass": "1.x" + } + }, + "pg-connection-string": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.5.0.tgz", + "integrity": "sha512-r5o/V/ORTA6TmUnyWZR9nCj1klXCO2CEKNRlVuJptZe85QuhFayC7WeMic7ndayT5IRIR0S0xFxFi2ousartlQ==" + }, + "pg-int8": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/pg-int8/-/pg-int8-1.0.1.tgz", + "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" + }, + "pg-pool": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.5.2.tgz", + "integrity": "sha512-His3Fh17Z4eg7oANLob6ZvH8xIVen3phEZh2QuyrIl4dQSDVEabNducv6ysROKpDNPSD+12tONZVWfSgMvDD9w==", + "requires": {} + }, + "pg-protocol": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/pg-protocol/-/pg-protocol-1.6.0.tgz", + "integrity": "sha512-M+PDm637OY5WM307051+bsDia5Xej6d9IR4GwJse1qA1DIhiKlksvrneZOYQq42OM+spubpcNYEo2FcKQrDk+Q==" + }, + "pg-types": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/pg-types/-/pg-types-2.2.0.tgz", + "integrity": "sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==", + "requires": { + "pg-int8": "1.0.1", + "postgres-array": "~2.0.0", + "postgres-bytea": "~1.0.0", + "postgres-date": "~1.0.4", + "postgres-interval": "^1.1.0" + } + }, + "pgpass": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/pgpass/-/pgpass-1.0.5.tgz", + "integrity": "sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==", + "requires": { + "split2": "^4.1.0" + } + }, "picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -13475,6 +14235,29 @@ "integrity": "sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==", "dev": true }, + "postgres-array": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/postgres-array/-/postgres-array-2.0.0.tgz", + "integrity": "sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==" + }, + "postgres-bytea": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/postgres-bytea/-/postgres-bytea-1.0.0.tgz", + "integrity": "sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==" + }, + "postgres-date": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/postgres-date/-/postgres-date-1.0.7.tgz", + "integrity": "sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==" + }, + "postgres-interval": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/postgres-interval/-/postgres-interval-1.2.0.tgz", + "integrity": "sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==", + "requires": { + "xtend": "^4.0.0" + } + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -13653,8 +14436,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", - "dev": true + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==" }, "require-from-string": { "version": "2.0.2", @@ -13757,6 +14539,11 @@ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, "schema-utils": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-3.1.1.tgz", @@ -13888,6 +14675,15 @@ "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, "shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -13972,6 +14768,11 @@ "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", "dev": true }, + "split2": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/split2/-/split2-4.1.0.tgz", + "integrity": "sha512-VBiJxFkxiXRlUIeyMQi8s4hgvKCSjtknJv/LVYbrgALPwf5zSKmEwV9Lst25AkvMDnvxODugjdl6KZgwKM1WYQ==" + }, "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", @@ -14034,7 +14835,6 @@ "version": "4.2.3", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -14045,7 +14845,6 @@ "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -14202,6 +15001,22 @@ "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", "dev": true }, + "thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "requires": { + "any-promise": "^1.0.0" + } + }, + "thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "requires": { + "thenify": ">= 3.1.0 < 4" + } + }, "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", @@ -14298,7 +15113,7 @@ "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, + "devOptional": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -14414,11 +15229,93 @@ "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" }, + "typeorm": { + "version": "0.3.12", + "resolved": "https://registry.npmjs.org/typeorm/-/typeorm-0.3.12.tgz", + "integrity": "sha512-sYSxBmCf1nJLLTcYtwqZ+lQIRtLPyUoO93rHTOKk9vJCyT4UfRtU7oRsJvfvKP3nnZTD1hzz2SEy2zwPEN6OyA==", + "requires": { + "@sqltools/formatter": "^1.2.5", + "app-root-path": "^3.1.0", + "buffer": "^6.0.3", + "chalk": "^4.1.2", + "cli-highlight": "^2.1.11", + "date-fns": "^2.29.3", + "debug": "^4.3.4", + "dotenv": "^16.0.3", + "glob": "^8.1.0", + "js-yaml": "^4.1.0", + "mkdirp": "^2.1.3", + "reflect-metadata": "^0.1.13", + "sha.js": "^2.4.11", + "tslib": "^2.5.0", + "uuid": "^9.0.0", + "xml2js": "^0.4.23", + "yargs": "^17.6.2" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "requires": { + "balanced-match": "^1.0.0" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + } + }, + "minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "mkdirp": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-2.1.3.tgz", + "integrity": "sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==" + }, + "uuid": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.0.tgz", + "integrity": "sha512-MXcSTerfPa4uqyzStbRoTgt5XIe3x5+42+q1sDuy3R5MDk66URdLMOZe5aPX/SQd+kuYAh0FdP/pO28IkQyTeg==" + } + } + }, "typescript": { "version": "4.9.5", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true + "devOptional": true }, "uid": { "version": "2.0.1", @@ -14468,11 +15365,16 @@ "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==" }, + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==" + }, "v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "devOptional": true }, "v8-to-istanbul": { "version": "9.0.1", @@ -14651,7 +15553,6 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", - "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -14661,8 +15562,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" }, "write-file-atomic": { "version": "4.0.2", @@ -14674,6 +15574,20 @@ "signal-exit": "^3.0.7" } }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==" + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", @@ -14682,8 +15596,7 @@ "y18n": { "version": "5.0.8", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", - "dev": true + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==" }, "yallist": { "version": "3.1.1", @@ -14701,7 +15614,6 @@ "version": "17.6.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "dev": true, "requires": { "cliui": "^8.0.1", "escalade": "^3.1.1", @@ -14715,14 +15627,13 @@ "yargs-parser": { "version": "21.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==" }, "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "devOptional": true }, "yocto-queue": { "version": "0.1.0", diff --git a/package.json b/package.json index 3faac17..fb738ed 100644 --- a/package.json +++ b/package.json @@ -21,13 +21,17 @@ }, "dependencies": { "@nestjs/common": "^9.0.0", + "@nestjs/config": "^2.3.1", "@nestjs/core": "^9.0.0", "@nestjs/platform-express": "^9.0.0", + "@nestjs/typeorm": "^9.0.1", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "moment": "^2.29.4", + "pg": "^8.9.0", "reflect-metadata": "^0.1.13", - "rxjs": "^7.2.0" + "rxjs": "^7.2.0", + "typeorm": "^0.3.12" }, "devDependencies": { "@nestjs/cli": "^9.0.0", diff --git a/src/app.module.ts b/src/app.module.ts index 93ffdcb..902af73 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,11 +1,35 @@ import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { ConfigModule, ConfigService } from '@nestjs/config' import { AppController } from './app.controller'; import { AppService } from './app.service'; -import { eventsModule } from './events/events.module'; +import { EventosModule } from './eventos/eventos.module'; +import { ParticipanteController } from './participante/participante.controller'; +import { ParticipanteModule } from './participante/participante.module'; +import { EventoParticipanteModule } from './evento-participante/evento-participante/evento-participante.module'; @Module({ - imports: [eventsModule], - controllers: [AppController], + imports: [ + ConfigModule.forRoot({isGlobal: true}), + TypeOrmModule.forRoot({ + type: 'mariadb', + host: 'localhost', + port: 3306, + username:'root', + password: 'password', + database: 'cedetec_proyectos', + entities: [__dirname + '/**/*.entity{.ts,.js}'], + synchronize: true + }), + EventosModule, + ParticipanteModule, + EventoParticipanteModule], + controllers: [AppController, ParticipanteController], providers: [AppService], }) -export class AppModule {} +export class AppModule { + static port: number + constructor(private readonly configService: ConfigService){ + AppModule.port = this.configService.get('PORT') + } +} diff --git a/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts b/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts new file mode 100644 index 0000000..ca4ab32 --- /dev/null +++ b/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts @@ -0,0 +1,22 @@ +import { IsEmail, IsNotEmpty, IsString } from 'class-validator'; + +export class RegistrarParticipanteDto { + @IsString() + @IsNotEmpty() + nombre: string; + + @IsString() + @IsNotEmpty() + apellido_paterno: string; + + @IsString() + @IsNotEmpty() + apellido_materno: string; + + @IsEmail() + correo: string; + + @IsString() + @IsNotEmpty() + carrera: string; +} diff --git a/src/evento-participante/evento-participante/evento-participante.controller.ts b/src/evento-participante/evento-participante/evento-participante.controller.ts new file mode 100644 index 0000000..d54f2f3 --- /dev/null +++ b/src/evento-participante/evento-participante/evento-participante.controller.ts @@ -0,0 +1,15 @@ +import { Body, Controller, Post } from '@nestjs/common'; +import { RegistrarParticipanteDto } from './dto/registrarParticipanteDto.dto'; +import { EventoParticipanteService } from './evento-participante.service'; + +@Controller('evento-participante') +export class EventoParticipanteController { + constructor(private readonly eventoParticipanteService: EventoParticipanteService){} + + @Post() + regitrarParticipante(@Body() datos: RegistrarParticipanteDto){ + return this.eventoParticipanteService.registrarParticipante(datos) + } + + +} diff --git a/src/evento-participante/evento-participante/evento-participante.module.ts b/src/evento-participante/evento-participante/evento-participante.module.ts new file mode 100644 index 0000000..9888101 --- /dev/null +++ b/src/evento-participante/evento-participante/evento-participante.module.ts @@ -0,0 +1,13 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Participante } from 'src/participante/participante.entity'; +import { EventoParticipanteController } from './evento-participante.controller'; +import { EventoParticipanteService } from './evento-participante.service'; +import { EventoParticipante } from './eventoParticipante.entity'; + +@Module({ + imports:[TypeOrmModule.forFeature([EventoParticipante,Participante])], + controllers: [EventoParticipanteController], + providers: [EventoParticipanteService] +}) +export class EventoParticipanteModule {} diff --git a/src/evento-participante/evento-participante/evento-participante.service.ts b/src/evento-participante/evento-participante/evento-participante.service.ts new file mode 100644 index 0000000..db861a0 --- /dev/null +++ b/src/evento-participante/evento-participante/evento-participante.service.ts @@ -0,0 +1,34 @@ +import { ConflictException, Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; + +import { RegistrarParticipanteDto } from './dto/registrarParticipanteDto.dto'; + +import { Evento } from 'src/eventos/evento.entity'; +import { EventoParticipante } from './eventoParticipante.entity'; +import { Participante } from 'src/participante/participante.entity'; + +@Injectable() +export class EventoParticipanteService { + constructor( + @InjectRepository(Participante) + private participanteRepository: Repository, + ) {} + + participanteExiste(correo: string): Promise { + return this.participanteRepository.findOne({ where: { correo } }); + } + + registrarParticipante(registrarParticipanteDto: RegistrarParticipanteDto) { + return this.participanteExiste(registrarParticipanteDto.correo).then( + (participante) => { + if (participante) { + throw new ConflictException('Este Usuario ya existe'); + } + return this.participanteRepository.save( + this.participanteRepository.create(registrarParticipanteDto) + ); + }, + ); + } +} diff --git a/src/evento-participante/evento-participante/eventoParticipante.entity.ts b/src/evento-participante/evento-participante/eventoParticipante.entity.ts new file mode 100644 index 0000000..55a0059 --- /dev/null +++ b/src/evento-participante/evento-participante/eventoParticipante.entity.ts @@ -0,0 +1,20 @@ +import { Evento } from 'src/eventos/evento.entity'; +import { Entity, JoinColumn, ManyToOne, PrimaryColumn, PrimaryGeneratedColumn } from 'typeorm'; +import { Participante } from '../../participante/participante.entity'; + +@Entity() +export class EventoParticipante { + @PrimaryGeneratedColumn() + id_eventoParticipante: number + + @ManyToOne(() => Evento, (evento) => evento.eventoParticipantes) + @JoinColumn({ name: 'id_evento' }) + evento: Evento; + + @ManyToOne( + () => Participante, + (participante) => participante.eventosParticipante, + ) + @JoinColumn({ name: 'id_participante' }) + participante: Participante; +} diff --git a/src/eventos/dto/actualizarEvento.dto.ts b/src/eventos/dto/actualizarEvento.dto.ts new file mode 100644 index 0000000..1f5af31 --- /dev/null +++ b/src/eventos/dto/actualizarEvento.dto.ts @@ -0,0 +1,31 @@ +export class actualizarEventoDto { + nombre?: string + + evento_identificador ?: string + + fecha_inicio?: Date + + fecha_fin?: Date + + horario?: string + + requisitos?: string + + modalidad?: string + + lugar?: string + + cuota_inscripcion ?: number + + patrocinador ?: string + + tipo_acreditacion?: string + + fecha_limite_inscripcion?: Date + + tipo_evento?: string + + estado?: boolean + + descripcion?: string +} \ No newline at end of file diff --git a/src/eventos/dto/crearEvento.dto.ts b/src/eventos/dto/crearEvento.dto.ts new file mode 100644 index 0000000..f55c970 --- /dev/null +++ b/src/eventos/dto/crearEvento.dto.ts @@ -0,0 +1,32 @@ +export class crearEventoDto { + nombre: string + + evento_identificador ?: string + + fecha_inicio: Date + + fecha_fin: Date + + horario: string + + requisitos: string + + modalidad: string + + lugar: string + + cuota_inscripcion ?: number + + patrocinador ?: string + + tipo_acreditacion: string + + fecha_limite_inscripcion: Date + + tipo_evento: string + + estado: boolean + + descripcion: string +} + diff --git a/src/eventos/evento.entity.ts b/src/eventos/evento.entity.ts new file mode 100644 index 0000000..ac307e6 --- /dev/null +++ b/src/eventos/evento.entity.ts @@ -0,0 +1,65 @@ +import { EventoParticipante } from 'src/evento-participante/evento-participante/eventoParticipante.entity'; +import { + Column, + Entity, + JoinColumn, + OneToMany, + PrimaryGeneratedColumn, +} from 'typeorm'; + +@Entity() +export class Evento { + @PrimaryGeneratedColumn() + id_evento: number; + + @Column({ nullable: false }) + nombre: string; + + @Column({ nullable: true }) + evento_identificador: string; + + @Column({ nullable: false, type: 'datetime' }) + fecha_inicio: Date; + + @Column({ nullable: false, type: 'datetime' }) + fecha_fin: Date; + + @Column({ nullable: false }) + horario: string; + + @Column({ nullable: false }) + requisitos: string; + + @Column({ nullable: false }) + modalidad: string; + + @Column({ nullable: false }) + lugar: string; + + @Column({ nullable: true }) + cuota_inscripcion: number; + + @Column({ nullable: true }) + patrocinador: string; + + @Column({ nullable: false }) + tipo_acreditacion: string; + + @Column({ nullable: false, type: 'datetime' }) + fecha_limite_inscripcion: Date; + + @Column({ nullable: false }) + tipo_evento: string; + + @Column({ nullable: false }) + estado: boolean; + + @Column({ nullable: false }) + descripcion: string; + + @OneToMany( + () => EventoParticipante, + (eventoParticipante) => eventoParticipante.evento, + ) + eventoParticipantes: EventoParticipante[]; +} diff --git a/src/eventos/eventos.controller.ts b/src/eventos/eventos.controller.ts new file mode 100644 index 0000000..cae339d --- /dev/null +++ b/src/eventos/eventos.controller.ts @@ -0,0 +1,36 @@ +import { Body, Controller, Delete, Get, Param, ParseIntPipe, Patch, Post } from '@nestjs/common'; +import { actualizarEventoDto } from './dto/actualizarEvento.dto'; +import { crearEventoDto } from './dto/crearEvento.dto'; +import { Evento } from './evento.entity'; +import { EventosService } from './eventos.service'; + +@Controller('eventos') +export class EventosController { + + constructor(private readonly eventoService: EventosService){} + + @Get() + getEventos(): Promise{ + return this.eventoService.getEventos() + } + + @Get(':id') + getEventosPorId(@Param('id', ParseIntPipe)id: number):Promise{ + return this.eventoService.getEventosPorId(id) + } + + @Post() + postEvento(@Body() nuevoEvento: crearEventoDto): Promise{ + return this.eventoService.postEvento(nuevoEvento) + } + + @Patch(':id') + patchEvento(@Param('id', ParseIntPipe)id:number, @Body() actualizacion: actualizarEventoDto){ + return this.eventoService.updateEvento(id,actualizacion) + } + + @Delete(':id') + deleteEvento(@Param('id', ParseIntPipe)id: number){ + return this.eventoService.deleteEvento(id) + } +} diff --git a/src/eventos/eventos.module.ts b/src/eventos/eventos.module.ts new file mode 100644 index 0000000..21a19a9 --- /dev/null +++ b/src/eventos/eventos.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Evento } from './evento.entity'; +import { EventosController } from './eventos.controller'; +import { EventosService } from './eventos.service'; + +@Module({ + imports:[TypeOrmModule.forFeature([Evento])], + controllers:[EventosController], + providers:[EventosService] +}) +export class EventosModule {} diff --git a/src/eventos/eventos.service.ts b/src/eventos/eventos.service.ts new file mode 100644 index 0000000..4f3c3fd --- /dev/null +++ b/src/eventos/eventos.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { actualizarEventoDto } from './dto/actualizarEvento.dto'; +import { crearEventoDto } from './dto/crearEvento.dto'; +import { Evento } from './evento.entity'; + + +@Injectable() +export class EventosService { + constructor(@InjectRepository(Evento) private eventoRepository: Repository){} + + getEventos(){ + return this.eventoRepository.find() + } + + getEventosPorId(id: number){ + return this.eventoRepository.findOne({ + where:{ + id_evento: id + } + }) + } + + postEvento(evento: crearEventoDto){ + const nuevoEvento = this.eventoRepository.create(evento) + return this.eventoRepository.save(nuevoEvento) + } + + updateEvento(id: number, actualizacion: actualizarEventoDto){ + return this.eventoRepository.update({id_evento: id}, actualizacion) + } + + deleteEvento(id:number){ + return this.eventoRepository.delete({id_evento:id}) + } +} diff --git a/src/events/dto/create-event.dto.ts b/src/events/dto/create-event.dto.ts deleted file mode 100644 index a992b6e..0000000 --- a/src/events/dto/create-event.dto.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { IsString } from "class-validator"; -import { IsBoolean, IsDate, IsNumber } from "class-validator"; - -export class CreateEventDto { - @IsNumber() - id_event: number - - @IsString() - event_name: string - - @IsString() - desciption:string - - @IsNumber() - limit: number - - @IsDate() - start_date:Date - - @IsDate() - end_date:Date - - @IsDate() - regitration_deadline:Date - - @IsString() - start_time:string - - @IsString() - end_time:string - - @IsString() - requirements: string - - @IsString() - modality: string - - @IsString() - place: string - - @IsNumber() - registration_fee: number - - @IsString() - sponsor: string - - @IsString() - type_acreditation: string - - @IsString() - event_type: string - - @IsBoolean() - active: boolean -} \ No newline at end of file diff --git a/src/events/event.entity.ts b/src/events/event.entity.ts deleted file mode 100644 index 4337830..0000000 --- a/src/events/event.entity.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { Column, Entity, PrimaryGeneratedColumn } from "typeorm"; - -@Entity() -export class event { - @PrimaryGeneratedColumn() - id_evento: number - - @Column() - evento_identificador: string - - @Column() - nombre: string - - @Column() - fecha_inicio: Date - - @Column() - fecha_fin: Date - - @Column() - horario: string - - @Column() - requisitos: string - - @Column() - modalidad: string - - @Column() - lugar: string - - @Column() - cuota_inscripcion: number - - @Column() - patrocinador: string - - @Column() - tipo_acreditacion: string - - @Column() - fecha_limite_inscripcion: string - - @Column() - tipo_evento: string - - @Column() - estado: boolean - - @Column() - descripcion: string -} \ No newline at end of file diff --git a/src/events/events.controller.ts b/src/events/events.controller.ts deleted file mode 100644 index 6edc184..0000000 --- a/src/events/events.controller.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { - Body, - Controller, - Delete, - Get, - HttpCode, - HttpStatus, - Param, - Patch, - Post, -} from '@nestjs/common'; -import { CreateEventDto } from './dto/create-event.dto'; -import { event } from './event.entity'; -import { EventsService } from './events.service'; - -@Controller('events') -export class EventsController { - constructor(private readonly eventsServices: EventsService) {} - - @Get() - getEvents(): event[] { - return this.eventsServices.getEvents(); - } - - /* @Get(':id') - getEvent(@Param() params){ - return `El evento que estamos llamando es: ${params.id}` - } */ - - @Get(':id') - getEvent(@Param('id') id: string): event { - return this.eventsServices.getEvent(parseInt(id)); - } - - @Post() - createEvent(@Body() body: CreateEventDto): string { - this.eventsServices.createEvent(body); - return 'evento creado con exito'; - } - - @Delete(':id') - deleteEvent(@Param('id') id: string) { - return this.eventsServices.deleteEvent(parseInt(id)); - } - - @Patch(':id') - updateEvent(@Param('id') id: string, @Body() body) { - return `Actualizando el evento: ${id}`; - } -} diff --git a/src/events/events.module.ts b/src/events/events.module.ts deleted file mode 100644 index ce0c450..0000000 --- a/src/events/events.module.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { Module } from "@nestjs/common"; -import { EventsController } from "./events.controller"; -import { EventsService } from "./events.service"; - -@Module({ - controllers: [EventsController], - providers: [EventsService], -}) - -export class eventsModule {} diff --git a/src/events/events.service.ts b/src/events/events.service.ts deleted file mode 100644 index 9190baa..0000000 --- a/src/events/events.service.ts +++ /dev/null @@ -1,71 +0,0 @@ -import { Injectable, NotFoundException } from '@nestjs/common'; -import { event } from './event.entity'; -import * as moment from 'moment'; -import { CreateEventDto } from './dto/create-event.dto'; - -@Injectable() -export class EventsService { - private events: event[] = [ - { - id_event: 1, //id_evento - event_name: 'Platica de ejemplo', //nombre - desciption: 'Esta platica servira como ejemplo', //descripcion - limit: 30, //limite - start_date: new Date('2023-02-20'), //fecha_inicio - end_date: new Date('2023-02-20'), //fecha_fin - regitration_deadline: new Date('2023-02-19'), //fecha_limite_inscripcionme - start_time: '13:00', //hora de inicio - end_time: '14:00', //hora de fin - requirements: 'Sin requerimientos de hardware ni conocimiento', - modality: 'mixta', //modalidad - place: 'CEDETEC', //lugar - registration_fee: 0.0, //cuota_inscripcionl - sponsor: 'CIDWA', //patrocinador - type_acreditation: 'nose', //tipo_acreditacion - event_type: 'Platica', //tipo_evento - active: true, //estado - } - ]; - - getEvents(): event[]{ - return this.events - } - - getEvent(id: number): event{ - const eventGetting = this.events.find((item) => item.id_event === id); - if(!eventGetting){ - throw new NotFoundException("Evento no encontrado") - } - return eventGetting - } - - createEvent(body: CreateEventDto){ - this.events.push({ - id_event: (Math.floor(Math.random()*20000) + 1 ), - event_name: body.event_name, - desciption: body.desciption, - limit: body.limit, - start_date: body.start_date, - end_date: body.end_date, - regitration_deadline: body.regitration_deadline, - start_time: body.start_time, - end_time: body.end_time, - requirements: body.requirements, - modality: body.modality, - place: body.place, - registration_fee: body.registration_fee, - sponsor: body.sponsor, - type_acreditation: body.type_acreditation, - event_type: body.event_type, - active: body.active, - }) - } - - deleteEvent(id: number){ - const index = this.events.findIndex((event) => event.id_event === id); - if(index >= 0){ - this.events.splice(index, 1) - } - } - -} diff --git a/src/main.ts b/src/main.ts index 13cad38..744f328 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,6 +3,6 @@ import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); - await app.listen(3000); + await app.listen(AppModule.port); } bootstrap(); diff --git a/src/participante/participante.controller.ts b/src/participante/participante.controller.ts new file mode 100644 index 0000000..eb2ca4f --- /dev/null +++ b/src/participante/participante.controller.ts @@ -0,0 +1,5 @@ +import { Controller, Post } from '@nestjs/common'; +import { ParticipanteService } from './participante.service'; + +@Controller('participante') +export class ParticipanteController {} diff --git a/src/participante/participante.entity.ts b/src/participante/participante.entity.ts new file mode 100644 index 0000000..59774af --- /dev/null +++ b/src/participante/participante.entity.ts @@ -0,0 +1,44 @@ +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; +import { EventoParticipante } from 'src/evento-participante/evento-participante/eventoParticipante.entity'; + +@Entity() +export class Participante { + @PrimaryGeneratedColumn() + id_participante: number; + + @Column({ type: String, nullable: false, length: 100 }) + nombre: string; + + @Column({ nullable: false }) + apellido_paterno: string; + + @Column({ nullable: false }) + apellido_materno: string; + + @Column({ nullable: true }) + telefono: string; + + @Column({ nullable: false }) + correo: string; + + @Column({ nullable: true }) // + password: string; + + @Column({ nullable: true }) // + tipo: string; + + @Column({ nullable: true }) // + estado: string; + + @Column({ nullable: true }) + institucion_procedencia: string; + + @Column({ nullable: true }) + carrera: string; + + @OneToMany( + () => EventoParticipante, + (eventoParticipante) => eventoParticipante.participante, + ) + eventosParticipante: EventoParticipante[]; +} diff --git a/src/participante/participante.module.ts b/src/participante/participante.module.ts new file mode 100644 index 0000000..77b7436 --- /dev/null +++ b/src/participante/participante.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { ParticipanteController } from './participante.controller'; +import { Participante } from './participante.entity'; +import { ParticipanteService } from './participante.service'; + +@Module({ + imports:[TypeOrmModule.forFeature([Participante])], + controllers:[ParticipanteController], + providers: [ParticipanteService] +}) +export class ParticipanteModule {} diff --git a/src/participante/participante.service.ts b/src/participante/participante.service.ts new file mode 100644 index 0000000..4f1ae5c --- /dev/null +++ b/src/participante/participante.service.ts @@ -0,0 +1,34 @@ +import { ConflictException, Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { RegistrarParticipanteDto } from '../evento-participante/evento-participante/dto/registrarParticipanteDto.dto'; +import { Participante } from './participante.entity'; + +@Injectable() +export class ParticipanteService { + constructor( + @InjectRepository(Participante) + private participanteRepository: Repository, + ) {} + + async participanteExiste(correo: string): Promise { + /* const participante = await this.participanteRepository.findOne({ + where: { correo: correo }, + }); + return participante !== undefined; */ + return this.participanteRepository.findOne({ where: { correo } }); + } + + async registrarParticipante(registrarParticipanteDto: RegistrarParticipanteDto) { + return this.participanteExiste(registrarParticipanteDto.correo).then( + (participante) => { + if (participante) { + throw new ConflictException('Este usuario ya está registrado'); + } + return this.participanteRepository.save( + this.participanteRepository.create(), + ); + }, + ); + } +} -- 2.43.0 From d14e7e21d1dd66d0d156e040af181b27cd84aa8b Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Fri, 17 Feb 2023 15:06:59 -0600 Subject: [PATCH 04/15] intento de registrar a un participante a un evento --- .../evento-participante.controller.ts | 7 ++-- .../evento-participante.service.ts | 33 ++++++++++++++++--- .../eventoParticipante.entity.ts | 8 ++++- src/main.ts | 1 + 4 files changed, 41 insertions(+), 8 deletions(-) diff --git a/src/evento-participante/evento-participante/evento-participante.controller.ts b/src/evento-participante/evento-participante/evento-participante.controller.ts index d54f2f3..751186f 100644 --- a/src/evento-participante/evento-participante/evento-participante.controller.ts +++ b/src/evento-participante/evento-participante/evento-participante.controller.ts @@ -1,14 +1,15 @@ -import { Body, Controller, Post } from '@nestjs/common'; +import { Body, Controller, Param, ParseIntPipe, Post } from '@nestjs/common'; import { RegistrarParticipanteDto } from './dto/registrarParticipanteDto.dto'; import { EventoParticipanteService } from './evento-participante.service'; +import { EventoParticipante } from './eventoParticipante.entity'; @Controller('evento-participante') export class EventoParticipanteController { constructor(private readonly eventoParticipanteService: EventoParticipanteService){} @Post() - regitrarParticipante(@Body() datos: RegistrarParticipanteDto){ - return this.eventoParticipanteService.registrarParticipante(datos) + regitrarParticipante(@Param()id_evento:number, @Body() datos: RegistrarParticipanteDto){ + return this.eventoParticipanteService.registrarParticipante(id_evento, datos) } diff --git a/src/evento-participante/evento-participante/evento-participante.service.ts b/src/evento-participante/evento-participante/evento-participante.service.ts index db861a0..b836b82 100644 --- a/src/evento-participante/evento-participante/evento-participante.service.ts +++ b/src/evento-participante/evento-participante/evento-participante.service.ts @@ -1,4 +1,4 @@ -import { ConflictException, Injectable } from '@nestjs/common'; +import { Body, ConflictException, Injectable, Param } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; import { Repository } from 'typeorm'; @@ -7,26 +7,51 @@ import { RegistrarParticipanteDto } from './dto/registrarParticipanteDto.dto'; import { Evento } from 'src/eventos/evento.entity'; import { EventoParticipante } from './eventoParticipante.entity'; import { Participante } from 'src/participante/participante.entity'; +import { info } from 'console'; @Injectable() export class EventoParticipanteService { constructor( @InjectRepository(Participante) private participanteRepository: Repository, + @InjectRepository(EventoParticipante) + private eventoParticipanteRepository: Repository, ) {} - participanteExiste(correo: string): Promise { + participanteExiste(correo: string) { return this.participanteRepository.findOne({ where: { correo } }); } - registrarParticipante(registrarParticipanteDto: RegistrarParticipanteDto) { + registrarEnEvento( + id_evento: number, + registrarParticipanteDto: RegistrarParticipanteDto, + ) { + this.participanteExiste(registrarParticipanteDto.correo).then( + (participante) => { + let info : EventoParticipante; + + info.id_evento = id_evento + info.id_participante = participante.id_participante + + this.eventoParticipanteRepository.save( + this.eventoParticipanteRepository.create(info), + ); + }, + ); + } + + registrarParticipante( + id_evento: number, + registrarParticipanteDto: RegistrarParticipanteDto, + ) { return this.participanteExiste(registrarParticipanteDto.correo).then( (participante) => { if (participante) { + this.registrarEnEvento(id_evento, registrarParticipanteDto); throw new ConflictException('Este Usuario ya existe'); } return this.participanteRepository.save( - this.participanteRepository.create(registrarParticipanteDto) + this.participanteRepository.create(registrarParticipanteDto), ); }, ); diff --git a/src/evento-participante/evento-participante/eventoParticipante.entity.ts b/src/evento-participante/evento-participante/eventoParticipante.entity.ts index 55a0059..ce842af 100644 --- a/src/evento-participante/evento-participante/eventoParticipante.entity.ts +++ b/src/evento-participante/evento-participante/eventoParticipante.entity.ts @@ -1,5 +1,5 @@ import { Evento } from 'src/eventos/evento.entity'; -import { Entity, JoinColumn, ManyToOne, PrimaryColumn, PrimaryGeneratedColumn } from 'typeorm'; +import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn, PrimaryGeneratedColumn } from 'typeorm'; import { Participante } from '../../participante/participante.entity'; @Entity() @@ -7,6 +7,12 @@ export class EventoParticipante { @PrimaryGeneratedColumn() id_eventoParticipante: number + @Column({type: Number, nullable:false}) + id_evento: number + + @Column({type:Number, nullable:false}) + id_participante: number + @ManyToOne(() => Evento, (evento) => evento.eventoParticipantes) @JoinColumn({ name: 'id_evento' }) evento: Evento; diff --git a/src/main.ts b/src/main.ts index 744f328..d10bb48 100644 --- a/src/main.ts +++ b/src/main.ts @@ -3,6 +3,7 @@ import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); + app.enableCors() await app.listen(AppModule.port); } bootstrap(); -- 2.43.0 From 3b87fad0874793f673ab65dfa79f14e0c4721b0b Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Wed, 22 Feb 2023 16:28:12 -0600 Subject: [PATCH 05/15] =?UTF-8?q?se=20a=C3=B1adieron=20los=20controldores?= =?UTF-8?q?=20para=20autorizacion=20de=20login?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- package-lock.json | 985 ++++++++++++++++++++++++++- package.json | 9 + src/app.module.ts | 8 +- src/auth/auth.controller.ts | 25 + src/auth/auth.module.ts | 26 + src/auth/auth.service.ts | 61 ++ src/auth/dto/loginUsuario.dto.ts | 10 + src/auth/dto/registrarUsuario.dto.ts | 10 + src/auth/jwt-auth.guard.ts | 6 + src/auth/jwt.constants.ts | 3 + src/auth/jwt.strategy.ts | 19 + src/main.ts | 13 +- src/usuario/usuario.entity.ts | 16 + src/usuario/usuario.module.ts | 12 + src/usuario/usuario.service.ts | 23 + src/usuario/usuarios.controller.ts | 18 + 16 files changed, 1208 insertions(+), 36 deletions(-) create mode 100644 src/auth/auth.controller.ts create mode 100644 src/auth/auth.module.ts create mode 100644 src/auth/auth.service.ts create mode 100644 src/auth/dto/loginUsuario.dto.ts create mode 100644 src/auth/dto/registrarUsuario.dto.ts create mode 100644 src/auth/jwt-auth.guard.ts create mode 100644 src/auth/jwt.constants.ts create mode 100644 src/auth/jwt.strategy.ts create mode 100644 src/usuario/usuario.entity.ts create mode 100644 src/usuario/usuario.module.ts create mode 100644 src/usuario/usuario.service.ts create mode 100644 src/usuario/usuarios.controller.ts diff --git a/package-lock.json b/package-lock.json index 38f7f1c..0d569b0 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,14 +12,22 @@ "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.3.1", "@nestjs/core": "^9.0.0", + "@nestjs/jwt": "^10.0.2", + "@nestjs/passport": "^9.0.3", "@nestjs/platform-express": "^9.0.0", + "@nestjs/swagger": "^6.2.1", "@nestjs/typeorm": "^9.0.1", + "bcrypt": "^5.1.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "moment": "^2.29.4", + "passport": "^0.6.0", + "passport-jwt": "^4.0.1", + "passport-local": "^1.0.0", "pg": "^8.9.0", "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0", + "swagger-ui-express": "^4.6.1", "typeorm": "^0.3.12" }, "devDependencies": { @@ -29,6 +37,7 @@ "@types/express": "^4.17.13", "@types/jest": "29.2.4", "@types/node": "18.11.18", + "@types/passport-local": "^1.0.35", "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", @@ -1457,6 +1466,39 @@ "node": ">=8" } }, + "node_modules/@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "dependencies": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "bin": { + "node-pre-gyp": "bin/node-pre-gyp" + } + }, + "node_modules/@mapbox/node-pre-gyp/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/@nestjs/cli": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.2.0.tgz", @@ -1609,6 +1651,46 @@ } } }, + "node_modules/@nestjs/jwt": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.0.2.tgz", + "integrity": "sha512-MLxjCSbO7C9fN2hst5kpIhnJAgglJmrKppXAXqElB8A9ip3ZuCowMDjjmNWWJyfOzE98NV0E0iEQGE2StMUC+Q==", + "dependencies": { + "@types/jsonwebtoken": "9.0.1", + "jsonwebtoken": "9.0.0" + }, + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0" + } + }, + "node_modules/@nestjs/mapped-types": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.2.2.tgz", + "integrity": "sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==", + "peerDependencies": { + "@nestjs/common": "^7.0.8 || ^8.0.0 || ^9.0.0", + "class-transformer": "^0.2.0 || ^0.3.0 || ^0.4.0 || ^0.5.0", + "class-validator": "^0.11.1 || ^0.12.0 || ^0.13.0 || ^0.14.0", + "reflect-metadata": "^0.1.12" + }, + "peerDependenciesMeta": { + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, + "node_modules/@nestjs/passport": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-9.0.3.tgz", + "integrity": "sha512-HplSJaimEAz1IOZEu+pdJHHJhQyBOPAYWXYHfAPQvRqWtw4FJF1VXl1Qtk9dcXQX1eKytDtH+qBzNQc19GWNEg==", + "peerDependencies": { + "@nestjs/common": "^8.0.0 || ^9.0.0", + "passport": "^0.4.0 || ^0.5.0 || ^0.6.0" + } + }, "node_modules/@nestjs/platform-express": { "version": "9.3.7", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.3.7.tgz", @@ -1735,6 +1817,37 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "dev": true }, + "node_modules/@nestjs/swagger": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-6.2.1.tgz", + "integrity": "sha512-9M2vkfJHIzLqDZwvM5TEZO0MxRCvIb0xVy0LsmWwxH1lrb0z/4MhU+r2CWDhBtTccVJrKxVPiU2s3T3b9uUJbg==", + "dependencies": { + "@nestjs/mapped-types": "1.2.2", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "4.15.5" + }, + "peerDependencies": { + "@fastify/static": "^6.0.0", + "@nestjs/common": "^9.0.0", + "@nestjs/core": "^9.0.0", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/testing": { "version": "9.3.7", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.3.7.tgz", @@ -2061,6 +2174,14 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/jsonwebtoken": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", + "dependencies": { + "@types/node": "*" + } + }, "node_modules/@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -2070,8 +2191,7 @@ "node_modules/@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "devOptional": true + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "node_modules/@types/parse-json": { "version": "4.0.0", @@ -2079,6 +2199,36 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "node_modules/@types/passport": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.12.tgz", + "integrity": "sha512-QFdJ2TiAEoXfEQSNDISJR1Tm51I78CymqcBa8imbjo6dNNu+l2huDxxbDEIoFIwOSKMkOfHEikyDuZ38WwWsmw==", + "dev": true, + "dependencies": { + "@types/express": "*" + } + }, + "node_modules/@types/passport-local": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/@types/passport-local/-/passport-local-1.0.35.tgz", + "integrity": "sha512-K4eLTJ8R0yYW8TvCqkjB0pTKoqfUSdl5PfZdidTjV2ETV3604fQxtY6BHKjQWAx50WUS0lqzBvKv3LoI1ZBPeA==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/passport": "*", + "@types/passport-strategy": "*" + } + }, + "node_modules/@types/passport-strategy": { + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.35.tgz", + "integrity": "sha512-o5D19Jy2XPFoX2rKApykY15et3Apgax00RRLf0RUotPDUsYrQa7x4howLYr9El2mlUApHmCMv5CZ1IXqKFQ2+g==", + "dev": true, + "dependencies": { + "@types/express": "*", + "@types/passport": "*" + } + }, "node_modules/@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", @@ -2504,6 +2654,11 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -2555,6 +2710,17 @@ "node": ">=0.4.0" } }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -2677,6 +2843,36 @@ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" }, + "node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -2845,6 +3041,19 @@ } ] }, + "node_modules/bcrypt": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", + "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "hasInstallScript": true, + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.10", + "node-addon-api": "^5.0.0" + }, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -2919,7 +3128,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3010,6 +3218,11 @@ "ieee754": "^1.1.13" } }, + "node_modules/buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "node_modules/buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -3143,6 +3356,14 @@ "fsevents": "~2.3.2" } }, + "node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "engines": { + "node": ">=10" + } + }, "node_modules/chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -3360,6 +3581,14 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -3390,8 +3619,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "node_modules/concat-stream": { "version": "1.6.2", @@ -3412,6 +3640,11 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "node_modules/content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -3579,6 +3812,11 @@ "node": ">=0.4.0" } }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -3596,6 +3834,14 @@ "npm": "1.2.8000 || >= 1.4.16" } }, + "node_modules/detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", + "engines": { + "node": ">=8" + } + }, "node_modules/detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -3673,6 +3919,14 @@ "node": ">=12" } }, + "node_modules/ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, "node_modules/ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -4523,6 +4777,33 @@ "node": ">=14.14" } }, + "node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/fs-minipass/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fs-minipass/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -4553,6 +4834,25 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "node_modules/gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -4608,7 +4908,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -4719,6 +5018,11 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "node_modules/hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", @@ -4757,6 +5061,18 @@ "node": ">= 0.8" } }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -6049,6 +6365,40 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "dependencies": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + }, + "engines": { + "node": ">=12", + "npm": ">=6" + } + }, + "node_modules/jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dependencies": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dependencies": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "node_modules/kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -6201,7 +6551,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "dependencies": { "semver": "^6.0.0" }, @@ -6216,7 +6565,6 @@ "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, "bin": { "semver": "bin/semver.js" } @@ -6340,7 +6688,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -6356,6 +6703,42 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/minipass": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.3.tgz", + "integrity": "sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minizlib/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minizlib/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -6445,6 +6828,11 @@ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, + "node_modules/node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, "node_modules/node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -6485,6 +6873,20 @@ "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, + "node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, "node_modules/normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -6506,6 +6908,17 @@ "node": ">=8" } }, + "node_modules/npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "dependencies": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "node_modules/object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -6737,6 +7150,51 @@ "node": ">= 0.8" } }, + "node_modules/passport": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", + "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", + "dependencies": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + }, + "engines": { + "node": ">= 0.4.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/jaredhanson" + } + }, + "node_modules/passport-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", + "dependencies": { + "jsonwebtoken": "^9.0.0", + "passport-strategy": "^1.0.0" + } + }, + "node_modules/passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", + "dependencies": { + "passport-strategy": "1.x.x" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -6750,7 +7208,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -6784,6 +7241,11 @@ "node": ">=8" } }, + "node_modules/pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, "node_modules/pg": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/pg/-/pg-8.9.0.tgz", @@ -7468,7 +7930,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "dependencies": { "lru-cache": "^6.0.0" }, @@ -7483,7 +7944,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "dependencies": { "yallist": "^4.0.0" }, @@ -7494,8 +7954,7 @@ "node_modules/semver/node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/send": { "version": "0.18.0", @@ -7561,6 +8020,11 @@ "node": ">= 0.8.0" } }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "node_modules/setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -7632,8 +8096,7 @@ "node_modules/signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "node_modules/sisteransi": { "version": "1.0.5", @@ -7885,6 +8348,25 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-ui-dist": { + "version": "4.15.5", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.15.5.tgz", + "integrity": "sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==" + }, + "node_modules/swagger-ui-express": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.1.tgz", + "integrity": "sha512-Pss7YNFKNdq66XKNjRe4IRXKKYNx/LvOSml9TdrZ8/78UpxUHIp9JoXpXWA5Z4L+SCmX63DZ9IPlQ8nnRuncvA==", + "dependencies": { + "swagger-ui-dist": ">=4.11.0" + }, + "engines": { + "node": ">= v0.10.32" + }, + "peerDependencies": { + "express": ">=4.0.0" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -7903,6 +8385,38 @@ "node": ">=6" } }, + "node_modules/tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/tar/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, "node_modules/terser": { "version": "5.16.3", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", @@ -8814,6 +9328,14 @@ "node": ">= 8" } }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "node_modules/windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", @@ -10109,6 +10631,32 @@ "resolved": "https://registry.npmjs.org/@lukeed/csprng/-/csprng-1.0.1.tgz", "integrity": "sha512-uSvJdwQU5nK+Vdf6zxcWAY2A8r7uqe+gePwLWzJ+fsQehq18pc0I2hJKwypZ2aLM90+Er9u1xn4iLJPZ+xlL4g==" }, + "@mapbox/node-pre-gyp": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.10.tgz", + "integrity": "sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==", + "requires": { + "detect-libc": "^2.0.0", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.7", + "nopt": "^5.0.0", + "npmlog": "^5.0.1", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.11" + }, + "dependencies": { + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "requires": { + "glob": "^7.1.3" + } + } + } + }, "@nestjs/cli": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/@nestjs/cli/-/cli-9.2.0.tgz", @@ -10199,6 +10747,27 @@ "uid": "2.0.1" } }, + "@nestjs/jwt": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@nestjs/jwt/-/jwt-10.0.2.tgz", + "integrity": "sha512-MLxjCSbO7C9fN2hst5kpIhnJAgglJmrKppXAXqElB8A9ip3ZuCowMDjjmNWWJyfOzE98NV0E0iEQGE2StMUC+Q==", + "requires": { + "@types/jsonwebtoken": "9.0.1", + "jsonwebtoken": "9.0.0" + } + }, + "@nestjs/mapped-types": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@nestjs/mapped-types/-/mapped-types-1.2.2.tgz", + "integrity": "sha512-3dHxLXs3M0GPiriAcCFFJQHoDFUuzTD5w6JDhE7TyfT89YKpe6tcCCIqOZWdXmt9AZjjK30RkHRSFF+QEnWFQg==", + "requires": {} + }, + "@nestjs/passport": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@nestjs/passport/-/passport-9.0.3.tgz", + "integrity": "sha512-HplSJaimEAz1IOZEu+pdJHHJhQyBOPAYWXYHfAPQvRqWtw4FJF1VXl1Qtk9dcXQX1eKytDtH+qBzNQc19GWNEg==", + "requires": {} + }, "@nestjs/platform-express": { "version": "9.3.7", "resolved": "https://registry.npmjs.org/@nestjs/platform-express/-/platform-express-9.3.7.tgz", @@ -10288,6 +10857,18 @@ } } }, + "@nestjs/swagger": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-6.2.1.tgz", + "integrity": "sha512-9M2vkfJHIzLqDZwvM5TEZO0MxRCvIb0xVy0LsmWwxH1lrb0z/4MhU+r2CWDhBtTccVJrKxVPiU2s3T3b9uUJbg==", + "requires": { + "@nestjs/mapped-types": "1.2.2", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "3.2.0", + "swagger-ui-dist": "4.15.5" + } + }, "@nestjs/testing": { "version": "9.3.7", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-9.3.7.tgz", @@ -10569,6 +11150,14 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/jsonwebtoken": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.1.tgz", + "integrity": "sha512-c5ltxazpWabia/4UzhIoaDcIza4KViOQhdbjRlfcIGVnsE3c3brkz9Z+F/EeJIECOQP7W7US2hNE930cWWkPiw==", + "requires": { + "@types/node": "*" + } + }, "@types/mime": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-3.0.1.tgz", @@ -10578,8 +11167,7 @@ "@types/node": { "version": "18.11.18", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.18.tgz", - "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==", - "devOptional": true + "integrity": "sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==" }, "@types/parse-json": { "version": "4.0.0", @@ -10587,6 +11175,36 @@ "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, + "@types/passport": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/@types/passport/-/passport-1.0.12.tgz", + "integrity": "sha512-QFdJ2TiAEoXfEQSNDISJR1Tm51I78CymqcBa8imbjo6dNNu+l2huDxxbDEIoFIwOSKMkOfHEikyDuZ38WwWsmw==", + "dev": true, + "requires": { + "@types/express": "*" + } + }, + "@types/passport-local": { + "version": "1.0.35", + "resolved": "https://registry.npmjs.org/@types/passport-local/-/passport-local-1.0.35.tgz", + "integrity": "sha512-K4eLTJ8R0yYW8TvCqkjB0pTKoqfUSdl5PfZdidTjV2ETV3604fQxtY6BHKjQWAx50WUS0lqzBvKv3LoI1ZBPeA==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/passport": "*", + "@types/passport-strategy": "*" + } + }, + "@types/passport-strategy": { + "version": "0.2.35", + "resolved": "https://registry.npmjs.org/@types/passport-strategy/-/passport-strategy-0.2.35.tgz", + "integrity": "sha512-o5D19Jy2XPFoX2rKApykY15et3Apgax00RRLf0RUotPDUsYrQa7x4howLYr9El2mlUApHmCMv5CZ1IXqKFQ2+g==", + "dev": true, + "requires": { + "@types/express": "*", + "@types/passport": "*" + } + }, "@types/prettier": { "version": "2.7.2", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.2.tgz", @@ -10923,6 +11541,11 @@ "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", "dev": true }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==" + }, "accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -10958,6 +11581,14 @@ "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", "devOptional": true }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "requires": { + "debug": "4" + } + }, "ajv": { "version": "8.12.0", "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", @@ -11040,6 +11671,32 @@ "resolved": "https://registry.npmjs.org/append-field/-/append-field-1.0.0.tgz", "integrity": "sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==" }, + "aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==" + }, + "are-we-there-yet": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-2.0.0.tgz", + "integrity": "sha512-Ci/qENmwHnsYo9xKIcUJN5LeDKdJ6R1Z1j9V/J5wyq8nh/mYPEpIKJbBZXtZjG04HiK7zV/p6Vs9952MrMeUIw==", + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -11166,6 +11823,15 @@ "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" }, + "bcrypt": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bcrypt/-/bcrypt-5.1.0.tgz", + "integrity": "sha512-RHBS7HI5N5tEnGTmtR/pppX0mmDSBpQ4aCBsj7CEQfYXDcO74A8sIBYcJMuCsis2E81zDxeENYhv66oZwLiA+Q==", + "requires": { + "@mapbox/node-pre-gyp": "^1.0.10", + "node-addon-api": "^5.0.0" + } + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -11234,7 +11900,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -11289,6 +11954,11 @@ "ieee754": "^1.1.13" } }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==" + }, "buffer-from": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", @@ -11377,6 +12047,11 @@ "readdirp": "~3.6.0" } }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==" + }, "chrome-trace-event": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", @@ -11535,6 +12210,11 @@ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==" + }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -11559,8 +12239,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", - "dev": true + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" }, "concat-stream": { "version": "1.6.2", @@ -11578,6 +12257,11 @@ "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==" + }, "content-disposition": { "version": "0.5.4", "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", @@ -11703,6 +12387,11 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -11713,6 +12402,11 @@ "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==" }, + "detect-libc": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.1.tgz", + "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==" + }, "detect-newline": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", @@ -11769,6 +12463,14 @@ "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz", "integrity": "sha512-GopVGCpVS1UKH75VKHGuQFqS1Gusej0z4FyQkPdwjil2gNIv+LNsqBlboOzpJFZKVT95GkCyWJbBSdFEFUWI2A==" }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, "ee-first": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", @@ -12424,6 +13126,29 @@ "universalify": "^2.0.0" } }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "requires": { + "minipass": "^3.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "fs-monkey": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/fs-monkey/-/fs-monkey-1.0.3.tgz", @@ -12447,6 +13172,22 @@ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" }, + "gauge": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-3.0.2.tgz", + "integrity": "sha512-+5J6MS/5XksCuXq++uFRsnUd7Ovu1XenbeuIuNRJxYWjgQbPuFhT14lAvsWfqfAmnwluf1OwMjz39HjfLPci0Q==", + "requires": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -12484,7 +13225,6 @@ "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -12562,6 +13302,11 @@ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==" }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==" + }, "hexoid": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", @@ -12591,6 +13336,15 @@ "toidentifier": "1.0.1" } }, + "https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "requires": { + "agent-base": "6", + "debug": "4" + } + }, "human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -13556,6 +14310,36 @@ "universalify": "^2.0.0" } }, + "jsonwebtoken": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", + "integrity": "sha512-tuGfYXxkQGDPnLJ7SibiQgVgeDgfbPq2k2ICcbgqW8WxWLBAxKQM/ZCu/IT8SOSwmaYl4dpTFCW5xZv7YbbWUw==", + "requires": { + "jws": "^3.2.2", + "lodash": "^4.17.21", + "ms": "^2.1.1", + "semver": "^7.3.8" + } + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, "kleur": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", @@ -13671,7 +14455,6 @@ "version": "3.1.0", "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", - "dev": true, "requires": { "semver": "^6.0.0" }, @@ -13679,8 +14462,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } }, @@ -13773,7 +14555,6 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -13783,6 +14564,35 @@ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, + "minipass": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-4.0.3.tgz", + "integrity": "sha512-OW2r4sQ0sI+z5ckEt5c1Tri4xTgZwYDxpE54eqWlQloQRoWtXjqt9udJ5Z4dSv7wK+nfFI7FRXyCpBSft+gpFw==" + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "dependencies": { + "minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "requires": { + "yallist": "^4.0.0" + } + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "mkdirp": { "version": "0.5.6", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", @@ -13860,6 +14670,11 @@ "integrity": "sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==", "dev": true }, + "node-addon-api": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-5.1.0.tgz", + "integrity": "sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA==" + }, "node-emoji": { "version": "1.11.0", "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", @@ -13889,6 +14704,14 @@ "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", "dev": true }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "requires": { + "abbrev": "1" + } + }, "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", @@ -13904,6 +14727,17 @@ "path-key": "^3.0.0" } }, + "npmlog": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", + "integrity": "sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==", + "requires": { + "are-we-there-yet": "^2.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -14073,6 +14907,38 @@ "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==" }, + "passport": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/passport/-/passport-0.6.0.tgz", + "integrity": "sha512-0fe+p3ZnrWRW74fe8+SvCyf4a3Pb2/h7gFkQ8yTJpAO50gDzlfjZUZTO1k5Eg9kUct22OxHLqDZoKUWRHOh9ug==", + "requires": { + "passport-strategy": "1.x.x", + "pause": "0.0.1", + "utils-merge": "^1.0.1" + } + }, + "passport-jwt": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/passport-jwt/-/passport-jwt-4.0.1.tgz", + "integrity": "sha512-UCKMDYhNuGOBE9/9Ycuoyh7vP6jpeTp/+sfMJl7nLff/t6dps+iaeE0hhNkKN8/HZHcJ7lCdOyDxHdDoxoSvdQ==", + "requires": { + "jsonwebtoken": "^9.0.0", + "passport-strategy": "^1.0.0" + } + }, + "passport-local": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-local/-/passport-local-1.0.0.tgz", + "integrity": "sha512-9wCE6qKznvf9mQYYbgJ3sVOHmCWoUNMVFoZzNoznmISbhnNNPhN9xfY3sLmScHMetEJeoY7CXwfhCe7argfQow==", + "requires": { + "passport-strategy": "1.x.x" + } + }, + "passport-strategy": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/passport-strategy/-/passport-strategy-1.0.0.tgz", + "integrity": "sha512-CB97UUvDKJde2V0KDWWB3lyf6PC3FaZP7YxZ2G8OAtn9p4HI9j9JLP9qjOGZFvyl8uwNT8qM+hGnz/n16NI7oA==" + }, "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -14082,8 +14948,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==" }, "path-key": { "version": "3.1.1", @@ -14108,6 +14973,11 @@ "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true }, + "pause": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/pause/-/pause-0.0.1.tgz", + "integrity": "sha512-KG8UEiEVkR3wGEb4m5yZkVCzigAD+cVEJck2CzYZO37ZGJfctvVptVO192MwrtPhzONn6go8ylnOdMhKqi4nfg==" + }, "pg": { "version": "8.9.0", "resolved": "https://registry.npmjs.org/pg/-/pg-8.9.0.tgz", @@ -14586,7 +15456,6 @@ "version": "7.3.8", "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", - "dev": true, "requires": { "lru-cache": "^6.0.0" }, @@ -14595,7 +15464,6 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, "requires": { "yallist": "^4.0.0" } @@ -14603,8 +15471,7 @@ "yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" } } }, @@ -14670,6 +15537,11 @@ "send": "0.18.0" } }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==" + }, "setprototypeof": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", @@ -14723,8 +15595,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "sisteransi": { "version": "1.0.5", @@ -14917,6 +15788,19 @@ "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, + "swagger-ui-dist": { + "version": "4.15.5", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-4.15.5.tgz", + "integrity": "sha512-V3eIa28lwB6gg7/wfNvAbjwJYmDXy1Jo1POjyTzlB6wPcHiGlRxq39TSjYGVjQrUSAzpv+a7nzp7mDxgNy57xA==" + }, + "swagger-ui-express": { + "version": "4.6.1", + "resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-4.6.1.tgz", + "integrity": "sha512-Pss7YNFKNdq66XKNjRe4IRXKKYNx/LvOSml9TdrZ8/78UpxUHIp9JoXpXWA5Z4L+SCmX63DZ9IPlQ8nnRuncvA==", + "requires": { + "swagger-ui-dist": ">=4.11.0" + } + }, "symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -14929,6 +15813,31 @@ "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", "dev": true }, + "tar": { + "version": "6.1.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.13.tgz", + "integrity": "sha512-jdIBIN6LTIe2jqzay/2vtYLlBHa3JF42ot3h1dW8Q0PaAG4v8rm0cvpVePtau5C6OKXGGcgO9q2AMNSWxiLqKw==", + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^4.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + } + } + }, "terser": { "version": "5.16.3", "resolved": "https://registry.npmjs.org/terser/-/terser-5.16.3.tgz", @@ -15500,6 +16409,14 @@ "isexe": "^2.0.0" } }, + "wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "requires": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, "windows-release": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-4.0.0.tgz", diff --git a/package.json b/package.json index fb738ed..29ad066 100644 --- a/package.json +++ b/package.json @@ -23,14 +23,22 @@ "@nestjs/common": "^9.0.0", "@nestjs/config": "^2.3.1", "@nestjs/core": "^9.0.0", + "@nestjs/jwt": "^10.0.2", + "@nestjs/passport": "^9.0.3", "@nestjs/platform-express": "^9.0.0", + "@nestjs/swagger": "^6.2.1", "@nestjs/typeorm": "^9.0.1", + "bcrypt": "^5.1.0", "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "moment": "^2.29.4", + "passport": "^0.6.0", + "passport-jwt": "^4.0.1", + "passport-local": "^1.0.0", "pg": "^8.9.0", "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0", + "swagger-ui-express": "^4.6.1", "typeorm": "^0.3.12" }, "devDependencies": { @@ -40,6 +48,7 @@ "@types/express": "^4.17.13", "@types/jest": "29.2.4", "@types/node": "18.11.18", + "@types/passport-local": "^1.0.35", "@types/supertest": "^2.0.11", "@typescript-eslint/eslint-plugin": "^5.0.0", "@typescript-eslint/parser": "^5.0.0", diff --git a/src/app.module.ts b/src/app.module.ts index 902af73..4edb59b 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -7,6 +7,10 @@ import { EventosModule } from './eventos/eventos.module'; import { ParticipanteController } from './participante/participante.controller'; import { ParticipanteModule } from './participante/participante.module'; import { EventoParticipanteModule } from './evento-participante/evento-participante/evento-participante.module'; +import { UsuarioModule } from './usuario/usuario.module'; +import { AuthModule } from './auth/auth.module'; +import { PassportModule } from '@nestjs/passport'; +import { JwtModule } from '@nestjs/jwt'; @Module({ imports: [ @@ -23,7 +27,9 @@ import { EventoParticipanteModule } from './evento-participante/evento-participa }), EventosModule, ParticipanteModule, - EventoParticipanteModule], + EventoParticipanteModule, + UsuarioModule, + AuthModule, PassportModule, JwtModule.register({})], controllers: [AppController, ParticipanteController], providers: [AppService], }) diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts new file mode 100644 index 0000000..4b43b6c --- /dev/null +++ b/src/auth/auth.controller.ts @@ -0,0 +1,25 @@ +import { Body, Controller, Post, Request, UseGuards } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Usuario } from 'src/usuario/usuario.entity'; +import { Repository } from 'typeorm'; +import { AuthService } from './auth.service'; +import { LoginUsuarioDto } from './dto/loginUsuario.dto'; +import { RegistrarUsuarioDto } from './dto/registrarUsuario.dto'; + +@Controller('auth') +export class AuthController { + constructor( + private authService: AuthService, + ) /* @InjectRepository(Usuario) private usuarioRepository: Repository */ {} + + @Post('registro') + registrarUsuario(@Body() registrarUsuario: RegistrarUsuarioDto) { + return this.authService.registrar(registrarUsuario); + } + + @Post('login') + login(@Body() LoginUsuario: LoginUsuarioDto) { + return this.authService.login(LoginUsuario); + } +} diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts new file mode 100644 index 0000000..2e3c76d --- /dev/null +++ b/src/auth/auth.module.ts @@ -0,0 +1,26 @@ +import { Module } from '@nestjs/common'; +import { PassportModule } from '@nestjs/passport'; +import { UsuarioModule } from 'src/usuario/usuario.module'; +import { AuthService } from './auth.service'; +import { jwtStrategy } from './jwt.strategy'; +import { AuthController } from './auth.controller'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Usuario } from 'src/usuario/usuario.entity'; +import { UsuarioService } from 'src/usuario/usuario.service'; +import { JwtModule } from '@nestjs/jwt'; +import { jwtConstants } from './jwt.constants'; + +@Module({ + imports: [ + UsuarioModule, + PassportModule, + TypeOrmModule.forFeature([Usuario]), + JwtModule.register({ + secret: jwtConstants.secret, + signOptions: { expiresIn: '5h' }, + }), + ], + providers: [AuthService, jwtStrategy, UsuarioService, jwtStrategy], + controllers: [AuthController], +}) +export class AuthModule {} diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts new file mode 100644 index 0000000..2d0ab7c --- /dev/null +++ b/src/auth/auth.service.ts @@ -0,0 +1,61 @@ +import { HttpException, Injectable } from '@nestjs/common'; +import { UsuarioService } from 'src/usuario/usuario.service'; +import { JwtService } from '@nestjs/jwt'; +import * as bcrypt from 'bcrypt'; +import { RegistrarUsuarioDto } from './dto/registrarUsuario.dto'; +import { hash } from 'bcrypt'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Usuario } from 'src/usuario/usuario.entity'; +import { Repository } from 'typeorm'; +import { LoginUsuarioDto } from './dto/loginUsuario.dto'; +import { compare } from 'bcrypt'; + +@Injectable() +export class AuthService { + constructor( + private jwtService: JwtService, + private readonly usuarioService: UsuarioService, + @InjectRepository(Usuario) private usuarioRepository: Repository, + ) {} + + async registrar(registrarUsuario: RegistrarUsuarioDto) { + + const { email, password } = registrarUsuario; + + const plainToHash = await hash(password, 10); + + if (await this.usuarioRepository.findOne({ where: { email } })) + throw new HttpException('usuario existe', 403); + + registrarUsuario = { ...registrarUsuario, password: plainToHash }; + + return this.usuarioRepository.save( + this.usuarioRepository.create(registrarUsuario), + ); + } + + + async login(loginUsuario: LoginUsuarioDto) { + const { email, password } = loginUsuario; + + const usuario = await this.usuarioRepository.findOne({ where: { email } }); + + if (!usuario) throw new HttpException('Usuario no encontrado', 404); + + const checkPassword = await compare(password, (await usuario).password); + + if (!checkPassword) throw new HttpException('Contraseña incorrecta', 403); + + const payload = { id_usuario: usuario.id_usuario, name: usuario.name }; + const token = this.jwtService.sign(payload); //firma el token + + const data = { + usuario: usuario.name, + id: usuario.id_usuario, + email: usuario.email, + token, + }; + + return data; + } +} diff --git a/src/auth/dto/loginUsuario.dto.ts b/src/auth/dto/loginUsuario.dto.ts new file mode 100644 index 0000000..c327256 --- /dev/null +++ b/src/auth/dto/loginUsuario.dto.ts @@ -0,0 +1,10 @@ +import { IsEmail, MaxLength, MinLength } from "class-validator"; + +export class LoginUsuarioDto { + @IsEmail() + email: string + + @MinLength(10) + @MaxLength(15) + password: string +} \ No newline at end of file diff --git a/src/auth/dto/registrarUsuario.dto.ts b/src/auth/dto/registrarUsuario.dto.ts new file mode 100644 index 0000000..464ef2c --- /dev/null +++ b/src/auth/dto/registrarUsuario.dto.ts @@ -0,0 +1,10 @@ +import { PartialType } from "@nestjs/swagger"; +import { IsNotEmpty } from "class-validator"; +import { LoginUsuarioDto } from "./loginUsuario.dto"; + + +export class RegistrarUsuarioDto extends PartialType(LoginUsuarioDto){ + @IsNotEmpty() + name: string + +} \ No newline at end of file diff --git a/src/auth/jwt-auth.guard.ts b/src/auth/jwt-auth.guard.ts new file mode 100644 index 0000000..6a2e62e --- /dev/null +++ b/src/auth/jwt-auth.guard.ts @@ -0,0 +1,6 @@ + +import { Injectable } from '@nestjs/common'; +import { AuthGuard } from '@nestjs/passport'; + +@Injectable() +export class JwtAuthGuard extends AuthGuard('jwt') {} diff --git a/src/auth/jwt.constants.ts b/src/auth/jwt.constants.ts new file mode 100644 index 0000000..5f47145 --- /dev/null +++ b/src/auth/jwt.constants.ts @@ -0,0 +1,3 @@ +export const jwtConstants = { + secret: "SemillaSecreta" +} \ No newline at end of file diff --git a/src/auth/jwt.strategy.ts b/src/auth/jwt.strategy.ts new file mode 100644 index 0000000..6593e36 --- /dev/null +++ b/src/auth/jwt.strategy.ts @@ -0,0 +1,19 @@ +import { PassportStrategy } from '@nestjs/passport'; +import { Injectable, UnauthorizedException } from '@nestjs/common'; +import { ExtractJwt, Strategy } from 'passport-jwt'; +import { jwtConstants } from './jwt.constants'; + +@Injectable() +export class jwtStrategy extends PassportStrategy(Strategy) { + constructor() { + super({ + jwtFromRequest: ExtractJwt.fromAuthHeaderAsBearerToken(), + ignoreExpiration: false, + secretOrKey: jwtConstants.secret, + }); + } + + async validate(payload: any) { + return { userId: payload.sub , username: payload.username }; + } +} diff --git a/src/main.ts b/src/main.ts index d10bb48..2837580 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,9 +1,20 @@ import { NestFactory } from '@nestjs/core'; +import { DocumentBuilder, SwaggerModule } from '@nestjs/swagger'; import { AppModule } from './app.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); - app.enableCors() + + const config = new DocumentBuilder() + .addBearerAuth() + .setTitle('Documentacion') + .setDescription('des') + .setVersion('1.0') + .build(); + const document = SwaggerModule.createDocument(app, config); + SwaggerModule.setup('api', app, document); + + app.enableCors(); await app.listen(AppModule.port); } bootstrap(); diff --git a/src/usuario/usuario.entity.ts b/src/usuario/usuario.entity.ts new file mode 100644 index 0000000..ba268cc --- /dev/null +++ b/src/usuario/usuario.entity.ts @@ -0,0 +1,16 @@ +import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class Usuario { + @PrimaryGeneratedColumn() + id_usuario: number; + + @Column({ nullable: false }) + name: string; + + @Column({ nullable: false }) + password: string; + + @Column({nullable:false}) + email:string +} diff --git a/src/usuario/usuario.module.ts b/src/usuario/usuario.module.ts new file mode 100644 index 0000000..02216b9 --- /dev/null +++ b/src/usuario/usuario.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; +import { UsuarioService } from './usuario.service'; +import { UsuarioController } from './usuarios.controller'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Usuario } from './usuario.entity'; + +@Module({ + imports:[TypeOrmModule.forFeature([Usuario])], + providers: [UsuarioService], + controllers: [UsuarioController] +}) +export class UsuarioModule {} diff --git a/src/usuario/usuario.service.ts b/src/usuario/usuario.service.ts new file mode 100644 index 0000000..4b3680c --- /dev/null +++ b/src/usuario/usuario.service.ts @@ -0,0 +1,23 @@ +import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Usuario } from './usuario.entity'; + +@Injectable() +export class UsuarioService { + constructor( + @InjectRepository(Usuario) private usuarioRepository: Repository, + ) {} + + getUsuarios(){ + return this.usuarioRepository.find() + } + + getUsuario(email: string) { + return this.usuarioRepository.findOne({ + where: { + email, + }, + }); + } +} diff --git a/src/usuario/usuarios.controller.ts b/src/usuario/usuarios.controller.ts new file mode 100644 index 0000000..f5aa574 --- /dev/null +++ b/src/usuario/usuarios.controller.ts @@ -0,0 +1,18 @@ +import { Controller, Get, UseGuards } from '@nestjs/common'; +import { ApiBearerAuth } from '@nestjs/swagger'; +import { JwtAuthGuard } from 'src/auth/jwt-auth.guard'; +import { Usuario } from './usuario.entity'; +import { UsuarioService } from './usuario.service'; + +@ApiBearerAuth() +@Controller('usuarios') +export class UsuarioController { + + constructor(private readonly usuarioService: UsuarioService){} + + @UseGuards(JwtAuthGuard) + @Get() + getUsuarios(): Promise{ + return this.usuarioService.getUsuarios() + } +} -- 2.43.0 From 7abc8d0134038a4da3ea8097b5f5f59c38364828 Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Fri, 24 Feb 2023 15:35:23 -0600 Subject: [PATCH 06/15] linea jwt --- src/auth/auth.service.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 2d0ab7c..be20860 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -9,6 +9,7 @@ import { Usuario } from 'src/usuario/usuario.entity'; import { Repository } from 'typeorm'; import { LoginUsuarioDto } from './dto/loginUsuario.dto'; import { compare } from 'bcrypt'; +import { jwtConstants } from './jwt.constants'; @Injectable() export class AuthService { -- 2.43.0 From 82515998164bda0a4f079c15e274ab9a03be214d Mon Sep 17 00:00:00 2001 From: JorgeMike <119615322+JorgeMike@users.noreply.github.com> Date: Mon, 27 Feb 2023 14:01:13 -0600 Subject: [PATCH 07/15] creacion de eventos, registro, eliminacion de eventos, login --- .env | 3 +- src/app.module.ts | 30 +++++--- src/auth/dto/registrarUsuario.dto.ts | 22 ++++-- .../dto/registrarEnEvento.dto.ts | 15 ++++ .../dto/registrarParticipanteDto.dto.ts | 6 +- .../evento-participante.controller.ts | 6 +- .../evento-participante.service.ts | 40 ++++++----- src/eventos/dto/actualizarEvento.dto.ts | 43 ++++-------- src/eventos/dto/crearEvento.dto.ts | 44 ++++-------- src/eventos/evento.entity.ts | 54 ++++++++------- src/eventos/eventos.controller.ts | 4 +- src/eventos/eventos.module.ts | 3 +- src/eventos/eventos.service.ts | 68 +++++++++++++------ 13 files changed, 190 insertions(+), 148 deletions(-) create mode 100644 src/evento-participante/evento-participante/dto/registrarEnEvento.dto.ts diff --git a/.env b/.env index 25debad..2cd7493 100644 --- a/.env +++ b/.env @@ -2,8 +2,9 @@ PORT=5089 DB_HOST=localhost DB_USER=root -DB_PASS=password +DB_PASSWORD=Dosmiluno2001 DB_NAME=cedetec_proyectos +DB_PORT=3306 SALT_ROUNDS = 10 diff --git a/src/app.module.ts b/src/app.module.ts index 4edb59b..363a1c5 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -11,19 +11,29 @@ import { UsuarioModule } from './usuario/usuario.module'; import { AuthModule } from './auth/auth.module'; import { PassportModule } from '@nestjs/passport'; import { JwtModule } from '@nestjs/jwt'; +import { Evento } from './eventos/evento.entity'; +import { Participante } from './participante/participante.entity'; +import { EventoParticipante } from './evento-participante/evento-participante/eventoParticipante.entity'; +import { Usuario } from './usuario/usuario.entity'; @Module({ imports: [ - ConfigModule.forRoot({isGlobal: true}), - TypeOrmModule.forRoot({ - type: 'mariadb', - host: 'localhost', - port: 3306, - username:'root', - password: 'password', - database: 'cedetec_proyectos', - entities: [__dirname + '/**/*.entity{.ts,.js}'], - synchronize: true + ConfigModule.forRoot({ + envFilePath: '.env', + isGlobal: true}), + TypeOrmModule.forRootAsync({ + imports:[ConfigModule], + inject:[ConfigService], + useFactory: async (configService: ConfigService) => ({ + type: 'mariadb', + host: configService.get('DB_HOST'), + port: configService.get('DB_PORT'), + username: configService.get('DB_USER'), + password: configService.get('DB_PASSWORD'), + database: configService.get('DB_NAME'), + entities: [Evento, Participante, EventoParticipante, Usuario], + synchronize: true + }) }), EventosModule, ParticipanteModule, diff --git a/src/auth/dto/registrarUsuario.dto.ts b/src/auth/dto/registrarUsuario.dto.ts index 464ef2c..eafb987 100644 --- a/src/auth/dto/registrarUsuario.dto.ts +++ b/src/auth/dto/registrarUsuario.dto.ts @@ -1,10 +1,18 @@ -import { PartialType } from "@nestjs/swagger"; -import { IsNotEmpty } from "class-validator"; -import { LoginUsuarioDto } from "./loginUsuario.dto"; +import { PartialType } from '@nestjs/swagger'; +import { IsEmail, IsNotEmpty, MaxLength, MinLength } from 'class-validator'; +import { LoginUsuarioDto } from './loginUsuario.dto'; +export class RegistrarUsuarioDto extends PartialType(LoginUsuarioDto) { + @IsNotEmpty() + name: string; -export class RegistrarUsuarioDto extends PartialType(LoginUsuarioDto){ - @IsNotEmpty() - name: string + @IsNotEmpty() + lastName: string; -} \ No newline at end of file + @IsEmail() + email: string; + + @MinLength(10) + @MaxLength(15) + password: string; +} diff --git a/src/evento-participante/evento-participante/dto/registrarEnEvento.dto.ts b/src/evento-participante/evento-participante/dto/registrarEnEvento.dto.ts new file mode 100644 index 0000000..8d86df3 --- /dev/null +++ b/src/evento-participante/evento-participante/dto/registrarEnEvento.dto.ts @@ -0,0 +1,15 @@ +import { IsNotEmpty, IsNumber } from "class-validator" + +export class registrarEnEvento { + @IsNumber() + @IsNotEmpty() + id_eventoParticipante: number + + @IsNumber() + @IsNotEmpty() + id_evento: number + + @IsNumber() + @IsNotEmpty() + id_participante: number +} \ No newline at end of file diff --git a/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts b/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts index ca4ab32..7ab0048 100644 --- a/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts +++ b/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts @@ -13,10 +13,10 @@ export class RegistrarParticipanteDto { @IsNotEmpty() apellido_materno: string; - @IsEmail() - correo: string; - @IsString() @IsNotEmpty() carrera: string; + + @IsEmail() + correo: string; } diff --git a/src/evento-participante/evento-participante/evento-participante.controller.ts b/src/evento-participante/evento-participante/evento-participante.controller.ts index 751186f..9af94da 100644 --- a/src/evento-participante/evento-participante/evento-participante.controller.ts +++ b/src/evento-participante/evento-participante/evento-participante.controller.ts @@ -7,9 +7,9 @@ import { EventoParticipante } from './eventoParticipante.entity'; export class EventoParticipanteController { constructor(private readonly eventoParticipanteService: EventoParticipanteService){} - @Post() - regitrarParticipante(@Param()id_evento:number, @Body() datos: RegistrarParticipanteDto){ - return this.eventoParticipanteService.registrarParticipante(id_evento, datos) + @Post(':id') + regitrarParticipante(@Param("id", ParseIntPipe)id: number, @Body() datos: RegistrarParticipanteDto){ + return this.eventoParticipanteService.registrarParticipante(id, datos) } diff --git a/src/evento-participante/evento-participante/evento-participante.service.ts b/src/evento-participante/evento-participante/evento-participante.service.ts index b836b82..2908175 100644 --- a/src/evento-participante/evento-participante/evento-participante.service.ts +++ b/src/evento-participante/evento-participante/evento-participante.service.ts @@ -8,6 +8,7 @@ import { Evento } from 'src/eventos/evento.entity'; import { EventoParticipante } from './eventoParticipante.entity'; import { Participante } from 'src/participante/participante.entity'; import { info } from 'console'; +import { registrarEnEvento } from './dto/registrarEnEvento.dto'; @Injectable() export class EventoParticipanteService { @@ -22,21 +23,22 @@ export class EventoParticipanteService { return this.participanteRepository.findOne({ where: { correo } }); } - registrarEnEvento( + async registrarEnEvento( id_evento: number, registrarParticipanteDto: RegistrarParticipanteDto, ) { - this.participanteExiste(registrarParticipanteDto.correo).then( - (participante) => { - let info : EventoParticipante; + const participante = await this.participanteExiste( + registrarParticipanteDto.correo, + ); + /* console.log(id_evento); + console.log(participante); */ - info.id_evento = id_evento - info.id_participante = participante.id_participante + const registro = new EventoParticipante(); + registro.id_evento = id_evento; + registro.id_participante = participante.id_participante; - this.eventoParticipanteRepository.save( - this.eventoParticipanteRepository.create(info), - ); - }, + return this.eventoParticipanteRepository.save( + this.eventoParticipanteRepository.create(registro), ); } @@ -44,15 +46,19 @@ export class EventoParticipanteService { id_evento: number, registrarParticipanteDto: RegistrarParticipanteDto, ) { +/* console.log(id_evento); + console.log(registrarParticipanteDto); */ return this.participanteExiste(registrarParticipanteDto.correo).then( - (participante) => { - if (participante) { - this.registrarEnEvento(id_evento, registrarParticipanteDto); - throw new ConflictException('Este Usuario ya existe'); + (res) => { + if (res) { + this.registrarEnEvento(id_evento, res); + } else { + this.participanteRepository + .save(this.participanteRepository.create(registrarParticipanteDto)) + .then((res) => { + this.registrarEnEvento(id_evento, res); + }); } - return this.participanteRepository.save( - this.participanteRepository.create(registrarParticipanteDto), - ); }, ); } diff --git a/src/eventos/dto/actualizarEvento.dto.ts b/src/eventos/dto/actualizarEvento.dto.ts index 1f5af31..7532801 100644 --- a/src/eventos/dto/actualizarEvento.dto.ts +++ b/src/eventos/dto/actualizarEvento.dto.ts @@ -1,31 +1,16 @@ export class actualizarEventoDto { - nombre?: string - - evento_identificador ?: string - - fecha_inicio?: Date - - fecha_fin?: Date - - horario?: string - - requisitos?: string - - modalidad?: string - - lugar?: string - - cuota_inscripcion ?: number - - patrocinador ?: string - - tipo_acreditacion?: string - - fecha_limite_inscripcion?: Date - - tipo_evento?: string - - estado?: boolean - - descripcion?: string + nombre?: string; + tipo_evento?: string; + organizadores?: string[]; + proyecto?: string[]; + modalidad?: string[]; + lugar?: string; + requisitos?: string; + cuota_inscripcion?: number; + patrocinador?: string; + tipo_acreditacion?: string; + descripcion?: string; + fecha_inicio?: Date; + fecha_fin?: Date; + fecha_limite_inscripcion?: Date; } \ No newline at end of file diff --git a/src/eventos/dto/crearEvento.dto.ts b/src/eventos/dto/crearEvento.dto.ts index f55c970..14b499b 100644 --- a/src/eventos/dto/crearEvento.dto.ts +++ b/src/eventos/dto/crearEvento.dto.ts @@ -1,32 +1,16 @@ export class crearEventoDto { - nombre: string - - evento_identificador ?: string - - fecha_inicio: Date - - fecha_fin: Date - - horario: string - - requisitos: string - - modalidad: string - - lugar: string - - cuota_inscripcion ?: number - - patrocinador ?: string - - tipo_acreditacion: string - - fecha_limite_inscripcion: Date - - tipo_evento: string - - estado: boolean - - descripcion: string + nombre: string; + tipo_evento: string; + organizadores: string[]; + proyecto: string[]; + modalidad: string[]; + lugar: string; + requisitos: string; + cuota_inscripcion: number; + patrocinador: string; + tipo_acreditacion: string; + descripcion: string; + fecha_inicio: Date; + fecha_fin: Date; + fecha_limite_inscripcion: Date; } - diff --git a/src/eventos/evento.entity.ts b/src/eventos/evento.entity.ts index ac307e6..061b1ea 100644 --- a/src/eventos/evento.entity.ts +++ b/src/eventos/evento.entity.ts @@ -14,49 +14,55 @@ export class Evento { @Column({ nullable: false }) nombre: string; - - @Column({ nullable: true }) - evento_identificador: string; - - @Column({ nullable: false, type: 'datetime' }) - fecha_inicio: Date; - - @Column({ nullable: false, type: 'datetime' }) - fecha_fin: Date; - + @Column({ nullable: false }) - horario: string; + tipo_evento: string; + + @Column("simple-array", {nullable: false}) + organizadores: string[] + + @Column("simple-array", {nullable: false}) + proyecto: string[] + + @Column("simple-array", {nullable: false}) + modalidad: string[] + + @Column({ nullable: false }) + lugar: string; @Column({ nullable: false }) requisitos: string; - @Column({ nullable: false }) - modalidad: string; - - @Column({ nullable: false }) - lugar: string; - @Column({ nullable: true }) cuota_inscripcion: number; @Column({ nullable: true }) patrocinador: string; - @Column({ nullable: false }) + @Column({ nullable: true }) tipo_acreditacion: string; + @Column({nullable: false}) + descripcion: string + + @Column({ nullable: false, type: 'datetime' }) + fecha_inicio: Date; + + @Column({ nullable: false, type: 'datetime' }) + fecha_fin: Date; + @Column({ nullable: false, type: 'datetime' }) fecha_limite_inscripcion: Date; - @Column({ nullable: false }) - tipo_evento: string; + @Column({ nullable: true }) + evento_identificador: string; - @Column({ nullable: false }) + @Column({ nullable: true }) + horario: string; + + @Column({ nullable: true }) estado: boolean; - @Column({ nullable: false }) - descripcion: string; - @OneToMany( () => EventoParticipante, (eventoParticipante) => eventoParticipante.evento, diff --git a/src/eventos/eventos.controller.ts b/src/eventos/eventos.controller.ts index cae339d..9f9f74f 100644 --- a/src/eventos/eventos.controller.ts +++ b/src/eventos/eventos.controller.ts @@ -20,7 +20,7 @@ export class EventosController { } @Post() - postEvento(@Body() nuevoEvento: crearEventoDto): Promise{ + postEvento(@Body() nuevoEvento: crearEventoDto){ return this.eventoService.postEvento(nuevoEvento) } @@ -31,6 +31,6 @@ export class EventosController { @Delete(':id') deleteEvento(@Param('id', ParseIntPipe)id: number){ - return this.eventoService.deleteEvento(id) + return this.eventoService.deleteEventoParticipante(id) } } diff --git a/src/eventos/eventos.module.ts b/src/eventos/eventos.module.ts index 21a19a9..52755c1 100644 --- a/src/eventos/eventos.module.ts +++ b/src/eventos/eventos.module.ts @@ -1,11 +1,12 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; +import { EventoParticipante } from 'src/evento-participante/evento-participante/eventoParticipante.entity'; import { Evento } from './evento.entity'; import { EventosController } from './eventos.controller'; import { EventosService } from './eventos.service'; @Module({ - imports:[TypeOrmModule.forFeature([Evento])], + imports:[TypeOrmModule.forFeature([Evento, EventoParticipante])], controllers:[EventosController], providers:[EventosService] }) diff --git a/src/eventos/eventos.service.ts b/src/eventos/eventos.service.ts index 4f3c3fd..72aa66d 100644 --- a/src/eventos/eventos.service.ts +++ b/src/eventos/eventos.service.ts @@ -1,37 +1,63 @@ import { Injectable } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; +import { EventoParticipante } from 'src/evento-participante/evento-participante/eventoParticipante.entity'; +import { Participante } from 'src/participante/participante.entity'; import { Repository } from 'typeorm'; import { actualizarEventoDto } from './dto/actualizarEvento.dto'; import { crearEventoDto } from './dto/crearEvento.dto'; import { Evento } from './evento.entity'; - @Injectable() export class EventosService { - constructor(@InjectRepository(Evento) private eventoRepository: Repository){} + constructor( + @InjectRepository(Evento) private eventoRepository: Repository, + @InjectRepository(EventoParticipante) + private eventoParticipanteRepository: Repository, + ) {} - getEventos(){ - return this.eventoRepository.find() - } + getEventos() { + return this.eventoRepository.find(); + } - getEventosPorId(id: number){ - return this.eventoRepository.findOne({ - where:{ - id_evento: id - } - }) - } + getEventosPorId(id: number) { + return this.eventoRepository.findOne({ + where: { + id_evento: id, + }, + }); + } - postEvento(evento: crearEventoDto){ - const nuevoEvento = this.eventoRepository.create(evento) - return this.eventoRepository.save(nuevoEvento) - } + postEvento(evento: crearEventoDto) { + const nuevoEvento = this.eventoRepository.create(evento); + return this.eventoRepository.save(nuevoEvento); + } - updateEvento(id: number, actualizacion: actualizarEventoDto){ - return this.eventoRepository.update({id_evento: id}, actualizacion) - } + updateEvento(id: number, actualizacion: actualizarEventoDto) { + return this.eventoRepository.update({ id_evento: id }, actualizacion); + } - deleteEvento(id:number){ - return this.eventoRepository.delete({id_evento:id}) + deleteParticipantes(id: number) { + this.eventoParticipanteRepository.delete({ id_evento: id }); + } + + deleteEvento(id: number) { + this.eventoRepository.delete({ id_evento: id }); + } + + async deleteEventoParticipante(id: number) { + const queryRunner = + this.eventoRepository.manager.connection.createQueryRunner(); + await queryRunner.connect(); + await queryRunner.startTransaction(); + try { + await this.deleteParticipantes(id); + await this.deleteEvento(id); + await queryRunner.commitTransaction(); + } catch (err) { + await queryRunner.rollbackTransaction(); + throw err; + } finally { + await queryRunner.release(); } + } } -- 2.43.0 From 7321c103b1a590ef21ff01b4e70e37f9e0ba020d Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Tue, 28 Feb 2023 16:33:04 -0600 Subject: [PATCH 08/15] added enities --- .env | 2 +- src/app.module.ts | 73 +++++++++++++++---- src/catalogos/area.entity.ts | 17 +++++ src/catalogos/carrera.entity.ts | 16 ++++ src/catalogos/tipo-miembro.entity.ts | 16 ++++ .../entity/inscripcion_area.entity.ts | 30 ++++++++ .../inscripcion-area.controller.ts | 4 + .../inscripcion-area.module.ts | 9 +++ .../inscripcion-area.service.ts | 4 + .../entity/inscripcion_dsc.entity.ts | 68 +++++++++++++++++ .../inscripcion-dsc.controller.ts | 4 + src/inscripcion-dsc/inscripcion-dsc.module.ts | 9 +++ .../inscripcion-dsc.service.ts | 4 + .../entity/inscripcion_status.entity.ts | 17 +++++ .../inscripcion-status.controller.ts | 4 + .../inscripcion-status.module.ts | 4 + .../inscripcion-status.service.ts | 4 + .../entity/inscripcion_usuario.entity.ts | 29 ++++++++ .../inscripcion-usuario.controller.ts | 4 + .../inscripcion-usuario.module.ts | 9 +++ .../inscripcion-usuario.service.ts | 4 + src/miembro/entity/miembro.entity.ts | 63 ++++++++++++++++ src/miembro/miembro.controller.ts | 4 + src/miembro/miembro.module.ts | 9 +++ src/miembro/miembro.service.ts | 4 + src/periodo/entity/periodo.entity.ts | 17 +++++ src/periodo/periodo.controller.ts | 4 + src/periodo/periodo.module.ts | 9 +++ src/periodo/periodo.service.ts | 4 + 29 files changed, 430 insertions(+), 15 deletions(-) create mode 100644 src/catalogos/area.entity.ts create mode 100644 src/catalogos/carrera.entity.ts create mode 100644 src/catalogos/tipo-miembro.entity.ts create mode 100644 src/inscripcion-area/entity/inscripcion_area.entity.ts create mode 100644 src/inscripcion-area/inscripcion-area.controller.ts create mode 100644 src/inscripcion-area/inscripcion-area.module.ts create mode 100644 src/inscripcion-area/inscripcion-area.service.ts create mode 100644 src/inscripcion-dsc/entity/inscripcion_dsc.entity.ts create mode 100644 src/inscripcion-dsc/inscripcion-dsc.controller.ts create mode 100644 src/inscripcion-dsc/inscripcion-dsc.module.ts create mode 100644 src/inscripcion-dsc/inscripcion-dsc.service.ts create mode 100644 src/inscripcion-status/entity/inscripcion_status.entity.ts create mode 100644 src/inscripcion-status/inscripcion-status.controller.ts create mode 100644 src/inscripcion-status/inscripcion-status.module.ts create mode 100644 src/inscripcion-status/inscripcion-status.service.ts create mode 100644 src/inscripcion-usuario/entity/inscripcion_usuario.entity.ts create mode 100644 src/inscripcion-usuario/inscripcion-usuario.controller.ts create mode 100644 src/inscripcion-usuario/inscripcion-usuario.module.ts create mode 100644 src/inscripcion-usuario/inscripcion-usuario.service.ts create mode 100644 src/miembro/entity/miembro.entity.ts create mode 100644 src/miembro/miembro.controller.ts create mode 100644 src/miembro/miembro.module.ts create mode 100644 src/miembro/miembro.service.ts create mode 100644 src/periodo/entity/periodo.entity.ts create mode 100644 src/periodo/periodo.controller.ts create mode 100644 src/periodo/periodo.module.ts create mode 100644 src/periodo/periodo.service.ts diff --git a/.env b/.env index 2cd7493..02e37b4 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ PORT=5089 DB_HOST=localhost DB_USER=root -DB_PASSWORD=Dosmiluno2001 +DB_PASSWORD=password DB_NAME=cedetec_proyectos DB_PORT=3306 diff --git a/src/app.module.ts b/src/app.module.ts index 363a1c5..0c80ed7 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,6 +1,6 @@ import { Module } from '@nestjs/common'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { ConfigModule, ConfigService } from '@nestjs/config' +import { ConfigModule, ConfigService } from '@nestjs/config'; import { AppController } from './app.controller'; import { AppService } from './app.service'; import { EventosModule } from './eventos/eventos.module'; @@ -15,15 +15,33 @@ import { Evento } from './eventos/evento.entity'; import { Participante } from './participante/participante.entity'; import { EventoParticipante } from './evento-participante/evento-participante/eventoParticipante.entity'; import { Usuario } from './usuario/usuario.entity'; +import { InscripcionDscModule } from './inscripcion-dsc/inscripcion-dsc.module'; +import { InscripcionAreaModule } from './inscripcion-area/inscripcion-area.module'; +import { InscripcionStatusService } from './inscripcion-status/inscripcion-status.service'; +import { InscripcionStatusController } from './inscripcion-status/inscripcion-status.controller'; +import { InscripcionStatusModule } from './inscripcion-status/inscripcion-status.module'; +import { PeriodoModule } from './periodo/periodo.module'; +import { InscripcionUsuarioModule } from './inscripcion-usuario/inscripcion-usuario.module'; +import { MiembroModule } from './miembro/miembro.module'; +import { Miembro } from './miembro/entity/miembro.entity'; +import { InscripcionArea } from './inscripcion-area/entity/inscripcion_area.entity'; +import { InscripcionDSC } from './inscripcion-dsc/entity/inscripcion_dsc.entity'; +import { InscripcionStatus } from './inscripcion-status/entity/inscripcion_status.entity'; +import { InscripcionUsuario } from './inscripcion-usuario/entity/inscripcion_usuario.entity'; +import { Area } from './catalogos/area.entity'; +import { TipoMiembro } from './catalogos/tipo-miembro.entity'; +import { Carrera } from './catalogos/carrera.entity'; +import { Periodo } from './periodo/entity/periodo.entity'; @Module({ imports: [ ConfigModule.forRoot({ envFilePath: '.env', - isGlobal: true}), + isGlobal: true, + }), TypeOrmModule.forRootAsync({ - imports:[ConfigModule], - inject:[ConfigService], + imports: [ConfigModule], + inject: [ConfigService], useFactory: async (configService: ConfigService) => ({ type: 'mariadb', host: configService.get('DB_HOST'), @@ -31,21 +49,48 @@ import { Usuario } from './usuario/usuario.entity'; username: configService.get('DB_USER'), password: configService.get('DB_PASSWORD'), database: configService.get('DB_NAME'), - entities: [Evento, Participante, EventoParticipante, Usuario], - synchronize: true - }) - }), + entities: [ + Evento, + Participante, + EventoParticipante, + Usuario, + Miembro, + InscripcionArea, + InscripcionDSC, + InscripcionStatus, + InscripcionUsuario, + Area, + TipoMiembro, + Carrera, + Periodo + ], + synchronize: true, + }), + }), EventosModule, ParticipanteModule, EventoParticipanteModule, UsuarioModule, - AuthModule, PassportModule, JwtModule.register({})], - controllers: [AppController, ParticipanteController], - providers: [AppService], + AuthModule, + PassportModule, + JwtModule.register({}), + InscripcionDscModule, + InscripcionAreaModule, + InscripcionStatusModule, + PeriodoModule, + InscripcionUsuarioModule, + MiembroModule, + ], + controllers: [ + AppController, + ParticipanteController, + InscripcionStatusController, + ], + providers: [AppService, InscripcionStatusService], }) export class AppModule { - static port: number - constructor(private readonly configService: ConfigService){ - AppModule.port = this.configService.get('PORT') + static port: number; + constructor(private readonly configService: ConfigService) { + AppModule.port = this.configService.get('PORT'); } } diff --git a/src/catalogos/area.entity.ts b/src/catalogos/area.entity.ts new file mode 100644 index 0000000..9e47ab6 --- /dev/null +++ b/src/catalogos/area.entity.ts @@ -0,0 +1,17 @@ +import { InscripcionArea } from "src/inscripcion-area/entity/inscripcion_area.entity"; +import { Column, Entity, OneToMany, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() +export class Area { + @PrimaryGeneratedColumn() + id_area: number + + @Column({length:60, nullable:false}) + area: string + + @OneToMany( + () => InscripcionArea, (inscripcionArea) => inscripcionArea.area + ) + inscripcionArea: InscripcionArea[] + +} \ No newline at end of file diff --git a/src/catalogos/carrera.entity.ts b/src/catalogos/carrera.entity.ts new file mode 100644 index 0000000..cd27751 --- /dev/null +++ b/src/catalogos/carrera.entity.ts @@ -0,0 +1,16 @@ +import { Miembro } from "src/miembro/entity/miembro.entity"; +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() +export class Carrera { + @PrimaryGeneratedColumn() + id_carrera: number + + @Column({ length:70, nullable: false}) + carrera: string + + @OneToMany( + () => Miembro, (miembro) => miembro.carrera + ) + miembro: Miembro +} \ No newline at end of file diff --git a/src/catalogos/tipo-miembro.entity.ts b/src/catalogos/tipo-miembro.entity.ts new file mode 100644 index 0000000..e736c22 --- /dev/null +++ b/src/catalogos/tipo-miembro.entity.ts @@ -0,0 +1,16 @@ +import { Miembro } from "src/miembro/entity/miembro.entity"; +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() +export class TipoMiembro { + @PrimaryGeneratedColumn() + id_tipo_miembro: number + + @Column({length:60, nullable:false}) + tipo_miembro: string + + @OneToMany( + () => Miembro, (miembro) => miembro.tipoMiembro + ) + miembro: Miembro +} \ No newline at end of file diff --git a/src/inscripcion-area/entity/inscripcion_area.entity.ts b/src/inscripcion-area/entity/inscripcion_area.entity.ts new file mode 100644 index 0000000..d9523b7 --- /dev/null +++ b/src/inscripcion-area/entity/inscripcion_area.entity.ts @@ -0,0 +1,30 @@ +import { Area } from 'src/catalogos/area.entity'; +import { InscripcionDSC } from 'src/inscripcion-dsc/entity/inscripcion_dsc.entity'; +import { + Column, + Entity, + JoinColumn, + ManyToOne, + PrimaryGeneratedColumn, +} from 'typeorm'; + +@Entity() +export class InscripcionArea { + @PrimaryGeneratedColumn() + id_inscripcionArea: number; + + @Column() + id_inscripcion: number; + + @Column() + id_area: number; + + @ManyToOne(() => Area, (area) => area.inscripcionArea) + @JoinColumn({ name: 'id_area' }) + area: Area; + + @ManyToOne( + () => InscripcionDSC, (inscripcionDsc) => inscripcionDsc.inscripcionArea + ) + inscripcionDsc: InscripcionDSC +} diff --git a/src/inscripcion-area/inscripcion-area.controller.ts b/src/inscripcion-area/inscripcion-area.controller.ts new file mode 100644 index 0000000..0b1b84f --- /dev/null +++ b/src/inscripcion-area/inscripcion-area.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('inscripcion-area') +export class InscripcionAreaController {} diff --git a/src/inscripcion-area/inscripcion-area.module.ts b/src/inscripcion-area/inscripcion-area.module.ts new file mode 100644 index 0000000..8baa728 --- /dev/null +++ b/src/inscripcion-area/inscripcion-area.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { InscripcionAreaController } from './inscripcion-area.controller'; +import { InscripcionAreaService } from './inscripcion-area.service'; + +@Module({ + controllers: [InscripcionAreaController], + providers: [InscripcionAreaService] +}) +export class InscripcionAreaModule {} diff --git a/src/inscripcion-area/inscripcion-area.service.ts b/src/inscripcion-area/inscripcion-area.service.ts new file mode 100644 index 0000000..0c65815 --- /dev/null +++ b/src/inscripcion-area/inscripcion-area.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class InscripcionAreaService {} diff --git a/src/inscripcion-dsc/entity/inscripcion_dsc.entity.ts b/src/inscripcion-dsc/entity/inscripcion_dsc.entity.ts new file mode 100644 index 0000000..7d5c0d1 --- /dev/null +++ b/src/inscripcion-dsc/entity/inscripcion_dsc.entity.ts @@ -0,0 +1,68 @@ +import { InscripcionArea } from 'src/inscripcion-area/entity/inscripcion_area.entity'; +import { InscripcionStatus } from 'src/inscripcion-status/entity/inscripcion_status.entity'; +import { InscripcionUsuario } from 'src/inscripcion-usuario/entity/inscripcion_usuario.entity'; +import { Periodo } from 'src/periodo/entity/periodo.entity'; +import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class InscripcionDSC { + @PrimaryGeneratedColumn() + id_inscripcion: number; + + @Column({ default: 2}) + validacion: number; + + @Column({ nullable: false, default: false}) + confirmacion: boolean; + + @Column({ length: 5, unique: true, default: null}) + folio: string; + + @Column({ default: null}) + monto: number; + + @Column({ default: null}) + hizoPago: boolean; + + @Column({ length: 100, default: null}) + rutaTicket: string; + + @Column({ length: 6, default: null}) + extension: string; + + @Column({ default: null}) + fechaInscripcion: Date; + + @Column({ default: null}) + fechaFin: Date; + + @Column({nullable:false}) + id_status: number; + + @Column({nullable: false}) + id_periodo: number; + + @OneToMany( + () => InscripcionArea, + (inscripcionArea) => inscripcionArea.inscripcionDsc, + ) + inscripcionArea: InscripcionArea[]; + + @ManyToOne( + () => InscripcionStatus, (inscripcionStatus) => inscripcionStatus.inscripcionDsc + ) + @JoinColumn({name: "id_status"}) + inscripcionStatus: InscripcionStatus + + @ManyToOne( + () => Periodo, (periodo) => periodo.inscripcionDsc + ) + @JoinColumn({name: "id_periodo"}) + periodo: Periodo + + @OneToMany( + () => InscripcionUsuario, (inscripcionUsuario) => inscripcionUsuario.inscripcionDsc + ) + inscripcionUsuario: InscripcionUsuario[] + +} diff --git a/src/inscripcion-dsc/inscripcion-dsc.controller.ts b/src/inscripcion-dsc/inscripcion-dsc.controller.ts new file mode 100644 index 0000000..b73f68f --- /dev/null +++ b/src/inscripcion-dsc/inscripcion-dsc.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('inscripcion-dsc') +export class InscripcionDscController {} diff --git a/src/inscripcion-dsc/inscripcion-dsc.module.ts b/src/inscripcion-dsc/inscripcion-dsc.module.ts new file mode 100644 index 0000000..bd23fcf --- /dev/null +++ b/src/inscripcion-dsc/inscripcion-dsc.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { InscripcionDscController } from './inscripcion-dsc.controller'; +import { InscripcionDscService } from './inscripcion-dsc.service'; + +@Module({ + controllers: [InscripcionDscController], + providers: [InscripcionDscService] +}) +export class InscripcionDscModule {} diff --git a/src/inscripcion-dsc/inscripcion-dsc.service.ts b/src/inscripcion-dsc/inscripcion-dsc.service.ts new file mode 100644 index 0000000..1c8f67d --- /dev/null +++ b/src/inscripcion-dsc/inscripcion-dsc.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class InscripcionDscService {} diff --git a/src/inscripcion-status/entity/inscripcion_status.entity.ts b/src/inscripcion-status/entity/inscripcion_status.entity.ts new file mode 100644 index 0000000..f30ab68 --- /dev/null +++ b/src/inscripcion-status/entity/inscripcion_status.entity.ts @@ -0,0 +1,17 @@ +import { InscripcionDSC } from 'src/inscripcion-dsc/entity/inscripcion_dsc.entity'; +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class InscripcionStatus { + @PrimaryGeneratedColumn() + id_inscripcion_status: number; + + @Column({ nullable: false}) + id_status: number; + + @Column({ nullable: false}) + status: number; + + @OneToMany(() => InscripcionDSC, (inscripcionDsc) => inscripcionDsc.inscripcionStatus) + inscripcionDsc: InscripcionDSC[]; +} diff --git a/src/inscripcion-status/inscripcion-status.controller.ts b/src/inscripcion-status/inscripcion-status.controller.ts new file mode 100644 index 0000000..fec979a --- /dev/null +++ b/src/inscripcion-status/inscripcion-status.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('inscripcion-status') +export class InscripcionStatusController {} diff --git a/src/inscripcion-status/inscripcion-status.module.ts b/src/inscripcion-status/inscripcion-status.module.ts new file mode 100644 index 0000000..2e26f4b --- /dev/null +++ b/src/inscripcion-status/inscripcion-status.module.ts @@ -0,0 +1,4 @@ +import { Module } from '@nestjs/common'; + +@Module({}) +export class InscripcionStatusModule {} diff --git a/src/inscripcion-status/inscripcion-status.service.ts b/src/inscripcion-status/inscripcion-status.service.ts new file mode 100644 index 0000000..16c9126 --- /dev/null +++ b/src/inscripcion-status/inscripcion-status.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class InscripcionStatusService {} diff --git a/src/inscripcion-usuario/entity/inscripcion_usuario.entity.ts b/src/inscripcion-usuario/entity/inscripcion_usuario.entity.ts new file mode 100644 index 0000000..5be8a77 --- /dev/null +++ b/src/inscripcion-usuario/entity/inscripcion_usuario.entity.ts @@ -0,0 +1,29 @@ +import { InscripcionDSC } from "src/inscripcion-dsc/entity/inscripcion_dsc.entity"; +import { Miembro } from "src/miembro/entity/miembro.entity"; +import { Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; + + +@Entity() +export class InscripcionUsuario { + @PrimaryGeneratedColumn() + id_inscripcion_usuario: number + + @Column({nullable: false}) + id_usuario: number + + @Column({nullable: false}) + id_inscripcion: number + + @ManyToOne( + () => InscripcionDSC, (inscripcionDsc) => inscripcionDsc.inscripcionUsuario + ) + @JoinColumn({name: "id_inscripcion"}) + inscripcionDsc: InscripcionDSC + + @ManyToOne( + () => Miembro, (miebro) => miebro.inscripcionUsuario + ) + @JoinColumn({name: "id_usuario"}) + miembro: Miembro[] + +} \ No newline at end of file diff --git a/src/inscripcion-usuario/inscripcion-usuario.controller.ts b/src/inscripcion-usuario/inscripcion-usuario.controller.ts new file mode 100644 index 0000000..eacb791 --- /dev/null +++ b/src/inscripcion-usuario/inscripcion-usuario.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('inscripcion-usuario') +export class InscripcionUsuarioController {} diff --git a/src/inscripcion-usuario/inscripcion-usuario.module.ts b/src/inscripcion-usuario/inscripcion-usuario.module.ts new file mode 100644 index 0000000..8656c35 --- /dev/null +++ b/src/inscripcion-usuario/inscripcion-usuario.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { InscripcionUsuarioController } from './inscripcion-usuario.controller'; +import { InscripcionUsuarioService } from './inscripcion-usuario.service'; + +@Module({ + controllers: [InscripcionUsuarioController], + providers: [InscripcionUsuarioService] +}) +export class InscripcionUsuarioModule {} diff --git a/src/inscripcion-usuario/inscripcion-usuario.service.ts b/src/inscripcion-usuario/inscripcion-usuario.service.ts new file mode 100644 index 0000000..4cbd8db --- /dev/null +++ b/src/inscripcion-usuario/inscripcion-usuario.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class InscripcionUsuarioService {} diff --git a/src/miembro/entity/miembro.entity.ts b/src/miembro/entity/miembro.entity.ts new file mode 100644 index 0000000..01a436e --- /dev/null +++ b/src/miembro/entity/miembro.entity.ts @@ -0,0 +1,63 @@ +import { IsEmail } from 'class-validator'; +import { Carrera } from 'src/catalogos/carrera.entity'; +import { TipoMiembro } from 'src/catalogos/tipo-miembro.entity'; +import { InscripcionUsuario } from 'src/inscripcion-usuario/entity/inscripcion_usuario.entity'; +import { + Column, + Entity, + JoinColumn, + ManyToOne, + OneToMany, + PrimaryGeneratedColumn, +} from 'typeorm'; + +@Entity() +export class Miembro { + @PrimaryGeneratedColumn() + id_usuario: number; + + @Column({ nullable: false, length: 50 }) + nombre: string; + + @Column({ nullable: false, length: 50 }) + apellido_paterno: string; + + @Column({ nullable: false, length: 50 }) + apellido_materno: string; + + @Column({ nullable: false }) + id_tipo_miembro: number; + + @Column({ nullable: false }) + @IsEmail() + correo: string; + + @Column({ nullable: false, length: 40 }) + password: string; + + @Column({ length: 260, nullable: false }) + descripcion: string; + + @Column({ nullable: false }) + id_carrera: number; + + @Column({ length: 40 }) + semestre: string; + + @Column({ nullable: false }) + cuenta: number; + + @OneToMany( + () => InscripcionUsuario, + (inscripcionUsuario) => inscripcionUsuario.miembro, + ) + inscripcionUsuario: InscripcionUsuario[]; + + @ManyToOne(() => TipoMiembro, (tipoMiembro) => tipoMiembro.miembro) + @JoinColumn({ name: 'id_tipo_miembro' }) + tipoMiembro: TipoMiembro; + + @ManyToOne(() => Carrera, (carrera) => carrera.miembro) + @JoinColumn({ name: 'id_carrera' }) + carrera: Carrera; +} diff --git a/src/miembro/miembro.controller.ts b/src/miembro/miembro.controller.ts new file mode 100644 index 0000000..464fcf5 --- /dev/null +++ b/src/miembro/miembro.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('miembro') +export class MiembroController {} diff --git a/src/miembro/miembro.module.ts b/src/miembro/miembro.module.ts new file mode 100644 index 0000000..d68d418 --- /dev/null +++ b/src/miembro/miembro.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { MiembroController } from './miembro.controller'; +import { MiembroService } from './miembro.service'; + +@Module({ + controllers: [MiembroController], + providers: [MiembroService] +}) +export class MiembroModule {} diff --git a/src/miembro/miembro.service.ts b/src/miembro/miembro.service.ts new file mode 100644 index 0000000..9caed0f --- /dev/null +++ b/src/miembro/miembro.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class MiembroService {} diff --git a/src/periodo/entity/periodo.entity.ts b/src/periodo/entity/periodo.entity.ts new file mode 100644 index 0000000..7f4986e --- /dev/null +++ b/src/periodo/entity/periodo.entity.ts @@ -0,0 +1,17 @@ +import { InscripcionDSC } from "src/inscripcion-dsc/entity/inscripcion_dsc.entity"; +import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + + +@Entity() +export class Periodo { + @PrimaryGeneratedColumn() + id_periodo: number + + @Column() + activo: number + + @OneToMany( + () => InscripcionDSC, (inscripcionDsc) => inscripcionDsc.periodo + ) + inscripcionDsc: InscripcionDSC[] +} \ No newline at end of file diff --git a/src/periodo/periodo.controller.ts b/src/periodo/periodo.controller.ts new file mode 100644 index 0000000..45824a2 --- /dev/null +++ b/src/periodo/periodo.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('periodo') +export class PeriodoController {} diff --git a/src/periodo/periodo.module.ts b/src/periodo/periodo.module.ts new file mode 100644 index 0000000..6572aa4 --- /dev/null +++ b/src/periodo/periodo.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { PeriodoController } from './periodo.controller'; +import { PeriodoService } from './periodo.service'; + +@Module({ + controllers: [PeriodoController], + providers: [PeriodoService] +}) +export class PeriodoModule {} diff --git a/src/periodo/periodo.service.ts b/src/periodo/periodo.service.ts new file mode 100644 index 0000000..002e00a --- /dev/null +++ b/src/periodo/periodo.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class PeriodoService {} -- 2.43.0 From e01cba238decd0522522ab407355e855ee7ff1f8 Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Fri, 3 Mar 2023 15:31:28 -0600 Subject: [PATCH 09/15] intento de confirmacion, aun pendiente --- .env | 16 +- .gitignore | 4 +- package-lock.json | 234 +++++++++++++++++- package.json | 2 + sql/00-admin.sql | 1 + src/actividad/actividad.controller.spec.ts | 18 ++ src/actividad/actividad.controller.ts | 4 + src/actividad/actividad.module.ts | 9 + src/actividad/actividad.service.spec.ts | 18 ++ src/actividad/actividad.service.ts | 4 + src/app.module.ts | 40 ++- src/auth/auth.service.ts | 4 +- src/config/db.ts | 51 ++++ src/contacto/entity/contacto.entity.ts | 27 ++ .../entity/equipo_evento.entity.ts | 27 ++ .../entity/equipo_miembro.entity.ts | 27 ++ src/equipo/entity/equipo.entity.ts | 25 ++ src/eventos/evento.entity.ts | 8 + .../entity/inscripcion_area.entity.ts | 1 + .../inscripcion-dsc.controller.ts | 74 +++++- .../inscripcion-dsc.service.ts | 62 ++++- .../entity/inscripcion_usuario.entity.ts | 4 +- .../entity/miembro_contacto.entity.ts | 26 ++ .../miembro-contacto.controller.spec.ts | 18 ++ .../miembro-contacto.controller.ts | 4 + .../miembro-contacto.module.ts | 9 + .../miembro-contacto.service.spec.ts | 18 ++ .../miembro-contacto.service.ts | 4 + .../entity/miembro_proyecto.entity.ts | 26 ++ .../miembro-proyecto.controller.spec.ts | 18 ++ .../miembro-proyecto.controller.ts | 4 + .../miembro-proyecto.module.ts | 9 + .../miembro-proyecto.service.spec.ts | 18 ++ .../miembro-proyecto.service.ts | 4 + src/miembro/entity/miembro.entity.ts | 21 +- .../proyecto-actividad.controller.spec.ts | 18 ++ .../proyecto-actividad.controller.ts | 4 + .../proyecto-actividad.module.ts | 9 + .../proyecto-actividad.service.spec.ts | 18 ++ .../proyecto-actividad.service.ts | 4 + src/proyecto/entity/proyecto.entity.ts | 29 +++ src/proyecto/proyecto.controller.spec.ts | 18 ++ src/proyecto/proyecto.controller.ts | 4 + src/proyecto/proyecto.module.ts | 9 + src/proyecto/proyecto.service.spec.ts | 18 ++ src/proyecto/proyecto.service.ts | 4 + src/sybase/sybase.config.ts | 10 + src/sybase/sybase.module-definition.ts | 7 + src/sybase/sybase.module.ts | 7 + src/sybase/sybase.service.ts | 35 +++ src/usuario/usuario.entity.ts | 2 +- 51 files changed, 1008 insertions(+), 27 deletions(-) create mode 100644 sql/00-admin.sql create mode 100644 src/actividad/actividad.controller.spec.ts create mode 100644 src/actividad/actividad.controller.ts create mode 100644 src/actividad/actividad.module.ts create mode 100644 src/actividad/actividad.service.spec.ts create mode 100644 src/actividad/actividad.service.ts create mode 100644 src/config/db.ts create mode 100644 src/contacto/entity/contacto.entity.ts create mode 100644 src/equipo-evento/entity/equipo_evento.entity.ts create mode 100644 src/equipo-miembro/entity/equipo_miembro.entity.ts create mode 100644 src/equipo/entity/equipo.entity.ts create mode 100644 src/miembro-contacto/entity/miembro_contacto.entity.ts create mode 100644 src/miembro-contacto/miembro-contacto.controller.spec.ts create mode 100644 src/miembro-contacto/miembro-contacto.controller.ts create mode 100644 src/miembro-contacto/miembro-contacto.module.ts create mode 100644 src/miembro-contacto/miembro-contacto.service.spec.ts create mode 100644 src/miembro-contacto/miembro-contacto.service.ts create mode 100644 src/miembro-proyecto/entity/miembro_proyecto.entity.ts create mode 100644 src/miembro-proyecto/miembro-proyecto.controller.spec.ts create mode 100644 src/miembro-proyecto/miembro-proyecto.controller.ts create mode 100644 src/miembro-proyecto/miembro-proyecto.module.ts create mode 100644 src/miembro-proyecto/miembro-proyecto.service.spec.ts create mode 100644 src/miembro-proyecto/miembro-proyecto.service.ts create mode 100644 src/proyecto-actividad/proyecto-actividad.controller.spec.ts create mode 100644 src/proyecto-actividad/proyecto-actividad.controller.ts create mode 100644 src/proyecto-actividad/proyecto-actividad.module.ts create mode 100644 src/proyecto-actividad/proyecto-actividad.service.spec.ts create mode 100644 src/proyecto-actividad/proyecto-actividad.service.ts create mode 100644 src/proyecto/entity/proyecto.entity.ts create mode 100644 src/proyecto/proyecto.controller.spec.ts create mode 100644 src/proyecto/proyecto.controller.ts create mode 100644 src/proyecto/proyecto.module.ts create mode 100644 src/proyecto/proyecto.service.spec.ts create mode 100644 src/proyecto/proyecto.service.ts create mode 100644 src/sybase/sybase.config.ts create mode 100644 src/sybase/sybase.module-definition.ts create mode 100644 src/sybase/sybase.module.ts create mode 100644 src/sybase/sybase.service.ts diff --git a/.env b/.env index 02e37b4..cc0937e 100644 --- a/.env +++ b/.env @@ -6,15 +6,7 @@ DB_PASSWORD=password DB_NAME=cedetec_proyectos DB_PORT=3306 - -SALT_ROUNDS = 10 - -KEY = -CADUCIDAD_TOKEN = 1800000 - -TOKEN_KEY = -TOKEN_EXPIRATION = 1800000 - - -EMAIL= -EMAIL_PASS= \ No newline at end of file +DB_HOST_DSC = 132.248.180.82 +DB_USER_DSC = sites_user +DB_PASS_DSC = F0rTest +DB_NAME_DSC = sat \ No newline at end of file diff --git a/.gitignore b/.gitignore index 22f55ad..ea48d65 100644 --- a/.gitignore +++ b/.gitignore @@ -32,4 +32,6 @@ lerna-debug.log* !.vscode/settings.json !.vscode/tasks.json !.vscode/launch.json -!.vscode/extensions.json \ No newline at end of file +!.vscode/extensions.json + +.env \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0d569b0..48642b8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -21,6 +21,7 @@ "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "moment": "^2.29.4", + "mysql2": "^3.1.2", "passport": "^0.6.0", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", @@ -28,6 +29,7 @@ "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0", "swagger-ui-express": "^4.6.1", + "sybase": "^1.2.3", "typeorm": "^0.3.12" }, "devDependencies": { @@ -3817,6 +3819,14 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "engines": { + "node": ">=0.10" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -4853,6 +4863,14 @@ "node": ">=10" } }, + "node_modules/generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "dependencies": { + "is-property": "^1.0.2" + } + }, "node_modules/gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -5349,6 +5367,11 @@ "node": ">=8" } }, + "node_modules/is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -6365,6 +6388,29 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, "node_modules/jsonwebtoken": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", @@ -6514,6 +6560,11 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + }, "node_modules/lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -6786,6 +6837,43 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "node_modules/mysql2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.1.2.tgz", + "integrity": "sha512-NXz6sUvHSEOKz1jv3koSga7eb2dHrwD/mnPmqbbZzMRvjQcSpb0Eh0ectWyYt1U60CLlEbjoA3XYjjbbReRF5Q==", + "dependencies": { + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru-cache": "^7.14.1", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "engines": { + "node": ">= 8.0" + } + }, + "node_modules/mysql2/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mysql2/node_modules/lru-cache": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", + "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "engines": { + "node": ">=12" + } + }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -6796,6 +6884,25 @@ "thenify-all": "^1.0.0" } }, + "node_modules/named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", + "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==", + "engines": { + "node": ">=12" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -7997,6 +8104,11 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, + "node_modules/seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, "node_modules/serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", @@ -8162,6 +8274,14 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -8367,6 +8487,14 @@ "express": ">=4.0.0" } }, + "node_modules/sybase": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/sybase/-/sybase-1.2.3.tgz", + "integrity": "sha512-69dtkzLPjWLQknP0x6gGud9WKZs7Ujdo8EEl4nwN/fhLrgXsgMxbGkT2rQfdw1kg2lbJvbpBSbA2vm0rWRxs6g==", + "dependencies": { + "JSONStream": "latest" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -8546,8 +8674,7 @@ "node_modules/through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "node_modules/tmp": { "version": "0.0.33", @@ -12392,6 +12519,11 @@ "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==" }, + "denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==" + }, "depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -13188,6 +13320,14 @@ "wide-align": "^1.1.2" } }, + "generate-function": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/generate-function/-/generate-function-2.3.1.tgz", + "integrity": "sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==", + "requires": { + "is-property": "^1.0.2" + } + }, "gensync": { "version": "1.0.0-beta.2", "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", @@ -13537,6 +13677,11 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, + "is-property": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-property/-/is-property-1.0.2.tgz", + "integrity": "sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==" + }, "is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -14310,6 +14455,20 @@ "universalify": "^2.0.0" } }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==" + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, "jsonwebtoken": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-9.0.0.tgz", @@ -14427,6 +14586,11 @@ } } }, + "long": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.1.tgz", + "integrity": "sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==" + }, "lru-cache": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", @@ -14631,6 +14795,36 @@ "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, + "mysql2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.1.2.tgz", + "integrity": "sha512-NXz6sUvHSEOKz1jv3koSga7eb2dHrwD/mnPmqbbZzMRvjQcSpb0Eh0ectWyYt1U60CLlEbjoA3XYjjbbReRF5Q==", + "requires": { + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru-cache": "^7.14.1", + "named-placeholders": "^1.1.3", + "seq-queue": "^0.0.5", + "sqlstring": "^2.3.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + }, + "lru-cache": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", + "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==" + } + } + }, "mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -14641,6 +14835,21 @@ "thenify-all": "^1.0.0" } }, + "named-placeholders": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "requires": { + "lru-cache": "^7.14.1" + }, + "dependencies": { + "lru-cache": { + "version": "7.18.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.1.tgz", + "integrity": "sha512-8/HcIENyQnfUTCDizRu9rrDyG6XG/21M4X7/YEGZeD76ZJilFPAUVb/2zysFf7VVO1LEjCDFyHp8pMMvozIrvg==" + } + } + }, "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -15517,6 +15726,11 @@ } } }, + "seq-queue": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/seq-queue/-/seq-queue-0.0.5.tgz", + "integrity": "sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==" + }, "serialize-javascript": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.1.tgz", @@ -15650,6 +15864,11 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, + "sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==" + }, "stack-utils": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", @@ -15801,6 +16020,14 @@ "swagger-ui-dist": ">=4.11.0" } }, + "sybase": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/sybase/-/sybase-1.2.3.tgz", + "integrity": "sha512-69dtkzLPjWLQknP0x6gGud9WKZs7Ujdo8EEl4nwN/fhLrgXsgMxbGkT2rQfdw1kg2lbJvbpBSbA2vm0rWRxs6g==", + "requires": { + "JSONStream": "latest" + } + }, "symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", @@ -15929,8 +16156,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "tmp": { "version": "0.0.33", diff --git a/package.json b/package.json index 29ad066..4b5be02 100644 --- a/package.json +++ b/package.json @@ -32,6 +32,7 @@ "class-transformer": "^0.5.1", "class-validator": "^0.14.0", "moment": "^2.29.4", + "mysql2": "^3.1.2", "passport": "^0.6.0", "passport-jwt": "^4.0.1", "passport-local": "^1.0.0", @@ -39,6 +40,7 @@ "reflect-metadata": "^0.1.13", "rxjs": "^7.2.0", "swagger-ui-express": "^4.6.1", + "sybase": "^1.2.3", "typeorm": "^0.3.12" }, "devDependencies": { diff --git a/sql/00-admin.sql b/sql/00-admin.sql new file mode 100644 index 0000000..0755541 --- /dev/null +++ b/sql/00-admin.sql @@ -0,0 +1 @@ +INSERT INTO usuario (nombre, password, email) VALUES("jorge", "Canela1108", "admin@unam.com"); \ No newline at end of file diff --git a/src/actividad/actividad.controller.spec.ts b/src/actividad/actividad.controller.spec.ts new file mode 100644 index 0000000..f7283ce --- /dev/null +++ b/src/actividad/actividad.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ActividadController } from './actividad.controller'; + +describe('ActividadController', () => { + let controller: ActividadController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [ActividadController], + }).compile(); + + controller = module.get(ActividadController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/actividad/actividad.controller.ts b/src/actividad/actividad.controller.ts new file mode 100644 index 0000000..728d425 --- /dev/null +++ b/src/actividad/actividad.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('actividad') +export class ActividadController {} diff --git a/src/actividad/actividad.module.ts b/src/actividad/actividad.module.ts new file mode 100644 index 0000000..de0e8c1 --- /dev/null +++ b/src/actividad/actividad.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { ActividadController } from './actividad.controller'; +import { ActividadService } from './actividad.service'; + +@Module({ + controllers: [ActividadController], + providers: [ActividadService] +}) +export class ActividadModule {} diff --git a/src/actividad/actividad.service.spec.ts b/src/actividad/actividad.service.spec.ts new file mode 100644 index 0000000..a268525 --- /dev/null +++ b/src/actividad/actividad.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ActividadService } from './actividad.service'; + +describe('ActividadService', () => { + let service: ActividadService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ActividadService], + }).compile(); + + service = module.get(ActividadService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/actividad/actividad.service.ts b/src/actividad/actividad.service.ts new file mode 100644 index 0000000..373da18 --- /dev/null +++ b/src/actividad/actividad.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class ActividadService {} diff --git a/src/app.module.ts b/src/app.module.ts index 0c80ed7..dae2cf4 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -32,6 +32,19 @@ import { Area } from './catalogos/area.entity'; import { TipoMiembro } from './catalogos/tipo-miembro.entity'; import { Carrera } from './catalogos/carrera.entity'; import { Periodo } from './periodo/entity/periodo.entity'; +import { MiembroProyectoModule } from './miembro-proyecto/miembro-proyecto.module'; +import { MiembroContactoModule } from './miembro-contacto/miembro-contacto.module'; +import { ProyectoModule } from './proyecto/proyecto.module'; +import { ProyectoActividadModule } from './proyecto-actividad/proyecto-actividad.module'; +import { ActividadModule } from './actividad/actividad.module'; +import { MiembroProyecto } from './miembro-proyecto/entity/miembro_proyecto.entity'; +import { MiembroContacto } from './miembro-contacto/entity/miembro_contacto.entity'; +import { Proyecto } from './proyecto/entity/proyecto.entity'; +import { Contacto } from './contacto/entity/contacto.entity'; +import { Equipo } from './equipo/entity/equipo.entity'; +import { EquipoEvento } from './equipo-evento/entity/equipo_evento.entity'; +import { EquipoMiembro } from './equipo-miembro/entity/equipo_miembro.entity'; +import { SybaseModule } from './sybase/sybase.module'; @Module({ imports: [ @@ -54,6 +67,7 @@ import { Periodo } from './periodo/entity/periodo.entity'; Participante, EventoParticipante, Usuario, + /* Agregadas el 29 de febrero */ Miembro, InscripcionArea, InscripcionDSC, @@ -62,11 +76,30 @@ import { Periodo } from './periodo/entity/periodo.entity'; Area, TipoMiembro, Carrera, - Periodo + Periodo, + /* Agregadas el 1 de marzo */ + MiembroProyecto, + MiembroContacto, + Proyecto, + Contacto, + Equipo, + EquipoEvento, + EquipoMiembro, ], synchronize: true, }), }), + SybaseModule.forRootAsync({ + inject: [ConfigService], + useFactory: (configService: ConfigService) => { + return { + host: configService.get('DB_HOST_DSC'), + database: configService.get('DB_NAME_DSC'), + username: configService.get('DB_USER_DSC'), + password: configService.get('DB_PASS_DSC'), + }; + }, + }), EventosModule, ParticipanteModule, EventoParticipanteModule, @@ -80,6 +113,11 @@ import { Periodo } from './periodo/entity/periodo.entity'; PeriodoModule, InscripcionUsuarioModule, MiembroModule, + MiembroProyectoModule, + MiembroContactoModule, + ProyectoModule, + ProyectoActividadModule, + ActividadModule, ], controllers: [ AppController, diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index be20860..b32c96c 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -47,11 +47,11 @@ export class AuthService { if (!checkPassword) throw new HttpException('Contraseña incorrecta', 403); - const payload = { id_usuario: usuario.id_usuario, name: usuario.name }; + const payload = { id_usuario: usuario.id_usuario, name: usuario.nombre }; const token = this.jwtService.sign(payload); //firma el token const data = { - usuario: usuario.name, + usuario: usuario.nombre, id: usuario.id_usuario, email: usuario.email, token, diff --git a/src/config/db.ts b/src/config/db.ts new file mode 100644 index 0000000..b6a612f --- /dev/null +++ b/src/config/db.ts @@ -0,0 +1,51 @@ +import { Injectable } from '@nestjs/common'; +import * as mysql from 'mysql2/promise'; + +@Injectable() +export class MysqlService { + private mysqlPool: mysql.Pool; + private mysqlConnection: mysql.Connection; + private mysqlConnectionDscConfirmation: mysql.Connection; + + constructor() { +/* this.mysqlPool = mysql.createPool({ + connectionLimit: 20, + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASS, + database: process.env.DB_NAME, + }); + + this.mysqlConnection = mysql.createConnection({ + host: process.env.DB_HOST, + user: process.env.DB_USER, + password: process.env.DB_PASS, + database: process.env.DB_NAME, + }); + + this.mysqlConnectionDscConfirmation = mysql.createPool({ + connectionLimit: 20, + host: process.env.DB_HOST_DSC, + user: process.env.DB_USER_DSC, + password: process.env.DB_PASS_DSC, + database: process.env.DB_NAME_DSC, + }); */ + + /* this.mysqlConnection.connect((err) => { + if (err) console.log(err); + else console.log('base conectada'); + }); */ + } + + getMysqlConnection(): mysql.Connection { + return this.mysqlConnection; + } + + getMysqlPool(): mysql.Pool { + return this.mysqlPool; + } + + getMysqlConnectionDscConfirmation(): mysql.Connection { + return this.mysqlConnectionDscConfirmation; + } +} \ No newline at end of file diff --git a/src/contacto/entity/contacto.entity.ts b/src/contacto/entity/contacto.entity.ts new file mode 100644 index 0000000..854cd13 --- /dev/null +++ b/src/contacto/entity/contacto.entity.ts @@ -0,0 +1,27 @@ +import { MiembroContacto } from "src/miembro-contacto/entity/miembro_contacto.entity"; +import { Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from "typeorm"; + + +@Entity() +export class Contacto { + @PrimaryGeneratedColumn() + id_contacto: number + + @Column({nullable:false}) + correo: string + + @Column() + horario: string + + @Column({nullable:true}) + facebook: string + + @Column({nullable: true}) + linkedin: string + + @ManyToOne( + () => MiembroContacto, (miembroContacto) => miembroContacto.contacto + ) + @JoinColumn({name: "id_contacto"}) + miembroContacto: MiembroContacto +} \ No newline at end of file diff --git a/src/equipo-evento/entity/equipo_evento.entity.ts b/src/equipo-evento/entity/equipo_evento.entity.ts new file mode 100644 index 0000000..2d1d2aa --- /dev/null +++ b/src/equipo-evento/entity/equipo_evento.entity.ts @@ -0,0 +1,27 @@ +import { Equipo } from "src/equipo/entity/equipo.entity"; +import { Evento } from "src/eventos/evento.entity"; +import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() +export class EquipoEvento { + @PrimaryGeneratedColumn() + id_equipo_evento: number + + @Column() + id_equipo: number + + @Column() + id_evento: number + + @ManyToOne( + () => Equipo, (equipo) => equipo.equipoEvento + ) + @JoinColumn({name: "id_equipo"}) + equipo: Equipo[] + + @ManyToOne( + () => Evento, (evento) => evento.equipoEvento + ) + @JoinColumn({name: "id_evento"}) + evento: Evento +} \ No newline at end of file diff --git a/src/equipo-miembro/entity/equipo_miembro.entity.ts b/src/equipo-miembro/entity/equipo_miembro.entity.ts new file mode 100644 index 0000000..031808d --- /dev/null +++ b/src/equipo-miembro/entity/equipo_miembro.entity.ts @@ -0,0 +1,27 @@ +import { Equipo } from "src/equipo/entity/equipo.entity"; +import { Miembro } from "src/miembro/entity/miembro.entity"; +import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() +export class EquipoMiembro { + @PrimaryGeneratedColumn() + id_equipo_miembro:number + + @Column() + id_equipo:number + + @Column() + id_miembro:number + + @ManyToOne( + () => Miembro, (miembro) => miembro.equipoMiembro + ) + @JoinColumn({name:"id_miembro"}) + miembro: Miembro[] + + @ManyToOne( + () => Equipo,(equipo) => equipo.equipoMiembro + ) + @JoinColumn({name: "id_equipo"}) + equipo: Equipo[] +} \ No newline at end of file diff --git a/src/equipo/entity/equipo.entity.ts b/src/equipo/entity/equipo.entity.ts new file mode 100644 index 0000000..687cbad --- /dev/null +++ b/src/equipo/entity/equipo.entity.ts @@ -0,0 +1,25 @@ +import { EquipoEvento } from "src/equipo-evento/entity/equipo_evento.entity"; +import { EquipoMiembro } from "src/equipo-miembro/entity/equipo_miembro.entity"; +import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() +export class Equipo{ + @PrimaryGeneratedColumn() + id_equipo: number + + @Column({length:50, nullable:true}) + nombre: string + + @Column({length:250}) + descripcion:string + + @OneToMany( + () => EquipoMiembro, (equipoMiembro) => equipoMiembro.miembro + ) + equipoMiembro: EquipoMiembro + + @OneToMany( + () => EquipoEvento, (equipoEvento) => equipoEvento.evento + ) + equipoEvento: EquipoEvento +} \ No newline at end of file diff --git a/src/eventos/evento.entity.ts b/src/eventos/evento.entity.ts index 061b1ea..5d2639c 100644 --- a/src/eventos/evento.entity.ts +++ b/src/eventos/evento.entity.ts @@ -1,8 +1,10 @@ +import { EquipoEvento } from 'src/equipo-evento/entity/equipo_evento.entity'; import { EventoParticipante } from 'src/evento-participante/evento-participante/eventoParticipante.entity'; import { Column, Entity, JoinColumn, + ManyToOne, OneToMany, PrimaryGeneratedColumn, } from 'typeorm'; @@ -68,4 +70,10 @@ export class Evento { (eventoParticipante) => eventoParticipante.evento, ) eventoParticipantes: EventoParticipante[]; + + @OneToMany( + () => EquipoEvento, (equipoEvento) => equipoEvento.evento + ) + equipoEvento: EquipoEvento + } diff --git a/src/inscripcion-area/entity/inscripcion_area.entity.ts b/src/inscripcion-area/entity/inscripcion_area.entity.ts index d9523b7..73aeec3 100644 --- a/src/inscripcion-area/entity/inscripcion_area.entity.ts +++ b/src/inscripcion-area/entity/inscripcion_area.entity.ts @@ -26,5 +26,6 @@ export class InscripcionArea { @ManyToOne( () => InscripcionDSC, (inscripcionDsc) => inscripcionDsc.inscripcionArea ) + @JoinColumn({name:"id_inscripcion"}) inscripcionDsc: InscripcionDSC } diff --git a/src/inscripcion-dsc/inscripcion-dsc.controller.ts b/src/inscripcion-dsc/inscripcion-dsc.controller.ts index b73f68f..fbecd37 100644 --- a/src/inscripcion-dsc/inscripcion-dsc.controller.ts +++ b/src/inscripcion-dsc/inscripcion-dsc.controller.ts @@ -1,4 +1,74 @@ -import { Controller } from '@nestjs/common'; +import { + Body, + Controller, + Get, + Param, + ParseIntPipe, + Post, +} from '@nestjs/common'; +import { InscripcionDscService } from './inscripcion-dsc.service'; @Controller('inscripcion-dsc') -export class InscripcionDscController {} +export class InscripcionDscController { + constructor(private readonly inscripcionService: InscripcionDscService) {} + + @Post('confirmacion') + async confirmacionDsc(@Body() body: any) { + const { accountNumber } = body; + +/* this.inscripcionService + .userVerification({ accountNumber }) + .then((res) => { + console.log(res); + }) + .catch((err) => { + return(err) + }); */ + + try { + const userVerificationResponse = + await this.inscripcionService.userVerification({ + accountNumber, + }); + console.log(userVerificationResponse) + if (userVerificationResponse.length === 0) { + return { + error: true, + msj: 'El usuario no se encuentra inscrito', + desc: '', + }; + } + const [userInformation] = userVerificationResponse; + console.log(userInformation); + if (userInformation.confirmacion) { + return { + error: true, + msj: 'El usuario ya hizo la confirmación anteriormente', + desc: '', + }; + } + } catch (err) { + return console.log(err); + } + try { + const confirmationResponse = + await this.inscripcionService.userConfirmation({ accountNumber }); + return { + error: false, + msj: 'Usuario confirmado exitosamente', + data: confirmationResponse, + }; + } catch (err) { + return { + error: true, + msj: `No se pudo realizar la confirmación del usuario`, + desc: `${err}`, + }; + } + } + + /* @Get(":id") + getUsuarioById(@Param('id', ParseIntPipe)id: number){ + + } */ +} diff --git a/src/inscripcion-dsc/inscripcion-dsc.service.ts b/src/inscripcion-dsc/inscripcion-dsc.service.ts index 1c8f67d..b89674c 100644 --- a/src/inscripcion-dsc/inscripcion-dsc.service.ts +++ b/src/inscripcion-dsc/inscripcion-dsc.service.ts @@ -1,4 +1,64 @@ import { Injectable } from '@nestjs/common'; +import { SybaseService } from 'src/sybase/sybase.service'; @Injectable() -export class InscripcionDscService {} +export class InscripcionDscService { + constructor(private sybaseService: SybaseService) {} + + async userVerification(data: { accountNumber: string }): Promise { + const { accountNumber } = data; + /* console.log(accountNumber) */ + + try { + + this.validarNumeroCuenta(accountNumber); //valida que el numero de cuenta sea string y menor a 9 digitos + + } catch (error) { + + throw error; + } + + const userInformationQuery = `SELECT A.id_cuenta, nombre, if(AI.platica=true,1,0) as confirmacion FROM alumno A + JOIN alumno_inscrito AI ON (A.id_cuenta = AI.id_cuenta) + JOIN periodo P ON (P.id_periodo = AI.id_periodo) + WHERE A.id_cuenta = "${accountNumber}" and P.activo=true`; + + try { + const responseUserInformation = await this.sybaseService.queryDsc( + userInformationQuery, + ); + console.log(responseUserInformation) + return responseUserInformation; + + } catch (error) { + throw error; + } + } + + validarNumeroCuenta = (numeroCuenta) => { + if (typeof numeroCuenta !== 'string' || numeroCuenta.length > 9) + return numeroCuenta; + }; + + async userConfirmation(data: { accountNumber: string }): Promise { + const { accountNumber } = data; + + try { + this.validarNumeroCuenta(accountNumber); + } catch (error) { + throw error; + } + + let userConfirmationQuery = `UPDATE alumno_inscrito SET platica=true + WHERE id_cuenta="${accountNumber}" and id_periodo=(SELECT id_periodo FROM periodo WHERE activo=true)`; + + try { + const responseUserConfirmation = await this.sybaseService.queryDsc( + userConfirmationQuery, + ); + return responseUserConfirmation; + } catch (error) { + throw error; + } + } +} diff --git a/src/inscripcion-usuario/entity/inscripcion_usuario.entity.ts b/src/inscripcion-usuario/entity/inscripcion_usuario.entity.ts index 5be8a77..558dc3d 100644 --- a/src/inscripcion-usuario/entity/inscripcion_usuario.entity.ts +++ b/src/inscripcion-usuario/entity/inscripcion_usuario.entity.ts @@ -9,7 +9,7 @@ export class InscripcionUsuario { id_inscripcion_usuario: number @Column({nullable: false}) - id_usuario: number + id_miembro: number @Column({nullable: false}) id_inscripcion: number @@ -23,7 +23,7 @@ export class InscripcionUsuario { @ManyToOne( () => Miembro, (miebro) => miebro.inscripcionUsuario ) - @JoinColumn({name: "id_usuario"}) + @JoinColumn({name: "id_miembro"}) miembro: Miembro[] } \ No newline at end of file diff --git a/src/miembro-contacto/entity/miembro_contacto.entity.ts b/src/miembro-contacto/entity/miembro_contacto.entity.ts new file mode 100644 index 0000000..3632f98 --- /dev/null +++ b/src/miembro-contacto/entity/miembro_contacto.entity.ts @@ -0,0 +1,26 @@ +import { Contacto } from "src/contacto/entity/contacto.entity"; +import { Miembro } from "src/miembro/entity/miembro.entity"; +import { Column, Entity, JoinColumn, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() +export class MiembroContacto { + @PrimaryGeneratedColumn() + id_miembro_contacto: number + + @Column() + id_miembro: number + + @Column() + id_contacto: number + + @OneToMany( + () => Miembro, (miembro) => miembro.miembroContacto + ) + miembro: Miembro[] + + @OneToMany( + () => Contacto, (contacto) => contacto.miembroContacto + ) + @JoinColumn({name: "id_contacto"}) + contacto: Contacto +} \ No newline at end of file diff --git a/src/miembro-contacto/miembro-contacto.controller.spec.ts b/src/miembro-contacto/miembro-contacto.controller.spec.ts new file mode 100644 index 0000000..8dd6494 --- /dev/null +++ b/src/miembro-contacto/miembro-contacto.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MiembroContactoController } from './miembro-contacto.controller'; + +describe('MiembroContactoController', () => { + let controller: MiembroContactoController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [MiembroContactoController], + }).compile(); + + controller = module.get(MiembroContactoController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/miembro-contacto/miembro-contacto.controller.ts b/src/miembro-contacto/miembro-contacto.controller.ts new file mode 100644 index 0000000..13a2a1e --- /dev/null +++ b/src/miembro-contacto/miembro-contacto.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('miembro-contacto') +export class MiembroContactoController {} diff --git a/src/miembro-contacto/miembro-contacto.module.ts b/src/miembro-contacto/miembro-contacto.module.ts new file mode 100644 index 0000000..b7c7953 --- /dev/null +++ b/src/miembro-contacto/miembro-contacto.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { MiembroContactoController } from './miembro-contacto.controller'; +import { MiembroContactoService } from './miembro-contacto.service'; + +@Module({ + controllers: [MiembroContactoController], + providers: [MiembroContactoService] +}) +export class MiembroContactoModule {} diff --git a/src/miembro-contacto/miembro-contacto.service.spec.ts b/src/miembro-contacto/miembro-contacto.service.spec.ts new file mode 100644 index 0000000..48b4a0d --- /dev/null +++ b/src/miembro-contacto/miembro-contacto.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MiembroContactoService } from './miembro-contacto.service'; + +describe('MiembroContactoService', () => { + let service: MiembroContactoService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [MiembroContactoService], + }).compile(); + + service = module.get(MiembroContactoService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/miembro-contacto/miembro-contacto.service.ts b/src/miembro-contacto/miembro-contacto.service.ts new file mode 100644 index 0000000..5640c78 --- /dev/null +++ b/src/miembro-contacto/miembro-contacto.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class MiembroContactoService {} diff --git a/src/miembro-proyecto/entity/miembro_proyecto.entity.ts b/src/miembro-proyecto/entity/miembro_proyecto.entity.ts new file mode 100644 index 0000000..fe85695 --- /dev/null +++ b/src/miembro-proyecto/entity/miembro_proyecto.entity.ts @@ -0,0 +1,26 @@ +import { Miembro } from "src/miembro/entity/miembro.entity"; +import { Proyecto } from "src/proyecto/entity/proyecto.entity"; +import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; + +@Entity() +export class MiembroProyecto { + @PrimaryGeneratedColumn() + id_miembro_proyecto: number + + @Column() + id_proyecto: number + + @Column() + id_miembro: number + + @ManyToOne( + () => Miembro, (miembro) => miembro.miembroProyecto + ) + @JoinColumn({name: "id_miembro"}) + miembro: Miembro[] + + @OneToMany( + () => Proyecto, (proyecto) => proyecto.miembroProyecto + ) + proyecto: Proyecto[] +} \ No newline at end of file diff --git a/src/miembro-proyecto/miembro-proyecto.controller.spec.ts b/src/miembro-proyecto/miembro-proyecto.controller.spec.ts new file mode 100644 index 0000000..b5cbc40 --- /dev/null +++ b/src/miembro-proyecto/miembro-proyecto.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MiembroProyectoController } from './miembro-proyecto.controller'; + +describe('MiembroProyectoController', () => { + let controller: MiembroProyectoController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [MiembroProyectoController], + }).compile(); + + controller = module.get(MiembroProyectoController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/miembro-proyecto/miembro-proyecto.controller.ts b/src/miembro-proyecto/miembro-proyecto.controller.ts new file mode 100644 index 0000000..7b64551 --- /dev/null +++ b/src/miembro-proyecto/miembro-proyecto.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('miembro-proyecto') +export class MiembroProyectoController {} diff --git a/src/miembro-proyecto/miembro-proyecto.module.ts b/src/miembro-proyecto/miembro-proyecto.module.ts new file mode 100644 index 0000000..a11354c --- /dev/null +++ b/src/miembro-proyecto/miembro-proyecto.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { MiembroProyectoController } from './miembro-proyecto.controller'; +import { MiembroProyectoService } from './miembro-proyecto.service'; + +@Module({ + controllers: [MiembroProyectoController], + providers: [MiembroProyectoService] +}) +export class MiembroProyectoModule {} diff --git a/src/miembro-proyecto/miembro-proyecto.service.spec.ts b/src/miembro-proyecto/miembro-proyecto.service.spec.ts new file mode 100644 index 0000000..230292a --- /dev/null +++ b/src/miembro-proyecto/miembro-proyecto.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { MiembroProyectoService } from './miembro-proyecto.service'; + +describe('MiembroProyectoService', () => { + let service: MiembroProyectoService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [MiembroProyectoService], + }).compile(); + + service = module.get(MiembroProyectoService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/miembro-proyecto/miembro-proyecto.service.ts b/src/miembro-proyecto/miembro-proyecto.service.ts new file mode 100644 index 0000000..ae0c642 --- /dev/null +++ b/src/miembro-proyecto/miembro-proyecto.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class MiembroProyectoService {} diff --git a/src/miembro/entity/miembro.entity.ts b/src/miembro/entity/miembro.entity.ts index 01a436e..e4ee23a 100644 --- a/src/miembro/entity/miembro.entity.ts +++ b/src/miembro/entity/miembro.entity.ts @@ -1,7 +1,10 @@ import { IsEmail } from 'class-validator'; import { Carrera } from 'src/catalogos/carrera.entity'; import { TipoMiembro } from 'src/catalogos/tipo-miembro.entity'; +import { EquipoMiembro } from 'src/equipo-miembro/entity/equipo_miembro.entity'; import { InscripcionUsuario } from 'src/inscripcion-usuario/entity/inscripcion_usuario.entity'; +import { MiembroContacto } from 'src/miembro-contacto/entity/miembro_contacto.entity'; +import { MiembroProyecto } from 'src/miembro-proyecto/entity/miembro_proyecto.entity'; import { Column, Entity, @@ -14,7 +17,7 @@ import { @Entity() export class Miembro { @PrimaryGeneratedColumn() - id_usuario: number; + id_miembro: number; @Column({ nullable: false, length: 50 }) nombre: string; @@ -60,4 +63,20 @@ export class Miembro { @ManyToOne(() => Carrera, (carrera) => carrera.miembro) @JoinColumn({ name: 'id_carrera' }) carrera: Carrera; + + @ManyToOne( + () => MiembroContacto, (miembroContacto) => miembroContacto.miembro + ) + @JoinColumn({name: "id_miembro"}) + miembroContacto: MiembroContacto + + @OneToMany( + () => MiembroProyecto, (miembroProyecto) => miembroProyecto.miembro + ) + miembroProyecto: MiembroProyecto + + @OneToMany( + () => EquipoMiembro, (equipoMiembro) => equipoMiembro.miembro + ) + equipoMiembro: EquipoMiembro } diff --git a/src/proyecto-actividad/proyecto-actividad.controller.spec.ts b/src/proyecto-actividad/proyecto-actividad.controller.spec.ts new file mode 100644 index 0000000..bec3d0e --- /dev/null +++ b/src/proyecto-actividad/proyecto-actividad.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ProyectoActividadController } from './proyecto-actividad.controller'; + +describe('ProyectoActividadController', () => { + let controller: ProyectoActividadController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [ProyectoActividadController], + }).compile(); + + controller = module.get(ProyectoActividadController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/proyecto-actividad/proyecto-actividad.controller.ts b/src/proyecto-actividad/proyecto-actividad.controller.ts new file mode 100644 index 0000000..1dd347e --- /dev/null +++ b/src/proyecto-actividad/proyecto-actividad.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('proyecto-actividad') +export class ProyectoActividadController {} diff --git a/src/proyecto-actividad/proyecto-actividad.module.ts b/src/proyecto-actividad/proyecto-actividad.module.ts new file mode 100644 index 0000000..18f9a43 --- /dev/null +++ b/src/proyecto-actividad/proyecto-actividad.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { ProyectoActividadController } from './proyecto-actividad.controller'; +import { ProyectoActividadService } from './proyecto-actividad.service'; + +@Module({ + controllers: [ProyectoActividadController], + providers: [ProyectoActividadService] +}) +export class ProyectoActividadModule {} diff --git a/src/proyecto-actividad/proyecto-actividad.service.spec.ts b/src/proyecto-actividad/proyecto-actividad.service.spec.ts new file mode 100644 index 0000000..ba6f2b1 --- /dev/null +++ b/src/proyecto-actividad/proyecto-actividad.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ProyectoActividadService } from './proyecto-actividad.service'; + +describe('ProyectoActividadService', () => { + let service: ProyectoActividadService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ProyectoActividadService], + }).compile(); + + service = module.get(ProyectoActividadService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/proyecto-actividad/proyecto-actividad.service.ts b/src/proyecto-actividad/proyecto-actividad.service.ts new file mode 100644 index 0000000..ee94bfb --- /dev/null +++ b/src/proyecto-actividad/proyecto-actividad.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class ProyectoActividadService {} diff --git a/src/proyecto/entity/proyecto.entity.ts b/src/proyecto/entity/proyecto.entity.ts new file mode 100644 index 0000000..8a2a880 --- /dev/null +++ b/src/proyecto/entity/proyecto.entity.ts @@ -0,0 +1,29 @@ +import { MiembroProyecto } from 'src/miembro-proyecto/entity/miembro_proyecto.entity'; +import { Column, Entity, JoinColumn, ManyToOne, PrimaryGeneratedColumn } from 'typeorm'; + +@Entity() +export class Proyecto { + @PrimaryGeneratedColumn() + id_proyecto: number; + + @Column({ length: 50 }) + nombre: string; + + @Column() + activo: boolean; + + @Column({ length: 200 }) + mision: string; + + @Column({ length: 200 }) + vision: string; + + @Column({ length: 200 }) + descripcion: string; + + @ManyToOne( + () => MiembroProyecto, (miembroProyecto) => miembroProyecto.proyecto + ) + @JoinColumn({name: "id_proyecto"}) + miembroProyecto: MiembroProyecto +} diff --git a/src/proyecto/proyecto.controller.spec.ts b/src/proyecto/proyecto.controller.spec.ts new file mode 100644 index 0000000..2152990 --- /dev/null +++ b/src/proyecto/proyecto.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ProyectoController } from './proyecto.controller'; + +describe('ProyectoController', () => { + let controller: ProyectoController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [ProyectoController], + }).compile(); + + controller = module.get(ProyectoController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/proyecto/proyecto.controller.ts b/src/proyecto/proyecto.controller.ts new file mode 100644 index 0000000..34c7313 --- /dev/null +++ b/src/proyecto/proyecto.controller.ts @@ -0,0 +1,4 @@ +import { Controller } from '@nestjs/common'; + +@Controller('proyecto') +export class ProyectoController {} diff --git a/src/proyecto/proyecto.module.ts b/src/proyecto/proyecto.module.ts new file mode 100644 index 0000000..ef9e017 --- /dev/null +++ b/src/proyecto/proyecto.module.ts @@ -0,0 +1,9 @@ +import { Module } from '@nestjs/common'; +import { ProyectoController } from './proyecto.controller'; +import { ProyectoService } from './proyecto.service'; + +@Module({ + controllers: [ProyectoController], + providers: [ProyectoService] +}) +export class ProyectoModule {} diff --git a/src/proyecto/proyecto.service.spec.ts b/src/proyecto/proyecto.service.spec.ts new file mode 100644 index 0000000..beb9439 --- /dev/null +++ b/src/proyecto/proyecto.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { ProyectoService } from './proyecto.service'; + +describe('ProyectoService', () => { + let service: ProyectoService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [ProyectoService], + }).compile(); + + service = module.get(ProyectoService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/proyecto/proyecto.service.ts b/src/proyecto/proyecto.service.ts new file mode 100644 index 0000000..6173b74 --- /dev/null +++ b/src/proyecto/proyecto.service.ts @@ -0,0 +1,4 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class ProyectoService {} diff --git a/src/sybase/sybase.config.ts b/src/sybase/sybase.config.ts new file mode 100644 index 0000000..46ecc65 --- /dev/null +++ b/src/sybase/sybase.config.ts @@ -0,0 +1,10 @@ +export interface SybaseConfig { + + database: string; + + host: string; + + password: string; + + username: string; + } \ No newline at end of file diff --git a/src/sybase/sybase.module-definition.ts b/src/sybase/sybase.module-definition.ts new file mode 100644 index 0000000..0e4a1c6 --- /dev/null +++ b/src/sybase/sybase.module-definition.ts @@ -0,0 +1,7 @@ +import { ConfigurableModuleBuilder } from '@nestjs/common'; +import { SybaseConfig } from './sybase.config'; + +export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = + new ConfigurableModuleBuilder() + .setClassMethodName('forRoot') + .build(); diff --git a/src/sybase/sybase.module.ts b/src/sybase/sybase.module.ts new file mode 100644 index 0000000..7a4be12 --- /dev/null +++ b/src/sybase/sybase.module.ts @@ -0,0 +1,7 @@ +import { Global, Module } from '@nestjs/common'; +import { ConfigurableModuleClass } from './sybase.module-definition'; +import { SybaseService } from './sybase.service'; + +@Global() +@Module({ providers: [SybaseService], exports: [SybaseService] }) +export class SybaseModule extends ConfigurableModuleClass {} diff --git a/src/sybase/sybase.service.ts b/src/sybase/sybase.service.ts new file mode 100644 index 0000000..e96657d --- /dev/null +++ b/src/sybase/sybase.service.ts @@ -0,0 +1,35 @@ +import * as Sybase from 'sybase'; +import { + Inject, + Injectable, + InternalServerErrorException, +} from '@nestjs/common'; +import { SybaseConfig } from './sybase.config'; +import { MODULE_OPTIONS_TOKEN } from './sybase.module-definition'; + +@Injectable() +export class SybaseService { + private db; + + constructor(@Inject(MODULE_OPTIONS_TOKEN) private options: SybaseConfig) { + this.db = new Sybase( + options.host, + options.database, + options.username, + options.password, + ); + } + + queryDsc(consulta: string): Promise { + return new Promise((resolve, reject) => { + this.db.query(consulta, (err, data) => { + console.log(consulta); + if (err) { + reject(err); + } else { + resolve(data); + } + }); + }); + } +} diff --git a/src/usuario/usuario.entity.ts b/src/usuario/usuario.entity.ts index ba268cc..fb343c8 100644 --- a/src/usuario/usuario.entity.ts +++ b/src/usuario/usuario.entity.ts @@ -6,7 +6,7 @@ export class Usuario { id_usuario: number; @Column({ nullable: false }) - name: string; + nombre: string; @Column({ nullable: false }) password: string; -- 2.43.0 From d7af96e7caf83bbc5a60cb65ef4603c1a2904c83 Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Mon, 6 Mar 2023 17:04:20 -0600 Subject: [PATCH 10/15] trabajando en confirmacion --- src/app.module.ts | 12 ----- src/config/db.ts | 51 ------------------- .../inscripcion-dsc.controller.ts | 25 +++------ .../inscripcion-dsc.service.ts | 42 ++++++++++++--- src/sybase/sybase.config.ts | 10 ---- src/sybase/sybase.module-definition.ts | 7 --- src/sybase/sybase.module.ts | 7 --- src/sybase/sybase.service.ts | 35 ------------- 8 files changed, 41 insertions(+), 148 deletions(-) delete mode 100644 src/config/db.ts delete mode 100644 src/sybase/sybase.config.ts delete mode 100644 src/sybase/sybase.module-definition.ts delete mode 100644 src/sybase/sybase.module.ts delete mode 100644 src/sybase/sybase.service.ts diff --git a/src/app.module.ts b/src/app.module.ts index dae2cf4..fd39777 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -44,7 +44,6 @@ import { Contacto } from './contacto/entity/contacto.entity'; import { Equipo } from './equipo/entity/equipo.entity'; import { EquipoEvento } from './equipo-evento/entity/equipo_evento.entity'; import { EquipoMiembro } from './equipo-miembro/entity/equipo_miembro.entity'; -import { SybaseModule } from './sybase/sybase.module'; @Module({ imports: [ @@ -89,17 +88,6 @@ import { SybaseModule } from './sybase/sybase.module'; synchronize: true, }), }), - SybaseModule.forRootAsync({ - inject: [ConfigService], - useFactory: (configService: ConfigService) => { - return { - host: configService.get('DB_HOST_DSC'), - database: configService.get('DB_NAME_DSC'), - username: configService.get('DB_USER_DSC'), - password: configService.get('DB_PASS_DSC'), - }; - }, - }), EventosModule, ParticipanteModule, EventoParticipanteModule, diff --git a/src/config/db.ts b/src/config/db.ts deleted file mode 100644 index b6a612f..0000000 --- a/src/config/db.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import * as mysql from 'mysql2/promise'; - -@Injectable() -export class MysqlService { - private mysqlPool: mysql.Pool; - private mysqlConnection: mysql.Connection; - private mysqlConnectionDscConfirmation: mysql.Connection; - - constructor() { -/* this.mysqlPool = mysql.createPool({ - connectionLimit: 20, - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_NAME, - }); - - this.mysqlConnection = mysql.createConnection({ - host: process.env.DB_HOST, - user: process.env.DB_USER, - password: process.env.DB_PASS, - database: process.env.DB_NAME, - }); - - this.mysqlConnectionDscConfirmation = mysql.createPool({ - connectionLimit: 20, - host: process.env.DB_HOST_DSC, - user: process.env.DB_USER_DSC, - password: process.env.DB_PASS_DSC, - database: process.env.DB_NAME_DSC, - }); */ - - /* this.mysqlConnection.connect((err) => { - if (err) console.log(err); - else console.log('base conectada'); - }); */ - } - - getMysqlConnection(): mysql.Connection { - return this.mysqlConnection; - } - - getMysqlPool(): mysql.Pool { - return this.mysqlPool; - } - - getMysqlConnectionDscConfirmation(): mysql.Connection { - return this.mysqlConnectionDscConfirmation; - } -} \ No newline at end of file diff --git a/src/inscripcion-dsc/inscripcion-dsc.controller.ts b/src/inscripcion-dsc/inscripcion-dsc.controller.ts index fbecd37..85a14e8 100644 --- a/src/inscripcion-dsc/inscripcion-dsc.controller.ts +++ b/src/inscripcion-dsc/inscripcion-dsc.controller.ts @@ -16,21 +16,13 @@ export class InscripcionDscController { async confirmacionDsc(@Body() body: any) { const { accountNumber } = body; -/* this.inscripcionService - .userVerification({ accountNumber }) - .then((res) => { - console.log(res); - }) - .catch((err) => { - return(err) - }); */ + const verificado = await this.inscripcionService.userVerification(accountNumber) + console.log(verificado) - try { + /* try { const userVerificationResponse = - await this.inscripcionService.userVerification({ - accountNumber, - }); - console.log(userVerificationResponse) + await this.inscripcionService.userVerification(accountNumber); + console.log(userVerificationResponse); if (userVerificationResponse.length === 0) { return { error: true, @@ -64,11 +56,6 @@ export class InscripcionDscController { msj: `No se pudo realizar la confirmación del usuario`, desc: `${err}`, }; - } + } */ } - - /* @Get(":id") - getUsuarioById(@Param('id', ParseIntPipe)id: number){ - - } */ } diff --git a/src/inscripcion-dsc/inscripcion-dsc.service.ts b/src/inscripcion-dsc/inscripcion-dsc.service.ts index b89674c..fbbd72e 100644 --- a/src/inscripcion-dsc/inscripcion-dsc.service.ts +++ b/src/inscripcion-dsc/inscripcion-dsc.service.ts @@ -1,13 +1,32 @@ import { Injectable } from '@nestjs/common'; -import { SybaseService } from 'src/sybase/sybase.service'; @Injectable() export class InscripcionDscService { - constructor(private sybaseService: SybaseService) {} + async userVerification(accountNumber: string): Promise { - async userVerification(data: { accountNumber: string }): Promise { - const { accountNumber } = data; - /* console.log(accountNumber) */ + const mysql = require('mysql2'); + + const connection = mysql.createConnection({ + host: process.env.DB_HOST_DSC, + user: process.env.DB_USER_DSC, + password: process.env.DB_PASS_DSC, + database: process.env.DB_NAME_DSC, + }); + + const userInformationQuery = `SELECT A.id_cuenta, nombre, if(AI.platica=true,1,0) as confirmacion FROM alumno A + JOIN alumno_inscrito AI ON (A.id_cuenta = AI.id_cuenta) + JOIN periodo P ON (P.id_periodo = AI.id_periodo) + WHERE A.id_cuenta = "${accountNumber}" and P.activo=true`; + + console.log(userInformationQuery); + + connection.connect(); + connection.query(userInformationQuery, function (error, results, fields) { + if (error) throw error; + console.log('The solution is: ', results); + }); + connection.end(); + /* try { @@ -32,7 +51,7 @@ export class InscripcionDscService { } catch (error) { throw error; - } + } */ } validarNumeroCuenta = (numeroCuenta) => { @@ -41,6 +60,15 @@ export class InscripcionDscService { }; async userConfirmation(data: { accountNumber: string }): Promise { + const mysql = require('mysql2'); + + const connection = mysql.createConnection({ + host: process.env.DB_HOST_DSC, + user: process.env.DB_USER_DSC, + password: process.env.DB_PASS_DSC, + database: process.env.DB_NAME_DSC, + }); + const { accountNumber } = data; try { @@ -53,7 +81,7 @@ export class InscripcionDscService { WHERE id_cuenta="${accountNumber}" and id_periodo=(SELECT id_periodo FROM periodo WHERE activo=true)`; try { - const responseUserConfirmation = await this.sybaseService.queryDsc( + const responseUserConfirmation = await connection.query( userConfirmationQuery, ); return responseUserConfirmation; diff --git a/src/sybase/sybase.config.ts b/src/sybase/sybase.config.ts deleted file mode 100644 index 46ecc65..0000000 --- a/src/sybase/sybase.config.ts +++ /dev/null @@ -1,10 +0,0 @@ -export interface SybaseConfig { - - database: string; - - host: string; - - password: string; - - username: string; - } \ No newline at end of file diff --git a/src/sybase/sybase.module-definition.ts b/src/sybase/sybase.module-definition.ts deleted file mode 100644 index 0e4a1c6..0000000 --- a/src/sybase/sybase.module-definition.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { ConfigurableModuleBuilder } from '@nestjs/common'; -import { SybaseConfig } from './sybase.config'; - -export const { ConfigurableModuleClass, MODULE_OPTIONS_TOKEN } = - new ConfigurableModuleBuilder() - .setClassMethodName('forRoot') - .build(); diff --git a/src/sybase/sybase.module.ts b/src/sybase/sybase.module.ts deleted file mode 100644 index 7a4be12..0000000 --- a/src/sybase/sybase.module.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { Global, Module } from '@nestjs/common'; -import { ConfigurableModuleClass } from './sybase.module-definition'; -import { SybaseService } from './sybase.service'; - -@Global() -@Module({ providers: [SybaseService], exports: [SybaseService] }) -export class SybaseModule extends ConfigurableModuleClass {} diff --git a/src/sybase/sybase.service.ts b/src/sybase/sybase.service.ts deleted file mode 100644 index e96657d..0000000 --- a/src/sybase/sybase.service.ts +++ /dev/null @@ -1,35 +0,0 @@ -import * as Sybase from 'sybase'; -import { - Inject, - Injectable, - InternalServerErrorException, -} from '@nestjs/common'; -import { SybaseConfig } from './sybase.config'; -import { MODULE_OPTIONS_TOKEN } from './sybase.module-definition'; - -@Injectable() -export class SybaseService { - private db; - - constructor(@Inject(MODULE_OPTIONS_TOKEN) private options: SybaseConfig) { - this.db = new Sybase( - options.host, - options.database, - options.username, - options.password, - ); - } - - queryDsc(consulta: string): Promise { - return new Promise((resolve, reject) => { - this.db.query(consulta, (err, data) => { - console.log(consulta); - if (err) { - reject(err); - } else { - resolve(data); - } - }); - }); - } -} -- 2.43.0 From fdd2dc679c11b2166fd4f53c6eb041abee3ea50d Mon Sep 17 00:00:00 2001 From: JorgeMike <119615322+JorgeMike@users.noreply.github.com> Date: Mon, 6 Mar 2023 21:55:25 -0600 Subject: [PATCH 11/15] arreglo en tablas y controllers --- .env | 2 +- src/contacto/entity/contacto.entity.ts | 2 +- .../dto/registrarParticipanteDto.dto.ts | 2 +- .../evento-participante/evento-participante.service.ts | 8 ++++---- src/eventos/dto/crearEvento.dto.ts | 1 + src/eventos/evento.entity.ts | 3 +++ src/inscripcion-dsc/inscripcion-dsc.controller.ts | 3 +-- src/inscripcion-dsc/inscripcion-dsc.service.ts | 4 +--- src/miembro/entity/miembro.entity.ts | 2 +- src/participante/participante.entity.ts | 2 +- src/participante/participante.service.ts | 6 +++--- 11 files changed, 18 insertions(+), 17 deletions(-) diff --git a/.env b/.env index cc0937e..2980646 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ PORT=5089 DB_HOST=localhost DB_USER=root -DB_PASSWORD=password +DB_PASSWORD=Dosmiluno2001 DB_NAME=cedetec_proyectos DB_PORT=3306 diff --git a/src/contacto/entity/contacto.entity.ts b/src/contacto/entity/contacto.entity.ts index 854cd13..9ce9207 100644 --- a/src/contacto/entity/contacto.entity.ts +++ b/src/contacto/entity/contacto.entity.ts @@ -8,7 +8,7 @@ export class Contacto { id_contacto: number @Column({nullable:false}) - correo: string + email: string @Column() horario: string diff --git a/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts b/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts index 7ab0048..04ebcf5 100644 --- a/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts +++ b/src/evento-participante/evento-participante/dto/registrarParticipanteDto.dto.ts @@ -18,5 +18,5 @@ export class RegistrarParticipanteDto { carrera: string; @IsEmail() - correo: string; + email: string; } diff --git a/src/evento-participante/evento-participante/evento-participante.service.ts b/src/evento-participante/evento-participante/evento-participante.service.ts index 2908175..327d555 100644 --- a/src/evento-participante/evento-participante/evento-participante.service.ts +++ b/src/evento-participante/evento-participante/evento-participante.service.ts @@ -19,8 +19,8 @@ export class EventoParticipanteService { private eventoParticipanteRepository: Repository, ) {} - participanteExiste(correo: string) { - return this.participanteRepository.findOne({ where: { correo } }); + participanteExiste(email: string) { + return this.participanteRepository.findOne({ where: { email } }); } async registrarEnEvento( @@ -28,7 +28,7 @@ export class EventoParticipanteService { registrarParticipanteDto: RegistrarParticipanteDto, ) { const participante = await this.participanteExiste( - registrarParticipanteDto.correo, + registrarParticipanteDto.email, ); /* console.log(id_evento); console.log(participante); */ @@ -48,7 +48,7 @@ export class EventoParticipanteService { ) { /* console.log(id_evento); console.log(registrarParticipanteDto); */ - return this.participanteExiste(registrarParticipanteDto.correo).then( + return this.participanteExiste(registrarParticipanteDto.email).then( (res) => { if (res) { this.registrarEnEvento(id_evento, res); diff --git a/src/eventos/dto/crearEvento.dto.ts b/src/eventos/dto/crearEvento.dto.ts index 14b499b..51e66fe 100644 --- a/src/eventos/dto/crearEvento.dto.ts +++ b/src/eventos/dto/crearEvento.dto.ts @@ -5,6 +5,7 @@ export class crearEventoDto { proyecto: string[]; modalidad: string[]; lugar: string; + cupo: number; requisitos: string; cuota_inscripcion: number; patrocinador: string; diff --git a/src/eventos/evento.entity.ts b/src/eventos/evento.entity.ts index 5d2639c..7b46a7e 100644 --- a/src/eventos/evento.entity.ts +++ b/src/eventos/evento.entity.ts @@ -32,6 +32,9 @@ export class Evento { @Column({ nullable: false }) lugar: string; + @Column({nullable: false}) + cupo: number; + @Column({ nullable: false }) requisitos: string; diff --git a/src/inscripcion-dsc/inscripcion-dsc.controller.ts b/src/inscripcion-dsc/inscripcion-dsc.controller.ts index 85a14e8..23419ed 100644 --- a/src/inscripcion-dsc/inscripcion-dsc.controller.ts +++ b/src/inscripcion-dsc/inscripcion-dsc.controller.ts @@ -16,8 +16,7 @@ export class InscripcionDscController { async confirmacionDsc(@Body() body: any) { const { accountNumber } = body; - const verificado = await this.inscripcionService.userVerification(accountNumber) - console.log(verificado) + this.inscripcionService.userVerification(accountNumber) /* try { const userVerificationResponse = diff --git a/src/inscripcion-dsc/inscripcion-dsc.service.ts b/src/inscripcion-dsc/inscripcion-dsc.service.ts index fbbd72e..5daa0b9 100644 --- a/src/inscripcion-dsc/inscripcion-dsc.service.ts +++ b/src/inscripcion-dsc/inscripcion-dsc.service.ts @@ -18,10 +18,8 @@ export class InscripcionDscService { JOIN periodo P ON (P.id_periodo = AI.id_periodo) WHERE A.id_cuenta = "${accountNumber}" and P.activo=true`; - console.log(userInformationQuery); - connection.connect(); - connection.query(userInformationQuery, function (error, results, fields) { + connection.query('SELECT * FROM alumno;', function (error, results, fields) { if (error) throw error; console.log('The solution is: ', results); }); diff --git a/src/miembro/entity/miembro.entity.ts b/src/miembro/entity/miembro.entity.ts index e4ee23a..a1e5807 100644 --- a/src/miembro/entity/miembro.entity.ts +++ b/src/miembro/entity/miembro.entity.ts @@ -33,7 +33,7 @@ export class Miembro { @Column({ nullable: false }) @IsEmail() - correo: string; + email: string; @Column({ nullable: false, length: 40 }) password: string; diff --git a/src/participante/participante.entity.ts b/src/participante/participante.entity.ts index 59774af..8df05e5 100644 --- a/src/participante/participante.entity.ts +++ b/src/participante/participante.entity.ts @@ -19,7 +19,7 @@ export class Participante { telefono: string; @Column({ nullable: false }) - correo: string; + email: string; @Column({ nullable: true }) // password: string; diff --git a/src/participante/participante.service.ts b/src/participante/participante.service.ts index 4f1ae5c..1112e1f 100644 --- a/src/participante/participante.service.ts +++ b/src/participante/participante.service.ts @@ -11,16 +11,16 @@ export class ParticipanteService { private participanteRepository: Repository, ) {} - async participanteExiste(correo: string): Promise { + async participanteExiste(email: string): Promise { /* const participante = await this.participanteRepository.findOne({ where: { correo: correo }, }); return participante !== undefined; */ - return this.participanteRepository.findOne({ where: { correo } }); + return this.participanteRepository.findOne({ where: { email } }); } async registrarParticipante(registrarParticipanteDto: RegistrarParticipanteDto) { - return this.participanteExiste(registrarParticipanteDto.correo).then( + return this.participanteExiste(registrarParticipanteDto.email).then( (participante) => { if (participante) { throw new ConflictException('Este usuario ya está registrado'); -- 2.43.0 From 6618e79a860913ba3bda8bc5f955f172967160a4 Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Tue, 7 Mar 2023 17:39:55 -0600 Subject: [PATCH 12/15] Se completo la confirmacion =) yupi --- .env | 2 +- .../inscripcion-dsc.controller.ts | 39 +++--- .../inscripcion-dsc.service.ts | 119 +++++++++--------- 3 files changed, 76 insertions(+), 84 deletions(-) diff --git a/.env b/.env index 2980646..cc0937e 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ PORT=5089 DB_HOST=localhost DB_USER=root -DB_PASSWORD=Dosmiluno2001 +DB_PASSWORD=password DB_NAME=cedetec_proyectos DB_PORT=3306 diff --git a/src/inscripcion-dsc/inscripcion-dsc.controller.ts b/src/inscripcion-dsc/inscripcion-dsc.controller.ts index 23419ed..1ad0e64 100644 --- a/src/inscripcion-dsc/inscripcion-dsc.controller.ts +++ b/src/inscripcion-dsc/inscripcion-dsc.controller.ts @@ -1,9 +1,6 @@ import { Body, Controller, - Get, - Param, - ParseIntPipe, Post, } from '@nestjs/common'; import { InscripcionDscService } from './inscripcion-dsc.service'; @@ -16,22 +13,23 @@ export class InscripcionDscController { async confirmacionDsc(@Body() body: any) { const { accountNumber } = body; - this.inscripcionService.userVerification(accountNumber) + const userVerification = await this.inscripcionService.userVerification(accountNumber); +/* console.log(userVerification) */ + if(!userVerification){ + return { + error: true, + msj: 'El usuario no se encuentra inscrito', + desc: '', + }; + } - /* try { - const userVerificationResponse = - await this.inscripcionService.userVerification(accountNumber); - console.log(userVerificationResponse); - if (userVerificationResponse.length === 0) { - return { - error: true, - msj: 'El usuario no se encuentra inscrito', - desc: '', - }; - } - const [userInformation] = userVerificationResponse; - console.log(userInformation); - if (userInformation.confirmacion) { + const userInformation = userVerification; +/* console.log(userInformation[0].confirmacion) */ + + + try{ +/* console.log("verificando confirmacion:", userInformation); + */ if (userInformation[0].confirmacion) { return { error: true, msj: 'El usuario ya hizo la confirmación anteriormente', @@ -41,9 +39,10 @@ export class InscripcionDscController { } catch (err) { return console.log(err); } + try { const confirmationResponse = - await this.inscripcionService.userConfirmation({ accountNumber }); + await this.inscripcionService.userConfirmation(accountNumber); return { error: false, msj: 'Usuario confirmado exitosamente', @@ -55,6 +54,6 @@ export class InscripcionDscController { msj: `No se pudo realizar la confirmación del usuario`, desc: `${err}`, }; - } */ + } } } diff --git a/src/inscripcion-dsc/inscripcion-dsc.service.ts b/src/inscripcion-dsc/inscripcion-dsc.service.ts index 5daa0b9..4f17f90 100644 --- a/src/inscripcion-dsc/inscripcion-dsc.service.ts +++ b/src/inscripcion-dsc/inscripcion-dsc.service.ts @@ -1,90 +1,83 @@ import { Injectable } from '@nestjs/common'; +import { createConnection } from 'mysql2/promise'; @Injectable() export class InscripcionDscService { - async userVerification(accountNumber: string): Promise { - - const mysql = require('mysql2'); - - const connection = mysql.createConnection({ - host: process.env.DB_HOST_DSC, - user: process.env.DB_USER_DSC, - password: process.env.DB_PASS_DSC, - database: process.env.DB_NAME_DSC, - }); - - const userInformationQuery = `SELECT A.id_cuenta, nombre, if(AI.platica=true,1,0) as confirmacion FROM alumno A - JOIN alumno_inscrito AI ON (A.id_cuenta = AI.id_cuenta) - JOIN periodo P ON (P.id_periodo = AI.id_periodo) - WHERE A.id_cuenta = "${accountNumber}" and P.activo=true`; - - connection.connect(); - connection.query('SELECT * FROM alumno;', function (error, results, fields) { - if (error) throw error; - console.log('The solution is: ', results); - }); - connection.end(); - /* - + async userVerification(accountNumber: string) { try { + const connection = await createConnection({ + host: process.env.DB_HOST_DSC, + user: process.env.DB_USER_DSC, + password: process.env.DB_PASS_DSC, + database: process.env.DB_NAME_DSC, + }); - this.validarNumeroCuenta(accountNumber); //valida que el numero de cuenta sea string y menor a 9 digitos + const userInformationQuery = `SELECT A.id_cuenta, nombre, if(AI.platica=true,1,0) as confirmacion FROM alumno A + JOIN alumno_inscrito AI ON (A.id_cuenta = AI.id_cuenta) + JOIN periodo P ON (P.id_periodo = AI.id_periodo) + WHERE A.id_cuenta = "${accountNumber}" and P.activo=true`; + const qryEjemplo = `SELECT * FROM alumno WHERE id_cuenta="${accountNumber}";`; + + const [results] = await connection.query(userInformationQuery); + const resultsArray = JSON.parse(JSON.stringify(results)); + if (resultsArray.length === 0) return null; + /* console.log('The solution is: ', resultsArray); */ + + return results; } catch (error) { - throw error; } - - const userInformationQuery = `SELECT A.id_cuenta, nombre, if(AI.platica=true,1,0) as confirmacion FROM alumno A - JOIN alumno_inscrito AI ON (A.id_cuenta = AI.id_cuenta) - JOIN periodo P ON (P.id_periodo = AI.id_periodo) - WHERE A.id_cuenta = "${accountNumber}" and P.activo=true`; - + } + + async userConfirmation(accountNumber: string): Promise { try { - const responseUserInformation = await this.sybaseService.queryDsc( - userInformationQuery, - ); - console.log(responseUserInformation) - return responseUserInformation; + const connection = await createConnection({ + host: process.env.DB_HOST_DSC, + user: process.env.DB_USER_DSC, + password: process.env.DB_PASS_DSC, + database: process.env.DB_NAME_DSC, + }); + const userInformationQuery = `UPDATE alumno_inscrito SET platica=true + WHERE id_cuenta="${accountNumber}" and id_periodo=(SELECT id_periodo FROM periodo WHERE activo=true)`; + + const qryEjemplo = `select platica from alumno_inscrito WHERE id_cuenta="${accountNumber}"`; + + const [results] = await connection.query(qryEjemplo); + const resultsArray = JSON.parse(JSON.stringify(results)); + if (resultsArray.length === 0) return null; + /* console.log('The solution is: ', resultsArray); */ + + return results; } catch (error) { throw error; - } */ - } - - validarNumeroCuenta = (numeroCuenta) => { - if (typeof numeroCuenta !== 'string' || numeroCuenta.length > 9) - return numeroCuenta; - }; - - async userConfirmation(data: { accountNumber: string }): Promise { - const mysql = require('mysql2'); - - const connection = mysql.createConnection({ - host: process.env.DB_HOST_DSC, - user: process.env.DB_USER_DSC, - password: process.env.DB_PASS_DSC, - database: process.env.DB_NAME_DSC, - }); - - const { accountNumber } = data; + } + + /* const { accountNumber } = data; try { this.validarNumeroCuenta(accountNumber); } catch (error) { throw error; } - + let userConfirmationQuery = `UPDATE alumno_inscrito SET platica=true - WHERE id_cuenta="${accountNumber}" and id_periodo=(SELECT id_periodo FROM periodo WHERE activo=true)`; + WHERE id_cuenta="${accountNumber}" and id_periodo=(SELECT id_periodo FROM periodo WHERE activo=true)`; try { const responseUserConfirmation = await connection.query( userConfirmationQuery, - ); - return responseUserConfirmation; - } catch (error) { - throw error; - } + ); + return responseUserConfirmation; + } catch (error) { + throw error; + } + } */ } + + validarNumeroCuenta = (numeroCuenta) => { + if (typeof numeroCuenta !== 'string' || numeroCuenta.length > 9) + return numeroCuenta; + }; } -- 2.43.0 From 5348a329d577616163ca3fa251615187d72c8c1b Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Wed, 8 Mar 2023 15:28:54 -0600 Subject: [PATCH 13/15] Se corrigio el login --- sql/01-tipo_miembro.sql | 2 ++ src/auth/auth.controller.ts | 5 +-- src/auth/auth.module.ts | 12 +++---- src/auth/auth.service.ts | 35 ++++++++++--------- src/auth/dto/loginMiembro.dto.ts | 11 ++++++ src/auth/dto/registrarMiembro.dto.ts | 33 +++++++++++++++++ .../entity/miembro_contacto.entity.ts | 4 +-- src/miembro/entity/miembro.entity.ts | 12 +++---- src/miembro/miembro.controller.ts | 16 +++++++-- src/miembro/miembro.module.ts | 3 ++ src/miembro/miembro.service.ts | 21 ++++++++++- 11 files changed, 118 insertions(+), 36 deletions(-) create mode 100644 sql/01-tipo_miembro.sql create mode 100644 src/auth/dto/loginMiembro.dto.ts create mode 100644 src/auth/dto/registrarMiembro.dto.ts diff --git a/sql/01-tipo_miembro.sql b/sql/01-tipo_miembro.sql new file mode 100644 index 0000000..1e87c8f --- /dev/null +++ b/sql/01-tipo_miembro.sql @@ -0,0 +1,2 @@ +INSERT INTO tipo_miembro(tipo_miembro) VALUES("Admin"); +INSERT INTO tipo_miembro(tipo_miembro) VALUES("Alumno"); diff --git a/src/auth/auth.controller.ts b/src/auth/auth.controller.ts index 4b43b6c..30fadac 100644 --- a/src/auth/auth.controller.ts +++ b/src/auth/auth.controller.ts @@ -5,6 +5,7 @@ import { Usuario } from 'src/usuario/usuario.entity'; import { Repository } from 'typeorm'; import { AuthService } from './auth.service'; import { LoginUsuarioDto } from './dto/loginUsuario.dto'; +import { RegistrarMiembroDto } from './dto/registrarMiembro.dto'; import { RegistrarUsuarioDto } from './dto/registrarUsuario.dto'; @Controller('auth') @@ -14,8 +15,8 @@ export class AuthController { ) /* @InjectRepository(Usuario) private usuarioRepository: Repository */ {} @Post('registro') - registrarUsuario(@Body() registrarUsuario: RegistrarUsuarioDto) { - return this.authService.registrar(registrarUsuario); + registrarUsuario(@Body() registrarMiembro: RegistrarMiembroDto) { + return this.authService.registrar(registrarMiembro); } @Post('login') diff --git a/src/auth/auth.module.ts b/src/auth/auth.module.ts index 2e3c76d..28f3f79 100644 --- a/src/auth/auth.module.ts +++ b/src/auth/auth.module.ts @@ -1,26 +1,26 @@ import { Module } from '@nestjs/common'; import { PassportModule } from '@nestjs/passport'; -import { UsuarioModule } from 'src/usuario/usuario.module'; import { AuthService } from './auth.service'; import { jwtStrategy } from './jwt.strategy'; import { AuthController } from './auth.controller'; import { TypeOrmModule } from '@nestjs/typeorm'; -import { Usuario } from 'src/usuario/usuario.entity'; -import { UsuarioService } from 'src/usuario/usuario.service'; import { JwtModule } from '@nestjs/jwt'; import { jwtConstants } from './jwt.constants'; +import { MiembroModule } from 'src/miembro/miembro.module'; +import { MiembroService } from 'src/miembro/miembro.service'; +import { Miembro } from 'src/miembro/entity/miembro.entity'; @Module({ imports: [ - UsuarioModule, + MiembroModule, PassportModule, - TypeOrmModule.forFeature([Usuario]), + TypeOrmModule.forFeature([Miembro]), JwtModule.register({ secret: jwtConstants.secret, signOptions: { expiresIn: '5h' }, }), ], - providers: [AuthService, jwtStrategy, UsuarioService, jwtStrategy], + providers: [AuthService, jwtStrategy, MiembroService, jwtStrategy], controllers: [AuthController], }) export class AuthModule {} diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index b32c96c..8504a60 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -1,45 +1,44 @@ import { HttpException, Injectable } from '@nestjs/common'; -import { UsuarioService } from 'src/usuario/usuario.service'; import { JwtService } from '@nestjs/jwt'; import * as bcrypt from 'bcrypt'; -import { RegistrarUsuarioDto } from './dto/registrarUsuario.dto'; import { hash } from 'bcrypt'; import { InjectRepository } from '@nestjs/typeorm'; -import { Usuario } from 'src/usuario/usuario.entity'; import { Repository } from 'typeorm'; -import { LoginUsuarioDto } from './dto/loginUsuario.dto'; import { compare } from 'bcrypt'; import { jwtConstants } from './jwt.constants'; +import { LoginMiembroDto } from './dto/loginMiembro.dto'; +import { Miembro } from 'src/miembro/entity/miembro.entity'; +import { RegistrarMiembroDto } from './dto/registrarMiembro.dto'; @Injectable() export class AuthService { constructor( private jwtService: JwtService, - private readonly usuarioService: UsuarioService, - @InjectRepository(Usuario) private usuarioRepository: Repository, + @InjectRepository(Miembro) private miembroRepository: Repository, + ) {} - async registrar(registrarUsuario: RegistrarUsuarioDto) { + async registrar(registrarMiembro: RegistrarMiembroDto) { - const { email, password } = registrarUsuario; + const { email, password } = registrarMiembro; const plainToHash = await hash(password, 10); - if (await this.usuarioRepository.findOne({ where: { email } })) + if (await this.miembroRepository.findOne({ where: { email } })) throw new HttpException('usuario existe', 403); - registrarUsuario = { ...registrarUsuario, password: plainToHash }; + registrarMiembro = { ...registrarMiembro, password: plainToHash }; - return this.usuarioRepository.save( - this.usuarioRepository.create(registrarUsuario), + return this.miembroRepository.save( + this.miembroRepository.create(registrarMiembro), ); } - async login(loginUsuario: LoginUsuarioDto) { - const { email, password } = loginUsuario; + async login(loginMiembro: LoginMiembroDto) { + const { email, password } = loginMiembro; - const usuario = await this.usuarioRepository.findOne({ where: { email } }); + const usuario = await this.miembroRepository.findOne({ where: { email } }); if (!usuario) throw new HttpException('Usuario no encontrado', 404); @@ -47,12 +46,14 @@ export class AuthService { if (!checkPassword) throw new HttpException('Contraseña incorrecta', 403); - const payload = { id_usuario: usuario.id_usuario, name: usuario.nombre }; + const payload = { id_usuario: usuario.id_miembro,id_tipoMiembro: usuario.id_tipo_miembro, name: usuario.nombre }; + console.log(payload) const token = this.jwtService.sign(payload); //firma el token + console.log(token) const data = { usuario: usuario.nombre, - id: usuario.id_usuario, + id: usuario.id_miembro, email: usuario.email, token, }; diff --git a/src/auth/dto/loginMiembro.dto.ts b/src/auth/dto/loginMiembro.dto.ts new file mode 100644 index 0000000..f8f9780 --- /dev/null +++ b/src/auth/dto/loginMiembro.dto.ts @@ -0,0 +1,11 @@ +import { IsEmail, MaxLength, MinLength } from "class-validator" + + +export class LoginMiembroDto { + @IsEmail() + email: string + + @MinLength(10) + @MaxLength(15) + password: string +} \ No newline at end of file diff --git a/src/auth/dto/registrarMiembro.dto.ts b/src/auth/dto/registrarMiembro.dto.ts new file mode 100644 index 0000000..bc2c341 --- /dev/null +++ b/src/auth/dto/registrarMiembro.dto.ts @@ -0,0 +1,33 @@ +import { PartialType } from '@nestjs/swagger'; +import { IsEmail, IsNotEmpty, MaxLength, MinLength } from 'class-validator'; +import { LoginUsuarioDto } from './loginUsuario.dto'; + +export class RegistrarMiembroDto extends PartialType(LoginUsuarioDto) { + @IsNotEmpty() + nombre: string; + + @IsNotEmpty() + apellido_paterno: string; + + @IsNotEmpty() + apellido_materno: string; + + @IsNotEmpty() + id_tipo_miembro: number; + + @MinLength(10) + @MaxLength(15) + password: string; + + descripcion: string + + id_carrera: number + + semestre: string + + @IsNotEmpty() + cuenta: number + + @IsEmail() + email: string; +} diff --git a/src/miembro-contacto/entity/miembro_contacto.entity.ts b/src/miembro-contacto/entity/miembro_contacto.entity.ts index 3632f98..7b5a77f 100644 --- a/src/miembro-contacto/entity/miembro_contacto.entity.ts +++ b/src/miembro-contacto/entity/miembro_contacto.entity.ts @@ -13,10 +13,10 @@ export class MiembroContacto { @Column() id_contacto: number - @OneToMany( +/* @OneToMany( () => Miembro, (miembro) => miembro.miembroContacto ) - miembro: Miembro[] + miembro: Miembro[] */ @OneToMany( () => Contacto, (contacto) => contacto.miembroContacto diff --git a/src/miembro/entity/miembro.entity.ts b/src/miembro/entity/miembro.entity.ts index a1e5807..2ccff7e 100644 --- a/src/miembro/entity/miembro.entity.ts +++ b/src/miembro/entity/miembro.entity.ts @@ -35,16 +35,16 @@ export class Miembro { @IsEmail() email: string; - @Column({ nullable: false, length: 40 }) + @Column({ nullable: false }) password: string; - @Column({ length: 260, nullable: false }) + @Column({ length: 260, nullable:true}) descripcion: string; - @Column({ nullable: false }) + @Column({nullable: true}) id_carrera: number; - @Column({ length: 40 }) + @Column({ length: 40, nullable:true}) semestre: string; @Column({ nullable: false }) @@ -64,11 +64,11 @@ export class Miembro { @JoinColumn({ name: 'id_carrera' }) carrera: Carrera; - @ManyToOne( +/* @ManyToOne( () => MiembroContacto, (miembroContacto) => miembroContacto.miembro ) @JoinColumn({name: "id_miembro"}) - miembroContacto: MiembroContacto + miembroContacto: MiembroContacto */ @OneToMany( () => MiembroProyecto, (miembroProyecto) => miembroProyecto.miembro diff --git a/src/miembro/miembro.controller.ts b/src/miembro/miembro.controller.ts index 464fcf5..35d28cb 100644 --- a/src/miembro/miembro.controller.ts +++ b/src/miembro/miembro.controller.ts @@ -1,4 +1,16 @@ -import { Controller } from '@nestjs/common'; +import { Controller, Get, UseGuards } from '@nestjs/common'; +import { JwtAuthGuard } from 'src/auth/jwt-auth.guard'; +import { Miembro } from './entity/miembro.entity'; +import { MiembroService } from './miembro.service'; @Controller('miembro') -export class MiembroController {} +export class MiembroController { + + constructor(private readonly miembroService: MiembroService){} + + @UseGuards(JwtAuthGuard) + @Get() + getUsuarios(): Promise{ + return this.miembroService.getUsuarios() + } +} diff --git a/src/miembro/miembro.module.ts b/src/miembro/miembro.module.ts index d68d418..73ffcb3 100644 --- a/src/miembro/miembro.module.ts +++ b/src/miembro/miembro.module.ts @@ -1,8 +1,11 @@ import { Module } from '@nestjs/common'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Miembro } from './entity/miembro.entity'; import { MiembroController } from './miembro.controller'; import { MiembroService } from './miembro.service'; @Module({ + imports:[TypeOrmModule.forFeature([Miembro])], controllers: [MiembroController], providers: [MiembroService] }) diff --git a/src/miembro/miembro.service.ts b/src/miembro/miembro.service.ts index 9caed0f..1878615 100644 --- a/src/miembro/miembro.service.ts +++ b/src/miembro/miembro.service.ts @@ -1,4 +1,23 @@ import { Injectable } from '@nestjs/common'; +import { InjectRepository } from '@nestjs/typeorm'; +import { Repository } from 'typeorm'; +import { Miembro } from './entity/miembro.entity'; @Injectable() -export class MiembroService {} +export class MiembroService { + constructor( + @InjectRepository(Miembro) private miembroRepository: Repository, + ) {} + + getUsuarios(){ + return this.miembroRepository.find() + } + + getUsuario(email: string) { + return this.miembroRepository.findOne({ + where: { + email, + }, + }); + } +} -- 2.43.0 From d95c666648b60f70f54db5bb128d66891b4030fc Mon Sep 17 00:00:00 2001 From: JorgeMike <119615322+JorgeMike@users.noreply.github.com> Date: Wed, 8 Mar 2023 22:07:47 -0600 Subject: [PATCH 14/15] =?UTF-8?q?se=20a=C3=B1adio=20sql=20para=20primer=20?= =?UTF-8?q?usuario?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .env | 2 +- sql/00-admin.sql | 3 ++- src/auth/auth.service.ts | 24 +++++++++++++----------- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/.env b/.env index cc0937e..2980646 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ PORT=5089 DB_HOST=localhost DB_USER=root -DB_PASSWORD=password +DB_PASSWORD=Dosmiluno2001 DB_NAME=cedetec_proyectos DB_PORT=3306 diff --git a/sql/00-admin.sql b/sql/00-admin.sql index 0755541..bd2d9d4 100644 --- a/sql/00-admin.sql +++ b/sql/00-admin.sql @@ -1 +1,2 @@ -INSERT INTO usuario (nombre, password, email) VALUES("jorge", "Canela1108", "admin@unam.com"); \ No newline at end of file +INSERT INTO miembro (nombre, apellido_paterno, apellido_materno, id_tipo_miembro, email, password, descripcion, semestre, cuenta) +VALUES ('Jorge', 'Alvarado', 'Reyes', 1, 'Admin@unam.com', '$2b$10$1ExBjP1J1PET5N4m9Thv7O0l0nNjPsMYQW6.TZveaCFz0OkLh06Dy', 'Estudiante de Ingeniería en Sistemas', '4', 421010301); diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 8504a60..64d2f2b 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -15,17 +15,16 @@ export class AuthService { constructor( private jwtService: JwtService, @InjectRepository(Miembro) private miembroRepository: Repository, - ) {} async registrar(registrarMiembro: RegistrarMiembroDto) { - const { email, password } = registrarMiembro; - const plainToHash = await hash(password, 10); + if (await this.miembroRepository.findOne({ where: { email } })) { + throw new HttpException('El usuario ya existe', 403); + } - if (await this.miembroRepository.findOne({ where: { email } })) - throw new HttpException('usuario existe', 403); + const plainToHash = await hash(password, 10); registrarMiembro = { ...registrarMiembro, password: plainToHash }; @@ -34,22 +33,25 @@ export class AuthService { ); } - async login(loginMiembro: LoginMiembroDto) { const { email, password } = loginMiembro; const usuario = await this.miembroRepository.findOne({ where: { email } }); - + if (!usuario) throw new HttpException('Usuario no encontrado', 404); const checkPassword = await compare(password, (await usuario).password); if (!checkPassword) throw new HttpException('Contraseña incorrecta', 403); - const payload = { id_usuario: usuario.id_miembro,id_tipoMiembro: usuario.id_tipo_miembro, name: usuario.nombre }; - console.log(payload) + const payload = { + id_usuario: usuario.id_miembro, + id_tipoMiembro: usuario.id_tipo_miembro, + name: usuario.nombre, + }; + console.log(payload); const token = this.jwtService.sign(payload); //firma el token - console.log(token) + console.log(token); const data = { usuario: usuario.nombre, @@ -58,6 +60,6 @@ export class AuthService { token, }; - return data; + return data; } } -- 2.43.0 From 69fb4d1b3f180e4add450a8ec50aa71bd489bde2 Mon Sep 17 00:00:00 2001 From: jalvarado <421010301@pcpuma.acatlan.unam.mx> Date: Thu, 9 Mar 2023 10:18:14 -0600 Subject: [PATCH 15/15] se comentaron algunos console.log y se cambiaron los sql --- .env | 2 +- sql/{01-tipo_miembro.sql => 00-tipo_miembro.sql} | 0 sql/{00-admin.sql => 01-admin.sql} | 0 src/auth/auth.service.ts | 4 ++-- 4 files changed, 3 insertions(+), 3 deletions(-) rename sql/{01-tipo_miembro.sql => 00-tipo_miembro.sql} (100%) rename sql/{00-admin.sql => 01-admin.sql} (100%) diff --git a/.env b/.env index 2980646..cc0937e 100644 --- a/.env +++ b/.env @@ -2,7 +2,7 @@ PORT=5089 DB_HOST=localhost DB_USER=root -DB_PASSWORD=Dosmiluno2001 +DB_PASSWORD=password DB_NAME=cedetec_proyectos DB_PORT=3306 diff --git a/sql/01-tipo_miembro.sql b/sql/00-tipo_miembro.sql similarity index 100% rename from sql/01-tipo_miembro.sql rename to sql/00-tipo_miembro.sql diff --git a/sql/00-admin.sql b/sql/01-admin.sql similarity index 100% rename from sql/00-admin.sql rename to sql/01-admin.sql diff --git a/src/auth/auth.service.ts b/src/auth/auth.service.ts index 64d2f2b..2943e37 100644 --- a/src/auth/auth.service.ts +++ b/src/auth/auth.service.ts @@ -49,9 +49,9 @@ export class AuthService { id_tipoMiembro: usuario.id_tipo_miembro, name: usuario.nombre, }; - console.log(payload); + /* console.log(payload); */ const token = this.jwtService.sign(payload); //firma el token - console.log(token); + /* console.log(token); */ const data = { usuario: usuario.nombre, -- 2.43.0