diff --git a/package-lock.json b/package-lock.json index e6900e9..371e91a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "@nestjs/jwt": "^8.0.0", "@nestjs/passport": "^8.2.1", "@nestjs/platform-express": "^8.0.0", + "@nestjs/schedule": "^1.1.0", "@nestjs/typeorm": "^8.0.3", "bcrypt": "^5.0.1", "class-transformer": "^0.5.1", @@ -1537,6 +1538,20 @@ "@nestjs/core": "^8.0.0" } }, + "node_modules/@nestjs/schedule": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-1.1.0.tgz", + "integrity": "sha512-0QpbwClUildXqlyoaygG+aIQZNNMv31XDyQxX+Ob1zw/3I8+AVrDlBwZHQ+tlhIcJFR8aG+VTH8xwIjXwtS1UA==", + "dependencies": { + "cron": "1.8.2", + "uuid": "8.3.2" + }, + "peerDependencies": { + "@nestjs/common": "^6.10.11 || ^7.0.0 || ^8.0.0", + "@nestjs/core": "^7.0.0 || ^8.0.0", + "reflect-metadata": "^0.1.12" + } + }, "node_modules/@nestjs/schematics": { "version": "8.0.8", "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-8.0.8.tgz", @@ -3556,6 +3571,14 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "node_modules/cron": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz", + "integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==", + "dependencies": { + "moment-timezone": "^0.5.x" + } + }, "node_modules/cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -6896,6 +6919,17 @@ "node": "*" } }, + "node_modules/moment-timezone": { + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -10869,6 +10903,15 @@ "tslib": "2.3.1" } }, + "@nestjs/schedule": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@nestjs/schedule/-/schedule-1.1.0.tgz", + "integrity": "sha512-0QpbwClUildXqlyoaygG+aIQZNNMv31XDyQxX+Ob1zw/3I8+AVrDlBwZHQ+tlhIcJFR8aG+VTH8xwIjXwtS1UA==", + "requires": { + "cron": "1.8.2", + "uuid": "8.3.2" + } + }, "@nestjs/schematics": { "version": "8.0.8", "resolved": "https://registry.npmjs.org/@nestjs/schematics/-/schematics-8.0.8.tgz", @@ -12460,6 +12503,14 @@ "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", "dev": true }, + "cron": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/cron/-/cron-1.8.2.tgz", + "integrity": "sha512-Gk2c4y6xKEO8FSAUTklqtfSr7oTq0CiPQeLBG5Fl0qoXpZyMcj1SG59YL+hqq04bu6/IuEA7lMkYDAplQNKkyg==", + "requires": { + "moment-timezone": "^0.5.x" + } + }, "cross-spawn": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", @@ -15009,6 +15060,14 @@ "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.3.tgz", "integrity": "sha512-c6YRvhEo//6T2Jz/vVtYzqBzwvPT95JBQ+smCytzf7c50oMZRsR/a4w88aD34I+/QVSfnoAnSBFPJHItlOMJVw==" }, + "moment-timezone": { + "version": "0.5.34", + "resolved": "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.34.tgz", + "integrity": "sha512-3zAEHh2hKUs3EXLESx/wsgw6IQdusOT8Bxm3D9UrHPQR7zlMmzwybC8zHEM1tQ4LJwP7fcxrWr8tuBg05fFCbg==", + "requires": { + "moment": ">= 2.9.0" + } + }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", diff --git a/package.json b/package.json index 65d27bf..da972a6 100644 --- a/package.json +++ b/package.json @@ -27,6 +27,7 @@ "@nestjs/jwt": "^8.0.0", "@nestjs/passport": "^8.2.1", "@nestjs/platform-express": "^8.0.0", + "@nestjs/schedule": "^1.1.0", "@nestjs/typeorm": "^8.0.3", "bcrypt": "^5.0.1", "class-transformer": "^0.5.1", diff --git a/src/app.module.ts b/src/app.module.ts index b489b26..4cc9705 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -22,9 +22,12 @@ import { CarreraModule } from './carrera/carrera.module'; import { TipoEntradaModule } from './tipo-entrada/tipo-entrada.module'; import { CarreraProgramaModule } from './carrera-programa/carrera-programa.module'; +import { AuthModule } from './auth/auth.module'; +import { BcryptModule } from './bcrypt/bcrypt.module'; import { Carrera } from './carrera/entity/carrera.entity'; import { CarreraPrograma } from './carrera-programa/entity/carrera-programa.entity'; import { Carrito } from './carrito/entity/carrito.entity'; +import { CronModule } from './cron/cron.module'; import { Dia } from './institucion-dia/entity/dia.entity'; import { Equipo } from './equipo/entity/equipo.entity'; import { EquipoTipoEntrada } from './equipo/entity/equipo-tipo-entrada.entity'; @@ -44,10 +47,8 @@ import { Status } from './status/entity/status.entity'; import { TipoCarrito } from './institucion-tipo-carrito/entity/tipo-carrito.entity'; import { TipoEntrada } from './tipo-entrada/entity/tipo-entrada.entity'; import { TipoUsuario } from './tipo-usuario/entity/tipo-usuario.entity'; -import { Usuario } from './usuario/entity/usuario.entity'; -import { AuthModule } from './auth/auth.module'; -import { BcryptModule } from './bcrypt/bcrypt.module'; import { UploadFileModule } from './upload-file/upload-file.module'; +import { Usuario } from './usuario/entity/usuario.entity'; @Module({ imports: [ @@ -113,6 +114,7 @@ import { UploadFileModule } from './upload-file/upload-file.module'; InstitucionTipoCarritoModule, BcryptModule, UploadFileModule, + CronModule, ], }) export class AppModule {} diff --git a/src/cron/cron.controller.spec.ts b/src/cron/cron.controller.spec.ts new file mode 100644 index 0000000..b723ad7 --- /dev/null +++ b/src/cron/cron.controller.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CronController } from './cron.controller'; + +describe('CronController', () => { + let controller: CronController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [CronController], + }).compile(); + + controller = module.get(CronController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/cron/cron.controller.ts b/src/cron/cron.controller.ts new file mode 100644 index 0000000..507e4f2 --- /dev/null +++ b/src/cron/cron.controller.ts @@ -0,0 +1,7 @@ +import { Controller } from '@nestjs/common'; +import { CronService } from './cron.service'; + +@Controller('cron') +export class CronController { + constructor(private cronService: CronService) {} +} diff --git a/src/cron/cron.module.ts b/src/cron/cron.module.ts new file mode 100644 index 0000000..d48c6dc --- /dev/null +++ b/src/cron/cron.module.ts @@ -0,0 +1,11 @@ +import { Module } from '@nestjs/common'; +import { ScheduleModule } from '@nestjs/schedule'; +import { CronController } from './cron.controller'; +import { CronService } from './cron.service'; + +@Module({ + imports: [ScheduleModule.forRoot()], + controllers: [CronController], + providers: [CronService], +}) +export class CronModule {} diff --git a/src/cron/cron.service.spec.ts b/src/cron/cron.service.spec.ts new file mode 100644 index 0000000..ac5f014 --- /dev/null +++ b/src/cron/cron.service.spec.ts @@ -0,0 +1,18 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { CronService } from './cron.service'; + +describe('CronService', () => { + let service: CronService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [CronService], + }).compile(); + + service = module.get(CronService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/cron/cron.service.ts b/src/cron/cron.service.ts new file mode 100644 index 0000000..eb9ba6c --- /dev/null +++ b/src/cron/cron.service.ts @@ -0,0 +1,16 @@ +import { Injectable } from '@nestjs/common'; +import { Cron, SchedulerRegistry } from '@nestjs/schedule'; +// import { MultaService } from 'src/multa/multa.service'; +// import { UsuarioService } from 'src/usuario/usuario.service'; + +@Injectable() +export class CronService { + constructor( + private schedulerRegistry: SchedulerRegistry, + // private multaService: MultaService, + // private usuarioService: UsuarioService, + ) {} + + @Cron('0 6 * * * *', { name: 'multas' }) + revisarMultas() {} +}