From bc84b7d63de967447dc64c22b2c1d47df524265a Mon Sep 17 00:00:00 2001 From: jorge alvarado Date: Mon, 13 Feb 2023 13:24:30 -0600 Subject: [PATCH] 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) + } + } + }