From 7b72ee4ec694b2985e086bc0446b52ec9955be68 Mon Sep 17 00:00:00 2001 From: santiago Date: Wed, 2 Apr 2025 09:15:14 -0600 Subject: [PATCH] Cambios en las relaciones de evento, participante_evento y participante. --- package-lock.json | 185 +++++++++++++++++- package.json | 7 +- src/app.module.ts | 35 +++- .../cuestionario_respondido.entity.ts | 1 + src/evento/evento.entity.ts | 13 +- src/evento/evento.module.ts | 3 +- src/main.ts | 10 +- src/opcion/dto/create-opcion.dto.ts | 2 - src/opcion/opcion.module.ts | 4 + src/opcion/opcion.service.ts | 8 +- src/participante/participante.entity.ts | 23 ++- src/participante/participante.service.ts | 6 +- .../participante_evento.entity.ts | 15 +- .../participante_evento.module.ts | 6 +- .../participante_evento.service.ts | 10 +- .../entities/pregunta_opcion.entity.ts | 4 +- src/tipo_pregunta/tipo_pregunta.controller.ts | 6 + src/tipo_pregunta/tipo_pregunta.service.ts | 6 + 18 files changed, 305 insertions(+), 39 deletions(-) diff --git a/package-lock.json b/package-lock.json index d47efe7..8815789 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,13 +9,16 @@ "version": "0.0.1", "license": "UNLICENSED", "dependencies": { - "@nestjs/common": "^11.0.1", + "@nestjs/common": "^11.0.12", "@nestjs/config": "^4.0.2", "@nestjs/core": "^11.0.1", "@nestjs/mapped-types": "*", "@nestjs/platform-express": "^11.0.1", + "@nestjs/swagger": "^11.1.0", "@nestjs/typeorm": "^11.0.0", "class-validator": "^0.14.1", + "dotenv": "^16.4.7", + "mysql2": "^3.14.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", "typeorm": "^0.3.21" @@ -44,7 +47,7 @@ "ts-loader": "^9.5.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "typescript-eslint": "^8.20.0" } }, @@ -1906,6 +1909,12 @@ "node": ">=8" } }, + "node_modules/@microsoft/tsdoc": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.15.1.tgz", + "integrity": "sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==", + "license": "MIT" + }, "node_modules/@napi-rs/nice": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@napi-rs/nice/-/nice-1.0.1.tgz", @@ -2495,6 +2504,39 @@ "tslib": "^2.1.0" } }, + "node_modules/@nestjs/swagger": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/swagger/-/swagger-11.1.0.tgz", + "integrity": "sha512-+GQ+q1ASTBvGi0DYHukWi8NVVVLszedwLLqHdLRnJh8rjokt8YTDb7roImvT/YMmYgPvaWBv/4JYdZH4FueLPQ==", + "license": "MIT", + "dependencies": { + "@microsoft/tsdoc": "0.15.1", + "@nestjs/mapped-types": "2.1.0", + "js-yaml": "4.1.0", + "lodash": "4.17.21", + "path-to-regexp": "8.2.0", + "swagger-ui-dist": "5.20.1" + }, + "peerDependencies": { + "@fastify/static": "^8.0.0", + "@nestjs/common": "^11.0.1", + "@nestjs/core": "^11.0.1", + "class-transformer": "*", + "class-validator": "*", + "reflect-metadata": "^0.1.12 || ^0.2.0" + }, + "peerDependenciesMeta": { + "@fastify/static": { + "optional": true + }, + "class-transformer": { + "optional": true + }, + "class-validator": { + "optional": true + } + } + }, "node_modules/@nestjs/testing": { "version": "11.0.12", "resolved": "https://registry.npmjs.org/@nestjs/testing/-/testing-11.0.12.tgz", @@ -2613,6 +2655,13 @@ "url": "https://opencollective.com/unts" } }, + "node_modules/@scarf/scarf": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scarf/scarf/-/scarf-1.4.0.tgz", + "integrity": "sha512-xxeapPiUXdZAE3che6f3xogoJPeZgig6omHEy1rIY5WVsB3H2BHNnZH+gHG6x91SCWyQCzWGsuL2Hh3ClO5/qQ==", + "hasInstallScript": true, + "license": "Apache-2.0" + }, "node_modules/@sec-ant/readable-stream": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz", @@ -4115,7 +4164,6 @@ "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, "license": "Python-2.0" }, "node_modules/array-timsort": { @@ -4146,6 +4194,15 @@ "dev": true, "license": "MIT" }, + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" + } + }, "node_modules/b4a": { "version": "1.6.7", "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", @@ -5248,6 +5305,15 @@ "node": ">=0.4.0" } }, + "node_modules/denque": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz", + "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==", + "license": "Apache-2.0", + "engines": { + "node": ">=0.10" + } + }, "node_modules/depd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", @@ -6499,6 +6565,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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==", + "license": "MIT", + "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", @@ -7077,6 +7152,12 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "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==", + "license": "MIT" + }, "node_modules/is-stream": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", @@ -7912,7 +7993,6 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", - "dev": true, "license": "MIT", "dependencies": { "argparse": "^2.0.1" @@ -8125,6 +8205,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/long": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/long/-/long-5.3.1.tgz", + "integrity": "sha512-ka87Jz3gcx/I7Hal94xaN2tZEOPoUOEVftkQqZx2EeQRN7LGdfLlI3FvZ+7WDplm+vK2Urx9ULrvSowtdCieng==", + "license": "Apache-2.0" + }, "node_modules/lowercase-keys": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-3.0.0.tgz", @@ -8148,6 +8234,21 @@ "yallist": "^3.0.2" } }, + "node_modules/lru.min": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.2.tgz", + "integrity": "sha512-Nv9KddBcQSlQopmBHXSsZVY5xsdlZkdH/Iey0BlcBYggMd4two7cZnKOK9vmy3nY0O5RGH99z1PCeTpPqszUYg==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, "node_modules/magic-string": { "version": "0.30.17", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", @@ -8464,6 +8565,59 @@ "node": "^18.17.0 || >=20.5.0" } }, + "node_modules/mysql2": { + "version": "3.14.0", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.14.0.tgz", + "integrity": "sha512-8eMhmG6gt/hRkU1G+8KlGOdQi2w+CgtNoD1ksXZq9gQfkfDsX4LHaBwTe1SY0Imx//t2iZA03DFnyYKPinxSRw==", + "license": "MIT", + "dependencies": { + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", + "generate-function": "^2.3.1", + "iconv-lite": "^0.6.3", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "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==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.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==", + "license": "MIT", + "dependencies": { + "lru-cache": "^7.14.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/named-placeholders/node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -9637,6 +9791,11 @@ "node": ">= 0.6" } }, + "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.2", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", @@ -9883,6 +10042,15 @@ "node": ">=14" } }, + "node_modules/sqlstring": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/sqlstring/-/sqlstring-2.3.3.tgz", + "integrity": "sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==", + "license": "MIT", + "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", @@ -10220,6 +10388,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/swagger-ui-dist": { + "version": "5.20.1", + "resolved": "https://registry.npmjs.org/swagger-ui-dist/-/swagger-ui-dist-5.20.1.tgz", + "integrity": "sha512-qBPCis2w8nP4US7SvUxdJD3OwKcqiWeZmjN2VWhq2v+ESZEXOP/7n4DeiOiiZcGYTKMHAHUUrroHaTsjUWTEGw==", + "license": "Apache-2.0", + "dependencies": { + "@scarf/scarf": "=1.4.0" + } + }, "node_modules/symbol-observable": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-4.0.0.tgz", diff --git a/package.json b/package.json index b3ae839..f18668e 100644 --- a/package.json +++ b/package.json @@ -20,13 +20,16 @@ "test:e2e": "jest --config ./test/jest-e2e.json" }, "dependencies": { - "@nestjs/common": "^11.0.1", + "@nestjs/common": "^11.0.12", "@nestjs/config": "^4.0.2", "@nestjs/core": "^11.0.1", "@nestjs/mapped-types": "*", "@nestjs/platform-express": "^11.0.1", + "@nestjs/swagger": "^11.1.0", "@nestjs/typeorm": "^11.0.0", "class-validator": "^0.14.1", + "dotenv": "^16.4.7", + "mysql2": "^3.14.0", "reflect-metadata": "^0.2.2", "rxjs": "^7.8.1", "typeorm": "^0.3.21" @@ -55,7 +58,7 @@ "ts-loader": "^9.5.2", "ts-node": "^10.9.2", "tsconfig-paths": "^4.2.0", - "typescript": "^5.7.3", + "typescript": "^5.8.2", "typescript-eslint": "^8.20.0" }, "jest": { diff --git a/src/app.module.ts b/src/app.module.ts index 3d16193..1bcc365 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -1,3 +1,4 @@ +//import { Module } from '@nestjs/common; import { Module } from '@nestjs/common'; import { AppController } from './app.controller'; import { AppService } from './app.service'; @@ -15,14 +16,22 @@ import { CuestionarioRespondidoModule } from './cuestionario_respondido/cuestion import { RespuestaParticipanteAbiertaModule } from './respuesta_participante_abierta/respuesta_participante_abierta.module'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ConfigModule } from '@nestjs/config'; +import { EventoModule } from './evento/evento.module'; +import { TipoUserModule } from './tipo_user/tipo_user.module'; +import { ParticipanteModule } from './participante/participante.module'; +import { QrModule } from './qr/qr.module'; +import { AdministradorModule } from './administrador/administrador.module'; +import { AsistenciaModule } from './asistencia/asistencia.module'; +import { ParticipanteEventoModule } from './participante_evento/participante_evento.module'; @Module({ imports: [ ConfigModule.forRoot(), TypeOrmModule.forRoot({ + /* type: 'mysql', - host: process.env.db_host, + host: process.env.db_host, //process.env.db_host username: process.env.db_username, database: process.env.db_database, password: process.env.db_password, @@ -31,7 +40,19 @@ import { ConfigModule } from '@nestjs/config'; dropSchema: true, // elimina la base de datos // logging: true, // Habilita los logs para depuración autoLoadEntities: true, // Carga automáticamente las entidades - + */ + //esta es mi base de datos local + type: 'mysql', + host: 'localhost', + port: 3306, //3306 + username: 'root', + password: 'admin', //admin + database: 'cidwa', //nestdb + entities: [__dirname + '/**/*.entity{.ts,.js}'], + synchronize: true, + //extra + retryAttempts: 10, // Intentos para reconectar + retryDelay: 3000, // Tiempo entre reintentos }), CuestionarioModule, TipoCuestionarioModule, @@ -43,7 +64,15 @@ import { ConfigModule } from '@nestjs/config'; OpcionModule, PreguntaOpcionModule, RespuestaParticipanteCerradaModule, CuestionarioRespondidoModule, - RespuestaParticipanteAbiertaModule], + RespuestaParticipanteAbiertaModule, + EventoModule, + TipoUserModule, + ParticipanteModule, + QrModule, + AdministradorModule, + AsistenciaModule, + ParticipanteEventoModule, + ], controllers: [AppController], providers: [AppService], diff --git a/src/cuestionario_respondido/entities/cuestionario_respondido.entity.ts b/src/cuestionario_respondido/entities/cuestionario_respondido.entity.ts index b1a3e5f..77e21e7 100644 --- a/src/cuestionario_respondido/entities/cuestionario_respondido.entity.ts +++ b/src/cuestionario_respondido/entities/cuestionario_respondido.entity.ts @@ -3,6 +3,7 @@ import { Entity, PrimaryGeneratedColumn, Column, ManyToOne, OneToMany, JoinColum import { Cuestionario } from 'src/cuestionario/entities/cuestionario.entity'; import { RespuestaParticipanteCerrada } from 'src/respuesta_participante_cerrada/entities/respuesta_participante_cerrada.entity'; import { RespuestaParticipanteAbierta } from 'src/respuesta_participante_abierta/entities/respuesta_participante_abierta.entity'; +import { Participante } from 'src/participante/participante.entity'; @Entity('cuestionario_respondido') export class CuestionarioRespondido { diff --git a/src/evento/evento.entity.ts b/src/evento/evento.entity.ts index 90e04a1..046a042 100644 --- a/src/evento/evento.entity.ts +++ b/src/evento/evento.entity.ts @@ -1,5 +1,6 @@ +import { Participante } from "src/participante/participante.entity"; import { ParticipanteEvento } from "src/participante_evento/participante_evento.entity"; -import { Column, Entity, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { Column, Entity, ManyToMany, OneToMany, PrimaryGeneratedColumn } from "typeorm"; @Entity() export class Evento { @@ -26,13 +27,15 @@ export class Evento { @JoinColumn({ name: "id_administrador" }) administrador: Administrador; - @OneToMany(() => ParticipanteEvento, (pe) => pe.evento) - participantes: ParticipanteEvento[]; + @OneToMany(() => Asistencia, (asistencia) => asistencia.evento) asistencias: Asistencia[]; */ - @OneToMany(() => ParticipanteEvento, (participanteEvento) => participanteEvento.evento) - participantes: ParticipanteEvento[]; + + + @OneToMany(() => ParticipanteEvento, participanteEvento => participanteEvento.evento) + participanteEventos: ParticipanteEvento[]; + } \ No newline at end of file diff --git a/src/evento/evento.module.ts b/src/evento/evento.module.ts index 5c3605e..58e904d 100644 --- a/src/evento/evento.module.ts +++ b/src/evento/evento.module.ts @@ -7,6 +7,7 @@ import { Evento } from './evento.entity'; @Module({ imports: [TypeOrmModule.forFeature([Evento])], controllers: [EventoController], - providers: [EventoService] + providers: [EventoService], + exports: [EventoService] }) export class EventoModule {} diff --git a/src/main.ts b/src/main.ts index f76bc8d..e1c5710 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,8 +1,16 @@ import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; +import 'dotenv/config'; +import { DocsModule } from './docs/docs.module'; async function bootstrap() { const app = await NestFactory.create(AppModule); - await app.listen(process.env.PORT ?? 3000); + //await app.listen(process.env.PORT ?? 3000); + + DocsModule.setupSwagger(app); + + await app.listen(3000); + console.log('API en ejecución en http://localhost:3000'); + console.log('Swagger disponible en http://localhost:3000/api-docs'); } bootstrap(); diff --git a/src/opcion/dto/create-opcion.dto.ts b/src/opcion/dto/create-opcion.dto.ts index 69957f1..428eff5 100644 --- a/src/opcion/dto/create-opcion.dto.ts +++ b/src/opcion/dto/create-opcion.dto.ts @@ -1,8 +1,6 @@ import { IsString, MaxLength } from "class-validator"; export class CreateOpcionDto { - - @IsString() @MaxLength(50) opcion: string; diff --git a/src/opcion/opcion.module.ts b/src/opcion/opcion.module.ts index b638a8a..d5cb46a 100644 --- a/src/opcion/opcion.module.ts +++ b/src/opcion/opcion.module.ts @@ -1,9 +1,13 @@ import { Module } from '@nestjs/common'; import { OpcionService } from './opcion.service'; import { OpcionController } from './opcion.controller'; +import { TypeOrmModule } from '@nestjs/typeorm'; +import { Opcion } from './entities/opcion.entity'; @Module({ + imports: [TypeOrmModule.forFeature([Opcion])], // Importa el repositorio de Opcion controllers: [OpcionController], providers: [OpcionService], + exports: [OpcionService] }) export class OpcionModule {} diff --git a/src/opcion/opcion.service.ts b/src/opcion/opcion.service.ts index 9c44854..93e9267 100644 --- a/src/opcion/opcion.service.ts +++ b/src/opcion/opcion.service.ts @@ -12,12 +12,16 @@ export class OpcionService { private repository: Repository, ){} + create(createOpcionDto: CreateOpcionDto) { + return this.repository.save(createOpcionDto); + } + - + /* create():Promise { return this.repository.save(this.repository.create()); } - + */ findAll() { return `This action returns all opcion`; } diff --git a/src/participante/participante.entity.ts b/src/participante/participante.entity.ts index 1bd1fd0..7bf4ae1 100644 --- a/src/participante/participante.entity.ts +++ b/src/participante/participante.entity.ts @@ -1,6 +1,8 @@ +import { CuestionarioRespondido } from "src/cuestionario_respondido/entities/cuestionario_respondido.entity"; +import { Evento } from "src/evento/evento.entity"; import { ParticipanteEvento } from "src/participante_evento/participante_evento.entity"; import { TipoUser } from "src/tipo_user/tipo_user.entity"; -import { Column, Entity, JoinColumn, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; +import { Column, Entity, JoinColumn, JoinTable, ManyToMany, ManyToOne, OneToMany, PrimaryGeneratedColumn } from "typeorm"; @Entity() export class Participante { @@ -16,19 +18,32 @@ export class Participante { //Relacion con tipo usuario @ManyToOne(() => TipoUser, tipoUser => tipoUser.participante) @JoinColumn({ name: 'participante_id' }) //nombre de la relacion - tipo_user: TipoUser[] + tipo_user: TipoUser /* @ManyToOne(() => Administrador, (admin) => admin.eventos) @JoinColumn({ name: "id_administrador" }) administrador: Administrador; - @OneToMany(() => ParticipanteEvento, (pe) => pe.evento) - participantes: ParticipanteEvento[]; + @ManyToMany(() => Evento, evento => evento.participantes) + @JoinTable({ + name: "participante_evento", + joinColumn: { name: "id_participante", referencedColumnName: "id_participante" }, + inverseJoinColumn: { name: "id_evento", referencedColumnName: "id_evento" } + }) + eventos: Evento[]; @OneToMany(() => Asistencia, (asistencia) => asistencia.evento) asistencias: Asistencia[]; */ + + + @OneToMany(() => CuestionarioRespondido, cuestionario => cuestionario.id_participante) + cuestionariosRespondidos: CuestionarioRespondido[]; + + @OneToMany(() => ParticipanteEvento, participanteEvento => participanteEvento.participante) + participanteEventos: ParticipanteEvento[]; + } \ No newline at end of file diff --git a/src/participante/participante.service.ts b/src/participante/participante.service.ts index 9eed97e..746cabc 100644 --- a/src/participante/participante.service.ts +++ b/src/participante/participante.service.ts @@ -3,7 +3,7 @@ import { InjectRepository } from '@nestjs/typeorm'; import { Participante } from './participante.entity'; import { Repository } from 'typeorm'; import { CreateParticipanteDto } from './dto/create-participante.dto'; -import { UpdateAdminDto } from 'src/admin/dto/update.admin.dto'; +//import { UpdateAdminDto } from 'src/admin/dto/update.admin.dto'; import { UpdateParticipanteDto } from './dto/update.participante.dto'; @Injectable() @@ -28,7 +28,7 @@ export class ParticipanteService { getParticipantes() { return this.participanteRepository.find({ - relations: ['tipo_user'] + relations: ['tipo_user', 'participanteEventos'] }) } @@ -37,7 +37,7 @@ export class ParticipanteService { where: { id_participante }, - relations: ['tipo_user'] + relations: ['tipo_user', 'participanteEventos'] }) if (!participanteFound) diff --git a/src/participante_evento/participante_evento.entity.ts b/src/participante_evento/participante_evento.entity.ts index 4e2b206..1451525 100644 --- a/src/participante_evento/participante_evento.entity.ts +++ b/src/participante_evento/participante_evento.entity.ts @@ -1,4 +1,5 @@ import { Evento } from "src/evento/evento.entity"; +import { Participante } from "src/participante/participante.entity"; import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn, PrimaryGeneratedColumn } from "typeorm"; @Entity() @@ -17,17 +18,21 @@ export class ParticipanteEvento { /* @OneToOne(() => Qr, (qr) => qr.participanteEvento) qr: Qr; - - @ManyToOne(() => Participante, (participante) => participante.eventos) - @JoinColumn({ name: "id_participante" }) - participante: Participante; + + @OneToMany(() => ParticipanteEvento, (pe) => pe.evento) + participantes: ParticipanteEvento[]; @ManyToOne(() => Evento, (evento) => evento.participantes) @JoinColumn({ name: "id_evento" }) evento: Evento; */ - @ManyToOne(() => Evento, (evento) => evento.participantes) + @ManyToOne(() => Participante, participante => participante.participanteEventos) + @JoinColumn({ name: "id_participante" }) + participante: Participante; + + @ManyToOne(() => Evento, evento => evento.participanteEventos) @JoinColumn({ name: "id_evento" }) evento: Evento; + } \ No newline at end of file diff --git a/src/participante_evento/participante_evento.module.ts b/src/participante_evento/participante_evento.module.ts index 6febf0a..aa7ba57 100644 --- a/src/participante_evento/participante_evento.module.ts +++ b/src/participante_evento/participante_evento.module.ts @@ -4,10 +4,12 @@ import { ParticipanteEventoController } from './participante_evento.controller'; import { TypeOrmModule } from '@nestjs/typeorm'; import { ParticipanteEvento } from './participante_evento.entity'; import { Evento } from 'src/evento/evento.entity'; +import { Participante } from 'src/participante/participante.entity'; @Module({ - imports: [TypeOrmModule.forFeature([ParticipanteEvento]), Evento], + imports: [TypeOrmModule.forFeature([ParticipanteEvento, Evento, Participante])], controllers: [ParticipanteEventoController], - providers: [ParticipanteEventoService] + providers: [ParticipanteEventoService], + exports: [ParticipanteEventoService], }) export class ParticipanteEventoModule {} diff --git a/src/participante_evento/participante_evento.service.ts b/src/participante_evento/participante_evento.service.ts index b0a6b93..38416a1 100644 --- a/src/participante_evento/participante_evento.service.ts +++ b/src/participante_evento/participante_evento.service.ts @@ -4,12 +4,16 @@ import { ParticipanteEvento } from './participante_evento.entity'; import { Repository } from 'typeorm'; import { CreateParticipanteEventoDto } from './dto/create-participante_evento.dto'; import { UpdateParticipanteEventoDto } from './dto/update.participante_evento.dto'; +import { Evento } from 'src/evento/evento.entity'; +import { Participante } from 'src/participante/participante.entity'; @Injectable() export class ParticipanteEventoService { constructor( - @InjectRepository(ParticipanteEvento) private participanteEventoRepository: Repository + @InjectRepository(ParticipanteEvento) private participanteEventoRepository: Repository, + @InjectRepository(Evento) private eventoRepository: Repository, + @InjectRepository(Participante) private participanteRepository: Repository ) {} async createParticipanteEvento(participanteEvento: CreateParticipanteEventoDto) { @@ -30,7 +34,7 @@ export class ParticipanteEventoService { getParticipantesEvento() { return this.participanteEventoRepository.find({ - relations: ['evento'] + relations: ['evento', 'participante'] }) } @@ -39,7 +43,7 @@ export class ParticipanteEventoService { where: { id_participante }, - relations: ['evento'] + relations: ['evento', 'participante'] }) if (!participante_eventoFound) { diff --git a/src/pregunta_opcion/entities/pregunta_opcion.entity.ts b/src/pregunta_opcion/entities/pregunta_opcion.entity.ts index 8cbd89c..7e76438 100644 --- a/src/pregunta_opcion/entities/pregunta_opcion.entity.ts +++ b/src/pregunta_opcion/entities/pregunta_opcion.entity.ts @@ -13,11 +13,11 @@ export class PreguntaOpcion { posicion: number; @ManyToOne(() => Pregunta, pregunta => pregunta.id_pregunta) - @Column() + //@Column() id_pregunta: Pregunta; @ManyToOne(() => Opcion, opcion => opcion.id_opcion) - @Column() + //@Column() id_opcion: Opcion; @OneToMany(()=> RespuestaParticipanteCerrada, respuestaParticipanteCerrada=>respuestaParticipanteCerrada.id_pregunta_opcion) diff --git a/src/tipo_pregunta/tipo_pregunta.controller.ts b/src/tipo_pregunta/tipo_pregunta.controller.ts index e69de29..cc69f18 100644 --- a/src/tipo_pregunta/tipo_pregunta.controller.ts +++ b/src/tipo_pregunta/tipo_pregunta.controller.ts @@ -0,0 +1,6 @@ +import { Controller } from '@nestjs/common'; + +@Controller('tipo_pregunta') +export class TipoPreguntaController { + // Métodos del controlador +} diff --git a/src/tipo_pregunta/tipo_pregunta.service.ts b/src/tipo_pregunta/tipo_pregunta.service.ts index e69de29..197028b 100644 --- a/src/tipo_pregunta/tipo_pregunta.service.ts +++ b/src/tipo_pregunta/tipo_pregunta.service.ts @@ -0,0 +1,6 @@ +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class TipoPreguntaService { + // Métodos del servicio +}