From 2b988db70d08b89a0b540cf5d5d1fdf0e9343a52 Mon Sep 17 00:00:00 2001 From: Polianin Nikita Date: Sun, 2 Feb 2025 20:33:35 +0300 Subject: [PATCH] feat: add new api --- src/api/v1/configuration/schedule.service.ts | 76 +++++++++++++++++++ .../cronUpdateScheduleResponse.ts | 4 + src/shared/structs/cronUpdateSkip.ts | 7 ++ 3 files changed, 87 insertions(+) create mode 100644 src/api/v1/configuration/schedule.service.ts create mode 100644 src/shared/responses/v1/configuration/cronUpdateScheduleResponse.ts create mode 100644 src/shared/structs/cronUpdateSkip.ts diff --git a/src/api/v1/configuration/schedule.service.ts b/src/api/v1/configuration/schedule.service.ts new file mode 100644 index 0000000..a100751 --- /dev/null +++ b/src/api/v1/configuration/schedule.service.ts @@ -0,0 +1,76 @@ +import {Injectable} from '@angular/core'; +import ApiService, {AvailableVersion} from "@api/api.service"; +import {CronUpdateScheduleResponse} from "@api/v1/configuration/cronUpdateScheduleResponse"; +import {DateOnly} from "@model/dateOnly"; +import {map} from "rxjs"; +import CronUpdateSkip from "@model/cronUpdateSkip"; + +@Injectable() +export class ScheduleService extends ApiService { + public readonly basePath = 'Configuration/Schedule'; + public readonly version = AvailableVersion.v1; + + public getCronUpdateSchedule() { + const request = this.createRequestBuilder() + .setEndpoint('CronUpdateSchedule') + .build; + + return this.addAuth(request).get(request); + } + + public postCronUpdateSchedule(cron: string) { + const request = this.createRequestBuilder() + .setEndpoint('CronUpdateSchedule') + .setQueryParams({cron: cron}) + .build; + + return this.addAuth(request).post(request); + } + + public getStartTerm() { + const request = this.createRequestBuilder() + .setEndpoint('StartTerm') + .build; + + return this.addAuth(request).get(request).pipe(map(date => new DateOnly(date))); + } + + public postStartTerm(startTerm: DateOnly, force: boolean) { + const request = this.createRequestBuilder() + .setEndpoint('StartTerm') + .setQueryParams({force: force, startTerm: startTerm.toString()}) + .build; + + return this.addAuth(request).post(request); + } + + public getCronUpdateSkip() { + const request = this.createRequestBuilder() + .setEndpoint('CronUpdateSkip') + .build; + + return this.addAuth(request).get<{ date?: string, start?: string, end?: string }[]>(request) + .pipe( + map(data => { + return data.map(x => { + date: x.date ? new DateOnly(x.date) : null, + start: x.start ? new DateOnly(x.start) : null, + end: x.end ? new DateOnly(x.end) : null + }); + } + )); + } + + public postCronUpdateSkip(data: CronUpdateSkip[]) { + const request = this.createRequestBuilder() + .setEndpoint('CronUpdateSkip') + .setData(data.map(x => { + start: x.start?.toString(), + end: x.end?.toString(), + date: x.date?.toString() + })) + .build; + + return this.addAuth(request).post(request); + } +} diff --git a/src/shared/responses/v1/configuration/cronUpdateScheduleResponse.ts b/src/shared/responses/v1/configuration/cronUpdateScheduleResponse.ts new file mode 100644 index 0000000..07d853f --- /dev/null +++ b/src/shared/responses/v1/configuration/cronUpdateScheduleResponse.ts @@ -0,0 +1,4 @@ +export interface CronUpdateScheduleResponse { + cron: string; + nextStart?: Date[]; +} diff --git a/src/shared/structs/cronUpdateSkip.ts b/src/shared/structs/cronUpdateSkip.ts new file mode 100644 index 0000000..c4ed41c --- /dev/null +++ b/src/shared/structs/cronUpdateSkip.ts @@ -0,0 +1,7 @@ +import {DateOnly} from "@model/dateOnly"; + +export default interface CronUpdateSkip { + start?: DateOnly; + end?: DateOnly; + date?: DateOnly; +}