diff --git a/apps/webapp/app/v3/services/createBackgroundWorker.server.ts b/apps/webapp/app/v3/services/createBackgroundWorker.server.ts index 41fbf2afe2..2938164b74 100644 --- a/apps/webapp/app/v3/services/createBackgroundWorker.server.ts +++ b/apps/webapp/app/v3/services/createBackgroundWorker.server.ts @@ -593,6 +593,7 @@ export async function syncDeclarativeSchedules( create: [ { environmentId: environment.id, + projectId: environment.projectId, }, ], }, diff --git a/apps/webapp/app/v3/services/upsertTaskSchedule.server.ts b/apps/webapp/app/v3/services/upsertTaskSchedule.server.ts index f7fa8f4d18..d9d8b6c0a4 100644 --- a/apps/webapp/app/v3/services/upsertTaskSchedule.server.ts +++ b/apps/webapp/app/v3/services/upsertTaskSchedule.server.ts @@ -109,6 +109,7 @@ export class UpsertTaskScheduleService extends BaseService { data: { taskScheduleId: scheduleRecord.id, environmentId, + projectId, }, include: { environment: { @@ -183,6 +184,7 @@ export class UpsertTaskScheduleService extends BaseService { data: { taskScheduleId: scheduleRecord.id, environmentId, + projectId: existingSchedule.projectId, }, include: { environment: { diff --git a/internal-packages/database/prisma/migrations/20260115125846_add_project_id_to_task_schedule_instance/migration.sql b/internal-packages/database/prisma/migrations/20260115125846_add_project_id_to_task_schedule_instance/migration.sql new file mode 100644 index 0000000000..59f75a9377 --- /dev/null +++ b/internal-packages/database/prisma/migrations/20260115125846_add_project_id_to_task_schedule_instance/migration.sql @@ -0,0 +1,16 @@ +-- AlterTable +ALTER TABLE "public"."TaskScheduleInstance" +ADD COLUMN IF NOT EXISTS "projectId" TEXT; + +-- AddForeignKey +DO $$ +BEGIN + IF NOT EXISTS ( + SELECT 1 FROM pg_constraint WHERE conname = 'TaskScheduleInstance_projectId_fkey' + ) THEN + ALTER TABLE "public"."TaskScheduleInstance" + ADD CONSTRAINT "TaskScheduleInstance_projectId_fkey" + FOREIGN KEY ("projectId") REFERENCES "public"."Project" ("id") + ON DELETE CASCADE ON UPDATE CASCADE; + END IF; +END $$; \ No newline at end of file diff --git a/internal-packages/database/prisma/migrations/20260115130417_taskscheduleinstance_environmentid_index/migration.sql b/internal-packages/database/prisma/migrations/20260115130417_taskscheduleinstance_environmentid_index/migration.sql new file mode 100644 index 0000000000..c88056b784 --- /dev/null +++ b/internal-packages/database/prisma/migrations/20260115130417_taskscheduleinstance_environmentid_index/migration.sql @@ -0,0 +1,2 @@ +-- CreateIndex +CREATE INDEX CONCURRENTLY IF NOT EXISTS "TaskScheduleInstance_environmentId_idx" ON "public"."TaskScheduleInstance" ("environmentId"); \ No newline at end of file diff --git a/internal-packages/database/prisma/schema.prisma b/internal-packages/database/prisma/schema.prisma index 52dd7d88db..44c5409970 100644 --- a/internal-packages/database/prisma/schema.prisma +++ b/internal-packages/database/prisma/schema.prisma @@ -404,7 +404,8 @@ model Project { connectedGithubRepository ConnectedGithubRepository? customerQueries CustomerQuery[] - buildSettings Json? + buildSettings Json? + taskScheduleInstances TaskScheduleInstance[] } enum ProjectVersion { @@ -589,7 +590,7 @@ model TaskRun { /// Debounce options: { key: string, delay: string, createdAt: Date } debounce Json? - taskIdentifier String + taskIdentifier String isTest Boolean @default(false) @@ -1945,6 +1946,9 @@ model TaskScheduleInstance { environment RuntimeEnvironment @relation(fields: [environmentId], references: [id], onDelete: Cascade, onUpdate: Cascade) environmentId String + project Project? @relation(fields: [projectId], references: [id], onDelete: Cascade, onUpdate: Cascade) + projectId String? + createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@ -1955,6 +1959,7 @@ model TaskScheduleInstance { //you can only have a schedule attached to each environment once @@unique([taskScheduleId, environmentId]) + @@index([environmentId]) } model RuntimeEnvironmentSession { diff --git a/internal-packages/schedule-engine/test/scheduleEngine.test.ts b/internal-packages/schedule-engine/test/scheduleEngine.test.ts index fdc05e2574..99bac0936d 100644 --- a/internal-packages/schedule-engine/test/scheduleEngine.test.ts +++ b/internal-packages/schedule-engine/test/scheduleEngine.test.ts @@ -93,6 +93,7 @@ describe("ScheduleEngine Integration", () => { data: { taskScheduleId: taskSchedule.id, environmentId: environment.id, + projectId: project.id, active: true, }, }); diff --git a/internal-packages/schedule-engine/test/scheduleRecovery.test.ts b/internal-packages/schedule-engine/test/scheduleRecovery.test.ts index 9ad345101e..99a3351aed 100644 --- a/internal-packages/schedule-engine/test/scheduleRecovery.test.ts +++ b/internal-packages/schedule-engine/test/scheduleRecovery.test.ts @@ -79,6 +79,7 @@ describe("Schedule Recovery", () => { data: { taskScheduleId: taskSchedule.id, environmentId: environment.id, + projectId: project.id, active: true, }, }); @@ -184,6 +185,7 @@ describe("Schedule Recovery", () => { data: { taskScheduleId: taskSchedule.id, environmentId: environment.id, + projectId: project.id, active: true, }, }); @@ -293,6 +295,7 @@ describe("Schedule Recovery", () => { data: { taskScheduleId: taskSchedule.id, environmentId: environment.id, + projectId: project.id, active: true, }, });