From 2e2498577f498a4c0a639cdb3b5be723a23e8958 Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Thu, 25 Sep 2025 15:40:37 +0300 Subject: [PATCH 1/2] MED-103: create job --- app/api/job/handler/sync-connected-online.ts | 4 +++- ...500925153100_sync_connected_online_cron_job.sql | 14 ++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 supabase/migrations/202500925153100_sync_connected_online_cron_job.sql diff --git a/app/api/job/handler/sync-connected-online.ts b/app/api/job/handler/sync-connected-online.ts index 07b7435..41528ba 100644 --- a/app/api/job/handler/sync-connected-online.ts +++ b/app/api/job/handler/sync-connected-online.ts @@ -38,7 +38,9 @@ function getSpokenLanguages(spokenLanguages?: string) { } export default async function syncConnectedOnline() { - const isProd = process.env.NODE_ENV === 'production'; + const isProd = !['test', 'localhost'].some((pathString) => + process.env.NEXT_PUBLIC_SITE_URL?.includes(pathString), + ); const baseUrl = process.env.CONNECTED_ONLINE_URL; diff --git a/supabase/migrations/202500925153100_sync_connected_online_cron_job.sql b/supabase/migrations/202500925153100_sync_connected_online_cron_job.sql new file mode 100644 index 0000000..f3fde10 --- /dev/null +++ b/supabase/migrations/202500925153100_sync_connected_online_cron_job.sql @@ -0,0 +1,14 @@ +select + cron.schedule( + 'sync-connected-online-every-night', -- Unique job name + '0 1 * * *', -- Cron schedule: every night at 04:00 (GMT +3) + $$ + select + net.http_post( + url := 'https://test.medreport.ee/api/job/sync-connected-online', + headers := jsonb_build_object( + 'x-jobs-api-key', 'fd26ec26-70ed-11f0-9e95-431ac3b15a84' + ) + ) as request_id; + $$ + ); From 5d88121e78106e5973e6eb7bf751b97f2c59b465 Mon Sep 17 00:00:00 2001 From: Danel Kungla Date: Thu, 25 Sep 2025 15:51:43 +0300 Subject: [PATCH 2/2] refactor demo clinic condition --- app/api/job/handler/sync-connected-online.ts | 40 +++++++------------- 1 file changed, 13 insertions(+), 27 deletions(-) diff --git a/app/api/job/handler/sync-connected-online.ts b/app/api/job/handler/sync-connected-online.ts index 41528ba..80e89c9 100644 --- a/app/api/job/handler/sync-connected-online.ts +++ b/app/api/job/handler/sync-connected-online.ts @@ -86,34 +86,20 @@ export default async function syncConnectedOnline() { let serviceProviders; let jobTitleTranslations; // Filter out "Dentas Demo OÜ" in prod or only sync "Dentas Demo OÜ" in any other environment - const isDemoClinic = (clinicId: number) => clinicId === 2; - if (isProd) { - clinics = responseData.Data.T_Lic.filter(({ ID }) => !isDemoClinic(ID)); - services = responseData.Data.T_Service.filter( - ({ ClinicID }) => !isDemoClinic(ClinicID), - ); - serviceProviders = responseData.Data.T_Doctor.filter( - ({ ClinicID }) => !isDemoClinic(ClinicID), - ); - jobTitleTranslations = createTranslationMap( - responseData.Data.P_JobTitleTranslations.filter( - ({ ClinicID }) => !isDemoClinic(ClinicID), - ), - ); - } else { - clinics = responseData.Data.T_Lic.filter(({ ID }) => isDemoClinic(ID)); - services = responseData.Data.T_Service.filter(({ ClinicID }) => + const isDemoClinic = (clinicId: number) => + isProd ? clinicId !== 2 : clinicId === 2; + clinics = responseData.Data.T_Lic.filter(({ ID }) => isDemoClinic(ID)); + services = responseData.Data.T_Service.filter(({ ClinicID }) => + isDemoClinic(ClinicID), + ); + serviceProviders = responseData.Data.T_Doctor.filter(({ ClinicID }) => + isDemoClinic(ClinicID), + ); + jobTitleTranslations = createTranslationMap( + responseData.Data.P_JobTitleTranslations.filter(({ ClinicID }) => isDemoClinic(ClinicID), - ); - serviceProviders = responseData.Data.T_Doctor.filter(({ ClinicID }) => - isDemoClinic(ClinicID), - ); - jobTitleTranslations = createTranslationMap( - responseData.Data.P_JobTitleTranslations.filter(({ ClinicID }) => - isDemoClinic(ClinicID), - ), - ); - } + ), + ); const mappedClinics = clinics.map((clinic) => { return {