diff --git a/src/scheduler/db/scheduler.data.ts b/src/scheduler/db/scheduler.data.ts new file mode 100644 index 0000000..8d4be22 --- /dev/null +++ b/src/scheduler/db/scheduler.data.ts @@ -0,0 +1,55 @@ +import { Scheduler } from '../scheduler.interface'; + +export const schedulers: Array = [ + { + id: '0148093543698', + daily: { + hour: 8, + minute: 0 + }, + executionParameter: { + options: ['installDependencies', 'unitTest', 'lint'] + }, + firstExecution: '2021-11-10T17:55:00-03:00', + processID: 'process3', + rangeExecutions: { + frequency: { + type: 'hour', + value: 2 + }, + rangeLimit: { + hour: 18, + minute: 0 + } + }, + recurrent: true, + }, + { + id: '0148093543699', + monthly: { + day: 2, + hour: 2, + minute: 30 + }, + executionParameter: { + options: ['installDependencies'] + }, + firstExecution: '2021-11-10T17:55:00-03:00', + processID: 'process1', + recurrent: true, + }, + { + id: '0148093543697', + weekly: { + daysOfWeek: ['Sunday', 'Friday', 'Tuesday'], + hour: 18, + minute: 0 + }, + executionParameter: { + options: ['installDependencies'] + }, + firstExecution: '2021-11-10T17:55:00-03:00', + processID: 'process2', + recurrent: true, + }, +]; diff --git a/src/scheduler/dto/create-scheduler.dto.ts b/src/scheduler/dto/create-scheduler.dto.ts index 6160060..a124538 100644 --- a/src/scheduler/dto/create-scheduler.dto.ts +++ b/src/scheduler/dto/create-scheduler.dto.ts @@ -5,6 +5,9 @@ export class CreateSchedulerDto { @ApiPropertyOptional() daily: { hour: number, minute: number }; + @ApiPropertyOptional() + id: string; + @ApiPropertyOptional() executionParameter: object; @@ -23,4 +26,10 @@ export class CreateSchedulerDto { @ApiPropertyOptional() weekly: { daysOfWeek: Array, hour: number, minute: number }; + @ApiPropertyOptional() + rangeExecutions: { + frequency: { type: string, value: number }, + rangeLimit: { day: number, hour: number, minute: number } + }; + } diff --git a/src/scheduler/scheduler.controller.ts b/src/scheduler/scheduler.controller.ts index 080f97f..ad51c11 100644 --- a/src/scheduler/scheduler.controller.ts +++ b/src/scheduler/scheduler.controller.ts @@ -1,5 +1,5 @@ -import { Controller, Post, Body } from '@nestjs/common'; -import { ApiTags, ApiBody } from '@nestjs/swagger'; +import { Controller, Post, Body, Put, Get, Param } from '@nestjs/common'; +import { ApiTags, ApiBody, ApiResponse, ApiParam } from '@nestjs/swagger'; import { SchedulerService } from './scheduler.service'; import { CreateSchedulerDto } from './dto/create-scheduler.dto'; @@ -10,10 +10,32 @@ export class SchedulerController { constructor(private schedulerService: SchedulerService) {} + @ApiResponse({ status: 201, type: CreateSchedulerDto }) @ApiBody({ type: CreateSchedulerDto }) @Post() createScheduler(@Body() newScheduler: CreateSchedulerDto) { this.schedulerService.createScheduler(newScheduler); } + @ApiResponse({ status: 200, type: CreateSchedulerDto }) + @Get() + get(@Param() params) { + return this.schedulerService.getScheduler(params['id']); + } + + @ApiResponse({ status: 200, type: CreateSchedulerDto }) + @ApiParam({ name: 'id' }) + @Get(':id') + getPerson(@Param() params) { + return this.schedulerService.getScheduler(params['id']); + } + + @ApiResponse({ status: 201, type: CreateSchedulerDto }) + @ApiParam({ name: 'id' }) + @ApiBody({ type: CreateSchedulerDto }) + @Put(':id') + updateScheduler(@Body() scheduler: CreateSchedulerDto, @Param() param) { + this.schedulerService.updateScheduler(param['id'], scheduler); + } + } diff --git a/src/scheduler/scheduler.data.ts b/src/scheduler/scheduler.data.ts index 64a36fe..4a8c410 100644 --- a/src/scheduler/scheduler.data.ts +++ b/src/scheduler/scheduler.data.ts @@ -1,6 +1,4 @@ -import { Scheduler } from './scheduler.interface'; - -export const schedules: Array = [ +export const schedules = [ { firstExecution: '2020-02-26T09:30:00-03:00', recurrent: false, diff --git a/src/scheduler/scheduler.interface.ts b/src/scheduler/scheduler.interface.ts index 040c375..39951eb 100644 --- a/src/scheduler/scheduler.interface.ts +++ b/src/scheduler/scheduler.interface.ts @@ -1,5 +1,7 @@ export interface Scheduler { + id: string; + daily?: { hour: number, minute: number }; executionParameter?: object; @@ -14,4 +16,9 @@ export interface Scheduler { weekly?: { daysOfWeek: Array, hour: number, minute: number }; + rangeExecutions?: { + frequency: { type: string, value: number }, + rangeLimit: { hour: number, minute: number } + }; + } diff --git a/src/scheduler/scheduler.module.ts b/src/scheduler/scheduler.module.ts index 194e904..fbeff3d 100644 --- a/src/scheduler/scheduler.module.ts +++ b/src/scheduler/scheduler.module.ts @@ -6,7 +6,7 @@ import { ProcessesController } from './process/processes.controller'; import { ProcessesService } from './process/processes.service'; @Module({ - controllers: [SchedulerController, ProcessesController], + controllers: [ ProcessesController, SchedulerController ], // essa ordem é importante para o correto funcionamento da api na estrutura atual providers: [SchedulerService, ProcessesService] }) export class SchedulerModule {} diff --git a/src/scheduler/scheduler.service.ts b/src/scheduler/scheduler.service.ts index 7a71525..98d16a3 100644 --- a/src/scheduler/scheduler.service.ts +++ b/src/scheduler/scheduler.service.ts @@ -1,13 +1,23 @@ import { Injectable } from '@nestjs/common'; +import { Scheduler } from './scheduler.interface'; +import { schedulers } from './db/scheduler.data'; -import { schedules } from './scheduler.data'; import { CreateSchedulerDto } from './dto/create-scheduler.dto'; @Injectable() export class SchedulerService { createScheduler(scheduler: CreateSchedulerDto) { - schedules.push(scheduler); + schedulers.push(scheduler); + } + + updateScheduler(id: string, updatedScheduler: CreateSchedulerDto) { + const scheduler = this.getScheduler(id); + Object.assign(scheduler, updatedScheduler); + } + + getScheduler(id: string): Scheduler { + return schedulers.find(item => item.id === id); } }