diff --git a/prisma/migrations/20251107090000_add_my_reviews_indexes/migration.sql b/prisma/migrations/20251107090000_add_my_reviews_indexes/migration.sql index 5a09bb0..b06bddc 100644 --- a/prisma/migrations/20251107090000_add_my_reviews_indexes/migration.sql +++ b/prisma/migrations/20251107090000_add_my_reviews_indexes/migration.sql @@ -11,11 +11,6 @@ CREATE EXTENSION IF NOT EXISTS "uuid-ossp" WITH SCHEMA skills; CREATE INDEX IF NOT EXISTS "challenge_status_type_track_created_at_idx" ON "Challenge" ("status", "typeId", "trackId", "createdAt" DESC); -DROP INDEX IF EXISTS "challenge_name_idx"; - -CREATE INDEX IF NOT EXISTS "challenge_name_trgm_idx" - ON "Challenge" USING gin ("name" pg_catalog.gin_trgm_ops); - DO $$ DECLARE diff --git a/prisma/migrations/20251122120000_drop_phase_order_idx_allow_null_ai_reviewer/migration.sql b/prisma/migrations/20251122120000_drop_phase_order_idx_allow_null_ai_reviewer/migration.sql new file mode 100644 index 0000000..5079601 --- /dev/null +++ b/prisma/migrations/20251122120000_drop_phase_order_idx_allow_null_ai_reviewer/migration.sql @@ -0,0 +1,46 @@ +-- Remove deprecated ChallengePhase ordering index and allow AI reviewer flag to be nullable. + +DO +$$ +DECLARE + idx_schema TEXT; +BEGIN + SELECT n.nspname + INTO idx_schema + FROM pg_class c + JOIN pg_namespace n ON n.oid = c.relnamespace + WHERE c.relname = 'challenge_phase_order_idx' + AND c.relkind = 'i' + LIMIT 1; + + IF idx_schema IS NOT NULL THEN + EXECUTE format('DROP INDEX %I.%I', idx_schema, 'challenge_phase_order_idx'); + END IF; +END +$$ LANGUAGE plpgsql; + +DO +$$ +DECLARE + tbl_schema TEXT; +BEGIN + SELECT n.nspname + INTO tbl_schema + FROM pg_class c + JOIN pg_namespace n ON n.oid = c.relnamespace + WHERE c.relname = 'DefaultChallengeReviewer' + AND c.relkind = 'r' + LIMIT 1; + + IF tbl_schema IS NULL THEN + RETURN; + END IF; + + EXECUTE format( + 'ALTER TABLE %I.%I ALTER COLUMN %I DROP NOT NULL', + tbl_schema, + 'DefaultChallengeReviewer', + 'isAIReviewer' + ); +END +$$ LANGUAGE plpgsql; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 76fa346..c5d96cc 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -5,7 +5,7 @@ datasource db { generator client { provider = "prisma-client-js" - previewFeatures = ["fullTextSearchPostgres", "postgresqlExtensions"] + previewFeatures = ["fullTextSearchPostgres", "postgresqlExtensions", "views"] } // Enum for allowed challenge track values (matches app-constants) @@ -157,7 +157,6 @@ model Challenge { @@index([status, startDate]) @@index([trackId, typeId, status]) @@index([status, typeId, trackId, createdAt(sort: Desc)], map: "challenge_status_type_track_created_at_idx") - @@index([name(ops: raw("pg_catalog.gin_trgm_ops"))], type: Gin, map: "challenge_name_trgm_idx") @@index([legacyId]) @@index([projectId, status]) } @@ -166,13 +165,12 @@ model Challenge { // MemberChallengeAccess view – member/challenge pairs from resources schema ////////////////////////////////////////// -model MemberChallengeAccess { +view MemberChallengeAccess { challengeId String memberId String challenge Challenge @relation(fields: [challengeId], references: [id]) - @@id([challengeId, memberId]) @@map("MemberChallengeAccess") } @@ -660,7 +658,7 @@ model DefaultChallengeReviewer { baseCoefficient Float? incrementalCoefficient Float? opportunityType ReviewOpportunityTypeEnum? - isAIReviewer Boolean + isAIReviewer Boolean? shouldOpenOpportunity Boolean @default(true) // Relations