From c854dd092c44f914cec486633a7954a7eac383a0 Mon Sep 17 00:00:00 2001 From: Morgan <33722304+ThyMinimalDev@users.noreply.github.com> Date: Thu, 28 Mar 2024 17:35:51 +0200 Subject: [PATCH] refactor: platform timezone endpoint (#14250) * refactor: platform timezone endpoint * fixup! refactor: platform timezone endpoint * fixup! fixup! refactor: platform timezone endpoint --- .../controllers/schedules.controller.ts | 11 ------ .../schedules/services/schedules.service.ts | 6 ---- apps/api/v2/src/modules/endpoints.module.ts | 3 +- .../controllers/timezones.controller.ts | 24 +++++++++++++ .../timezones/services/timezones.service.ts | 10 ++++++ .../src/modules/timezones/timezones.module.ts | 11 ++++++ apps/api/v2/swagger/documentation.json | 36 +++++++++---------- .../atoms/hooks/useGetCityTimezones.ts | 2 +- 8 files changed, 66 insertions(+), 37 deletions(-) create mode 100644 apps/api/v2/src/modules/timezones/controllers/timezones.controller.ts create mode 100644 apps/api/v2/src/modules/timezones/services/timezones.service.ts create mode 100644 apps/api/v2/src/modules/timezones/timezones.module.ts diff --git a/apps/api/v2/src/ee/schedules/controllers/schedules.controller.ts b/apps/api/v2/src/ee/schedules/controllers/schedules.controller.ts index 9598ef830b..76fc11f02d 100644 --- a/apps/api/v2/src/ee/schedules/controllers/schedules.controller.ts +++ b/apps/api/v2/src/ee/schedules/controllers/schedules.controller.ts @@ -21,7 +21,6 @@ import { import { SCHEDULE_READ, SCHEDULE_WRITE, SUCCESS_STATUS } from "@calcom/platform-constants"; import type { ScheduleWithAvailabilitiesForWeb } from "@calcom/platform-libraries"; -import type { CityTimezones } from "@calcom/platform-libraries"; import { updateScheduleHandler } from "@calcom/platform-libraries"; import type { UpdateScheduleOutputType } from "@calcom/platform-libraries"; import { ApiSuccessResponse, ScheduleResponse, UpdateScheduleInput } from "@calcom/platform-types"; @@ -73,16 +72,6 @@ export class SchedulesController { }; } - @Get("/time-zones") - async getTimeZones(): Promise> { - const timeZones = await this.schedulesService.getSchedulePossibleTimeZones(); - - return { - status: SUCCESS_STATUS, - data: timeZones, - }; - } - @Get("/:scheduleId") @Permissions([SCHEDULE_READ]) async getSchedule( diff --git a/apps/api/v2/src/ee/schedules/services/schedules.service.ts b/apps/api/v2/src/ee/schedules/services/schedules.service.ts index 68e787f6f0..22a6b58c29 100644 --- a/apps/api/v2/src/ee/schedules/services/schedules.service.ts +++ b/apps/api/v2/src/ee/schedules/services/schedules.service.ts @@ -6,8 +6,6 @@ import { UsersRepository } from "@/modules/users/users.repository"; import { BadRequestException, ForbiddenException, Injectable, NotFoundException } from "@nestjs/common"; import { Schedule } from "@prisma/client"; -import { cityTimezonesHandler } from "@calcom/platform-libraries"; - @Injectable() export class SchedulesService { constructor( @@ -96,8 +94,4 @@ export class SchedulesService { throw new ForbiddenException(`User with ID=${userId} does not own schedule with ID=${schedule.id}`); } } - - async getSchedulePossibleTimeZones() { - return cityTimezonesHandler(); - } } diff --git a/apps/api/v2/src/modules/endpoints.module.ts b/apps/api/v2/src/modules/endpoints.module.ts index 6f3b72d8e1..f968aed467 100644 --- a/apps/api/v2/src/modules/endpoints.module.ts +++ b/apps/api/v2/src/modules/endpoints.module.ts @@ -1,11 +1,12 @@ import { PlatformEndpointsModule } from "@/ee/platform-endpoints-module"; import { EventsModule } from "@/modules/events/events.module"; import { OAuthClientModule } from "@/modules/oauth-clients/oauth-client.module"; +import { TimezoneModule } from "@/modules/timezones/timezones.module"; import type { MiddlewareConsumer, NestModule } from "@nestjs/common"; import { Module } from "@nestjs/common"; @Module({ - imports: [EventsModule, OAuthClientModule, PlatformEndpointsModule], + imports: [EventsModule, OAuthClientModule, PlatformEndpointsModule, TimezoneModule], }) export class EndpointsModule implements NestModule { // eslint-disable-next-line @typescript-eslint/no-unused-vars diff --git a/apps/api/v2/src/modules/timezones/controllers/timezones.controller.ts b/apps/api/v2/src/modules/timezones/controllers/timezones.controller.ts new file mode 100644 index 0000000000..85849f54be --- /dev/null +++ b/apps/api/v2/src/modules/timezones/controllers/timezones.controller.ts @@ -0,0 +1,24 @@ +import { TimezonesService } from "@/modules/timezones/services/timezones.service"; +import { Controller, Get } from "@nestjs/common"; + +import { SUCCESS_STATUS } from "@calcom/platform-constants"; +import type { CityTimezones } from "@calcom/platform-libraries"; +import { ApiResponse } from "@calcom/platform-types"; + +@Controller({ + path: "timezones", + version: "2", +}) +export class TimezonesController { + constructor(private readonly timezonesService: TimezonesService) {} + + @Get("/") + async getTimeZones(): Promise> { + const timeZones = await this.timezonesService.getCityTimeZones(); + + return { + status: SUCCESS_STATUS, + data: timeZones, + }; + } +} diff --git a/apps/api/v2/src/modules/timezones/services/timezones.service.ts b/apps/api/v2/src/modules/timezones/services/timezones.service.ts new file mode 100644 index 0000000000..b13c00f6bf --- /dev/null +++ b/apps/api/v2/src/modules/timezones/services/timezones.service.ts @@ -0,0 +1,10 @@ +import { Injectable } from "@nestjs/common"; + +import { cityTimezonesHandler } from "@calcom/platform-libraries"; + +@Injectable() +export class TimezonesService { + async getCityTimeZones() { + return cityTimezonesHandler(); + } +} diff --git a/apps/api/v2/src/modules/timezones/timezones.module.ts b/apps/api/v2/src/modules/timezones/timezones.module.ts new file mode 100644 index 0000000000..4447da80c1 --- /dev/null +++ b/apps/api/v2/src/modules/timezones/timezones.module.ts @@ -0,0 +1,11 @@ +import { TimezonesController } from "@/modules/timezones/controllers/timezones.controller"; +import { TimezonesService } from "@/modules/timezones/services/timezones.service"; +import { Module } from "@nestjs/common"; + +@Module({ + imports: [], + providers: [TimezonesService], + controllers: [TimezonesController], + exports: [TimezonesService], +}) +export class TimezoneModule {} diff --git a/apps/api/v2/swagger/documentation.json b/apps/api/v2/swagger/documentation.json index 2e6f3078a9..917e88b7dd 100644 --- a/apps/api/v2/swagger/documentation.json +++ b/apps/api/v2/swagger/documentation.json @@ -807,24 +807,6 @@ } } }, - "/api/v2/schedules/time-zones": { - "get": { - "operationId": "SchedulesController_getTimeZones", - "parameters": [], - "responses": { - "200": { - "description": "", - "content": { - "application/json": { - "schema": { - "type": "object" - } - } - } - } - } - } - }, "/api/v2/schedules/{scheduleId}": { "get": { "operationId": "SchedulesController_getSchedule", @@ -1240,6 +1222,24 @@ } } } + }, + "/api/v2/timezones": { + "get": { + "operationId": "TimezonesController_getTimeZones", + "parameters": [], + "responses": { + "200": { + "description": "", + "content": { + "application/json": { + "schema": { + "type": "object" + } + } + } + } + } + } } }, "info": { diff --git a/packages/platform/atoms/hooks/useGetCityTimezones.ts b/packages/platform/atoms/hooks/useGetCityTimezones.ts index fe4f6753f4..e206860329 100644 --- a/packages/platform/atoms/hooks/useGetCityTimezones.ts +++ b/packages/platform/atoms/hooks/useGetCityTimezones.ts @@ -7,7 +7,7 @@ import http from "../lib/http"; const useGetCityTimezones = () => { const endpoint = new URL(BASE_URL); - endpoint.pathname = `api/${API_VERSION}/schedules/time-zones`; + endpoint.pathname = `api/${API_VERSION}/timezones`; const { isLoading, data } = useQuery({ queryKey: ["city-timezones"],