diff --git a/.circleci/config.yml b/.circleci/config.yml index 3c0c8c6..b61dec4 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -90,8 +90,8 @@ workflows: branches: only: - develop - - security - - PM-3351 + - PM-4478_add-ai-screening-phase-when-editing-after-launch + - review-context - "build-qa": context: org-global diff --git a/.github/workflows/trivy.yaml b/.github/workflows/trivy.yaml index 7b9fa48..9cbcf52 100644 --- a/.github/workflows/trivy.yaml +++ b/.github/workflows/trivy.yaml @@ -18,7 +18,7 @@ jobs: uses: actions/checkout@v4 - name: Run Trivy scanner in repo mode - uses: aquasecurity/trivy-action@0.33.1 + uses: aquasecurity/trivy-action@0.35.0 with: scan-type: "fs" ignore-unfixed: true diff --git a/app-constants.js b/app-constants.js index 5c8d576..c4aa466 100644 --- a/app-constants.js +++ b/app-constants.js @@ -7,6 +7,7 @@ const UserRoles = { Admin: "administrator", Copilot: "copilot", Manager: "Connect Manager", + TalentManager: "Talent Manager", User: "Topcoder User", SelfServiceCustomer: "Self-Service Customer", }; diff --git a/config/default.js b/config/default.js index 93e524f..cb0d509 100644 --- a/config/default.js +++ b/config/default.js @@ -44,7 +44,10 @@ module.exports = { SUBMISSIONS_API_URL: process.env.SUBMISSIONS_API_URL || "https://api.topcoder-dev.com/v5/submissions", MEMBERS_API_URL: process.env.MEMBERS_API_URL || "https://api.topcoder-dev.com/v6/members", - REVIEW_SUMMATIONS_API_URL: process.env.REVIEW_SUMMATIONS_API_URL || "https://api.topcoder-dev.com/v6/reviewSummations", + REVIEW_SUMMATIONS_API_URL: + process.env.REVIEW_SUMMATIONS_API_URL || "https://api.topcoder-dev.com/v6/reviewSummations", + REVIEWS_API_URL: process.env.REVIEWS_API_URL || "https://api.topcoder-dev.com", + TC_AI_API_URL: process.env.TC_AI_API_URL || "https://api.topcoder-dev.com/v6/ai", RESOURCES_API_URL: process.env.RESOURCES_API_URL || "http://localhost:4000/v5/resources", // TODO: change this to localhost RESOURCE_ROLES_API_URL: @@ -60,15 +63,14 @@ module.exports = { // copilot resource role ids allowed to upload attachment COPILOT_RESOURCE_ROLE_IDS: process.env.COPILOT_RESOURCE_ROLE_IDS ? process.env.COPILOT_RESOURCE_ROLE_IDS.split(",") - : [ - "10ba038e-48da-487b-96e8-8d3b99b6d18b", - "cfe12b3f-2a24-4639-9d8b-ec86726f76bd", - ], + : ["10ba038e-48da-487b-96e8-8d3b99b6d18b", "cfe12b3f-2a24-4639-9d8b-ec86726f76bd"], SUBMITTER_ROLE_ID: process.env.SUBMITTER_ROLE_ID || "732339e7-8e30-49d7-9198-cccf9451e221", SUBMITTER_ROLE_NAME: process.env.SUBMITTER_ROLE_NAME || "Submitter", // registrant role id (defaults to SUBMITTER_ROLE_ID) REGISTRANT_ROLE_ID: - process.env.REGISTRANT_ROLE_ID || process.env.SUBMITTER_ROLE_ID || "732339e7-8e30-49d7-9198-cccf9451e221", + process.env.REGISTRANT_ROLE_ID || + process.env.SUBMITTER_ROLE_ID || + "732339e7-8e30-49d7-9198-cccf9451e221", MANAGER_ROLE_ID: process.env.MANAGER_ROLE_ID || "0e9c6879-39e4-4eb6-b8df-92407890faf1", OBSERVER_ROLE_ID: process.env.OBSERVER_ROLE_ID || "2a4dc376-a31c-4d00-b173-13934d89e286", @@ -132,7 +134,9 @@ module.exports = { // Database schemas for direct counts (shared DB) RESOURCES_DB_SCHEMA: process.env.RESOURCES_DB_SCHEMA || "resources", REVIEW_DB_SCHEMA: process.env.REVIEW_DB_SCHEMA || "reviews", - CHALLENGE_SERVICE_PRISMA_TIMEOUT: process.env.CHALLENGE_SERVICE_PRISMA_TIMEOUT ? parseInt(process.env.CHALLENGE_SERVICE_PRISMA_TIMEOUT, 10) : 10000, - CHALLENGE_URL: process.env.CHALLENGE_URL || 'https://www.topcoder-dev.com/challenges' , + CHALLENGE_SERVICE_PRISMA_TIMEOUT: process.env.CHALLENGE_SERVICE_PRISMA_TIMEOUT + ? parseInt(process.env.CHALLENGE_SERVICE_PRISMA_TIMEOUT, 10) + : 10000, + CHALLENGE_URL: process.env.CHALLENGE_URL || "https://www.topcoder-dev.com/challenges", PHASE_CHANGE_SENDGRID_TEMPLATE_ID: process.env.PHASE_CHANGE_SENDGRID_TEMPLATE_ID || "", }; diff --git a/docs/dev.env b/docs/dev.env index f2a2c88..5f68e34 100644 --- a/docs/dev.env +++ b/docs/dev.env @@ -4,5 +4,6 @@ AUTH0_URL=https://topcoder-dev.auth0.com/oauth/token AUTH0_AUDIENCE=https://m2m.topcoder-dev.com/ DATABASE_URL="postgresql://topcoder:NUDvFEZzrey2x2og2!zn_kBzcaJ.fu_njAJcD*z2q@topcoder-services.ci8xwsszszsw.us-east-1.rds.amazonaws.com:5432/topcoder-services?schema=challenges" REVIEW_DB_URL= +REVIEWS_API_URL=https://api.topcoder-dev.com # Optional: override registrant resource role ID (defaults to SUBMITTER_ROLE_ID) # REGISTRANT_ROLE_ID= diff --git a/docs/prod.env b/docs/prod.env index 06eb6cb..4097f4a 100644 --- a/docs/prod.env +++ b/docs/prod.env @@ -2,6 +2,7 @@ AUTH0_CLIENT_ID= AUTH0_CLIENT_SECRET= AUTH0_URL= AUTH0_AUDIENCE= +REVIEWS_API_URL= AUTH_SECRET= BUSAPI_URL= AWS_ACCESS_KEY_ID= diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 434463d..c3706ee 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -756,6 +756,16 @@ paths: description: Filter by abbreviation. Partial matches are allowed. required: false type: string + - name: legacyId + in: query + description: Filter by numeric legacy id. + required: false + type: integer + - name: isLegacy + in: query + description: Filter by legacy visibility flag. Defaults to false when omitted. + required: false + type: boolean responses: "200": description: OK @@ -1031,6 +1041,21 @@ paths: description: Filter by abbreviation. Partial matches are allowed. required: false type: string + - name: legacyId + in: query + description: Filter by numeric legacy id. + required: false + type: integer + - name: track + in: query + description: Filter by canonical track enum. + required: false + type: string + - name: isLegacy + in: query + description: Filter by legacy visibility flag. Defaults to false when omitted. + required: false + type: boolean responses: "200": description: OK @@ -2965,7 +2990,7 @@ definitions: selfServiceCopilot: type: string cancelReason: - type: string + type: string billing: type: object properties: @@ -3495,6 +3520,11 @@ definitions: default: false abbreviation: type: string + legacyId: + type: integer + isLegacy: + type: boolean + default: false required: - name - isActive @@ -3514,6 +3544,10 @@ definitions: default: false abbreviation: type: string + legacyId: + type: integer + isLegacy: + type: boolean ChallengeTrack: type: object allOf: @@ -3537,6 +3571,13 @@ definitions: type: boolean abbreviation: type: string + legacyId: + type: integer + track: + type: string + isLegacy: + type: boolean + default: false required: - name - isActive @@ -3552,6 +3593,12 @@ definitions: type: boolean abbreviation: type: string + legacyId: + type: integer + track: + type: string + isLegacy: + type: boolean Phase: type: object allOf: diff --git a/packages/challenge-prisma-client/edge.js b/packages/challenge-prisma-client/edge.js index e9d85a4..1cd1d88 100644 --- a/packages/challenge-prisma-client/edge.js +++ b/packages/challenge-prisma-client/edge.js @@ -110,6 +110,7 @@ exports.Prisma.ChallengeScalarFieldEnum = { numOfCheckpointSubmissions: 'numOfCheckpointSubmissions', currentPhaseNames: 'currentPhaseNames', wiproAllowed: 'wiproAllowed', + funChallenge: 'funChallenge', tags: 'tags', groups: 'groups', taskIsTask: 'taskIsTask', @@ -136,6 +137,8 @@ exports.Prisma.ChallengeTypeScalarFieldEnum = { isActive: 'isActive', isTask: 'isTask', abbreviation: 'abbreviation', + legacyId: 'legacyId', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -150,6 +153,7 @@ exports.Prisma.ChallengeTrackScalarFieldEnum = { abbreviation: 'abbreviation', legacyId: 'legacyId', track: 'track', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -418,7 +422,7 @@ exports.Prisma.DefaultChallengeReviewerScalarFieldEnum = { baseCoefficient: 'baseCoefficient', incrementalCoefficient: 'incrementalCoefficient', opportunityType: 'opportunityType', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', shouldOpenOpportunity: 'shouldOpenOpportunity', createdAt: 'createdAt', createdBy: 'createdBy', @@ -686,7 +690,7 @@ exports.Prisma.DefaultChallengeReviewerOrderByRelevanceFieldEnum = { scorecardId: 'scorecardId', phaseName: 'phaseName', phaseId: 'phaseId', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', createdBy: 'createdBy', updatedBy: 'updatedBy' }; @@ -848,13 +852,13 @@ const config = { } } }, - "inlineSchema": "datasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n}\n\ngenerator externalClient {\n provider = \"prisma-client-js\"\n output = \"../packages/challenge-prisma-client\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n binaryTargets = [\"native\", \"debian-openssl-3.0.x\"]\n}\n\n// Enum for allowed challenge track values (matches app-constants)\nenum ChallengeTrackEnum {\n DESIGN\n DATA_SCIENCE\n DEVELOPMENT\n QUALITY_ASSURANCE\n}\n\nenum ReviewTypeEnum {\n COMMUNITY\n INTERNAL\n SYSTEM\n PROVISIONAL\n EXAMPLE\n}\n\nenum DiscussionTypeEnum {\n CHALLENGE\n}\n\nenum ChallengeStatusEnum {\n NEW\n DRAFT\n APPROVED\n ACTIVE\n COMPLETED\n DELETED\n CANCELLED\n CANCELLED_FAILED_REVIEW\n CANCELLED_FAILED_SCREENING\n CANCELLED_ZERO_SUBMISSIONS\n CANCELLED_WINNER_UNRESPONSIVE\n CANCELLED_CLIENT_REQUEST\n CANCELLED_REQUIREMENTS_INFEASIBLE\n CANCELLED_ZERO_REGISTRATIONS\n CANCELLED_PAYMENT_FAILED\n}\n\nenum PrizeSetTypeEnum {\n PLACEMENT\n COPILOT\n REVIEWER\n PASSED_REVIEW\n CHECKPOINT\n}\n\n// Enum for review opportunity types on reviewers\nenum ReviewOpportunityTypeEnum {\n REGULAR_REVIEW\n COMPONENT_DEV_REVIEW\n SPEC_REVIEW\n ITERATIVE_REVIEW\n SCENARIOS_REVIEW\n}\n\n//////////////////////////////////////////\n// Main Challenge model\n//////////////////////////////////////////\n\nmodel Challenge {\n id String @id @default(uuid())\n name String\n description String?\n privateDescription String?\n challengeSource String?\n descriptionFormat String?\n projectId Int? // frequently queried field\n typeId String\n trackId String // FK for relation in ChallengeTrack\n timelineTemplateId String? // now used as foreign key to ChallengeTimelineTemplate\n overviewTotalPrizes Float? // stored from overview.totalPrizes\n numOfRegistrants Int @default(0)\n numOfSubmissions Int @default(0)\n numOfCheckpointSubmissions Int @default(0)\n currentPhaseNames String[] // current phase names\n\n wiproAllowed Boolean @default(false)\n\n // simple arrays for tags and groups (PostgreSQL native array type)\n tags String[]\n groups String[]\n\n // Task information (flattened from challenge.task)\n taskIsTask Boolean @default(false)\n taskIsAssigned Boolean @default(false)\n taskMemberId String?\n\n // Dates for challenge lifecycle\n submissionStartDate DateTime?\n submissionEndDate DateTime?\n registrationStartDate DateTime?\n registrationEndDate DateTime?\n startDate DateTime?\n endDate DateTime?\n\n // Normalized billing and legacy information (one-to-one)\n billingRecord ChallengeBilling?\n legacyId Int? // Legacy system ID for searching\n legacyRecord ChallengeLegacy? @relation(\"ChallengeLegacyRelation\")\n\n // Additional fields from createChallenge schema\n status ChallengeStatusEnum @default(NEW) // new challenges default to status \"New\"\n // Normalized top‑level constraints (e.g. allowedRegistrants) for a challenge\n constraintRecord ChallengeConstraint?\n\n // Additional normalized relations from createChallenge\n events ChallengeEvent[]\n discussions ChallengeDiscussion[]\n\n // Existing relations (one-to-many) for challenge metadata, phases, prize sets, winners, attachments,\n // terms and skills\n metadata ChallengeMetadata[]\n phases ChallengePhase[]\n prizeSets ChallengePrizeSet[]\n reviewers ChallengeReviewer[]\n winners ChallengeWinner[]\n attachments Attachment[]\n terms ChallengeTerm[]\n skills ChallengeSkill[]\n auditLogs AuditLog[]\n memberAccesses MemberChallengeAccess[]\n\n // Relation to ChallengeType (FK: typeId)\n type ChallengeType @relation(fields: [typeId], references: [id])\n // Relation to ChallengeTrack (FK: trackId)\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n\n // Auditing fields (present in every table)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([projectId])\n @@index([status]) // index added for optimized search by status\n @@index([createdAt])\n @@index([updatedAt])\n @@index([typeId])\n @@index([trackId])\n @@index([groups], type: Gin, map: \"challenge_groups_gin_idx\")\n @@index([submissionStartDate])\n @@index([submissionEndDate])\n @@index([registrationStartDate])\n @@index([registrationEndDate])\n @@index([startDate])\n @@index([endDate])\n @@index([status, startDate])\n @@index([trackId, typeId, status])\n @@index([status, typeId, trackId, createdAt(sort: Desc)], map: \"challenge_status_type_track_created_at_idx\")\n @@index([legacyId])\n @@index([projectId, status])\n}\n\n//////////////////////////////////////////\n// MemberChallengeAccess view – member/challenge pairs from resources schema\n//////////////////////////////////////////\n\nview MemberChallengeAccess {\n challengeId String\n memberId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id])\n\n @@map(\"MemberChallengeAccess\")\n}\n\n//////////////////////////////////////////\n// ChallengeType model\n//////////////////////////////////////////\n\nmodel ChallengeType {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n isTask Boolean @default(false)\n abbreviation String\n\n challenges Challenge[]\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this type\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([abbreviation])\n}\n\n//////////////////////////////////////////\n// ChallengeTrack model\n//////////////////////////////////////////\n\nmodel ChallengeTrack {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean\n abbreviation String\n legacyId Int? // numeric legacy system id (if provided)\n track ChallengeTrackEnum? // enum value from ChallengeTrackEnum\n challenges Challenge[]\n // Opposite relation for ChallengeTimelineTemplate\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this track\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([legacyId])\n}\n\n//////////////////////////////////////////\n// ChallengeTimelineTemplate model\n//////////////////////////////////////////\n\nmodel ChallengeTimelineTemplate {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String // now required per Swagger spec\n\n // Link to the TimelineTemplate model via timelineTemplateId.\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id])\n // Link to the ChallengeTrack model via trackId.\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n // Link to the ChallengeType model via typeId.\n type ChallengeType @relation(fields: [typeId], references: [id])\n\n isDefault Boolean @default(false)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Composite index to support searches/updates by typeId, trackId and timelineTemplateId.\n @@index([typeId, trackId, timelineTemplateId])\n}\n\n//////////////////////////////////////////\n// AuditLog model – tracks field changes\n//////////////////////////////////////////\n\nmodel AuditLog {\n id String @id @default(uuid())\n challengeId String? // optional association with a challenge\n fieldName String\n oldValue String?\n newValue String?\n createdAt DateTime @default(now())\n createdBy String\n memberId String?\n\n // Relation field to connect AuditLog to Challenge.\n challenge Challenge? @relation(fields: [challengeId], references: [id])\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Attachment model – for challenge attachments\n//////////////////////////////////////////\n\nmodel Attachment {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String\n fileSize Int\n url String\n description String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeMetadata model – key/value metadata\n//////////////////////////////////////////\n\nmodel ChallengeMetadata {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String // name of the metadata\n value String // value stored as string for flexibility\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Prize model – individual prize in a prize set\n//////////////////////////////////////////\n\nmodel Prize {\n id String @id @default(uuid())\n description String?\n prizeSet ChallengePrizeSet @relation(fields: [prizeSetId], references: [id], onDelete: Cascade)\n prizeSetId String\n type String // e.g. \"USD\", \"POINT\" (could also be converted to enum later)\n value Float\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeWinner model – record winners for a challenge\n//////////////////////////////////////////\n\nmodel ChallengeWinner {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n userId Int\n handle String\n placement Int\n type PrizeSetTypeEnum\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type, placement])\n}\n\n//////////////////////////////////////////\n// ChallengeTerm model – association of challenge and terms\n//////////////////////////////////////////\n\nmodel ChallengeTerm {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n termId String // Terms API id\n roleId String // UUID for the associated role\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeSkill model – linking challenges with skills\n//////////////////////////////////////////\n\nmodel ChallengeSkill {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n skillId String // Request provided skillId\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeBilling model – normalized billing info\n//////////////////////////////////////////\n\nmodel ChallengeBilling {\n id String @id @default(uuid())\n billingAccountId String?\n markup Float? // in range [0, 100]\n clientBillingRate Float? // in range [0, 100]. Supporting range on postgres is an open issue with prisma https://github.com/prisma/prisma/issues/3287.\n challengeId String @unique\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeLegacy model – normalized legacy info\n//////////////////////////////////////////\n\nmodel ChallengeLegacy {\n id String @id @default(uuid())\n reviewType ReviewTypeEnum @default(INTERNAL)\n confidentialityType String @default(\"public\")\n forumId Int?\n directProjectId Int?\n screeningScorecardId Int?\n reviewScorecardId Int?\n isTask Boolean @default(false)\n useSchedulingAPI Boolean @default(false)\n pureV5Task Boolean @default(false)\n pureV5 Boolean @default(false)\n selfService Boolean @default(false)\n selfServiceCopilot String?\n track String? // as provided in the legacy object\n subTrack String? // as provided in the legacy object\n legacySystemId Int? // represents the external \"legacyId\"\n challengeId String @unique\n challenge Challenge @relation(\"ChallengeLegacyRelation\", fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeEvent model – normalized challenge events\n//////////////////////////////////////////\n\nmodel ChallengeEvent {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n eventId Int\n name String?\n key String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeDiscussion and associated options – normalized discussion channels\n//////////////////////////////////////////\n\nmodel ChallengeDiscussion {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n discussionId String?\n name String\n type DiscussionTypeEnum // updated to use enum\n provider String\n url String?\n options ChallengeDiscussionOption[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\nmodel ChallengeDiscussionOption {\n id String @id @default(uuid())\n discussion ChallengeDiscussion @relation(fields: [discussionId], references: [id], onDelete: Cascade)\n discussionId String\n optionKey String\n optionValue String\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeConstraint model – top-level challenge constraints (e.g. allowed registrants)\n//////////////////////////////////////////\n\nmodel ChallengeConstraint {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String @unique\n allowedRegistrants String[] @default([])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhase – to capture per-phase info from create/update challenge operations\n// Each phase is linked with a challenge and holds a duration and any custom constraints.\n//////////////////////////////////////////\n\nmodel Phase {\n id String @id @default(uuid())\n name String\n description String?\n isOpen Boolean\n duration Int\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Inverse relation for associated challenge phases\n challengePhases ChallengePhase[]\n ChallengeReviewer ChallengeReviewer[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\nmodel ChallengePhase {\n id String @id @default(uuid())\n challengeId String\n phaseId String // foreign key to Phase\n\n name String // phase name\n description String? // description\n isOpen Boolean? @default(false) // if this phase is open\n predecessor String? // predecessor of this phase\n duration Int? // duration in seconds\n scheduledStartDate DateTime? // when the phase is scheduled to start\n scheduledEndDate DateTime?\n actualStartDate DateTime?\n actualEndDate DateTime? // when the phase actually ended\n constraints ChallengePhaseConstraint[]\n\n // Relation fields\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n phase Phase @relation(fields: [phaseId], references: [id])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, isOpen])\n @@index([challengeId, name])\n @@index([challengeId, isOpen, scheduledEndDate, actualEndDate], map: \"challenge_phase_challenge_open_end_idx\")\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhaseConstraint – to capture custom constraints for each phase\n//////////////////////////////////////////\n\nmodel ChallengePhaseConstraint {\n id String @id @default(uuid())\n challengePhaseId String\n name String // the name/key of the constraint\n value Int // numeric value of the constraint (can be changed to Float if needed)\n\n // Relation to the phase\n challengePhase ChallengePhase @relation(fields: [challengePhaseId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengePhaseId])\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePrizeSet – to group prizes for a challenge\n//////////////////////////////////////////\n\nmodel ChallengePrizeSet {\n id String @id @default(uuid())\n challengeId String\n type PrizeSetTypeEnum // using enum instead of string\n description String?\n prizes Prize[]\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type])\n}\n\n//////////////////////////////////////////\n// ChallengeReviewer model – reviewers for a challenge, both AI and member\n//////////////////////////////////////////\n\nmodel ChallengeReviewer {\n id String @id @default(uuid())\n challengeId String\n\n // Reviewer configuration\n scorecardId String\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseId String\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n type ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n // Relation to the phase\n phase Phase @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([phaseId])\n @@index([challengeId, phaseId])\n}\n\n//////////////////////////////////////////\n// DefaultChallengeReviewer model – default reviewers by type and track\n//////////////////////////////////////////\n\nmodel DefaultChallengeReviewer {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String?\n // Reviewer configuration (mirrors ChallengeReviewer)\n scorecardId String?\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseName String\n // Optional explicit link to Phase for better fidelity\n phaseId String?\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n opportunityType ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relations\n challengeType ChallengeType @relation(fields: [typeId], references: [id])\n challengeTrack ChallengeTrack @relation(fields: [trackId], references: [id])\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n // Relation to Phase (optional for backward compatibility with phaseName)\n phase Phase? @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([typeId, trackId])\n @@index([typeId, trackId, timelineTemplateId])\n @@index([phaseId])\n}\n\n//////////////////////////////////////////\n// TimelineTemplate model – defines timeline templates\n//////////////////////////////////////////\nmodel TimelineTemplate {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n phases TimelineTemplatePhase[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Opposite relation field, linking back to ChallengeTimelineTemplate.\n challengeTimelineTemplates ChallengeTimelineTemplate[]\n\n // Opposite relation field for Challenge.\n challenges Challenge[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\n//////////////////////////////////////////\n// TimelineTemplatePhase model – phases associated with a timeline template\n//////////////////////////////////////////\nmodel TimelineTemplatePhase {\n id String @id @default(uuid())\n timelineTemplateId String\n phaseId String // identifier for the phase\n predecessor String? // optional predecessor phase id\n defaultDuration Int // duration (in minutes, hours, etc.) as per business rules\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id], onDelete: Cascade)\n\n @@index([timelineTemplateId])\n @@index([timelineTemplateId, phaseId])\n}\n", - "inlineSchemaHash": "c9846a1406075bc0459c1958404f71031f4fcd9169d5a140273162524f601f84", + "inlineSchema": "datasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n}\n\ngenerator externalClient {\n provider = \"prisma-client-js\"\n output = \"../packages/challenge-prisma-client\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n binaryTargets = [\"native\", \"debian-openssl-3.0.x\"]\n}\n\n// Enum for allowed challenge track values (matches app-constants)\nenum ChallengeTrackEnum {\n DESIGN\n DATA_SCIENCE\n DEVELOPMENT\n QUALITY_ASSURANCE\n}\n\nenum ReviewTypeEnum {\n COMMUNITY\n INTERNAL\n SYSTEM\n PROVISIONAL\n EXAMPLE\n}\n\nenum DiscussionTypeEnum {\n CHALLENGE\n}\n\nenum ChallengeStatusEnum {\n NEW\n DRAFT\n APPROVED\n ACTIVE\n COMPLETED\n DELETED\n CANCELLED\n CANCELLED_FAILED_REVIEW\n CANCELLED_FAILED_SCREENING\n CANCELLED_ZERO_SUBMISSIONS\n CANCELLED_WINNER_UNRESPONSIVE\n CANCELLED_CLIENT_REQUEST\n CANCELLED_REQUIREMENTS_INFEASIBLE\n CANCELLED_ZERO_REGISTRATIONS\n CANCELLED_PAYMENT_FAILED\n}\n\nenum PrizeSetTypeEnum {\n PLACEMENT\n COPILOT\n REVIEWER\n PASSED_REVIEW\n CHECKPOINT\n}\n\n// Enum for review opportunity types on reviewers\nenum ReviewOpportunityTypeEnum {\n REGULAR_REVIEW\n COMPONENT_DEV_REVIEW\n SPEC_REVIEW\n ITERATIVE_REVIEW\n SCENARIOS_REVIEW\n}\n\n//////////////////////////////////////////\n// Main Challenge model\n//////////////////////////////////////////\n\nmodel Challenge {\n id String @id @default(uuid())\n name String\n description String?\n privateDescription String?\n challengeSource String?\n descriptionFormat String?\n projectId Int? // frequently queried field\n typeId String\n trackId String // FK for relation in ChallengeTrack\n timelineTemplateId String? // now used as foreign key to ChallengeTimelineTemplate\n overviewTotalPrizes Float? // stored from overview.totalPrizes\n numOfRegistrants Int @default(0)\n numOfSubmissions Int @default(0)\n numOfCheckpointSubmissions Int @default(0)\n currentPhaseNames String[] // current phase names\n\n wiproAllowed Boolean @default(false)\n funChallenge Boolean @default(false)\n\n // simple arrays for tags and groups (PostgreSQL native array type)\n tags String[]\n groups String[]\n\n // Task information (flattened from challenge.task)\n taskIsTask Boolean @default(false)\n taskIsAssigned Boolean @default(false)\n taskMemberId String?\n\n // Dates for challenge lifecycle\n submissionStartDate DateTime?\n submissionEndDate DateTime?\n registrationStartDate DateTime?\n registrationEndDate DateTime?\n startDate DateTime?\n endDate DateTime?\n\n // Normalized billing and legacy information (one-to-one)\n billingRecord ChallengeBilling?\n legacyId Int? // Legacy system ID for searching\n legacyRecord ChallengeLegacy? @relation(\"ChallengeLegacyRelation\")\n\n // Additional fields from createChallenge schema\n status ChallengeStatusEnum @default(NEW) // new challenges default to status \"New\"\n // Normalized top‑level constraints (e.g. allowedRegistrants) for a challenge\n constraintRecord ChallengeConstraint?\n\n // Additional normalized relations from createChallenge\n events ChallengeEvent[]\n discussions ChallengeDiscussion[]\n\n // Existing relations (one-to-many) for challenge metadata, phases, prize sets, winners, attachments,\n // terms and skills\n metadata ChallengeMetadata[]\n phases ChallengePhase[]\n prizeSets ChallengePrizeSet[]\n reviewers ChallengeReviewer[]\n winners ChallengeWinner[]\n attachments Attachment[]\n terms ChallengeTerm[]\n skills ChallengeSkill[]\n auditLogs AuditLog[]\n memberAccesses MemberChallengeAccess[]\n\n // Relation to ChallengeType (FK: typeId)\n type ChallengeType @relation(fields: [typeId], references: [id])\n // Relation to ChallengeTrack (FK: trackId)\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n\n // Auditing fields (present in every table)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([projectId])\n @@index([status]) // index added for optimized search by status\n @@index([createdAt])\n @@index([updatedAt])\n @@index([typeId])\n @@index([trackId])\n @@index([groups], type: Gin, map: \"challenge_groups_gin_idx\")\n @@index([submissionStartDate])\n @@index([submissionEndDate])\n @@index([registrationStartDate])\n @@index([registrationEndDate])\n @@index([startDate])\n @@index([endDate])\n @@index([status, startDate])\n @@index([trackId, typeId, status])\n @@index([status, typeId, trackId, createdAt(sort: Desc)], map: \"challenge_status_type_track_created_at_idx\")\n @@index([legacyId])\n @@index([projectId, status])\n}\n\n//////////////////////////////////////////\n// MemberChallengeAccess view – member/challenge pairs from resources schema\n//////////////////////////////////////////\n\nview MemberChallengeAccess {\n challengeId String\n memberId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id])\n\n @@map(\"MemberChallengeAccess\")\n}\n\n//////////////////////////////////////////\n// ChallengeType model\n//////////////////////////////////////////\n\nmodel ChallengeType {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n isTask Boolean @default(false)\n abbreviation String\n legacyId Int?\n isLegacy Boolean @default(false)\n\n challenges Challenge[]\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this type\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([abbreviation])\n @@index([legacyId])\n @@index([isLegacy])\n}\n\n//////////////////////////////////////////\n// ChallengeTrack model\n//////////////////////////////////////////\n\nmodel ChallengeTrack {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean\n abbreviation String\n legacyId Int? // numeric legacy system id (if provided)\n track ChallengeTrackEnum? // enum value from ChallengeTrackEnum\n isLegacy Boolean @default(false)\n challenges Challenge[]\n // Opposite relation for ChallengeTimelineTemplate\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this track\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([legacyId])\n @@index([isLegacy])\n}\n\n//////////////////////////////////////////\n// ChallengeTimelineTemplate model\n//////////////////////////////////////////\n\nmodel ChallengeTimelineTemplate {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String // now required per Swagger spec\n\n // Link to the TimelineTemplate model via timelineTemplateId.\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id])\n // Link to the ChallengeTrack model via trackId.\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n // Link to the ChallengeType model via typeId.\n type ChallengeType @relation(fields: [typeId], references: [id])\n\n isDefault Boolean @default(false)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Composite index to support searches/updates by typeId, trackId and timelineTemplateId.\n @@index([typeId, trackId, timelineTemplateId])\n}\n\n//////////////////////////////////////////\n// AuditLog model – tracks field changes\n//////////////////////////////////////////\n\nmodel AuditLog {\n id String @id @default(uuid())\n challengeId String? // optional association with a challenge\n fieldName String\n oldValue String?\n newValue String?\n createdAt DateTime @default(now())\n createdBy String\n memberId String?\n\n // Relation field to connect AuditLog to Challenge.\n challenge Challenge? @relation(fields: [challengeId], references: [id])\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Attachment model – for challenge attachments\n//////////////////////////////////////////\n\nmodel Attachment {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String\n fileSize Int\n url String\n description String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeMetadata model – key/value metadata\n//////////////////////////////////////////\n\nmodel ChallengeMetadata {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String // name of the metadata\n value String // value stored as string for flexibility\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Prize model – individual prize in a prize set\n//////////////////////////////////////////\n\nmodel Prize {\n id String @id @default(uuid())\n description String?\n prizeSet ChallengePrizeSet @relation(fields: [prizeSetId], references: [id], onDelete: Cascade)\n prizeSetId String\n type String // e.g. \"USD\", \"POINT\" (could also be converted to enum later)\n value Float\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeWinner model – record winners for a challenge\n//////////////////////////////////////////\n\nmodel ChallengeWinner {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n userId Int\n handle String\n placement Int\n type PrizeSetTypeEnum\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type, placement])\n}\n\n//////////////////////////////////////////\n// ChallengeTerm model – association of challenge and terms\n//////////////////////////////////////////\n\nmodel ChallengeTerm {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n termId String // Terms API id\n roleId String // UUID for the associated role\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeSkill model – linking challenges with skills\n//////////////////////////////////////////\n\nmodel ChallengeSkill {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n skillId String // Request provided skillId\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeBilling model – normalized billing info\n//////////////////////////////////////////\n\nmodel ChallengeBilling {\n id String @id @default(uuid())\n billingAccountId String?\n markup Float? // in range [0, 100]\n clientBillingRate Float? // in range [0, 100]. Supporting range on postgres is an open issue with prisma https://github.com/prisma/prisma/issues/3287.\n challengeId String @unique\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeLegacy model – normalized legacy info\n//////////////////////////////////////////\n\nmodel ChallengeLegacy {\n id String @id @default(uuid())\n reviewType ReviewTypeEnum @default(INTERNAL)\n confidentialityType String @default(\"public\")\n forumId Int?\n directProjectId Int?\n screeningScorecardId Int?\n reviewScorecardId Int?\n isTask Boolean @default(false)\n useSchedulingAPI Boolean @default(false)\n pureV5Task Boolean @default(false)\n pureV5 Boolean @default(false)\n selfService Boolean @default(false)\n selfServiceCopilot String?\n track String? // as provided in the legacy object\n subTrack String? // as provided in the legacy object\n legacySystemId Int? // represents the external \"legacyId\"\n challengeId String @unique\n challenge Challenge @relation(\"ChallengeLegacyRelation\", fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeEvent model – normalized challenge events\n//////////////////////////////////////////\n\nmodel ChallengeEvent {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n eventId Int\n name String?\n key String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeDiscussion and associated options – normalized discussion channels\n//////////////////////////////////////////\n\nmodel ChallengeDiscussion {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n discussionId String?\n name String\n type DiscussionTypeEnum // updated to use enum\n provider String\n url String?\n options ChallengeDiscussionOption[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\nmodel ChallengeDiscussionOption {\n id String @id @default(uuid())\n discussion ChallengeDiscussion @relation(fields: [discussionId], references: [id], onDelete: Cascade)\n discussionId String\n optionKey String\n optionValue String\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeConstraint model – top-level challenge constraints (e.g. allowed registrants)\n//////////////////////////////////////////\n\nmodel ChallengeConstraint {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String @unique\n allowedRegistrants String[] @default([])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhase – to capture per-phase info from create/update challenge operations\n// Each phase is linked with a challenge and holds a duration and any custom constraints.\n//////////////////////////////////////////\n\nmodel Phase {\n id String @id @default(uuid())\n name String\n description String?\n isOpen Boolean\n duration Int\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Inverse relation for associated challenge phases\n challengePhases ChallengePhase[]\n ChallengeReviewer ChallengeReviewer[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\nmodel ChallengePhase {\n id String @id @default(uuid())\n challengeId String\n phaseId String // foreign key to Phase\n\n name String // phase name\n description String? // description\n isOpen Boolean? @default(false) // if this phase is open\n predecessor String? // predecessor of this phase\n duration Int? // duration in seconds\n scheduledStartDate DateTime? // when the phase is scheduled to start\n scheduledEndDate DateTime?\n actualStartDate DateTime?\n actualEndDate DateTime? // when the phase actually ended\n constraints ChallengePhaseConstraint[]\n\n // Relation fields\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n phase Phase @relation(fields: [phaseId], references: [id])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, isOpen])\n @@index([challengeId, name])\n @@index([challengeId, isOpen, scheduledEndDate, actualEndDate], map: \"challenge_phase_challenge_open_end_idx\")\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhaseConstraint – to capture custom constraints for each phase\n//////////////////////////////////////////\n\nmodel ChallengePhaseConstraint {\n id String @id @default(uuid())\n challengePhaseId String\n name String // the name/key of the constraint\n value Int // numeric value of the constraint (can be changed to Float if needed)\n\n // Relation to the phase\n challengePhase ChallengePhase @relation(fields: [challengePhaseId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengePhaseId])\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePrizeSet – to group prizes for a challenge\n//////////////////////////////////////////\n\nmodel ChallengePrizeSet {\n id String @id @default(uuid())\n challengeId String\n type PrizeSetTypeEnum // using enum instead of string\n description String?\n prizes Prize[]\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type])\n}\n\n//////////////////////////////////////////\n// ChallengeReviewer model – reviewers for a challenge, both AI and member\n//////////////////////////////////////////\n\nmodel ChallengeReviewer {\n id String @id @default(uuid())\n challengeId String\n\n // Reviewer configuration\n scorecardId String\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseId String\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n type ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n // Relation to the phase\n phase Phase @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([phaseId])\n @@index([challengeId, phaseId])\n}\n\n//////////////////////////////////////////\n// DefaultChallengeReviewer model – default reviewers by type and track\n//////////////////////////////////////////\n\nmodel DefaultChallengeReviewer {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String?\n // Reviewer configuration (mirrors ChallengeReviewer)\n scorecardId String?\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseName String\n // Optional explicit link to Phase for better fidelity\n phaseId String?\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n opportunityType ReviewOpportunityTypeEnum?\n aiConfigTemplateId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relations\n challengeType ChallengeType @relation(fields: [typeId], references: [id])\n challengeTrack ChallengeTrack @relation(fields: [trackId], references: [id])\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n // Relation to Phase (optional for backward compatibility with phaseName)\n phase Phase? @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([typeId, trackId])\n @@index([typeId, trackId, timelineTemplateId])\n @@index([phaseId])\n}\n\n//////////////////////////////////////////\n// TimelineTemplate model – defines timeline templates\n//////////////////////////////////////////\nmodel TimelineTemplate {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n phases TimelineTemplatePhase[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Opposite relation field, linking back to ChallengeTimelineTemplate.\n challengeTimelineTemplates ChallengeTimelineTemplate[]\n\n // Opposite relation field for Challenge.\n challenges Challenge[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\n//////////////////////////////////////////\n// TimelineTemplatePhase model – phases associated with a timeline template\n//////////////////////////////////////////\nmodel TimelineTemplatePhase {\n id String @id @default(uuid())\n timelineTemplateId String\n phaseId String // identifier for the phase\n predecessor String? // optional predecessor phase id\n defaultDuration Int // duration (in minutes, hours, etc.) as per business rules\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id], onDelete: Cascade)\n\n @@index([timelineTemplateId])\n @@index([timelineTemplateId, phaseId])\n}\n", + "inlineSchemaHash": "013c60d710a175acc08038f512b16e5030bd0c3b8ccf59cb118c7e55c66e6caf", "copyEngine": true } config.dirname = '/' -config.runtimeDataModel = JSON.parse("{\"models\":{\"Challenge\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"privateDescription\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeSource\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"descriptionFormat\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"projectId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"overviewTotalPrizes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfRegistrants\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfSubmissions\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfCheckpointSubmissions\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"currentPhaseNames\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"wiproAllowed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tags\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"groups\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskIsTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskIsAssigned\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskMemberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissionStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissionEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"registrationStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"registrationEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"startDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"endDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billingRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeBilling\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeBilling\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeLegacy\",\"nativeType\":null,\"relationName\":\"ChallengeLegacyRelation\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ChallengeStatusEnum\",\"nativeType\":null,\"default\":\"NEW\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"constraintRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeConstraint\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeConstraint\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"events\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeEvent\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeEvent\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussion\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeDiscussion\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"metadata\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeMetadata\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeMetadata\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSets\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePrizeSet\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePrizeSet\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winners\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeWinner\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeWinner\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"attachments\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Attachment\",\"nativeType\":null,\"relationName\":\"AttachmentToChallenge\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"terms\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTerm\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTerm\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"skills\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeSkill\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeSkill\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"auditLogs\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"AuditLog\",\"nativeType\":null,\"relationName\":\"AuditLogToChallenge\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberAccesses\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MemberChallengeAccess\",\"nativeType\":null,\"relationName\":\"ChallengeToMemberChallengeAccess\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeType\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTrack\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeType\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeType\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeType\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTrack\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrackEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTrack\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTimelineTemplate\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeType\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"AuditLog\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fieldName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"oldValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"newValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"AuditLogToChallenge\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Attachment\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"AttachmentToChallenge\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fileSize\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeMetadata\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeMetadata\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Prize\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSet\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePrizeSet\",\"nativeType\":null,\"relationName\":\"ChallengePrizeSetToPrize\",\"relationFromFields\":[\"prizeSetId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSetId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeWinner\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeWinner\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"handle\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"placement\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PrizeSetTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTerm\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTerm\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"termId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roleId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeSkill\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeSkill\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"skillId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeBilling\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billingAccountId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"markup\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"clientBillingRate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeBilling\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeLegacy\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ReviewTypeEnum\",\"nativeType\":null,\"default\":\"INTERNAL\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confidentialityType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"public\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"forumId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"directProjectId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"screeningScorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewScorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"useSchedulingAPI\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pureV5Task\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pureV5\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"selfService\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"selfServiceCopilot\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"subTrack\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacySystemId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeLegacyRelation\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeEvent\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeEvent\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"eventId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"key\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeDiscussion\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeDiscussion\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DiscussionTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"provider\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"options\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussionOption\",\"nativeType\":null,\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeDiscussionOption\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussion\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussion\",\"nativeType\":null,\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\",\"relationFromFields\":[\"discussionId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"optionKey\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"optionValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeConstraint\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeConstraint\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"allowedRegistrants\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Phase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"duration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeReviewerToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"name\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"name\"]}],\"isGenerated\":false},\"ChallengePhase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"duration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scheduledStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scheduledEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actualStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actualEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"constraints\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhaseConstraint\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePhase\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengePhaseConstraint\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\",\"relationFromFields\":[\"challengePhaseId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengePrizeSet\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PrizeSetTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizes\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Prize\",\"nativeType\":null,\"relationName\":\"ChallengePrizeSetToPrize\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePrizeSet\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeReviewer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ReviewOpportunityTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"VarChar\",[\"14\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeReviewer\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"ChallengeReviewerToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DefaultChallengeReviewer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"opportunityType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ReviewOpportunityTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"VarChar\",[\"14\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeType\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeTrack\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TimelineTemplate\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplatePhase\",\"nativeType\":null,\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeTimelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"name\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"name\"]}],\"isGenerated\":false,\"documentation\":\"///////////////////////////////////////\\\\n///////////////////////////////////////\"},\"TimelineTemplatePhase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultDuration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false,\"documentation\":\"///////////////////////////////////////\\\\n///////////////////////////////////////\"},\"MemberChallengeAccess\":{\"dbName\":\"MemberChallengeAccess\",\"schema\":null,\"fields\":[{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToMemberChallengeAccess\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"ChallengeTrackEnum\":{\"values\":[{\"name\":\"DESIGN\",\"dbName\":null},{\"name\":\"DATA_SCIENCE\",\"dbName\":null},{\"name\":\"DEVELOPMENT\",\"dbName\":null},{\"name\":\"QUALITY_ASSURANCE\",\"dbName\":null}],\"dbName\":null},\"ReviewTypeEnum\":{\"values\":[{\"name\":\"COMMUNITY\",\"dbName\":null},{\"name\":\"INTERNAL\",\"dbName\":null},{\"name\":\"SYSTEM\",\"dbName\":null},{\"name\":\"PROVISIONAL\",\"dbName\":null},{\"name\":\"EXAMPLE\",\"dbName\":null}],\"dbName\":null},\"DiscussionTypeEnum\":{\"values\":[{\"name\":\"CHALLENGE\",\"dbName\":null}],\"dbName\":null},\"ChallengeStatusEnum\":{\"values\":[{\"name\":\"NEW\",\"dbName\":null},{\"name\":\"DRAFT\",\"dbName\":null},{\"name\":\"APPROVED\",\"dbName\":null},{\"name\":\"ACTIVE\",\"dbName\":null},{\"name\":\"COMPLETED\",\"dbName\":null},{\"name\":\"DELETED\",\"dbName\":null},{\"name\":\"CANCELLED\",\"dbName\":null},{\"name\":\"CANCELLED_FAILED_REVIEW\",\"dbName\":null},{\"name\":\"CANCELLED_FAILED_SCREENING\",\"dbName\":null},{\"name\":\"CANCELLED_ZERO_SUBMISSIONS\",\"dbName\":null},{\"name\":\"CANCELLED_WINNER_UNRESPONSIVE\",\"dbName\":null},{\"name\":\"CANCELLED_CLIENT_REQUEST\",\"dbName\":null},{\"name\":\"CANCELLED_REQUIREMENTS_INFEASIBLE\",\"dbName\":null},{\"name\":\"CANCELLED_ZERO_REGISTRATIONS\",\"dbName\":null},{\"name\":\"CANCELLED_PAYMENT_FAILED\",\"dbName\":null}],\"dbName\":null},\"PrizeSetTypeEnum\":{\"values\":[{\"name\":\"PLACEMENT\",\"dbName\":null},{\"name\":\"COPILOT\",\"dbName\":null},{\"name\":\"REVIEWER\",\"dbName\":null},{\"name\":\"PASSED_REVIEW\",\"dbName\":null},{\"name\":\"CHECKPOINT\",\"dbName\":null}],\"dbName\":null},\"ReviewOpportunityTypeEnum\":{\"values\":[{\"name\":\"REGULAR_REVIEW\",\"dbName\":null},{\"name\":\"COMPONENT_DEV_REVIEW\",\"dbName\":null},{\"name\":\"SPEC_REVIEW\",\"dbName\":null},{\"name\":\"ITERATIVE_REVIEW\",\"dbName\":null},{\"name\":\"SCENARIOS_REVIEW\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Challenge\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"privateDescription\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeSource\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"descriptionFormat\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"projectId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"overviewTotalPrizes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfRegistrants\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfSubmissions\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfCheckpointSubmissions\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"currentPhaseNames\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"wiproAllowed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"funChallenge\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tags\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"groups\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskIsTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskIsAssigned\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskMemberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissionStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissionEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"registrationStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"registrationEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"startDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"endDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billingRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeBilling\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeBilling\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeLegacy\",\"nativeType\":null,\"relationName\":\"ChallengeLegacyRelation\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ChallengeStatusEnum\",\"nativeType\":null,\"default\":\"NEW\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"constraintRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeConstraint\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeConstraint\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"events\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeEvent\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeEvent\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussion\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeDiscussion\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"metadata\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeMetadata\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeMetadata\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSets\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePrizeSet\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePrizeSet\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winners\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeWinner\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeWinner\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"attachments\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Attachment\",\"nativeType\":null,\"relationName\":\"AttachmentToChallenge\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"terms\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTerm\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTerm\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"skills\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeSkill\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeSkill\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"auditLogs\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"AuditLog\",\"nativeType\":null,\"relationName\":\"AuditLogToChallenge\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberAccesses\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MemberChallengeAccess\",\"nativeType\":null,\"relationName\":\"ChallengeToMemberChallengeAccess\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeType\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTrack\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeType\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isLegacy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeType\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeType\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTrack\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrackEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isLegacy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTrack\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTimelineTemplate\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeType\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"AuditLog\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fieldName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"oldValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"newValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"AuditLogToChallenge\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Attachment\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"AttachmentToChallenge\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fileSize\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeMetadata\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeMetadata\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Prize\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSet\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePrizeSet\",\"nativeType\":null,\"relationName\":\"ChallengePrizeSetToPrize\",\"relationFromFields\":[\"prizeSetId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSetId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeWinner\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeWinner\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"handle\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"placement\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PrizeSetTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTerm\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTerm\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"termId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roleId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeSkill\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeSkill\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"skillId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeBilling\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billingAccountId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"markup\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"clientBillingRate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeBilling\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeLegacy\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ReviewTypeEnum\",\"nativeType\":null,\"default\":\"INTERNAL\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confidentialityType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"public\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"forumId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"directProjectId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"screeningScorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewScorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"useSchedulingAPI\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pureV5Task\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pureV5\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"selfService\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"selfServiceCopilot\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"subTrack\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacySystemId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeLegacyRelation\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeEvent\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeEvent\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"eventId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"key\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeDiscussion\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeDiscussion\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DiscussionTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"provider\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"options\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussionOption\",\"nativeType\":null,\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeDiscussionOption\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussion\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussion\",\"nativeType\":null,\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\",\"relationFromFields\":[\"discussionId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"optionKey\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"optionValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeConstraint\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeConstraint\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"allowedRegistrants\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Phase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"duration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeReviewerToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"name\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"name\"]}],\"isGenerated\":false},\"ChallengePhase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"duration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scheduledStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scheduledEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actualStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actualEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"constraints\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhaseConstraint\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePhase\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengePhaseConstraint\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\",\"relationFromFields\":[\"challengePhaseId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengePrizeSet\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PrizeSetTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizes\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Prize\",\"nativeType\":null,\"relationName\":\"ChallengePrizeSetToPrize\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePrizeSet\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeReviewer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ReviewOpportunityTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"VarChar\",[\"14\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeReviewer\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"ChallengeReviewerToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DefaultChallengeReviewer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"opportunityType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ReviewOpportunityTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aiConfigTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"VarChar\",[\"14\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeType\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeTrack\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TimelineTemplate\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplatePhase\",\"nativeType\":null,\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeTimelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"name\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"name\"]}],\"isGenerated\":false,\"documentation\":\"///////////////////////////////////////\\\\n///////////////////////////////////////\"},\"TimelineTemplatePhase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultDuration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false,\"documentation\":\"///////////////////////////////////////\\\\n///////////////////////////////////////\"},\"MemberChallengeAccess\":{\"dbName\":\"MemberChallengeAccess\",\"schema\":null,\"fields\":[{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToMemberChallengeAccess\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"ChallengeTrackEnum\":{\"values\":[{\"name\":\"DESIGN\",\"dbName\":null},{\"name\":\"DATA_SCIENCE\",\"dbName\":null},{\"name\":\"DEVELOPMENT\",\"dbName\":null},{\"name\":\"QUALITY_ASSURANCE\",\"dbName\":null}],\"dbName\":null},\"ReviewTypeEnum\":{\"values\":[{\"name\":\"COMMUNITY\",\"dbName\":null},{\"name\":\"INTERNAL\",\"dbName\":null},{\"name\":\"SYSTEM\",\"dbName\":null},{\"name\":\"PROVISIONAL\",\"dbName\":null},{\"name\":\"EXAMPLE\",\"dbName\":null}],\"dbName\":null},\"DiscussionTypeEnum\":{\"values\":[{\"name\":\"CHALLENGE\",\"dbName\":null}],\"dbName\":null},\"ChallengeStatusEnum\":{\"values\":[{\"name\":\"NEW\",\"dbName\":null},{\"name\":\"DRAFT\",\"dbName\":null},{\"name\":\"APPROVED\",\"dbName\":null},{\"name\":\"ACTIVE\",\"dbName\":null},{\"name\":\"COMPLETED\",\"dbName\":null},{\"name\":\"DELETED\",\"dbName\":null},{\"name\":\"CANCELLED\",\"dbName\":null},{\"name\":\"CANCELLED_FAILED_REVIEW\",\"dbName\":null},{\"name\":\"CANCELLED_FAILED_SCREENING\",\"dbName\":null},{\"name\":\"CANCELLED_ZERO_SUBMISSIONS\",\"dbName\":null},{\"name\":\"CANCELLED_WINNER_UNRESPONSIVE\",\"dbName\":null},{\"name\":\"CANCELLED_CLIENT_REQUEST\",\"dbName\":null},{\"name\":\"CANCELLED_REQUIREMENTS_INFEASIBLE\",\"dbName\":null},{\"name\":\"CANCELLED_ZERO_REGISTRATIONS\",\"dbName\":null},{\"name\":\"CANCELLED_PAYMENT_FAILED\",\"dbName\":null}],\"dbName\":null},\"PrizeSetTypeEnum\":{\"values\":[{\"name\":\"PLACEMENT\",\"dbName\":null},{\"name\":\"COPILOT\",\"dbName\":null},{\"name\":\"REVIEWER\",\"dbName\":null},{\"name\":\"PASSED_REVIEW\",\"dbName\":null},{\"name\":\"CHECKPOINT\",\"dbName\":null}],\"dbName\":null},\"ReviewOpportunityTypeEnum\":{\"values\":[{\"name\":\"REGULAR_REVIEW\",\"dbName\":null},{\"name\":\"COMPONENT_DEV_REVIEW\",\"dbName\":null},{\"name\":\"SPEC_REVIEW\",\"dbName\":null},{\"name\":\"ITERATIVE_REVIEW\",\"dbName\":null},{\"name\":\"SCENARIOS_REVIEW\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.engineWasm = undefined config.compilerWasm = undefined diff --git a/packages/challenge-prisma-client/index-browser.js b/packages/challenge-prisma-client/index-browser.js index ba84901..24545d3 100644 --- a/packages/challenge-prisma-client/index-browser.js +++ b/packages/challenge-prisma-client/index-browser.js @@ -138,6 +138,7 @@ exports.Prisma.ChallengeScalarFieldEnum = { numOfCheckpointSubmissions: 'numOfCheckpointSubmissions', currentPhaseNames: 'currentPhaseNames', wiproAllowed: 'wiproAllowed', + funChallenge: 'funChallenge', tags: 'tags', groups: 'groups', taskIsTask: 'taskIsTask', @@ -164,6 +165,8 @@ exports.Prisma.ChallengeTypeScalarFieldEnum = { isActive: 'isActive', isTask: 'isTask', abbreviation: 'abbreviation', + legacyId: 'legacyId', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -178,6 +181,7 @@ exports.Prisma.ChallengeTrackScalarFieldEnum = { abbreviation: 'abbreviation', legacyId: 'legacyId', track: 'track', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -446,7 +450,7 @@ exports.Prisma.DefaultChallengeReviewerScalarFieldEnum = { baseCoefficient: 'baseCoefficient', incrementalCoefficient: 'incrementalCoefficient', opportunityType: 'opportunityType', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', shouldOpenOpportunity: 'shouldOpenOpportunity', createdAt: 'createdAt', createdBy: 'createdBy', @@ -714,7 +718,7 @@ exports.Prisma.DefaultChallengeReviewerOrderByRelevanceFieldEnum = { scorecardId: 'scorecardId', phaseName: 'phaseName', phaseId: 'phaseId', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', createdBy: 'createdBy', updatedBy: 'updatedBy' }; diff --git a/packages/challenge-prisma-client/index.d.ts b/packages/challenge-prisma-client/index.d.ts index e24bc5d..c9c10e0 100644 --- a/packages/challenge-prisma-client/index.d.ts +++ b/packages/challenge-prisma-client/index.d.ts @@ -3667,6 +3667,7 @@ export namespace Prisma { numOfSubmissions: number | null numOfCheckpointSubmissions: number | null wiproAllowed: boolean | null + funChallenge: boolean | null taskIsTask: boolean | null taskIsAssigned: boolean | null taskMemberId: string | null @@ -3700,6 +3701,7 @@ export namespace Prisma { numOfSubmissions: number | null numOfCheckpointSubmissions: number | null wiproAllowed: boolean | null + funChallenge: boolean | null taskIsTask: boolean | null taskIsAssigned: boolean | null taskMemberId: string | null @@ -3734,6 +3736,7 @@ export namespace Prisma { numOfCheckpointSubmissions: number currentPhaseNames: number wiproAllowed: number + funChallenge: number tags: number groups: number taskIsTask: number @@ -3789,6 +3792,7 @@ export namespace Prisma { numOfSubmissions?: true numOfCheckpointSubmissions?: true wiproAllowed?: true + funChallenge?: true taskIsTask?: true taskIsAssigned?: true taskMemberId?: true @@ -3822,6 +3826,7 @@ export namespace Prisma { numOfSubmissions?: true numOfCheckpointSubmissions?: true wiproAllowed?: true + funChallenge?: true taskIsTask?: true taskIsAssigned?: true taskMemberId?: true @@ -3856,6 +3861,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: true currentPhaseNames?: true wiproAllowed?: true + funChallenge?: true tags?: true groups?: true taskIsTask?: true @@ -3979,6 +3985,7 @@ export namespace Prisma { numOfCheckpointSubmissions: number currentPhaseNames: string[] wiproAllowed: boolean + funChallenge: boolean tags: string[] groups: string[] taskIsTask: boolean @@ -4034,6 +4041,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: boolean currentPhaseNames?: boolean wiproAllowed?: boolean + funChallenge?: boolean tags?: boolean groups?: boolean taskIsTask?: boolean @@ -4089,6 +4097,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: boolean currentPhaseNames?: boolean wiproAllowed?: boolean + funChallenge?: boolean tags?: boolean groups?: boolean taskIsTask?: boolean @@ -4128,6 +4137,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: boolean currentPhaseNames?: boolean wiproAllowed?: boolean + funChallenge?: boolean tags?: boolean groups?: boolean taskIsTask?: boolean @@ -4167,6 +4177,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: boolean currentPhaseNames?: boolean wiproAllowed?: boolean + funChallenge?: boolean tags?: boolean groups?: boolean taskIsTask?: boolean @@ -4186,7 +4197,7 @@ export namespace Prisma { updatedBy?: boolean } - export type ChallengeOmit = $Extensions.GetOmit<"id" | "name" | "description" | "privateDescription" | "challengeSource" | "descriptionFormat" | "projectId" | "typeId" | "trackId" | "timelineTemplateId" | "overviewTotalPrizes" | "numOfRegistrants" | "numOfSubmissions" | "numOfCheckpointSubmissions" | "currentPhaseNames" | "wiproAllowed" | "tags" | "groups" | "taskIsTask" | "taskIsAssigned" | "taskMemberId" | "submissionStartDate" | "submissionEndDate" | "registrationStartDate" | "registrationEndDate" | "startDate" | "endDate" | "legacyId" | "status" | "createdAt" | "createdBy" | "updatedAt" | "updatedBy", ExtArgs["result"]["challenge"]> + export type ChallengeOmit = $Extensions.GetOmit<"id" | "name" | "description" | "privateDescription" | "challengeSource" | "descriptionFormat" | "projectId" | "typeId" | "trackId" | "timelineTemplateId" | "overviewTotalPrizes" | "numOfRegistrants" | "numOfSubmissions" | "numOfCheckpointSubmissions" | "currentPhaseNames" | "wiproAllowed" | "funChallenge" | "tags" | "groups" | "taskIsTask" | "taskIsAssigned" | "taskMemberId" | "submissionStartDate" | "submissionEndDate" | "registrationStartDate" | "registrationEndDate" | "startDate" | "endDate" | "legacyId" | "status" | "createdAt" | "createdBy" | "updatedAt" | "updatedBy", ExtArgs["result"]["challenge"]> export type ChallengeInclude = { billingRecord?: boolean | Challenge$billingRecordArgs legacyRecord?: boolean | Challenge$legacyRecordArgs @@ -4258,6 +4269,7 @@ export namespace Prisma { numOfCheckpointSubmissions: number currentPhaseNames: string[] wiproAllowed: boolean + funChallenge: boolean tags: string[] groups: string[] taskIsTask: boolean @@ -4732,6 +4744,7 @@ export namespace Prisma { readonly numOfCheckpointSubmissions: FieldRef<"Challenge", 'Int'> readonly currentPhaseNames: FieldRef<"Challenge", 'String[]'> readonly wiproAllowed: FieldRef<"Challenge", 'Boolean'> + readonly funChallenge: FieldRef<"Challenge", 'Boolean'> readonly tags: FieldRef<"Challenge", 'String[]'> readonly groups: FieldRef<"Challenge", 'String[]'> readonly taskIsTask: FieldRef<"Challenge", 'Boolean'> @@ -5532,10 +5545,20 @@ export namespace Prisma { export type AggregateChallengeType = { _count: ChallengeTypeCountAggregateOutputType | null + _avg: ChallengeTypeAvgAggregateOutputType | null + _sum: ChallengeTypeSumAggregateOutputType | null _min: ChallengeTypeMinAggregateOutputType | null _max: ChallengeTypeMaxAggregateOutputType | null } + export type ChallengeTypeAvgAggregateOutputType = { + legacyId: number | null + } + + export type ChallengeTypeSumAggregateOutputType = { + legacyId: number | null + } + export type ChallengeTypeMinAggregateOutputType = { id: string | null name: string | null @@ -5543,6 +5566,8 @@ export namespace Prisma { isActive: boolean | null isTask: boolean | null abbreviation: string | null + legacyId: number | null + isLegacy: boolean | null createdAt: Date | null createdBy: string | null updatedAt: Date | null @@ -5556,6 +5581,8 @@ export namespace Prisma { isActive: boolean | null isTask: boolean | null abbreviation: string | null + legacyId: number | null + isLegacy: boolean | null createdAt: Date | null createdBy: string | null updatedAt: Date | null @@ -5569,6 +5596,8 @@ export namespace Prisma { isActive: number isTask: number abbreviation: number + legacyId: number + isLegacy: number createdAt: number createdBy: number updatedAt: number @@ -5577,6 +5606,14 @@ export namespace Prisma { } + export type ChallengeTypeAvgAggregateInputType = { + legacyId?: true + } + + export type ChallengeTypeSumAggregateInputType = { + legacyId?: true + } + export type ChallengeTypeMinAggregateInputType = { id?: true name?: true @@ -5584,6 +5621,8 @@ export namespace Prisma { isActive?: true isTask?: true abbreviation?: true + legacyId?: true + isLegacy?: true createdAt?: true createdBy?: true updatedAt?: true @@ -5597,6 +5636,8 @@ export namespace Prisma { isActive?: true isTask?: true abbreviation?: true + legacyId?: true + isLegacy?: true createdAt?: true createdBy?: true updatedAt?: true @@ -5610,6 +5651,8 @@ export namespace Prisma { isActive?: true isTask?: true abbreviation?: true + legacyId?: true + isLegacy?: true createdAt?: true createdBy?: true updatedAt?: true @@ -5652,6 +5695,18 @@ export namespace Prisma { * Count returned ChallengeTypes **/ _count?: true | ChallengeTypeCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to average + **/ + _avg?: ChallengeTypeAvgAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to sum + **/ + _sum?: ChallengeTypeSumAggregateInputType /** * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} * @@ -5685,6 +5740,8 @@ export namespace Prisma { take?: number skip?: number _count?: ChallengeTypeCountAggregateInputType | true + _avg?: ChallengeTypeAvgAggregateInputType + _sum?: ChallengeTypeSumAggregateInputType _min?: ChallengeTypeMinAggregateInputType _max?: ChallengeTypeMaxAggregateInputType } @@ -5696,11 +5753,15 @@ export namespace Prisma { isActive: boolean isTask: boolean abbreviation: string + legacyId: number | null + isLegacy: boolean createdAt: Date createdBy: string updatedAt: Date updatedBy: string _count: ChallengeTypeCountAggregateOutputType | null + _avg: ChallengeTypeAvgAggregateOutputType | null + _sum: ChallengeTypeSumAggregateOutputType | null _min: ChallengeTypeMinAggregateOutputType | null _max: ChallengeTypeMaxAggregateOutputType | null } @@ -5726,6 +5787,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation?: boolean + legacyId?: boolean + isLegacy?: boolean createdAt?: boolean createdBy?: boolean updatedAt?: boolean @@ -5743,6 +5806,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation?: boolean + legacyId?: boolean + isLegacy?: boolean createdAt?: boolean createdBy?: boolean updatedAt?: boolean @@ -5756,6 +5821,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation?: boolean + legacyId?: boolean + isLegacy?: boolean createdAt?: boolean createdBy?: boolean updatedAt?: boolean @@ -5769,13 +5836,15 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation?: boolean + legacyId?: boolean + isLegacy?: boolean createdAt?: boolean createdBy?: boolean updatedAt?: boolean updatedBy?: boolean } - export type ChallengeTypeOmit = $Extensions.GetOmit<"id" | "name" | "description" | "isActive" | "isTask" | "abbreviation" | "createdAt" | "createdBy" | "updatedAt" | "updatedBy", ExtArgs["result"]["challengeType"]> + export type ChallengeTypeOmit = $Extensions.GetOmit<"id" | "name" | "description" | "isActive" | "isTask" | "abbreviation" | "legacyId" | "isLegacy" | "createdAt" | "createdBy" | "updatedAt" | "updatedBy", ExtArgs["result"]["challengeType"]> export type ChallengeTypeInclude = { challenges?: boolean | ChallengeType$challengesArgs timelineTemplates?: boolean | ChallengeType$timelineTemplatesArgs @@ -5799,6 +5868,8 @@ export namespace Prisma { isActive: boolean isTask: boolean abbreviation: string + legacyId: number | null + isLegacy: boolean createdAt: Date createdBy: string updatedAt: Date @@ -6235,6 +6306,8 @@ export namespace Prisma { readonly isActive: FieldRef<"ChallengeType", 'Boolean'> readonly isTask: FieldRef<"ChallengeType", 'Boolean'> readonly abbreviation: FieldRef<"ChallengeType", 'String'> + readonly legacyId: FieldRef<"ChallengeType", 'Int'> + readonly isLegacy: FieldRef<"ChallengeType", 'Boolean'> readonly createdAt: FieldRef<"ChallengeType", 'DateTime'> readonly createdBy: FieldRef<"ChallengeType", 'String'> readonly updatedAt: FieldRef<"ChallengeType", 'DateTime'> @@ -6745,6 +6818,7 @@ export namespace Prisma { abbreviation: string | null legacyId: number | null track: $Enums.ChallengeTrackEnum | null + isLegacy: boolean | null createdAt: Date | null createdBy: string | null updatedAt: Date | null @@ -6759,6 +6833,7 @@ export namespace Prisma { abbreviation: string | null legacyId: number | null track: $Enums.ChallengeTrackEnum | null + isLegacy: boolean | null createdAt: Date | null createdBy: string | null updatedAt: Date | null @@ -6773,6 +6848,7 @@ export namespace Prisma { abbreviation: number legacyId: number track: number + isLegacy: number createdAt: number createdBy: number updatedAt: number @@ -6797,6 +6873,7 @@ export namespace Prisma { abbreviation?: true legacyId?: true track?: true + isLegacy?: true createdAt?: true createdBy?: true updatedAt?: true @@ -6811,6 +6888,7 @@ export namespace Prisma { abbreviation?: true legacyId?: true track?: true + isLegacy?: true createdAt?: true createdBy?: true updatedAt?: true @@ -6825,6 +6903,7 @@ export namespace Prisma { abbreviation?: true legacyId?: true track?: true + isLegacy?: true createdAt?: true createdBy?: true updatedAt?: true @@ -6926,6 +7005,7 @@ export namespace Prisma { abbreviation: string legacyId: number | null track: $Enums.ChallengeTrackEnum | null + isLegacy: boolean createdAt: Date createdBy: string updatedAt: Date @@ -6959,6 +7039,7 @@ export namespace Prisma { abbreviation?: boolean legacyId?: boolean track?: boolean + isLegacy?: boolean createdAt?: boolean createdBy?: boolean updatedAt?: boolean @@ -6977,6 +7058,7 @@ export namespace Prisma { abbreviation?: boolean legacyId?: boolean track?: boolean + isLegacy?: boolean createdAt?: boolean createdBy?: boolean updatedAt?: boolean @@ -6991,6 +7073,7 @@ export namespace Prisma { abbreviation?: boolean legacyId?: boolean track?: boolean + isLegacy?: boolean createdAt?: boolean createdBy?: boolean updatedAt?: boolean @@ -7005,13 +7088,14 @@ export namespace Prisma { abbreviation?: boolean legacyId?: boolean track?: boolean + isLegacy?: boolean createdAt?: boolean createdBy?: boolean updatedAt?: boolean updatedBy?: boolean } - export type ChallengeTrackOmit = $Extensions.GetOmit<"id" | "name" | "description" | "isActive" | "abbreviation" | "legacyId" | "track" | "createdAt" | "createdBy" | "updatedAt" | "updatedBy", ExtArgs["result"]["challengeTrack"]> + export type ChallengeTrackOmit = $Extensions.GetOmit<"id" | "name" | "description" | "isActive" | "abbreviation" | "legacyId" | "track" | "isLegacy" | "createdAt" | "createdBy" | "updatedAt" | "updatedBy", ExtArgs["result"]["challengeTrack"]> export type ChallengeTrackInclude = { challenges?: boolean | ChallengeTrack$challengesArgs timelineTemplates?: boolean | ChallengeTrack$timelineTemplatesArgs @@ -7036,6 +7120,7 @@ export namespace Prisma { abbreviation: string legacyId: number | null track: $Enums.ChallengeTrackEnum | null + isLegacy: boolean createdAt: Date createdBy: string updatedAt: Date @@ -7473,6 +7558,7 @@ export namespace Prisma { readonly abbreviation: FieldRef<"ChallengeTrack", 'String'> readonly legacyId: FieldRef<"ChallengeTrack", 'Int'> readonly track: FieldRef<"ChallengeTrack", 'ChallengeTrackEnum'> + readonly isLegacy: FieldRef<"ChallengeTrack", 'Boolean'> readonly createdAt: FieldRef<"ChallengeTrack", 'DateTime'> readonly createdBy: FieldRef<"ChallengeTrack", 'String'> readonly updatedAt: FieldRef<"ChallengeTrack", 'DateTime'> @@ -29926,7 +30012,7 @@ export namespace Prisma { baseCoefficient: number | null incrementalCoefficient: number | null opportunityType: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId: string | null + aiConfigTemplateId: string | null shouldOpenOpportunity: boolean | null createdAt: Date | null createdBy: string | null @@ -29948,7 +30034,7 @@ export namespace Prisma { baseCoefficient: number | null incrementalCoefficient: number | null opportunityType: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId: string | null + aiConfigTemplateId: string | null shouldOpenOpportunity: boolean | null createdAt: Date | null createdBy: string | null @@ -29970,7 +30056,7 @@ export namespace Prisma { baseCoefficient: number incrementalCoefficient: number opportunityType: number - aiWorkflowId: number + aiConfigTemplateId: number shouldOpenOpportunity: number createdAt: number createdBy: number @@ -30008,7 +30094,7 @@ export namespace Prisma { baseCoefficient?: true incrementalCoefficient?: true opportunityType?: true - aiWorkflowId?: true + aiConfigTemplateId?: true shouldOpenOpportunity?: true createdAt?: true createdBy?: true @@ -30030,7 +30116,7 @@ export namespace Prisma { baseCoefficient?: true incrementalCoefficient?: true opportunityType?: true - aiWorkflowId?: true + aiConfigTemplateId?: true shouldOpenOpportunity?: true createdAt?: true createdBy?: true @@ -30052,7 +30138,7 @@ export namespace Prisma { baseCoefficient?: true incrementalCoefficient?: true opportunityType?: true - aiWorkflowId?: true + aiConfigTemplateId?: true shouldOpenOpportunity?: true createdAt?: true createdBy?: true @@ -30161,7 +30247,7 @@ export namespace Prisma { baseCoefficient: number | null incrementalCoefficient: number | null opportunityType: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId: string | null + aiConfigTemplateId: string | null shouldOpenOpportunity: boolean createdAt: Date createdBy: string @@ -30202,7 +30288,7 @@ export namespace Prisma { baseCoefficient?: boolean incrementalCoefficient?: boolean opportunityType?: boolean - aiWorkflowId?: boolean + aiConfigTemplateId?: boolean shouldOpenOpportunity?: boolean createdAt?: boolean createdBy?: boolean @@ -30228,7 +30314,7 @@ export namespace Prisma { baseCoefficient?: boolean incrementalCoefficient?: boolean opportunityType?: boolean - aiWorkflowId?: boolean + aiConfigTemplateId?: boolean shouldOpenOpportunity?: boolean createdAt?: boolean createdBy?: boolean @@ -30254,7 +30340,7 @@ export namespace Prisma { baseCoefficient?: boolean incrementalCoefficient?: boolean opportunityType?: boolean - aiWorkflowId?: boolean + aiConfigTemplateId?: boolean shouldOpenOpportunity?: boolean createdAt?: boolean createdBy?: boolean @@ -30280,7 +30366,7 @@ export namespace Prisma { baseCoefficient?: boolean incrementalCoefficient?: boolean opportunityType?: boolean - aiWorkflowId?: boolean + aiConfigTemplateId?: boolean shouldOpenOpportunity?: boolean createdAt?: boolean createdBy?: boolean @@ -30288,7 +30374,7 @@ export namespace Prisma { updatedBy?: boolean } - export type DefaultChallengeReviewerOmit = $Extensions.GetOmit<"id" | "typeId" | "trackId" | "timelineTemplateId" | "scorecardId" | "isMemberReview" | "memberReviewerCount" | "phaseName" | "phaseId" | "fixedAmount" | "baseCoefficient" | "incrementalCoefficient" | "opportunityType" | "aiWorkflowId" | "shouldOpenOpportunity" | "createdAt" | "createdBy" | "updatedAt" | "updatedBy", ExtArgs["result"]["defaultChallengeReviewer"]> + export type DefaultChallengeReviewerOmit = $Extensions.GetOmit<"id" | "typeId" | "trackId" | "timelineTemplateId" | "scorecardId" | "isMemberReview" | "memberReviewerCount" | "phaseName" | "phaseId" | "fixedAmount" | "baseCoefficient" | "incrementalCoefficient" | "opportunityType" | "aiConfigTemplateId" | "shouldOpenOpportunity" | "createdAt" | "createdBy" | "updatedAt" | "updatedBy", ExtArgs["result"]["defaultChallengeReviewer"]> export type DefaultChallengeReviewerInclude = { challengeType?: boolean | ChallengeTypeDefaultArgs challengeTrack?: boolean | ChallengeTrackDefaultArgs @@ -30330,7 +30416,7 @@ export namespace Prisma { baseCoefficient: number | null incrementalCoefficient: number | null opportunityType: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId: string | null + aiConfigTemplateId: string | null shouldOpenOpportunity: boolean createdAt: Date createdBy: string @@ -30776,7 +30862,7 @@ export namespace Prisma { readonly baseCoefficient: FieldRef<"DefaultChallengeReviewer", 'Float'> readonly incrementalCoefficient: FieldRef<"DefaultChallengeReviewer", 'Float'> readonly opportunityType: FieldRef<"DefaultChallengeReviewer", 'ReviewOpportunityTypeEnum'> - readonly aiWorkflowId: FieldRef<"DefaultChallengeReviewer", 'String'> + readonly aiConfigTemplateId: FieldRef<"DefaultChallengeReviewer", 'String'> readonly shouldOpenOpportunity: FieldRef<"DefaultChallengeReviewer", 'Boolean'> readonly createdAt: FieldRef<"DefaultChallengeReviewer", 'DateTime'> readonly createdBy: FieldRef<"DefaultChallengeReviewer", 'String'> @@ -34161,6 +34247,7 @@ export namespace Prisma { numOfCheckpointSubmissions: 'numOfCheckpointSubmissions', currentPhaseNames: 'currentPhaseNames', wiproAllowed: 'wiproAllowed', + funChallenge: 'funChallenge', tags: 'tags', groups: 'groups', taskIsTask: 'taskIsTask', @@ -34190,6 +34277,8 @@ export namespace Prisma { isActive: 'isActive', isTask: 'isTask', abbreviation: 'abbreviation', + legacyId: 'legacyId', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -34207,6 +34296,7 @@ export namespace Prisma { abbreviation: 'abbreviation', legacyId: 'legacyId', track: 'track', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -34535,7 +34625,7 @@ export namespace Prisma { baseCoefficient: 'baseCoefficient', incrementalCoefficient: 'incrementalCoefficient', opportunityType: 'opportunityType', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', shouldOpenOpportunity: 'shouldOpenOpportunity', createdAt: 'createdAt', createdBy: 'createdBy', @@ -34890,7 +34980,7 @@ export namespace Prisma { scorecardId: 'scorecardId', phaseName: 'phaseName', phaseId: 'phaseId', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', createdBy: 'createdBy', updatedBy: 'updatedBy' }; @@ -35104,6 +35194,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFilter<"Challenge"> | number currentPhaseNames?: StringNullableListFilter<"Challenge"> wiproAllowed?: BoolFilter<"Challenge"> | boolean + funChallenge?: BoolFilter<"Challenge"> | boolean tags?: StringNullableListFilter<"Challenge"> groups?: StringNullableListFilter<"Challenge"> taskIsTask?: BoolFilter<"Challenge"> | boolean @@ -35158,6 +35249,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: SortOrder currentPhaseNames?: SortOrder wiproAllowed?: SortOrder + funChallenge?: SortOrder tags?: SortOrder groups?: SortOrder taskIsTask?: SortOrder @@ -35216,6 +35308,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFilter<"Challenge"> | number currentPhaseNames?: StringNullableListFilter<"Challenge"> wiproAllowed?: BoolFilter<"Challenge"> | boolean + funChallenge?: BoolFilter<"Challenge"> | boolean tags?: StringNullableListFilter<"Challenge"> groups?: StringNullableListFilter<"Challenge"> taskIsTask?: BoolFilter<"Challenge"> | boolean @@ -35270,6 +35363,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: SortOrder currentPhaseNames?: SortOrder wiproAllowed?: SortOrder + funChallenge?: SortOrder tags?: SortOrder groups?: SortOrder taskIsTask?: SortOrder @@ -35314,6 +35408,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntWithAggregatesFilter<"Challenge"> | number currentPhaseNames?: StringNullableListFilter<"Challenge"> wiproAllowed?: BoolWithAggregatesFilter<"Challenge"> | boolean + funChallenge?: BoolWithAggregatesFilter<"Challenge"> | boolean tags?: StringNullableListFilter<"Challenge"> groups?: StringNullableListFilter<"Challenge"> taskIsTask?: BoolWithAggregatesFilter<"Challenge"> | boolean @@ -35343,6 +35438,8 @@ export namespace Prisma { isActive?: BoolFilter<"ChallengeType"> | boolean isTask?: BoolFilter<"ChallengeType"> | boolean abbreviation?: StringFilter<"ChallengeType"> | string + legacyId?: IntNullableFilter<"ChallengeType"> | number | null + isLegacy?: BoolFilter<"ChallengeType"> | boolean createdAt?: DateTimeFilter<"ChallengeType"> | Date | string createdBy?: StringFilter<"ChallengeType"> | string updatedAt?: DateTimeFilter<"ChallengeType"> | Date | string @@ -35359,6 +35456,8 @@ export namespace Prisma { isActive?: SortOrder isTask?: SortOrder abbreviation?: SortOrder + legacyId?: SortOrderInput | SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder @@ -35379,6 +35478,8 @@ export namespace Prisma { isActive?: BoolFilter<"ChallengeType"> | boolean isTask?: BoolFilter<"ChallengeType"> | boolean abbreviation?: StringFilter<"ChallengeType"> | string + legacyId?: IntNullableFilter<"ChallengeType"> | number | null + isLegacy?: BoolFilter<"ChallengeType"> | boolean createdAt?: DateTimeFilter<"ChallengeType"> | Date | string createdBy?: StringFilter<"ChallengeType"> | string updatedAt?: DateTimeFilter<"ChallengeType"> | Date | string @@ -35395,13 +35496,17 @@ export namespace Prisma { isActive?: SortOrder isTask?: SortOrder abbreviation?: SortOrder + legacyId?: SortOrderInput | SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder updatedBy?: SortOrder _count?: ChallengeTypeCountOrderByAggregateInput + _avg?: ChallengeTypeAvgOrderByAggregateInput _max?: ChallengeTypeMaxOrderByAggregateInput _min?: ChallengeTypeMinOrderByAggregateInput + _sum?: ChallengeTypeSumOrderByAggregateInput } export type ChallengeTypeScalarWhereWithAggregatesInput = { @@ -35414,6 +35519,8 @@ export namespace Prisma { isActive?: BoolWithAggregatesFilter<"ChallengeType"> | boolean isTask?: BoolWithAggregatesFilter<"ChallengeType"> | boolean abbreviation?: StringWithAggregatesFilter<"ChallengeType"> | string + legacyId?: IntNullableWithAggregatesFilter<"ChallengeType"> | number | null + isLegacy?: BoolWithAggregatesFilter<"ChallengeType"> | boolean createdAt?: DateTimeWithAggregatesFilter<"ChallengeType"> | Date | string createdBy?: StringWithAggregatesFilter<"ChallengeType"> | string updatedAt?: DateTimeWithAggregatesFilter<"ChallengeType"> | Date | string @@ -35431,6 +35538,7 @@ export namespace Prisma { abbreviation?: StringFilter<"ChallengeTrack"> | string legacyId?: IntNullableFilter<"ChallengeTrack"> | number | null track?: EnumChallengeTrackEnumNullableFilter<"ChallengeTrack"> | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFilter<"ChallengeTrack"> | boolean createdAt?: DateTimeFilter<"ChallengeTrack"> | Date | string createdBy?: StringFilter<"ChallengeTrack"> | string updatedAt?: DateTimeFilter<"ChallengeTrack"> | Date | string @@ -35448,6 +35556,7 @@ export namespace Prisma { abbreviation?: SortOrder legacyId?: SortOrderInput | SortOrder track?: SortOrderInput | SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder @@ -35469,6 +35578,7 @@ export namespace Prisma { abbreviation?: StringFilter<"ChallengeTrack"> | string legacyId?: IntNullableFilter<"ChallengeTrack"> | number | null track?: EnumChallengeTrackEnumNullableFilter<"ChallengeTrack"> | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFilter<"ChallengeTrack"> | boolean createdAt?: DateTimeFilter<"ChallengeTrack"> | Date | string createdBy?: StringFilter<"ChallengeTrack"> | string updatedAt?: DateTimeFilter<"ChallengeTrack"> | Date | string @@ -35486,6 +35596,7 @@ export namespace Prisma { abbreviation?: SortOrder legacyId?: SortOrderInput | SortOrder track?: SortOrderInput | SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder @@ -35508,6 +35619,7 @@ export namespace Prisma { abbreviation?: StringWithAggregatesFilter<"ChallengeTrack"> | string legacyId?: IntNullableWithAggregatesFilter<"ChallengeTrack"> | number | null track?: EnumChallengeTrackEnumNullableWithAggregatesFilter<"ChallengeTrack"> | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolWithAggregatesFilter<"ChallengeTrack"> | boolean createdAt?: DateTimeWithAggregatesFilter<"ChallengeTrack"> | Date | string createdBy?: StringWithAggregatesFilter<"ChallengeTrack"> | string updatedAt?: DateTimeWithAggregatesFilter<"ChallengeTrack"> | Date | string @@ -37122,7 +37234,7 @@ export namespace Prisma { baseCoefficient?: FloatNullableFilter<"DefaultChallengeReviewer"> | number | null incrementalCoefficient?: FloatNullableFilter<"DefaultChallengeReviewer"> | number | null opportunityType?: EnumReviewOpportunityTypeEnumNullableFilter<"DefaultChallengeReviewer"> | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: StringNullableFilter<"DefaultChallengeReviewer"> | string | null + aiConfigTemplateId?: StringNullableFilter<"DefaultChallengeReviewer"> | string | null shouldOpenOpportunity?: BoolFilter<"DefaultChallengeReviewer"> | boolean createdAt?: DateTimeFilter<"DefaultChallengeReviewer"> | Date | string createdBy?: StringFilter<"DefaultChallengeReviewer"> | string @@ -37148,7 +37260,7 @@ export namespace Prisma { baseCoefficient?: SortOrderInput | SortOrder incrementalCoefficient?: SortOrderInput | SortOrder opportunityType?: SortOrderInput | SortOrder - aiWorkflowId?: SortOrderInput | SortOrder + aiConfigTemplateId?: SortOrderInput | SortOrder shouldOpenOpportunity?: SortOrder createdAt?: SortOrder createdBy?: SortOrder @@ -37178,7 +37290,7 @@ export namespace Prisma { baseCoefficient?: FloatNullableFilter<"DefaultChallengeReviewer"> | number | null incrementalCoefficient?: FloatNullableFilter<"DefaultChallengeReviewer"> | number | null opportunityType?: EnumReviewOpportunityTypeEnumNullableFilter<"DefaultChallengeReviewer"> | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: StringNullableFilter<"DefaultChallengeReviewer"> | string | null + aiConfigTemplateId?: StringNullableFilter<"DefaultChallengeReviewer"> | string | null shouldOpenOpportunity?: BoolFilter<"DefaultChallengeReviewer"> | boolean createdAt?: DateTimeFilter<"DefaultChallengeReviewer"> | Date | string createdBy?: StringFilter<"DefaultChallengeReviewer"> | string @@ -37204,7 +37316,7 @@ export namespace Prisma { baseCoefficient?: SortOrderInput | SortOrder incrementalCoefficient?: SortOrderInput | SortOrder opportunityType?: SortOrderInput | SortOrder - aiWorkflowId?: SortOrderInput | SortOrder + aiConfigTemplateId?: SortOrderInput | SortOrder shouldOpenOpportunity?: SortOrder createdAt?: SortOrder createdBy?: SortOrder @@ -37234,7 +37346,7 @@ export namespace Prisma { baseCoefficient?: FloatNullableWithAggregatesFilter<"DefaultChallengeReviewer"> | number | null incrementalCoefficient?: FloatNullableWithAggregatesFilter<"DefaultChallengeReviewer"> | number | null opportunityType?: EnumReviewOpportunityTypeEnumNullableWithAggregatesFilter<"DefaultChallengeReviewer"> | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: StringNullableWithAggregatesFilter<"DefaultChallengeReviewer"> | string | null + aiConfigTemplateId?: StringNullableWithAggregatesFilter<"DefaultChallengeReviewer"> | string | null shouldOpenOpportunity?: BoolWithAggregatesFilter<"DefaultChallengeReviewer"> | boolean createdAt?: DateTimeWithAggregatesFilter<"DefaultChallengeReviewer"> | Date | string createdBy?: StringWithAggregatesFilter<"DefaultChallengeReviewer"> | string @@ -37446,6 +37558,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -37500,6 +37613,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -37548,6 +37662,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -37602,6 +37717,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -37653,6 +37769,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -37686,6 +37803,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -37722,6 +37840,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -37748,6 +37867,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -37764,6 +37885,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -37780,6 +37903,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -37796,6 +37921,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -37812,6 +37939,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -37825,6 +37954,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -37838,6 +37969,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -37852,6 +37985,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -37869,6 +38003,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -37886,6 +38021,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -37903,6 +38039,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -37920,6 +38057,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -37934,6 +38072,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -37948,6 +38087,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -39702,7 +39842,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -39728,7 +39868,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -39746,7 +39886,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -39772,7 +39912,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -39794,7 +39934,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -39812,7 +39952,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -39834,7 +39974,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -40303,6 +40443,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: SortOrder currentPhaseNames?: SortOrder wiproAllowed?: SortOrder + funChallenge?: SortOrder tags?: SortOrder groups?: SortOrder taskIsTask?: SortOrder @@ -40347,6 +40488,7 @@ export namespace Prisma { numOfSubmissions?: SortOrder numOfCheckpointSubmissions?: SortOrder wiproAllowed?: SortOrder + funChallenge?: SortOrder taskIsTask?: SortOrder taskIsAssigned?: SortOrder taskMemberId?: SortOrder @@ -40380,6 +40522,7 @@ export namespace Prisma { numOfSubmissions?: SortOrder numOfCheckpointSubmissions?: SortOrder wiproAllowed?: SortOrder + funChallenge?: SortOrder taskIsTask?: SortOrder taskIsAssigned?: SortOrder taskMemberId?: SortOrder @@ -40581,12 +40724,18 @@ export namespace Prisma { isActive?: SortOrder isTask?: SortOrder abbreviation?: SortOrder + legacyId?: SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder updatedBy?: SortOrder } + export type ChallengeTypeAvgOrderByAggregateInput = { + legacyId?: SortOrder + } + export type ChallengeTypeMaxOrderByAggregateInput = { id?: SortOrder name?: SortOrder @@ -40594,6 +40743,8 @@ export namespace Prisma { isActive?: SortOrder isTask?: SortOrder abbreviation?: SortOrder + legacyId?: SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder @@ -40607,12 +40758,18 @@ export namespace Prisma { isActive?: SortOrder isTask?: SortOrder abbreviation?: SortOrder + legacyId?: SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder updatedBy?: SortOrder } + export type ChallengeTypeSumOrderByAggregateInput = { + legacyId?: SortOrder + } + export type EnumChallengeTrackEnumNullableFilter<$PrismaModel = never> = { equals?: $Enums.ChallengeTrackEnum | EnumChallengeTrackEnumFieldRefInput<$PrismaModel> | null in?: $Enums.ChallengeTrackEnum[] | ListEnumChallengeTrackEnumFieldRefInput<$PrismaModel> | null @@ -40634,6 +40791,7 @@ export namespace Prisma { abbreviation?: SortOrder legacyId?: SortOrder track?: SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder @@ -40652,6 +40810,7 @@ export namespace Prisma { abbreviation?: SortOrder legacyId?: SortOrder track?: SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder @@ -40666,6 +40825,7 @@ export namespace Prisma { abbreviation?: SortOrder legacyId?: SortOrder track?: SortOrder + isLegacy?: SortOrder createdAt?: SortOrder createdBy?: SortOrder updatedAt?: SortOrder @@ -41838,7 +41998,7 @@ export namespace Prisma { baseCoefficient?: SortOrder incrementalCoefficient?: SortOrder opportunityType?: SortOrder - aiWorkflowId?: SortOrder + aiConfigTemplateId?: SortOrder shouldOpenOpportunity?: SortOrder createdAt?: SortOrder createdBy?: SortOrder @@ -41867,7 +42027,7 @@ export namespace Prisma { baseCoefficient?: SortOrder incrementalCoefficient?: SortOrder opportunityType?: SortOrder - aiWorkflowId?: SortOrder + aiConfigTemplateId?: SortOrder shouldOpenOpportunity?: SortOrder createdAt?: SortOrder createdBy?: SortOrder @@ -41889,7 +42049,7 @@ export namespace Prisma { baseCoefficient?: SortOrder incrementalCoefficient?: SortOrder opportunityType?: SortOrder - aiWorkflowId?: SortOrder + aiConfigTemplateId?: SortOrder shouldOpenOpportunity?: SortOrder createdAt?: SortOrder createdBy?: SortOrder @@ -44677,6 +44837,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -44692,6 +44854,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -44713,6 +44877,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -44729,6 +44894,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -45283,6 +45449,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -45298,6 +45466,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -45325,6 +45495,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -45341,6 +45512,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -45402,6 +45574,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -45454,6 +45627,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -45540,7 +45714,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -45564,7 +45738,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -45618,6 +45792,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFilter<"Challenge"> | number currentPhaseNames?: StringNullableListFilter<"Challenge"> wiproAllowed?: BoolFilter<"Challenge"> | boolean + funChallenge?: BoolFilter<"Challenge"> | boolean tags?: StringNullableListFilter<"Challenge"> groups?: StringNullableListFilter<"Challenge"> taskIsTask?: BoolFilter<"Challenge"> | boolean @@ -45701,7 +45876,7 @@ export namespace Prisma { baseCoefficient?: FloatNullableFilter<"DefaultChallengeReviewer"> | number | null incrementalCoefficient?: FloatNullableFilter<"DefaultChallengeReviewer"> | number | null opportunityType?: EnumReviewOpportunityTypeEnumNullableFilter<"DefaultChallengeReviewer"> | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: StringNullableFilter<"DefaultChallengeReviewer"> | string | null + aiConfigTemplateId?: StringNullableFilter<"DefaultChallengeReviewer"> | string | null shouldOpenOpportunity?: BoolFilter<"DefaultChallengeReviewer"> | boolean createdAt?: DateTimeFilter<"DefaultChallengeReviewer"> | Date | string createdBy?: StringFilter<"DefaultChallengeReviewer"> | string @@ -45723,6 +45898,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -45775,6 +45951,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -45861,7 +46038,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -45885,7 +46062,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -45992,6 +46169,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -46008,6 +46186,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -46028,6 +46207,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -46043,6 +46224,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -46114,6 +46297,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -46130,6 +46314,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -46156,6 +46341,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -46171,6 +46358,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -46193,6 +46382,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -46246,6 +46436,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -46309,6 +46500,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -46362,6 +46554,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -46409,6 +46602,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -46462,6 +46656,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -46525,6 +46720,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -46578,6 +46774,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -46625,6 +46822,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -46678,6 +46876,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -46741,6 +46940,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -46794,6 +46994,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -46901,6 +47102,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -46954,6 +47156,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47017,6 +47220,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47070,6 +47274,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47117,6 +47322,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47170,6 +47376,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47233,6 +47440,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47286,6 +47494,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47333,6 +47542,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47386,6 +47596,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47449,6 +47660,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47502,6 +47714,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47549,6 +47762,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47602,6 +47816,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47665,6 +47880,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47718,6 +47934,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47765,6 +47982,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47818,6 +48036,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -47881,6 +48100,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47934,6 +48154,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -47981,6 +48202,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -48034,6 +48256,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -48097,6 +48320,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -48150,6 +48374,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -48197,6 +48422,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -48250,6 +48476,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -48343,6 +48570,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -48396,6 +48624,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -48545,6 +48774,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -48598,6 +48828,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -48661,6 +48892,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -48714,6 +48946,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -48851,7 +49084,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -48875,7 +49108,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -48985,6 +49218,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -49038,6 +49272,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -49164,6 +49399,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -49217,6 +49453,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -49427,6 +49664,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -49480,6 +49718,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -49574,6 +49813,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -49627,6 +49867,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -49674,6 +49915,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -49727,6 +49969,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -49823,6 +50066,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -49876,6 +50120,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -49955,6 +50200,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -49970,6 +50217,8 @@ export namespace Prisma { isActive?: boolean isTask?: boolean abbreviation: string + legacyId?: number | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -49991,6 +50240,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -50007,6 +50257,7 @@ export namespace Prisma { abbreviation: string legacyId?: number | null track?: $Enums.ChallengeTrackEnum | null + isLegacy?: boolean createdAt?: Date | string createdBy: string updatedAt?: Date | string @@ -50104,6 +50355,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -50119,6 +50372,8 @@ export namespace Prisma { isActive?: BoolFieldUpdateOperationsInput | boolean isTask?: BoolFieldUpdateOperationsInput | boolean abbreviation?: StringFieldUpdateOperationsInput | string + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -50146,6 +50401,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -50162,6 +50418,7 @@ export namespace Prisma { abbreviation?: StringFieldUpdateOperationsInput | string legacyId?: NullableIntFieldUpdateOperationsInput | number | null track?: NullableEnumChallengeTrackEnumFieldUpdateOperationsInput | $Enums.ChallengeTrackEnum | null + isLegacy?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string @@ -50326,6 +50583,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -50378,6 +50636,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -50432,7 +50691,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -50456,7 +50715,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -51195,6 +51454,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -51238,7 +51498,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -51260,6 +51520,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -51312,6 +51573,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -51362,6 +51624,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -51424,7 +51687,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -51448,7 +51711,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -51469,7 +51732,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -51493,6 +51756,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -51536,7 +51800,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -51558,6 +51822,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -51610,6 +51875,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -51660,6 +51926,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -51722,7 +51989,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -51746,7 +52013,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -51767,7 +52034,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -51864,7 +52131,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -51992,7 +52259,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -52016,7 +52283,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -52037,7 +52304,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -52167,6 +52434,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: number currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] wiproAllowed?: boolean + funChallenge?: boolean tags?: ChallengeCreatetagsInput | string[] groups?: ChallengeCreategroupsInput | string[] taskIsTask?: boolean @@ -52199,7 +52467,7 @@ export namespace Prisma { baseCoefficient?: number | null incrementalCoefficient?: number | null opportunityType?: $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: string | null + aiConfigTemplateId?: string | null shouldOpenOpportunity?: boolean createdAt?: Date | string createdBy: string @@ -52287,6 +52555,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -52339,6 +52608,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -52389,6 +52659,7 @@ export namespace Prisma { numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean tags?: ChallengeUpdatetagsInput | string[] groups?: ChallengeUpdategroupsInput | string[] taskIsTask?: BoolFieldUpdateOperationsInput | boolean @@ -52418,7 +52689,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -52442,7 +52713,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string @@ -52463,7 +52734,7 @@ export namespace Prisma { baseCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null incrementalCoefficient?: NullableFloatFieldUpdateOperationsInput | number | null opportunityType?: NullableEnumReviewOpportunityTypeEnumFieldUpdateOperationsInput | $Enums.ReviewOpportunityTypeEnum | null - aiWorkflowId?: NullableStringFieldUpdateOperationsInput | string | null + aiConfigTemplateId?: NullableStringFieldUpdateOperationsInput | string | null shouldOpenOpportunity?: BoolFieldUpdateOperationsInput | boolean createdAt?: DateTimeFieldUpdateOperationsInput | Date | string createdBy?: StringFieldUpdateOperationsInput | string diff --git a/packages/challenge-prisma-client/index.js b/packages/challenge-prisma-client/index.js index 1a725aa..f485946 100644 --- a/packages/challenge-prisma-client/index.js +++ b/packages/challenge-prisma-client/index.js @@ -111,6 +111,7 @@ exports.Prisma.ChallengeScalarFieldEnum = { numOfCheckpointSubmissions: 'numOfCheckpointSubmissions', currentPhaseNames: 'currentPhaseNames', wiproAllowed: 'wiproAllowed', + funChallenge: 'funChallenge', tags: 'tags', groups: 'groups', taskIsTask: 'taskIsTask', @@ -137,6 +138,8 @@ exports.Prisma.ChallengeTypeScalarFieldEnum = { isActive: 'isActive', isTask: 'isTask', abbreviation: 'abbreviation', + legacyId: 'legacyId', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -151,6 +154,7 @@ exports.Prisma.ChallengeTrackScalarFieldEnum = { abbreviation: 'abbreviation', legacyId: 'legacyId', track: 'track', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -419,7 +423,7 @@ exports.Prisma.DefaultChallengeReviewerScalarFieldEnum = { baseCoefficient: 'baseCoefficient', incrementalCoefficient: 'incrementalCoefficient', opportunityType: 'opportunityType', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', shouldOpenOpportunity: 'shouldOpenOpportunity', createdAt: 'createdAt', createdBy: 'createdBy', @@ -687,7 +691,7 @@ exports.Prisma.DefaultChallengeReviewerOrderByRelevanceFieldEnum = { scorecardId: 'scorecardId', phaseName: 'phaseName', phaseId: 'phaseId', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', createdBy: 'createdBy', updatedBy: 'updatedBy' }; @@ -849,8 +853,8 @@ const config = { } } }, - "inlineSchema": "datasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n}\n\ngenerator externalClient {\n provider = \"prisma-client-js\"\n output = \"../packages/challenge-prisma-client\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n binaryTargets = [\"native\", \"debian-openssl-3.0.x\"]\n}\n\n// Enum for allowed challenge track values (matches app-constants)\nenum ChallengeTrackEnum {\n DESIGN\n DATA_SCIENCE\n DEVELOPMENT\n QUALITY_ASSURANCE\n}\n\nenum ReviewTypeEnum {\n COMMUNITY\n INTERNAL\n SYSTEM\n PROVISIONAL\n EXAMPLE\n}\n\nenum DiscussionTypeEnum {\n CHALLENGE\n}\n\nenum ChallengeStatusEnum {\n NEW\n DRAFT\n APPROVED\n ACTIVE\n COMPLETED\n DELETED\n CANCELLED\n CANCELLED_FAILED_REVIEW\n CANCELLED_FAILED_SCREENING\n CANCELLED_ZERO_SUBMISSIONS\n CANCELLED_WINNER_UNRESPONSIVE\n CANCELLED_CLIENT_REQUEST\n CANCELLED_REQUIREMENTS_INFEASIBLE\n CANCELLED_ZERO_REGISTRATIONS\n CANCELLED_PAYMENT_FAILED\n}\n\nenum PrizeSetTypeEnum {\n PLACEMENT\n COPILOT\n REVIEWER\n PASSED_REVIEW\n CHECKPOINT\n}\n\n// Enum for review opportunity types on reviewers\nenum ReviewOpportunityTypeEnum {\n REGULAR_REVIEW\n COMPONENT_DEV_REVIEW\n SPEC_REVIEW\n ITERATIVE_REVIEW\n SCENARIOS_REVIEW\n}\n\n//////////////////////////////////////////\n// Main Challenge model\n//////////////////////////////////////////\n\nmodel Challenge {\n id String @id @default(uuid())\n name String\n description String?\n privateDescription String?\n challengeSource String?\n descriptionFormat String?\n projectId Int? // frequently queried field\n typeId String\n trackId String // FK for relation in ChallengeTrack\n timelineTemplateId String? // now used as foreign key to ChallengeTimelineTemplate\n overviewTotalPrizes Float? // stored from overview.totalPrizes\n numOfRegistrants Int @default(0)\n numOfSubmissions Int @default(0)\n numOfCheckpointSubmissions Int @default(0)\n currentPhaseNames String[] // current phase names\n\n wiproAllowed Boolean @default(false)\n\n // simple arrays for tags and groups (PostgreSQL native array type)\n tags String[]\n groups String[]\n\n // Task information (flattened from challenge.task)\n taskIsTask Boolean @default(false)\n taskIsAssigned Boolean @default(false)\n taskMemberId String?\n\n // Dates for challenge lifecycle\n submissionStartDate DateTime?\n submissionEndDate DateTime?\n registrationStartDate DateTime?\n registrationEndDate DateTime?\n startDate DateTime?\n endDate DateTime?\n\n // Normalized billing and legacy information (one-to-one)\n billingRecord ChallengeBilling?\n legacyId Int? // Legacy system ID for searching\n legacyRecord ChallengeLegacy? @relation(\"ChallengeLegacyRelation\")\n\n // Additional fields from createChallenge schema\n status ChallengeStatusEnum @default(NEW) // new challenges default to status \"New\"\n // Normalized top‑level constraints (e.g. allowedRegistrants) for a challenge\n constraintRecord ChallengeConstraint?\n\n // Additional normalized relations from createChallenge\n events ChallengeEvent[]\n discussions ChallengeDiscussion[]\n\n // Existing relations (one-to-many) for challenge metadata, phases, prize sets, winners, attachments,\n // terms and skills\n metadata ChallengeMetadata[]\n phases ChallengePhase[]\n prizeSets ChallengePrizeSet[]\n reviewers ChallengeReviewer[]\n winners ChallengeWinner[]\n attachments Attachment[]\n terms ChallengeTerm[]\n skills ChallengeSkill[]\n auditLogs AuditLog[]\n memberAccesses MemberChallengeAccess[]\n\n // Relation to ChallengeType (FK: typeId)\n type ChallengeType @relation(fields: [typeId], references: [id])\n // Relation to ChallengeTrack (FK: trackId)\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n\n // Auditing fields (present in every table)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([projectId])\n @@index([status]) // index added for optimized search by status\n @@index([createdAt])\n @@index([updatedAt])\n @@index([typeId])\n @@index([trackId])\n @@index([groups], type: Gin, map: \"challenge_groups_gin_idx\")\n @@index([submissionStartDate])\n @@index([submissionEndDate])\n @@index([registrationStartDate])\n @@index([registrationEndDate])\n @@index([startDate])\n @@index([endDate])\n @@index([status, startDate])\n @@index([trackId, typeId, status])\n @@index([status, typeId, trackId, createdAt(sort: Desc)], map: \"challenge_status_type_track_created_at_idx\")\n @@index([legacyId])\n @@index([projectId, status])\n}\n\n//////////////////////////////////////////\n// MemberChallengeAccess view – member/challenge pairs from resources schema\n//////////////////////////////////////////\n\nview MemberChallengeAccess {\n challengeId String\n memberId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id])\n\n @@map(\"MemberChallengeAccess\")\n}\n\n//////////////////////////////////////////\n// ChallengeType model\n//////////////////////////////////////////\n\nmodel ChallengeType {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n isTask Boolean @default(false)\n abbreviation String\n\n challenges Challenge[]\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this type\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([abbreviation])\n}\n\n//////////////////////////////////////////\n// ChallengeTrack model\n//////////////////////////////////////////\n\nmodel ChallengeTrack {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean\n abbreviation String\n legacyId Int? // numeric legacy system id (if provided)\n track ChallengeTrackEnum? // enum value from ChallengeTrackEnum\n challenges Challenge[]\n // Opposite relation for ChallengeTimelineTemplate\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this track\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([legacyId])\n}\n\n//////////////////////////////////////////\n// ChallengeTimelineTemplate model\n//////////////////////////////////////////\n\nmodel ChallengeTimelineTemplate {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String // now required per Swagger spec\n\n // Link to the TimelineTemplate model via timelineTemplateId.\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id])\n // Link to the ChallengeTrack model via trackId.\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n // Link to the ChallengeType model via typeId.\n type ChallengeType @relation(fields: [typeId], references: [id])\n\n isDefault Boolean @default(false)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Composite index to support searches/updates by typeId, trackId and timelineTemplateId.\n @@index([typeId, trackId, timelineTemplateId])\n}\n\n//////////////////////////////////////////\n// AuditLog model – tracks field changes\n//////////////////////////////////////////\n\nmodel AuditLog {\n id String @id @default(uuid())\n challengeId String? // optional association with a challenge\n fieldName String\n oldValue String?\n newValue String?\n createdAt DateTime @default(now())\n createdBy String\n memberId String?\n\n // Relation field to connect AuditLog to Challenge.\n challenge Challenge? @relation(fields: [challengeId], references: [id])\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Attachment model – for challenge attachments\n//////////////////////////////////////////\n\nmodel Attachment {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String\n fileSize Int\n url String\n description String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeMetadata model – key/value metadata\n//////////////////////////////////////////\n\nmodel ChallengeMetadata {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String // name of the metadata\n value String // value stored as string for flexibility\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Prize model – individual prize in a prize set\n//////////////////////////////////////////\n\nmodel Prize {\n id String @id @default(uuid())\n description String?\n prizeSet ChallengePrizeSet @relation(fields: [prizeSetId], references: [id], onDelete: Cascade)\n prizeSetId String\n type String // e.g. \"USD\", \"POINT\" (could also be converted to enum later)\n value Float\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeWinner model – record winners for a challenge\n//////////////////////////////////////////\n\nmodel ChallengeWinner {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n userId Int\n handle String\n placement Int\n type PrizeSetTypeEnum\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type, placement])\n}\n\n//////////////////////////////////////////\n// ChallengeTerm model – association of challenge and terms\n//////////////////////////////////////////\n\nmodel ChallengeTerm {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n termId String // Terms API id\n roleId String // UUID for the associated role\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeSkill model – linking challenges with skills\n//////////////////////////////////////////\n\nmodel ChallengeSkill {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n skillId String // Request provided skillId\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeBilling model – normalized billing info\n//////////////////////////////////////////\n\nmodel ChallengeBilling {\n id String @id @default(uuid())\n billingAccountId String?\n markup Float? // in range [0, 100]\n clientBillingRate Float? // in range [0, 100]. Supporting range on postgres is an open issue with prisma https://github.com/prisma/prisma/issues/3287.\n challengeId String @unique\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeLegacy model – normalized legacy info\n//////////////////////////////////////////\n\nmodel ChallengeLegacy {\n id String @id @default(uuid())\n reviewType ReviewTypeEnum @default(INTERNAL)\n confidentialityType String @default(\"public\")\n forumId Int?\n directProjectId Int?\n screeningScorecardId Int?\n reviewScorecardId Int?\n isTask Boolean @default(false)\n useSchedulingAPI Boolean @default(false)\n pureV5Task Boolean @default(false)\n pureV5 Boolean @default(false)\n selfService Boolean @default(false)\n selfServiceCopilot String?\n track String? // as provided in the legacy object\n subTrack String? // as provided in the legacy object\n legacySystemId Int? // represents the external \"legacyId\"\n challengeId String @unique\n challenge Challenge @relation(\"ChallengeLegacyRelation\", fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeEvent model – normalized challenge events\n//////////////////////////////////////////\n\nmodel ChallengeEvent {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n eventId Int\n name String?\n key String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeDiscussion and associated options – normalized discussion channels\n//////////////////////////////////////////\n\nmodel ChallengeDiscussion {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n discussionId String?\n name String\n type DiscussionTypeEnum // updated to use enum\n provider String\n url String?\n options ChallengeDiscussionOption[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\nmodel ChallengeDiscussionOption {\n id String @id @default(uuid())\n discussion ChallengeDiscussion @relation(fields: [discussionId], references: [id], onDelete: Cascade)\n discussionId String\n optionKey String\n optionValue String\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeConstraint model – top-level challenge constraints (e.g. allowed registrants)\n//////////////////////////////////////////\n\nmodel ChallengeConstraint {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String @unique\n allowedRegistrants String[] @default([])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhase – to capture per-phase info from create/update challenge operations\n// Each phase is linked with a challenge and holds a duration and any custom constraints.\n//////////////////////////////////////////\n\nmodel Phase {\n id String @id @default(uuid())\n name String\n description String?\n isOpen Boolean\n duration Int\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Inverse relation for associated challenge phases\n challengePhases ChallengePhase[]\n ChallengeReviewer ChallengeReviewer[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\nmodel ChallengePhase {\n id String @id @default(uuid())\n challengeId String\n phaseId String // foreign key to Phase\n\n name String // phase name\n description String? // description\n isOpen Boolean? @default(false) // if this phase is open\n predecessor String? // predecessor of this phase\n duration Int? // duration in seconds\n scheduledStartDate DateTime? // when the phase is scheduled to start\n scheduledEndDate DateTime?\n actualStartDate DateTime?\n actualEndDate DateTime? // when the phase actually ended\n constraints ChallengePhaseConstraint[]\n\n // Relation fields\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n phase Phase @relation(fields: [phaseId], references: [id])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, isOpen])\n @@index([challengeId, name])\n @@index([challengeId, isOpen, scheduledEndDate, actualEndDate], map: \"challenge_phase_challenge_open_end_idx\")\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhaseConstraint – to capture custom constraints for each phase\n//////////////////////////////////////////\n\nmodel ChallengePhaseConstraint {\n id String @id @default(uuid())\n challengePhaseId String\n name String // the name/key of the constraint\n value Int // numeric value of the constraint (can be changed to Float if needed)\n\n // Relation to the phase\n challengePhase ChallengePhase @relation(fields: [challengePhaseId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengePhaseId])\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePrizeSet – to group prizes for a challenge\n//////////////////////////////////////////\n\nmodel ChallengePrizeSet {\n id String @id @default(uuid())\n challengeId String\n type PrizeSetTypeEnum // using enum instead of string\n description String?\n prizes Prize[]\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type])\n}\n\n//////////////////////////////////////////\n// ChallengeReviewer model – reviewers for a challenge, both AI and member\n//////////////////////////////////////////\n\nmodel ChallengeReviewer {\n id String @id @default(uuid())\n challengeId String\n\n // Reviewer configuration\n scorecardId String\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseId String\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n type ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n // Relation to the phase\n phase Phase @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([phaseId])\n @@index([challengeId, phaseId])\n}\n\n//////////////////////////////////////////\n// DefaultChallengeReviewer model – default reviewers by type and track\n//////////////////////////////////////////\n\nmodel DefaultChallengeReviewer {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String?\n // Reviewer configuration (mirrors ChallengeReviewer)\n scorecardId String?\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseName String\n // Optional explicit link to Phase for better fidelity\n phaseId String?\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n opportunityType ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relations\n challengeType ChallengeType @relation(fields: [typeId], references: [id])\n challengeTrack ChallengeTrack @relation(fields: [trackId], references: [id])\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n // Relation to Phase (optional for backward compatibility with phaseName)\n phase Phase? @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([typeId, trackId])\n @@index([typeId, trackId, timelineTemplateId])\n @@index([phaseId])\n}\n\n//////////////////////////////////////////\n// TimelineTemplate model – defines timeline templates\n//////////////////////////////////////////\nmodel TimelineTemplate {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n phases TimelineTemplatePhase[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Opposite relation field, linking back to ChallengeTimelineTemplate.\n challengeTimelineTemplates ChallengeTimelineTemplate[]\n\n // Opposite relation field for Challenge.\n challenges Challenge[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\n//////////////////////////////////////////\n// TimelineTemplatePhase model – phases associated with a timeline template\n//////////////////////////////////////////\nmodel TimelineTemplatePhase {\n id String @id @default(uuid())\n timelineTemplateId String\n phaseId String // identifier for the phase\n predecessor String? // optional predecessor phase id\n defaultDuration Int // duration (in minutes, hours, etc.) as per business rules\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id], onDelete: Cascade)\n\n @@index([timelineTemplateId])\n @@index([timelineTemplateId, phaseId])\n}\n", - "inlineSchemaHash": "c9846a1406075bc0459c1958404f71031f4fcd9169d5a140273162524f601f84", + "inlineSchema": "datasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n}\n\ngenerator externalClient {\n provider = \"prisma-client-js\"\n output = \"../packages/challenge-prisma-client\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n binaryTargets = [\"native\", \"debian-openssl-3.0.x\"]\n}\n\n// Enum for allowed challenge track values (matches app-constants)\nenum ChallengeTrackEnum {\n DESIGN\n DATA_SCIENCE\n DEVELOPMENT\n QUALITY_ASSURANCE\n}\n\nenum ReviewTypeEnum {\n COMMUNITY\n INTERNAL\n SYSTEM\n PROVISIONAL\n EXAMPLE\n}\n\nenum DiscussionTypeEnum {\n CHALLENGE\n}\n\nenum ChallengeStatusEnum {\n NEW\n DRAFT\n APPROVED\n ACTIVE\n COMPLETED\n DELETED\n CANCELLED\n CANCELLED_FAILED_REVIEW\n CANCELLED_FAILED_SCREENING\n CANCELLED_ZERO_SUBMISSIONS\n CANCELLED_WINNER_UNRESPONSIVE\n CANCELLED_CLIENT_REQUEST\n CANCELLED_REQUIREMENTS_INFEASIBLE\n CANCELLED_ZERO_REGISTRATIONS\n CANCELLED_PAYMENT_FAILED\n}\n\nenum PrizeSetTypeEnum {\n PLACEMENT\n COPILOT\n REVIEWER\n PASSED_REVIEW\n CHECKPOINT\n}\n\n// Enum for review opportunity types on reviewers\nenum ReviewOpportunityTypeEnum {\n REGULAR_REVIEW\n COMPONENT_DEV_REVIEW\n SPEC_REVIEW\n ITERATIVE_REVIEW\n SCENARIOS_REVIEW\n}\n\n//////////////////////////////////////////\n// Main Challenge model\n//////////////////////////////////////////\n\nmodel Challenge {\n id String @id @default(uuid())\n name String\n description String?\n privateDescription String?\n challengeSource String?\n descriptionFormat String?\n projectId Int? // frequently queried field\n typeId String\n trackId String // FK for relation in ChallengeTrack\n timelineTemplateId String? // now used as foreign key to ChallengeTimelineTemplate\n overviewTotalPrizes Float? // stored from overview.totalPrizes\n numOfRegistrants Int @default(0)\n numOfSubmissions Int @default(0)\n numOfCheckpointSubmissions Int @default(0)\n currentPhaseNames String[] // current phase names\n\n wiproAllowed Boolean @default(false)\n funChallenge Boolean @default(false)\n\n // simple arrays for tags and groups (PostgreSQL native array type)\n tags String[]\n groups String[]\n\n // Task information (flattened from challenge.task)\n taskIsTask Boolean @default(false)\n taskIsAssigned Boolean @default(false)\n taskMemberId String?\n\n // Dates for challenge lifecycle\n submissionStartDate DateTime?\n submissionEndDate DateTime?\n registrationStartDate DateTime?\n registrationEndDate DateTime?\n startDate DateTime?\n endDate DateTime?\n\n // Normalized billing and legacy information (one-to-one)\n billingRecord ChallengeBilling?\n legacyId Int? // Legacy system ID for searching\n legacyRecord ChallengeLegacy? @relation(\"ChallengeLegacyRelation\")\n\n // Additional fields from createChallenge schema\n status ChallengeStatusEnum @default(NEW) // new challenges default to status \"New\"\n // Normalized top‑level constraints (e.g. allowedRegistrants) for a challenge\n constraintRecord ChallengeConstraint?\n\n // Additional normalized relations from createChallenge\n events ChallengeEvent[]\n discussions ChallengeDiscussion[]\n\n // Existing relations (one-to-many) for challenge metadata, phases, prize sets, winners, attachments,\n // terms and skills\n metadata ChallengeMetadata[]\n phases ChallengePhase[]\n prizeSets ChallengePrizeSet[]\n reviewers ChallengeReviewer[]\n winners ChallengeWinner[]\n attachments Attachment[]\n terms ChallengeTerm[]\n skills ChallengeSkill[]\n auditLogs AuditLog[]\n memberAccesses MemberChallengeAccess[]\n\n // Relation to ChallengeType (FK: typeId)\n type ChallengeType @relation(fields: [typeId], references: [id])\n // Relation to ChallengeTrack (FK: trackId)\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n\n // Auditing fields (present in every table)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([projectId])\n @@index([status]) // index added for optimized search by status\n @@index([createdAt])\n @@index([updatedAt])\n @@index([typeId])\n @@index([trackId])\n @@index([groups], type: Gin, map: \"challenge_groups_gin_idx\")\n @@index([submissionStartDate])\n @@index([submissionEndDate])\n @@index([registrationStartDate])\n @@index([registrationEndDate])\n @@index([startDate])\n @@index([endDate])\n @@index([status, startDate])\n @@index([trackId, typeId, status])\n @@index([status, typeId, trackId, createdAt(sort: Desc)], map: \"challenge_status_type_track_created_at_idx\")\n @@index([legacyId])\n @@index([projectId, status])\n}\n\n//////////////////////////////////////////\n// MemberChallengeAccess view – member/challenge pairs from resources schema\n//////////////////////////////////////////\n\nview MemberChallengeAccess {\n challengeId String\n memberId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id])\n\n @@map(\"MemberChallengeAccess\")\n}\n\n//////////////////////////////////////////\n// ChallengeType model\n//////////////////////////////////////////\n\nmodel ChallengeType {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n isTask Boolean @default(false)\n abbreviation String\n legacyId Int?\n isLegacy Boolean @default(false)\n\n challenges Challenge[]\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this type\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([abbreviation])\n @@index([legacyId])\n @@index([isLegacy])\n}\n\n//////////////////////////////////////////\n// ChallengeTrack model\n//////////////////////////////////////////\n\nmodel ChallengeTrack {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean\n abbreviation String\n legacyId Int? // numeric legacy system id (if provided)\n track ChallengeTrackEnum? // enum value from ChallengeTrackEnum\n isLegacy Boolean @default(false)\n challenges Challenge[]\n // Opposite relation for ChallengeTimelineTemplate\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this track\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([legacyId])\n @@index([isLegacy])\n}\n\n//////////////////////////////////////////\n// ChallengeTimelineTemplate model\n//////////////////////////////////////////\n\nmodel ChallengeTimelineTemplate {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String // now required per Swagger spec\n\n // Link to the TimelineTemplate model via timelineTemplateId.\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id])\n // Link to the ChallengeTrack model via trackId.\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n // Link to the ChallengeType model via typeId.\n type ChallengeType @relation(fields: [typeId], references: [id])\n\n isDefault Boolean @default(false)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Composite index to support searches/updates by typeId, trackId and timelineTemplateId.\n @@index([typeId, trackId, timelineTemplateId])\n}\n\n//////////////////////////////////////////\n// AuditLog model – tracks field changes\n//////////////////////////////////////////\n\nmodel AuditLog {\n id String @id @default(uuid())\n challengeId String? // optional association with a challenge\n fieldName String\n oldValue String?\n newValue String?\n createdAt DateTime @default(now())\n createdBy String\n memberId String?\n\n // Relation field to connect AuditLog to Challenge.\n challenge Challenge? @relation(fields: [challengeId], references: [id])\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Attachment model – for challenge attachments\n//////////////////////////////////////////\n\nmodel Attachment {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String\n fileSize Int\n url String\n description String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeMetadata model – key/value metadata\n//////////////////////////////////////////\n\nmodel ChallengeMetadata {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String // name of the metadata\n value String // value stored as string for flexibility\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Prize model – individual prize in a prize set\n//////////////////////////////////////////\n\nmodel Prize {\n id String @id @default(uuid())\n description String?\n prizeSet ChallengePrizeSet @relation(fields: [prizeSetId], references: [id], onDelete: Cascade)\n prizeSetId String\n type String // e.g. \"USD\", \"POINT\" (could also be converted to enum later)\n value Float\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeWinner model – record winners for a challenge\n//////////////////////////////////////////\n\nmodel ChallengeWinner {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n userId Int\n handle String\n placement Int\n type PrizeSetTypeEnum\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type, placement])\n}\n\n//////////////////////////////////////////\n// ChallengeTerm model – association of challenge and terms\n//////////////////////////////////////////\n\nmodel ChallengeTerm {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n termId String // Terms API id\n roleId String // UUID for the associated role\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeSkill model – linking challenges with skills\n//////////////////////////////////////////\n\nmodel ChallengeSkill {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n skillId String // Request provided skillId\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeBilling model – normalized billing info\n//////////////////////////////////////////\n\nmodel ChallengeBilling {\n id String @id @default(uuid())\n billingAccountId String?\n markup Float? // in range [0, 100]\n clientBillingRate Float? // in range [0, 100]. Supporting range on postgres is an open issue with prisma https://github.com/prisma/prisma/issues/3287.\n challengeId String @unique\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeLegacy model – normalized legacy info\n//////////////////////////////////////////\n\nmodel ChallengeLegacy {\n id String @id @default(uuid())\n reviewType ReviewTypeEnum @default(INTERNAL)\n confidentialityType String @default(\"public\")\n forumId Int?\n directProjectId Int?\n screeningScorecardId Int?\n reviewScorecardId Int?\n isTask Boolean @default(false)\n useSchedulingAPI Boolean @default(false)\n pureV5Task Boolean @default(false)\n pureV5 Boolean @default(false)\n selfService Boolean @default(false)\n selfServiceCopilot String?\n track String? // as provided in the legacy object\n subTrack String? // as provided in the legacy object\n legacySystemId Int? // represents the external \"legacyId\"\n challengeId String @unique\n challenge Challenge @relation(\"ChallengeLegacyRelation\", fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeEvent model – normalized challenge events\n//////////////////////////////////////////\n\nmodel ChallengeEvent {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n eventId Int\n name String?\n key String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeDiscussion and associated options – normalized discussion channels\n//////////////////////////////////////////\n\nmodel ChallengeDiscussion {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n discussionId String?\n name String\n type DiscussionTypeEnum // updated to use enum\n provider String\n url String?\n options ChallengeDiscussionOption[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\nmodel ChallengeDiscussionOption {\n id String @id @default(uuid())\n discussion ChallengeDiscussion @relation(fields: [discussionId], references: [id], onDelete: Cascade)\n discussionId String\n optionKey String\n optionValue String\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeConstraint model – top-level challenge constraints (e.g. allowed registrants)\n//////////////////////////////////////////\n\nmodel ChallengeConstraint {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String @unique\n allowedRegistrants String[] @default([])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhase – to capture per-phase info from create/update challenge operations\n// Each phase is linked with a challenge and holds a duration and any custom constraints.\n//////////////////////////////////////////\n\nmodel Phase {\n id String @id @default(uuid())\n name String\n description String?\n isOpen Boolean\n duration Int\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Inverse relation for associated challenge phases\n challengePhases ChallengePhase[]\n ChallengeReviewer ChallengeReviewer[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\nmodel ChallengePhase {\n id String @id @default(uuid())\n challengeId String\n phaseId String // foreign key to Phase\n\n name String // phase name\n description String? // description\n isOpen Boolean? @default(false) // if this phase is open\n predecessor String? // predecessor of this phase\n duration Int? // duration in seconds\n scheduledStartDate DateTime? // when the phase is scheduled to start\n scheduledEndDate DateTime?\n actualStartDate DateTime?\n actualEndDate DateTime? // when the phase actually ended\n constraints ChallengePhaseConstraint[]\n\n // Relation fields\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n phase Phase @relation(fields: [phaseId], references: [id])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, isOpen])\n @@index([challengeId, name])\n @@index([challengeId, isOpen, scheduledEndDate, actualEndDate], map: \"challenge_phase_challenge_open_end_idx\")\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhaseConstraint – to capture custom constraints for each phase\n//////////////////////////////////////////\n\nmodel ChallengePhaseConstraint {\n id String @id @default(uuid())\n challengePhaseId String\n name String // the name/key of the constraint\n value Int // numeric value of the constraint (can be changed to Float if needed)\n\n // Relation to the phase\n challengePhase ChallengePhase @relation(fields: [challengePhaseId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengePhaseId])\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePrizeSet – to group prizes for a challenge\n//////////////////////////////////////////\n\nmodel ChallengePrizeSet {\n id String @id @default(uuid())\n challengeId String\n type PrizeSetTypeEnum // using enum instead of string\n description String?\n prizes Prize[]\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type])\n}\n\n//////////////////////////////////////////\n// ChallengeReviewer model – reviewers for a challenge, both AI and member\n//////////////////////////////////////////\n\nmodel ChallengeReviewer {\n id String @id @default(uuid())\n challengeId String\n\n // Reviewer configuration\n scorecardId String\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseId String\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n type ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n // Relation to the phase\n phase Phase @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([phaseId])\n @@index([challengeId, phaseId])\n}\n\n//////////////////////////////////////////\n// DefaultChallengeReviewer model – default reviewers by type and track\n//////////////////////////////////////////\n\nmodel DefaultChallengeReviewer {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String?\n // Reviewer configuration (mirrors ChallengeReviewer)\n scorecardId String?\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseName String\n // Optional explicit link to Phase for better fidelity\n phaseId String?\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n opportunityType ReviewOpportunityTypeEnum?\n aiConfigTemplateId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relations\n challengeType ChallengeType @relation(fields: [typeId], references: [id])\n challengeTrack ChallengeTrack @relation(fields: [trackId], references: [id])\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n // Relation to Phase (optional for backward compatibility with phaseName)\n phase Phase? @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([typeId, trackId])\n @@index([typeId, trackId, timelineTemplateId])\n @@index([phaseId])\n}\n\n//////////////////////////////////////////\n// TimelineTemplate model – defines timeline templates\n//////////////////////////////////////////\nmodel TimelineTemplate {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n phases TimelineTemplatePhase[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Opposite relation field, linking back to ChallengeTimelineTemplate.\n challengeTimelineTemplates ChallengeTimelineTemplate[]\n\n // Opposite relation field for Challenge.\n challenges Challenge[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\n//////////////////////////////////////////\n// TimelineTemplatePhase model – phases associated with a timeline template\n//////////////////////////////////////////\nmodel TimelineTemplatePhase {\n id String @id @default(uuid())\n timelineTemplateId String\n phaseId String // identifier for the phase\n predecessor String? // optional predecessor phase id\n defaultDuration Int // duration (in minutes, hours, etc.) as per business rules\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id], onDelete: Cascade)\n\n @@index([timelineTemplateId])\n @@index([timelineTemplateId, phaseId])\n}\n", + "inlineSchemaHash": "013c60d710a175acc08038f512b16e5030bd0c3b8ccf59cb118c7e55c66e6caf", "copyEngine": true } @@ -871,7 +875,7 @@ if (!fs.existsSync(path.join(__dirname, 'schema.prisma'))) { config.isBundled = true } -config.runtimeDataModel = JSON.parse("{\"models\":{\"Challenge\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"privateDescription\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeSource\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"descriptionFormat\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"projectId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"overviewTotalPrizes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfRegistrants\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfSubmissions\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfCheckpointSubmissions\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"currentPhaseNames\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"wiproAllowed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tags\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"groups\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskIsTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskIsAssigned\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskMemberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissionStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissionEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"registrationStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"registrationEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"startDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"endDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billingRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeBilling\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeBilling\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeLegacy\",\"nativeType\":null,\"relationName\":\"ChallengeLegacyRelation\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ChallengeStatusEnum\",\"nativeType\":null,\"default\":\"NEW\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"constraintRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeConstraint\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeConstraint\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"events\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeEvent\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeEvent\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussion\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeDiscussion\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"metadata\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeMetadata\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeMetadata\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSets\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePrizeSet\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePrizeSet\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winners\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeWinner\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeWinner\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"attachments\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Attachment\",\"nativeType\":null,\"relationName\":\"AttachmentToChallenge\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"terms\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTerm\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTerm\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"skills\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeSkill\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeSkill\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"auditLogs\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"AuditLog\",\"nativeType\":null,\"relationName\":\"AuditLogToChallenge\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberAccesses\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MemberChallengeAccess\",\"nativeType\":null,\"relationName\":\"ChallengeToMemberChallengeAccess\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeType\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTrack\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeType\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeType\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeType\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTrack\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrackEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTrack\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTimelineTemplate\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeType\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"AuditLog\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fieldName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"oldValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"newValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"AuditLogToChallenge\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Attachment\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"AttachmentToChallenge\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fileSize\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeMetadata\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeMetadata\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Prize\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSet\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePrizeSet\",\"nativeType\":null,\"relationName\":\"ChallengePrizeSetToPrize\",\"relationFromFields\":[\"prizeSetId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSetId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeWinner\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeWinner\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"handle\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"placement\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PrizeSetTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTerm\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTerm\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"termId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roleId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeSkill\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeSkill\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"skillId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeBilling\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billingAccountId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"markup\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"clientBillingRate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeBilling\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeLegacy\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ReviewTypeEnum\",\"nativeType\":null,\"default\":\"INTERNAL\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confidentialityType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"public\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"forumId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"directProjectId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"screeningScorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewScorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"useSchedulingAPI\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pureV5Task\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pureV5\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"selfService\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"selfServiceCopilot\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"subTrack\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacySystemId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeLegacyRelation\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeEvent\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeEvent\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"eventId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"key\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeDiscussion\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeDiscussion\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DiscussionTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"provider\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"options\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussionOption\",\"nativeType\":null,\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeDiscussionOption\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussion\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussion\",\"nativeType\":null,\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\",\"relationFromFields\":[\"discussionId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"optionKey\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"optionValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeConstraint\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeConstraint\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"allowedRegistrants\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Phase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"duration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeReviewerToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"name\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"name\"]}],\"isGenerated\":false},\"ChallengePhase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"duration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scheduledStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scheduledEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actualStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actualEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"constraints\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhaseConstraint\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePhase\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengePhaseConstraint\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\",\"relationFromFields\":[\"challengePhaseId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengePrizeSet\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PrizeSetTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizes\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Prize\",\"nativeType\":null,\"relationName\":\"ChallengePrizeSetToPrize\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePrizeSet\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeReviewer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ReviewOpportunityTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"VarChar\",[\"14\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeReviewer\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"ChallengeReviewerToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DefaultChallengeReviewer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"opportunityType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ReviewOpportunityTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"VarChar\",[\"14\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeType\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeTrack\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TimelineTemplate\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplatePhase\",\"nativeType\":null,\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeTimelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"name\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"name\"]}],\"isGenerated\":false,\"documentation\":\"///////////////////////////////////////\\\\n///////////////////////////////////////\"},\"TimelineTemplatePhase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultDuration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false,\"documentation\":\"///////////////////////////////////////\\\\n///////////////////////////////////////\"},\"MemberChallengeAccess\":{\"dbName\":\"MemberChallengeAccess\",\"schema\":null,\"fields\":[{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToMemberChallengeAccess\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"ChallengeTrackEnum\":{\"values\":[{\"name\":\"DESIGN\",\"dbName\":null},{\"name\":\"DATA_SCIENCE\",\"dbName\":null},{\"name\":\"DEVELOPMENT\",\"dbName\":null},{\"name\":\"QUALITY_ASSURANCE\",\"dbName\":null}],\"dbName\":null},\"ReviewTypeEnum\":{\"values\":[{\"name\":\"COMMUNITY\",\"dbName\":null},{\"name\":\"INTERNAL\",\"dbName\":null},{\"name\":\"SYSTEM\",\"dbName\":null},{\"name\":\"PROVISIONAL\",\"dbName\":null},{\"name\":\"EXAMPLE\",\"dbName\":null}],\"dbName\":null},\"DiscussionTypeEnum\":{\"values\":[{\"name\":\"CHALLENGE\",\"dbName\":null}],\"dbName\":null},\"ChallengeStatusEnum\":{\"values\":[{\"name\":\"NEW\",\"dbName\":null},{\"name\":\"DRAFT\",\"dbName\":null},{\"name\":\"APPROVED\",\"dbName\":null},{\"name\":\"ACTIVE\",\"dbName\":null},{\"name\":\"COMPLETED\",\"dbName\":null},{\"name\":\"DELETED\",\"dbName\":null},{\"name\":\"CANCELLED\",\"dbName\":null},{\"name\":\"CANCELLED_FAILED_REVIEW\",\"dbName\":null},{\"name\":\"CANCELLED_FAILED_SCREENING\",\"dbName\":null},{\"name\":\"CANCELLED_ZERO_SUBMISSIONS\",\"dbName\":null},{\"name\":\"CANCELLED_WINNER_UNRESPONSIVE\",\"dbName\":null},{\"name\":\"CANCELLED_CLIENT_REQUEST\",\"dbName\":null},{\"name\":\"CANCELLED_REQUIREMENTS_INFEASIBLE\",\"dbName\":null},{\"name\":\"CANCELLED_ZERO_REGISTRATIONS\",\"dbName\":null},{\"name\":\"CANCELLED_PAYMENT_FAILED\",\"dbName\":null}],\"dbName\":null},\"PrizeSetTypeEnum\":{\"values\":[{\"name\":\"PLACEMENT\",\"dbName\":null},{\"name\":\"COPILOT\",\"dbName\":null},{\"name\":\"REVIEWER\",\"dbName\":null},{\"name\":\"PASSED_REVIEW\",\"dbName\":null},{\"name\":\"CHECKPOINT\",\"dbName\":null}],\"dbName\":null},\"ReviewOpportunityTypeEnum\":{\"values\":[{\"name\":\"REGULAR_REVIEW\",\"dbName\":null},{\"name\":\"COMPONENT_DEV_REVIEW\",\"dbName\":null},{\"name\":\"SPEC_REVIEW\",\"dbName\":null},{\"name\":\"ITERATIVE_REVIEW\",\"dbName\":null},{\"name\":\"SCENARIOS_REVIEW\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Challenge\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"privateDescription\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeSource\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"descriptionFormat\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"projectId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"overviewTotalPrizes\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfRegistrants\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfSubmissions\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"numOfCheckpointSubmissions\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Int\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"currentPhaseNames\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"wiproAllowed\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"funChallenge\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"tags\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"groups\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskIsTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskIsAssigned\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"taskMemberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissionStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"submissionEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"registrationStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"registrationEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"startDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"endDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billingRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeBilling\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeBilling\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeLegacy\",\"nativeType\":null,\"relationName\":\"ChallengeLegacyRelation\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"status\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ChallengeStatusEnum\",\"nativeType\":null,\"default\":\"NEW\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"constraintRecord\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeConstraint\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeConstraint\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"events\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeEvent\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeEvent\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussions\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussion\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeDiscussion\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"metadata\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeMetadata\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeMetadata\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSets\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePrizeSet\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePrizeSet\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"winners\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeWinner\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeWinner\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"attachments\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Attachment\",\"nativeType\":null,\"relationName\":\"AttachmentToChallenge\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"terms\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTerm\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTerm\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"skills\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeSkill\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeSkill\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"auditLogs\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"AuditLog\",\"nativeType\":null,\"relationName\":\"AuditLogToChallenge\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberAccesses\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"MemberChallengeAccess\",\"nativeType\":null,\"relationName\":\"ChallengeToMemberChallengeAccess\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeType\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTrack\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeType\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isLegacy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeType\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeType\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTrack\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrackEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isLegacy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTrack\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTimelineTemplate\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToChallengeType\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"AuditLog\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fieldName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"oldValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"newValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"AuditLogToChallenge\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Attachment\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"AttachmentToChallenge\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fileSize\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeMetadata\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeMetadata\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Prize\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSet\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePrizeSet\",\"nativeType\":null,\"relationName\":\"ChallengePrizeSetToPrize\",\"relationFromFields\":[\"prizeSetId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizeSetId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeWinner\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeWinner\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"userId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"handle\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"placement\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PrizeSetTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeTerm\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeTerm\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"termId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"roleId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeSkill\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeSkill\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"skillId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeBilling\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"billingAccountId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"markup\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"clientBillingRate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeBilling\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeLegacy\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"ReviewTypeEnum\",\"nativeType\":null,\"default\":\"INTERNAL\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"confidentialityType\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":\"public\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"forumId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"directProjectId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"screeningScorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"reviewScorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isTask\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"useSchedulingAPI\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pureV5Task\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"pureV5\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"selfService\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"selfServiceCopilot\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"track\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"subTrack\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"legacySystemId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeLegacyRelation\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeEvent\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeEvent\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"eventId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"key\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeDiscussion\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeDiscussion\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DiscussionTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"provider\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"url\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"options\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussionOption\",\"nativeType\":null,\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeDiscussionOption\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussion\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeDiscussion\",\"nativeType\":null,\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\",\"relationFromFields\":[\"discussionId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"optionKey\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"optionValue\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeConstraint\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeConstraint\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"allowedRegistrants\",\"kind\":\"scalar\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"Phase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"duration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"ChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeReviewer\",\"nativeType\":null,\"relationName\":\"ChallengeReviewerToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToPhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"name\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"name\"]}],\"isGenerated\":false},\"ChallengePhase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":false,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"duration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scheduledStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scheduledEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actualStartDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"actualEndDate\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"constraints\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhaseConstraint\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePhase\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengePhaseConstraint\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"value\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengePhase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengePhase\",\"nativeType\":null,\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\",\"relationFromFields\":[\"challengePhaseId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengePrizeSet\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"PrizeSetTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"prizes\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Prize\",\"nativeType\":null,\"relationName\":\"ChallengePrizeSetToPrize\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengePrizeSet\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"ChallengeReviewer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"type\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ReviewOpportunityTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"VarChar\",[\"14\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeReviewer\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"ChallengeReviewerToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"DefaultChallengeReviewer\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"typeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"trackId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Boolean\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseName\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Float\",\"nativeType\":null,\"default\":0,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Float\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"opportunityType\",\"kind\":\"enum\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ReviewOpportunityTypeEnum\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"aiConfigTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":[\"VarChar\",[\"14\"]],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeType\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeType\",\"nativeType\":null,\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\",\"relationFromFields\":[\"typeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeTrack\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTrack\",\"nativeType\":null,\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\",\"relationFromFields\":[\"trackId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phase\",\"kind\":\"object\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Phase\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToPhase\",\"relationFromFields\":[\"phaseId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false},\"TimelineTemplate\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"name\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":true,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"description\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"isActive\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"Boolean\",\"nativeType\":null,\"default\":true,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phases\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplatePhase\",\"nativeType\":null,\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challengeTimelineTemplates\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeTimelineTemplate\",\"nativeType\":null,\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenges\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DefaultChallengeReviewer\",\"nativeType\":null,\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\",\"relationFromFields\":[],\"relationToFields\":[],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[[\"name\"]],\"uniqueIndexes\":[{\"name\":null,\"fields\":[\"name\"]}],\"isGenerated\":false,\"documentation\":\"///////////////////////////////////////\\\\n///////////////////////////////////////\"},\"TimelineTemplatePhase\":{\"dbName\":null,\"schema\":null,\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":true,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"String\",\"nativeType\":null,\"default\":{\"name\":\"uuid\",\"args\":[4]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":false,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"defaultDuration\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Int\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":true,\"type\":\"DateTime\",\"nativeType\":null,\"default\":{\"name\":\"now\",\"args\":[]},\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"DateTime\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":true},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"TimelineTemplate\",\"nativeType\":null,\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\",\"relationFromFields\":[\"timelineTemplateId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false,\"documentation\":\"///////////////////////////////////////\\\\n///////////////////////////////////////\"},\"MemberChallengeAccess\":{\"dbName\":\"MemberChallengeAccess\",\"schema\":null,\"fields\":[{\"name\":\"challengeId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":true,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"memberId\",\"kind\":\"scalar\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"String\",\"nativeType\":null,\"isGenerated\":false,\"isUpdatedAt\":false},{\"name\":\"challenge\",\"kind\":\"object\",\"isList\":false,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"Challenge\",\"nativeType\":null,\"relationName\":\"ChallengeToMemberChallengeAccess\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":null,\"uniqueFields\":[],\"uniqueIndexes\":[],\"isGenerated\":false}},\"enums\":{\"ChallengeTrackEnum\":{\"values\":[{\"name\":\"DESIGN\",\"dbName\":null},{\"name\":\"DATA_SCIENCE\",\"dbName\":null},{\"name\":\"DEVELOPMENT\",\"dbName\":null},{\"name\":\"QUALITY_ASSURANCE\",\"dbName\":null}],\"dbName\":null},\"ReviewTypeEnum\":{\"values\":[{\"name\":\"COMMUNITY\",\"dbName\":null},{\"name\":\"INTERNAL\",\"dbName\":null},{\"name\":\"SYSTEM\",\"dbName\":null},{\"name\":\"PROVISIONAL\",\"dbName\":null},{\"name\":\"EXAMPLE\",\"dbName\":null}],\"dbName\":null},\"DiscussionTypeEnum\":{\"values\":[{\"name\":\"CHALLENGE\",\"dbName\":null}],\"dbName\":null},\"ChallengeStatusEnum\":{\"values\":[{\"name\":\"NEW\",\"dbName\":null},{\"name\":\"DRAFT\",\"dbName\":null},{\"name\":\"APPROVED\",\"dbName\":null},{\"name\":\"ACTIVE\",\"dbName\":null},{\"name\":\"COMPLETED\",\"dbName\":null},{\"name\":\"DELETED\",\"dbName\":null},{\"name\":\"CANCELLED\",\"dbName\":null},{\"name\":\"CANCELLED_FAILED_REVIEW\",\"dbName\":null},{\"name\":\"CANCELLED_FAILED_SCREENING\",\"dbName\":null},{\"name\":\"CANCELLED_ZERO_SUBMISSIONS\",\"dbName\":null},{\"name\":\"CANCELLED_WINNER_UNRESPONSIVE\",\"dbName\":null},{\"name\":\"CANCELLED_CLIENT_REQUEST\",\"dbName\":null},{\"name\":\"CANCELLED_REQUIREMENTS_INFEASIBLE\",\"dbName\":null},{\"name\":\"CANCELLED_ZERO_REGISTRATIONS\",\"dbName\":null},{\"name\":\"CANCELLED_PAYMENT_FAILED\",\"dbName\":null}],\"dbName\":null},\"PrizeSetTypeEnum\":{\"values\":[{\"name\":\"PLACEMENT\",\"dbName\":null},{\"name\":\"COPILOT\",\"dbName\":null},{\"name\":\"REVIEWER\",\"dbName\":null},{\"name\":\"PASSED_REVIEW\",\"dbName\":null},{\"name\":\"CHECKPOINT\",\"dbName\":null}],\"dbName\":null},\"ReviewOpportunityTypeEnum\":{\"values\":[{\"name\":\"REGULAR_REVIEW\",\"dbName\":null},{\"name\":\"COMPONENT_DEV_REVIEW\",\"dbName\":null},{\"name\":\"SPEC_REVIEW\",\"dbName\":null},{\"name\":\"ITERATIVE_REVIEW\",\"dbName\":null},{\"name\":\"SCENARIOS_REVIEW\",\"dbName\":null}],\"dbName\":null}},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.engineWasm = undefined config.compilerWasm = undefined diff --git a/packages/challenge-prisma-client/package.json b/packages/challenge-prisma-client/package.json index 52cf5d1..b098a5b 100644 --- a/packages/challenge-prisma-client/package.json +++ b/packages/challenge-prisma-client/package.json @@ -1,5 +1,5 @@ { - "name": "prisma-client-04f7d38a0825095937960e69496dec8c25abfa0b18a5c7de2eeef4f39df070ed", + "name": "prisma-client-e2cf38d434b78ed912a564b65835f204eb8d7146f275867a9db51b0649d6da72", "main": "index.js", "types": "index.d.ts", "browser": "default.js", diff --git a/packages/challenge-prisma-client/schema.prisma b/packages/challenge-prisma-client/schema.prisma index 01b613d..9e38a96 100644 --- a/packages/challenge-prisma-client/schema.prisma +++ b/packages/challenge-prisma-client/schema.prisma @@ -92,6 +92,7 @@ model Challenge { currentPhaseNames String[] // current phase names wiproAllowed Boolean @default(false) + funChallenge Boolean @default(false) // simple arrays for tags and groups (PostgreSQL native array type) tags String[] @@ -194,6 +195,8 @@ model ChallengeType { isActive Boolean @default(true) isTask Boolean @default(false) abbreviation String + legacyId Int? + isLegacy Boolean @default(false) challenges Challenge[] timelineTemplates ChallengeTimelineTemplate[] @@ -206,6 +209,8 @@ model ChallengeType { updatedBy String @@index([abbreviation]) + @@index([legacyId]) + @@index([isLegacy]) } ////////////////////////////////////////// @@ -220,6 +225,7 @@ model ChallengeTrack { abbreviation String legacyId Int? // numeric legacy system id (if provided) track ChallengeTrackEnum? // enum value from ChallengeTrackEnum + isLegacy Boolean @default(false) challenges Challenge[] // Opposite relation for ChallengeTimelineTemplate timelineTemplates ChallengeTimelineTemplate[] @@ -232,6 +238,7 @@ model ChallengeTrack { updatedBy String @@index([legacyId]) + @@index([isLegacy]) } ////////////////////////////////////////// @@ -375,6 +382,8 @@ model ChallengeTerm { createdBy String updatedAt DateTime @updatedAt updatedBy String + + @@index([challengeId]) } ////////////////////////////////////////// @@ -667,7 +676,7 @@ model DefaultChallengeReviewer { baseCoefficient Float? incrementalCoefficient Float? opportunityType ReviewOpportunityTypeEnum? - aiWorkflowId String? @db.VarChar(14) + aiConfigTemplateId String? @db.VarChar(14) shouldOpenOpportunity Boolean @default(true) // Relations diff --git a/packages/challenge-prisma-client/wasm.js b/packages/challenge-prisma-client/wasm.js index e87151f..0e47dd7 100644 --- a/packages/challenge-prisma-client/wasm.js +++ b/packages/challenge-prisma-client/wasm.js @@ -110,6 +110,7 @@ exports.Prisma.ChallengeScalarFieldEnum = { numOfCheckpointSubmissions: 'numOfCheckpointSubmissions', currentPhaseNames: 'currentPhaseNames', wiproAllowed: 'wiproAllowed', + funChallenge: 'funChallenge', tags: 'tags', groups: 'groups', taskIsTask: 'taskIsTask', @@ -136,6 +137,8 @@ exports.Prisma.ChallengeTypeScalarFieldEnum = { isActive: 'isActive', isTask: 'isTask', abbreviation: 'abbreviation', + legacyId: 'legacyId', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -150,6 +153,7 @@ exports.Prisma.ChallengeTrackScalarFieldEnum = { abbreviation: 'abbreviation', legacyId: 'legacyId', track: 'track', + isLegacy: 'isLegacy', createdAt: 'createdAt', createdBy: 'createdBy', updatedAt: 'updatedAt', @@ -418,7 +422,7 @@ exports.Prisma.DefaultChallengeReviewerScalarFieldEnum = { baseCoefficient: 'baseCoefficient', incrementalCoefficient: 'incrementalCoefficient', opportunityType: 'opportunityType', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', shouldOpenOpportunity: 'shouldOpenOpportunity', createdAt: 'createdAt', createdBy: 'createdBy', @@ -686,7 +690,7 @@ exports.Prisma.DefaultChallengeReviewerOrderByRelevanceFieldEnum = { scorecardId: 'scorecardId', phaseName: 'phaseName', phaseId: 'phaseId', - aiWorkflowId: 'aiWorkflowId', + aiConfigTemplateId: 'aiConfigTemplateId', createdBy: 'createdBy', updatedBy: 'updatedBy' }; @@ -848,13 +852,13 @@ const config = { } } }, - "inlineSchema": "datasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n}\n\ngenerator externalClient {\n provider = \"prisma-client-js\"\n output = \"../packages/challenge-prisma-client\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n binaryTargets = [\"native\", \"debian-openssl-3.0.x\"]\n}\n\n// Enum for allowed challenge track values (matches app-constants)\nenum ChallengeTrackEnum {\n DESIGN\n DATA_SCIENCE\n DEVELOPMENT\n QUALITY_ASSURANCE\n}\n\nenum ReviewTypeEnum {\n COMMUNITY\n INTERNAL\n SYSTEM\n PROVISIONAL\n EXAMPLE\n}\n\nenum DiscussionTypeEnum {\n CHALLENGE\n}\n\nenum ChallengeStatusEnum {\n NEW\n DRAFT\n APPROVED\n ACTIVE\n COMPLETED\n DELETED\n CANCELLED\n CANCELLED_FAILED_REVIEW\n CANCELLED_FAILED_SCREENING\n CANCELLED_ZERO_SUBMISSIONS\n CANCELLED_WINNER_UNRESPONSIVE\n CANCELLED_CLIENT_REQUEST\n CANCELLED_REQUIREMENTS_INFEASIBLE\n CANCELLED_ZERO_REGISTRATIONS\n CANCELLED_PAYMENT_FAILED\n}\n\nenum PrizeSetTypeEnum {\n PLACEMENT\n COPILOT\n REVIEWER\n PASSED_REVIEW\n CHECKPOINT\n}\n\n// Enum for review opportunity types on reviewers\nenum ReviewOpportunityTypeEnum {\n REGULAR_REVIEW\n COMPONENT_DEV_REVIEW\n SPEC_REVIEW\n ITERATIVE_REVIEW\n SCENARIOS_REVIEW\n}\n\n//////////////////////////////////////////\n// Main Challenge model\n//////////////////////////////////////////\n\nmodel Challenge {\n id String @id @default(uuid())\n name String\n description String?\n privateDescription String?\n challengeSource String?\n descriptionFormat String?\n projectId Int? // frequently queried field\n typeId String\n trackId String // FK for relation in ChallengeTrack\n timelineTemplateId String? // now used as foreign key to ChallengeTimelineTemplate\n overviewTotalPrizes Float? // stored from overview.totalPrizes\n numOfRegistrants Int @default(0)\n numOfSubmissions Int @default(0)\n numOfCheckpointSubmissions Int @default(0)\n currentPhaseNames String[] // current phase names\n\n wiproAllowed Boolean @default(false)\n\n // simple arrays for tags and groups (PostgreSQL native array type)\n tags String[]\n groups String[]\n\n // Task information (flattened from challenge.task)\n taskIsTask Boolean @default(false)\n taskIsAssigned Boolean @default(false)\n taskMemberId String?\n\n // Dates for challenge lifecycle\n submissionStartDate DateTime?\n submissionEndDate DateTime?\n registrationStartDate DateTime?\n registrationEndDate DateTime?\n startDate DateTime?\n endDate DateTime?\n\n // Normalized billing and legacy information (one-to-one)\n billingRecord ChallengeBilling?\n legacyId Int? // Legacy system ID for searching\n legacyRecord ChallengeLegacy? @relation(\"ChallengeLegacyRelation\")\n\n // Additional fields from createChallenge schema\n status ChallengeStatusEnum @default(NEW) // new challenges default to status \"New\"\n // Normalized top‑level constraints (e.g. allowedRegistrants) for a challenge\n constraintRecord ChallengeConstraint?\n\n // Additional normalized relations from createChallenge\n events ChallengeEvent[]\n discussions ChallengeDiscussion[]\n\n // Existing relations (one-to-many) for challenge metadata, phases, prize sets, winners, attachments,\n // terms and skills\n metadata ChallengeMetadata[]\n phases ChallengePhase[]\n prizeSets ChallengePrizeSet[]\n reviewers ChallengeReviewer[]\n winners ChallengeWinner[]\n attachments Attachment[]\n terms ChallengeTerm[]\n skills ChallengeSkill[]\n auditLogs AuditLog[]\n memberAccesses MemberChallengeAccess[]\n\n // Relation to ChallengeType (FK: typeId)\n type ChallengeType @relation(fields: [typeId], references: [id])\n // Relation to ChallengeTrack (FK: trackId)\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n\n // Auditing fields (present in every table)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([projectId])\n @@index([status]) // index added for optimized search by status\n @@index([createdAt])\n @@index([updatedAt])\n @@index([typeId])\n @@index([trackId])\n @@index([groups], type: Gin, map: \"challenge_groups_gin_idx\")\n @@index([submissionStartDate])\n @@index([submissionEndDate])\n @@index([registrationStartDate])\n @@index([registrationEndDate])\n @@index([startDate])\n @@index([endDate])\n @@index([status, startDate])\n @@index([trackId, typeId, status])\n @@index([status, typeId, trackId, createdAt(sort: Desc)], map: \"challenge_status_type_track_created_at_idx\")\n @@index([legacyId])\n @@index([projectId, status])\n}\n\n//////////////////////////////////////////\n// MemberChallengeAccess view – member/challenge pairs from resources schema\n//////////////////////////////////////////\n\nview MemberChallengeAccess {\n challengeId String\n memberId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id])\n\n @@map(\"MemberChallengeAccess\")\n}\n\n//////////////////////////////////////////\n// ChallengeType model\n//////////////////////////////////////////\n\nmodel ChallengeType {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n isTask Boolean @default(false)\n abbreviation String\n\n challenges Challenge[]\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this type\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([abbreviation])\n}\n\n//////////////////////////////////////////\n// ChallengeTrack model\n//////////////////////////////////////////\n\nmodel ChallengeTrack {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean\n abbreviation String\n legacyId Int? // numeric legacy system id (if provided)\n track ChallengeTrackEnum? // enum value from ChallengeTrackEnum\n challenges Challenge[]\n // Opposite relation for ChallengeTimelineTemplate\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this track\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([legacyId])\n}\n\n//////////////////////////////////////////\n// ChallengeTimelineTemplate model\n//////////////////////////////////////////\n\nmodel ChallengeTimelineTemplate {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String // now required per Swagger spec\n\n // Link to the TimelineTemplate model via timelineTemplateId.\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id])\n // Link to the ChallengeTrack model via trackId.\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n // Link to the ChallengeType model via typeId.\n type ChallengeType @relation(fields: [typeId], references: [id])\n\n isDefault Boolean @default(false)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Composite index to support searches/updates by typeId, trackId and timelineTemplateId.\n @@index([typeId, trackId, timelineTemplateId])\n}\n\n//////////////////////////////////////////\n// AuditLog model – tracks field changes\n//////////////////////////////////////////\n\nmodel AuditLog {\n id String @id @default(uuid())\n challengeId String? // optional association with a challenge\n fieldName String\n oldValue String?\n newValue String?\n createdAt DateTime @default(now())\n createdBy String\n memberId String?\n\n // Relation field to connect AuditLog to Challenge.\n challenge Challenge? @relation(fields: [challengeId], references: [id])\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Attachment model – for challenge attachments\n//////////////////////////////////////////\n\nmodel Attachment {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String\n fileSize Int\n url String\n description String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeMetadata model – key/value metadata\n//////////////////////////////////////////\n\nmodel ChallengeMetadata {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String // name of the metadata\n value String // value stored as string for flexibility\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Prize model – individual prize in a prize set\n//////////////////////////////////////////\n\nmodel Prize {\n id String @id @default(uuid())\n description String?\n prizeSet ChallengePrizeSet @relation(fields: [prizeSetId], references: [id], onDelete: Cascade)\n prizeSetId String\n type String // e.g. \"USD\", \"POINT\" (could also be converted to enum later)\n value Float\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeWinner model – record winners for a challenge\n//////////////////////////////////////////\n\nmodel ChallengeWinner {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n userId Int\n handle String\n placement Int\n type PrizeSetTypeEnum\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type, placement])\n}\n\n//////////////////////////////////////////\n// ChallengeTerm model – association of challenge and terms\n//////////////////////////////////////////\n\nmodel ChallengeTerm {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n termId String // Terms API id\n roleId String // UUID for the associated role\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeSkill model – linking challenges with skills\n//////////////////////////////////////////\n\nmodel ChallengeSkill {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n skillId String // Request provided skillId\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeBilling model – normalized billing info\n//////////////////////////////////////////\n\nmodel ChallengeBilling {\n id String @id @default(uuid())\n billingAccountId String?\n markup Float? // in range [0, 100]\n clientBillingRate Float? // in range [0, 100]. Supporting range on postgres is an open issue with prisma https://github.com/prisma/prisma/issues/3287.\n challengeId String @unique\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeLegacy model – normalized legacy info\n//////////////////////////////////////////\n\nmodel ChallengeLegacy {\n id String @id @default(uuid())\n reviewType ReviewTypeEnum @default(INTERNAL)\n confidentialityType String @default(\"public\")\n forumId Int?\n directProjectId Int?\n screeningScorecardId Int?\n reviewScorecardId Int?\n isTask Boolean @default(false)\n useSchedulingAPI Boolean @default(false)\n pureV5Task Boolean @default(false)\n pureV5 Boolean @default(false)\n selfService Boolean @default(false)\n selfServiceCopilot String?\n track String? // as provided in the legacy object\n subTrack String? // as provided in the legacy object\n legacySystemId Int? // represents the external \"legacyId\"\n challengeId String @unique\n challenge Challenge @relation(\"ChallengeLegacyRelation\", fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeEvent model – normalized challenge events\n//////////////////////////////////////////\n\nmodel ChallengeEvent {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n eventId Int\n name String?\n key String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeDiscussion and associated options – normalized discussion channels\n//////////////////////////////////////////\n\nmodel ChallengeDiscussion {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n discussionId String?\n name String\n type DiscussionTypeEnum // updated to use enum\n provider String\n url String?\n options ChallengeDiscussionOption[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\nmodel ChallengeDiscussionOption {\n id String @id @default(uuid())\n discussion ChallengeDiscussion @relation(fields: [discussionId], references: [id], onDelete: Cascade)\n discussionId String\n optionKey String\n optionValue String\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeConstraint model – top-level challenge constraints (e.g. allowed registrants)\n//////////////////////////////////////////\n\nmodel ChallengeConstraint {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String @unique\n allowedRegistrants String[] @default([])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhase – to capture per-phase info from create/update challenge operations\n// Each phase is linked with a challenge and holds a duration and any custom constraints.\n//////////////////////////////////////////\n\nmodel Phase {\n id String @id @default(uuid())\n name String\n description String?\n isOpen Boolean\n duration Int\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Inverse relation for associated challenge phases\n challengePhases ChallengePhase[]\n ChallengeReviewer ChallengeReviewer[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\nmodel ChallengePhase {\n id String @id @default(uuid())\n challengeId String\n phaseId String // foreign key to Phase\n\n name String // phase name\n description String? // description\n isOpen Boolean? @default(false) // if this phase is open\n predecessor String? // predecessor of this phase\n duration Int? // duration in seconds\n scheduledStartDate DateTime? // when the phase is scheduled to start\n scheduledEndDate DateTime?\n actualStartDate DateTime?\n actualEndDate DateTime? // when the phase actually ended\n constraints ChallengePhaseConstraint[]\n\n // Relation fields\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n phase Phase @relation(fields: [phaseId], references: [id])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, isOpen])\n @@index([challengeId, name])\n @@index([challengeId, isOpen, scheduledEndDate, actualEndDate], map: \"challenge_phase_challenge_open_end_idx\")\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhaseConstraint – to capture custom constraints for each phase\n//////////////////////////////////////////\n\nmodel ChallengePhaseConstraint {\n id String @id @default(uuid())\n challengePhaseId String\n name String // the name/key of the constraint\n value Int // numeric value of the constraint (can be changed to Float if needed)\n\n // Relation to the phase\n challengePhase ChallengePhase @relation(fields: [challengePhaseId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengePhaseId])\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePrizeSet – to group prizes for a challenge\n//////////////////////////////////////////\n\nmodel ChallengePrizeSet {\n id String @id @default(uuid())\n challengeId String\n type PrizeSetTypeEnum // using enum instead of string\n description String?\n prizes Prize[]\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type])\n}\n\n//////////////////////////////////////////\n// ChallengeReviewer model – reviewers for a challenge, both AI and member\n//////////////////////////////////////////\n\nmodel ChallengeReviewer {\n id String @id @default(uuid())\n challengeId String\n\n // Reviewer configuration\n scorecardId String\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseId String\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n type ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n // Relation to the phase\n phase Phase @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([phaseId])\n @@index([challengeId, phaseId])\n}\n\n//////////////////////////////////////////\n// DefaultChallengeReviewer model – default reviewers by type and track\n//////////////////////////////////////////\n\nmodel DefaultChallengeReviewer {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String?\n // Reviewer configuration (mirrors ChallengeReviewer)\n scorecardId String?\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseName String\n // Optional explicit link to Phase for better fidelity\n phaseId String?\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n opportunityType ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relations\n challengeType ChallengeType @relation(fields: [typeId], references: [id])\n challengeTrack ChallengeTrack @relation(fields: [trackId], references: [id])\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n // Relation to Phase (optional for backward compatibility with phaseName)\n phase Phase? @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([typeId, trackId])\n @@index([typeId, trackId, timelineTemplateId])\n @@index([phaseId])\n}\n\n//////////////////////////////////////////\n// TimelineTemplate model – defines timeline templates\n//////////////////////////////////////////\nmodel TimelineTemplate {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n phases TimelineTemplatePhase[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Opposite relation field, linking back to ChallengeTimelineTemplate.\n challengeTimelineTemplates ChallengeTimelineTemplate[]\n\n // Opposite relation field for Challenge.\n challenges Challenge[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\n//////////////////////////////////////////\n// TimelineTemplatePhase model – phases associated with a timeline template\n//////////////////////////////////////////\nmodel TimelineTemplatePhase {\n id String @id @default(uuid())\n timelineTemplateId String\n phaseId String // identifier for the phase\n predecessor String? // optional predecessor phase id\n defaultDuration Int // duration (in minutes, hours, etc.) as per business rules\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id], onDelete: Cascade)\n\n @@index([timelineTemplateId])\n @@index([timelineTemplateId, phaseId])\n}\n", - "inlineSchemaHash": "c9846a1406075bc0459c1958404f71031f4fcd9169d5a140273162524f601f84", + "inlineSchema": "datasource db {\n provider = \"postgresql\"\n url = env(\"DATABASE_URL\")\n}\n\ngenerator client {\n provider = \"prisma-client-js\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n}\n\ngenerator externalClient {\n provider = \"prisma-client-js\"\n output = \"../packages/challenge-prisma-client\"\n previewFeatures = [\"fullTextSearchPostgres\", \"postgresqlExtensions\", \"views\"]\n binaryTargets = [\"native\", \"debian-openssl-3.0.x\"]\n}\n\n// Enum for allowed challenge track values (matches app-constants)\nenum ChallengeTrackEnum {\n DESIGN\n DATA_SCIENCE\n DEVELOPMENT\n QUALITY_ASSURANCE\n}\n\nenum ReviewTypeEnum {\n COMMUNITY\n INTERNAL\n SYSTEM\n PROVISIONAL\n EXAMPLE\n}\n\nenum DiscussionTypeEnum {\n CHALLENGE\n}\n\nenum ChallengeStatusEnum {\n NEW\n DRAFT\n APPROVED\n ACTIVE\n COMPLETED\n DELETED\n CANCELLED\n CANCELLED_FAILED_REVIEW\n CANCELLED_FAILED_SCREENING\n CANCELLED_ZERO_SUBMISSIONS\n CANCELLED_WINNER_UNRESPONSIVE\n CANCELLED_CLIENT_REQUEST\n CANCELLED_REQUIREMENTS_INFEASIBLE\n CANCELLED_ZERO_REGISTRATIONS\n CANCELLED_PAYMENT_FAILED\n}\n\nenum PrizeSetTypeEnum {\n PLACEMENT\n COPILOT\n REVIEWER\n PASSED_REVIEW\n CHECKPOINT\n}\n\n// Enum for review opportunity types on reviewers\nenum ReviewOpportunityTypeEnum {\n REGULAR_REVIEW\n COMPONENT_DEV_REVIEW\n SPEC_REVIEW\n ITERATIVE_REVIEW\n SCENARIOS_REVIEW\n}\n\n//////////////////////////////////////////\n// Main Challenge model\n//////////////////////////////////////////\n\nmodel Challenge {\n id String @id @default(uuid())\n name String\n description String?\n privateDescription String?\n challengeSource String?\n descriptionFormat String?\n projectId Int? // frequently queried field\n typeId String\n trackId String // FK for relation in ChallengeTrack\n timelineTemplateId String? // now used as foreign key to ChallengeTimelineTemplate\n overviewTotalPrizes Float? // stored from overview.totalPrizes\n numOfRegistrants Int @default(0)\n numOfSubmissions Int @default(0)\n numOfCheckpointSubmissions Int @default(0)\n currentPhaseNames String[] // current phase names\n\n wiproAllowed Boolean @default(false)\n funChallenge Boolean @default(false)\n\n // simple arrays for tags and groups (PostgreSQL native array type)\n tags String[]\n groups String[]\n\n // Task information (flattened from challenge.task)\n taskIsTask Boolean @default(false)\n taskIsAssigned Boolean @default(false)\n taskMemberId String?\n\n // Dates for challenge lifecycle\n submissionStartDate DateTime?\n submissionEndDate DateTime?\n registrationStartDate DateTime?\n registrationEndDate DateTime?\n startDate DateTime?\n endDate DateTime?\n\n // Normalized billing and legacy information (one-to-one)\n billingRecord ChallengeBilling?\n legacyId Int? // Legacy system ID for searching\n legacyRecord ChallengeLegacy? @relation(\"ChallengeLegacyRelation\")\n\n // Additional fields from createChallenge schema\n status ChallengeStatusEnum @default(NEW) // new challenges default to status \"New\"\n // Normalized top‑level constraints (e.g. allowedRegistrants) for a challenge\n constraintRecord ChallengeConstraint?\n\n // Additional normalized relations from createChallenge\n events ChallengeEvent[]\n discussions ChallengeDiscussion[]\n\n // Existing relations (one-to-many) for challenge metadata, phases, prize sets, winners, attachments,\n // terms and skills\n metadata ChallengeMetadata[]\n phases ChallengePhase[]\n prizeSets ChallengePrizeSet[]\n reviewers ChallengeReviewer[]\n winners ChallengeWinner[]\n attachments Attachment[]\n terms ChallengeTerm[]\n skills ChallengeSkill[]\n auditLogs AuditLog[]\n memberAccesses MemberChallengeAccess[]\n\n // Relation to ChallengeType (FK: typeId)\n type ChallengeType @relation(fields: [typeId], references: [id])\n // Relation to ChallengeTrack (FK: trackId)\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n\n // Auditing fields (present in every table)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([projectId])\n @@index([status]) // index added for optimized search by status\n @@index([createdAt])\n @@index([updatedAt])\n @@index([typeId])\n @@index([trackId])\n @@index([groups], type: Gin, map: \"challenge_groups_gin_idx\")\n @@index([submissionStartDate])\n @@index([submissionEndDate])\n @@index([registrationStartDate])\n @@index([registrationEndDate])\n @@index([startDate])\n @@index([endDate])\n @@index([status, startDate])\n @@index([trackId, typeId, status])\n @@index([status, typeId, trackId, createdAt(sort: Desc)], map: \"challenge_status_type_track_created_at_idx\")\n @@index([legacyId])\n @@index([projectId, status])\n}\n\n//////////////////////////////////////////\n// MemberChallengeAccess view – member/challenge pairs from resources schema\n//////////////////////////////////////////\n\nview MemberChallengeAccess {\n challengeId String\n memberId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id])\n\n @@map(\"MemberChallengeAccess\")\n}\n\n//////////////////////////////////////////\n// ChallengeType model\n//////////////////////////////////////////\n\nmodel ChallengeType {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n isTask Boolean @default(false)\n abbreviation String\n legacyId Int?\n isLegacy Boolean @default(false)\n\n challenges Challenge[]\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this type\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([abbreviation])\n @@index([legacyId])\n @@index([isLegacy])\n}\n\n//////////////////////////////////////////\n// ChallengeTrack model\n//////////////////////////////////////////\n\nmodel ChallengeTrack {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean\n abbreviation String\n legacyId Int? // numeric legacy system id (if provided)\n track ChallengeTrackEnum? // enum value from ChallengeTrackEnum\n isLegacy Boolean @default(false)\n challenges Challenge[]\n // Opposite relation for ChallengeTimelineTemplate\n timelineTemplates ChallengeTimelineTemplate[]\n // Default reviewer configurations associated with this track\n defaultReviewers DefaultChallengeReviewer[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([legacyId])\n @@index([isLegacy])\n}\n\n//////////////////////////////////////////\n// ChallengeTimelineTemplate model\n//////////////////////////////////////////\n\nmodel ChallengeTimelineTemplate {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String // now required per Swagger spec\n\n // Link to the TimelineTemplate model via timelineTemplateId.\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id])\n // Link to the ChallengeTrack model via trackId.\n track ChallengeTrack @relation(fields: [trackId], references: [id])\n // Link to the ChallengeType model via typeId.\n type ChallengeType @relation(fields: [typeId], references: [id])\n\n isDefault Boolean @default(false)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Composite index to support searches/updates by typeId, trackId and timelineTemplateId.\n @@index([typeId, trackId, timelineTemplateId])\n}\n\n//////////////////////////////////////////\n// AuditLog model – tracks field changes\n//////////////////////////////////////////\n\nmodel AuditLog {\n id String @id @default(uuid())\n challengeId String? // optional association with a challenge\n fieldName String\n oldValue String?\n newValue String?\n createdAt DateTime @default(now())\n createdBy String\n memberId String?\n\n // Relation field to connect AuditLog to Challenge.\n challenge Challenge? @relation(fields: [challengeId], references: [id])\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Attachment model – for challenge attachments\n//////////////////////////////////////////\n\nmodel Attachment {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String\n fileSize Int\n url String\n description String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeMetadata model – key/value metadata\n//////////////////////////////////////////\n\nmodel ChallengeMetadata {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n name String // name of the metadata\n value String // value stored as string for flexibility\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// Prize model – individual prize in a prize set\n//////////////////////////////////////////\n\nmodel Prize {\n id String @id @default(uuid())\n description String?\n prizeSet ChallengePrizeSet @relation(fields: [prizeSetId], references: [id], onDelete: Cascade)\n prizeSetId String\n type String // e.g. \"USD\", \"POINT\" (could also be converted to enum later)\n value Float\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeWinner model – record winners for a challenge\n//////////////////////////////////////////\n\nmodel ChallengeWinner {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n userId Int\n handle String\n placement Int\n type PrizeSetTypeEnum\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type, placement])\n}\n\n//////////////////////////////////////////\n// ChallengeTerm model – association of challenge and terms\n//////////////////////////////////////////\n\nmodel ChallengeTerm {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n termId String // Terms API id\n roleId String // UUID for the associated role\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeSkill model – linking challenges with skills\n//////////////////////////////////////////\n\nmodel ChallengeSkill {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n skillId String // Request provided skillId\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeBilling model – normalized billing info\n//////////////////////////////////////////\n\nmodel ChallengeBilling {\n id String @id @default(uuid())\n billingAccountId String?\n markup Float? // in range [0, 100]\n clientBillingRate Float? // in range [0, 100]. Supporting range on postgres is an open issue with prisma https://github.com/prisma/prisma/issues/3287.\n challengeId String @unique\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeLegacy model – normalized legacy info\n//////////////////////////////////////////\n\nmodel ChallengeLegacy {\n id String @id @default(uuid())\n reviewType ReviewTypeEnum @default(INTERNAL)\n confidentialityType String @default(\"public\")\n forumId Int?\n directProjectId Int?\n screeningScorecardId Int?\n reviewScorecardId Int?\n isTask Boolean @default(false)\n useSchedulingAPI Boolean @default(false)\n pureV5Task Boolean @default(false)\n pureV5 Boolean @default(false)\n selfService Boolean @default(false)\n selfServiceCopilot String?\n track String? // as provided in the legacy object\n subTrack String? // as provided in the legacy object\n legacySystemId Int? // represents the external \"legacyId\"\n challengeId String @unique\n challenge Challenge @relation(\"ChallengeLegacyRelation\", fields: [challengeId], references: [id], onDelete: Cascade)\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeEvent model – normalized challenge events\n//////////////////////////////////////////\n\nmodel ChallengeEvent {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n eventId Int\n name String?\n key String?\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\n//////////////////////////////////////////\n// ChallengeDiscussion and associated options – normalized discussion channels\n//////////////////////////////////////////\n\nmodel ChallengeDiscussion {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String\n discussionId String?\n name String\n type DiscussionTypeEnum // updated to use enum\n provider String\n url String?\n options ChallengeDiscussionOption[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n}\n\nmodel ChallengeDiscussionOption {\n id String @id @default(uuid())\n discussion ChallengeDiscussion @relation(fields: [discussionId], references: [id], onDelete: Cascade)\n discussionId String\n optionKey String\n optionValue String\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// ChallengeConstraint model – top-level challenge constraints (e.g. allowed registrants)\n//////////////////////////////////////////\n\nmodel ChallengeConstraint {\n id String @id @default(uuid())\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n challengeId String @unique\n allowedRegistrants String[] @default([])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhase – to capture per-phase info from create/update challenge operations\n// Each phase is linked with a challenge and holds a duration and any custom constraints.\n//////////////////////////////////////////\n\nmodel Phase {\n id String @id @default(uuid())\n name String\n description String?\n isOpen Boolean\n duration Int\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Inverse relation for associated challenge phases\n challengePhases ChallengePhase[]\n ChallengeReviewer ChallengeReviewer[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\nmodel ChallengePhase {\n id String @id @default(uuid())\n challengeId String\n phaseId String // foreign key to Phase\n\n name String // phase name\n description String? // description\n isOpen Boolean? @default(false) // if this phase is open\n predecessor String? // predecessor of this phase\n duration Int? // duration in seconds\n scheduledStartDate DateTime? // when the phase is scheduled to start\n scheduledEndDate DateTime?\n actualStartDate DateTime?\n actualEndDate DateTime? // when the phase actually ended\n constraints ChallengePhaseConstraint[]\n\n // Relation fields\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n phase Phase @relation(fields: [phaseId], references: [id])\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, isOpen])\n @@index([challengeId, name])\n @@index([challengeId, isOpen, scheduledEndDate, actualEndDate], map: \"challenge_phase_challenge_open_end_idx\")\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePhaseConstraint – to capture custom constraints for each phase\n//////////////////////////////////////////\n\nmodel ChallengePhaseConstraint {\n id String @id @default(uuid())\n challengePhaseId String\n name String // the name/key of the constraint\n value Int // numeric value of the constraint (can be changed to Float if needed)\n\n // Relation to the phase\n challengePhase ChallengePhase @relation(fields: [challengePhaseId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengePhaseId])\n}\n\n//////////////////////////////////////////\n// New Model: ChallengePrizeSet – to group prizes for a challenge\n//////////////////////////////////////////\n\nmodel ChallengePrizeSet {\n id String @id @default(uuid())\n challengeId String\n type PrizeSetTypeEnum // using enum instead of string\n description String?\n prizes Prize[]\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([challengeId, type])\n}\n\n//////////////////////////////////////////\n// ChallengeReviewer model – reviewers for a challenge, both AI and member\n//////////////////////////////////////////\n\nmodel ChallengeReviewer {\n id String @id @default(uuid())\n challengeId String\n\n // Reviewer configuration\n scorecardId String\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseId String\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n type ReviewOpportunityTypeEnum?\n aiWorkflowId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relation to the challenge\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n // Relation to the phase\n phase Phase @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([challengeId])\n @@index([phaseId])\n @@index([challengeId, phaseId])\n}\n\n//////////////////////////////////////////\n// DefaultChallengeReviewer model – default reviewers by type and track\n//////////////////////////////////////////\n\nmodel DefaultChallengeReviewer {\n id String @id @default(uuid())\n typeId String\n trackId String\n timelineTemplateId String?\n // Reviewer configuration (mirrors ChallengeReviewer)\n scorecardId String?\n isMemberReview Boolean\n memberReviewerCount Int?\n phaseName String\n // Optional explicit link to Phase for better fidelity\n phaseId String?\n fixedAmount Float? @default(0)\n baseCoefficient Float?\n incrementalCoefficient Float?\n opportunityType ReviewOpportunityTypeEnum?\n aiConfigTemplateId String? @db.VarChar(14)\n shouldOpenOpportunity Boolean @default(true)\n\n // Relations\n challengeType ChallengeType @relation(fields: [typeId], references: [id])\n challengeTrack ChallengeTrack @relation(fields: [trackId], references: [id])\n timelineTemplate TimelineTemplate? @relation(fields: [timelineTemplateId], references: [id])\n // Relation to Phase (optional for backward compatibility with phaseName)\n phase Phase? @relation(fields: [phaseId], references: [id])\n\n // Auditing fields\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n @@index([typeId, trackId])\n @@index([typeId, trackId, timelineTemplateId])\n @@index([phaseId])\n}\n\n//////////////////////////////////////////\n// TimelineTemplate model – defines timeline templates\n//////////////////////////////////////////\nmodel TimelineTemplate {\n id String @id @default(uuid())\n name String\n description String?\n isActive Boolean @default(true)\n phases TimelineTemplatePhase[]\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n // Opposite relation field, linking back to ChallengeTimelineTemplate.\n challengeTimelineTemplates ChallengeTimelineTemplate[]\n\n // Opposite relation field for Challenge.\n challenges Challenge[]\n DefaultChallengeReviewer DefaultChallengeReviewer[]\n\n @@unique([name])\n}\n\n//////////////////////////////////////////\n// TimelineTemplatePhase model – phases associated with a timeline template\n//////////////////////////////////////////\nmodel TimelineTemplatePhase {\n id String @id @default(uuid())\n timelineTemplateId String\n phaseId String // identifier for the phase\n predecessor String? // optional predecessor phase id\n defaultDuration Int // duration (in minutes, hours, etc.) as per business rules\n\n createdAt DateTime @default(now())\n createdBy String\n updatedAt DateTime @updatedAt\n updatedBy String\n\n timelineTemplate TimelineTemplate @relation(fields: [timelineTemplateId], references: [id], onDelete: Cascade)\n\n @@index([timelineTemplateId])\n @@index([timelineTemplateId, phaseId])\n}\n", + "inlineSchemaHash": "013c60d710a175acc08038f512b16e5030bd0c3b8ccf59cb118c7e55c66e6caf", "copyEngine": true } config.dirname = '/' -config.runtimeDataModel = JSON.parse("{\"models\":{\"Challenge\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"privateDescription\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeSource\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"descriptionFormat\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"projectId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"typeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trackId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"overviewTotalPrizes\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"numOfRegistrants\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"numOfSubmissions\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"numOfCheckpointSubmissions\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currentPhaseNames\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"wiproAllowed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"tags\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groups\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"taskIsTask\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"taskIsAssigned\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"taskMemberId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"submissionStartDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"submissionEndDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"registrationStartDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"registrationEndDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"billingRecord\",\"kind\":\"object\",\"type\":\"ChallengeBilling\",\"relationName\":\"ChallengeToChallengeBilling\"},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"legacyRecord\",\"kind\":\"object\",\"type\":\"ChallengeLegacy\",\"relationName\":\"ChallengeLegacyRelation\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"ChallengeStatusEnum\"},{\"name\":\"constraintRecord\",\"kind\":\"object\",\"type\":\"ChallengeConstraint\",\"relationName\":\"ChallengeToChallengeConstraint\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"ChallengeEvent\",\"relationName\":\"ChallengeToChallengeEvent\"},{\"name\":\"discussions\",\"kind\":\"object\",\"type\":\"ChallengeDiscussion\",\"relationName\":\"ChallengeToChallengeDiscussion\"},{\"name\":\"metadata\",\"kind\":\"object\",\"type\":\"ChallengeMetadata\",\"relationName\":\"ChallengeToChallengeMetadata\"},{\"name\":\"phases\",\"kind\":\"object\",\"type\":\"ChallengePhase\",\"relationName\":\"ChallengeToChallengePhase\"},{\"name\":\"prizeSets\",\"kind\":\"object\",\"type\":\"ChallengePrizeSet\",\"relationName\":\"ChallengeToChallengePrizeSet\"},{\"name\":\"reviewers\",\"kind\":\"object\",\"type\":\"ChallengeReviewer\",\"relationName\":\"ChallengeToChallengeReviewer\"},{\"name\":\"winners\",\"kind\":\"object\",\"type\":\"ChallengeWinner\",\"relationName\":\"ChallengeToChallengeWinner\"},{\"name\":\"attachments\",\"kind\":\"object\",\"type\":\"Attachment\",\"relationName\":\"AttachmentToChallenge\"},{\"name\":\"terms\",\"kind\":\"object\",\"type\":\"ChallengeTerm\",\"relationName\":\"ChallengeToChallengeTerm\"},{\"name\":\"skills\",\"kind\":\"object\",\"type\":\"ChallengeSkill\",\"relationName\":\"ChallengeToChallengeSkill\"},{\"name\":\"auditLogs\",\"kind\":\"object\",\"type\":\"AuditLog\",\"relationName\":\"AuditLogToChallenge\"},{\"name\":\"memberAccesses\",\"kind\":\"object\",\"type\":\"MemberChallengeAccess\",\"relationName\":\"ChallengeToMemberChallengeAccess\"},{\"name\":\"type\",\"kind\":\"object\",\"type\":\"ChallengeType\",\"relationName\":\"ChallengeToChallengeType\"},{\"name\":\"track\",\"kind\":\"object\",\"type\":\"ChallengeTrack\",\"relationName\":\"ChallengeToChallengeTrack\"},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"type\":\"TimelineTemplate\",\"relationName\":\"ChallengeToTimelineTemplate\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeType\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isTask\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenges\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeType\"},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"type\":\"ChallengeTimelineTemplate\",\"relationName\":\"ChallengeTimelineTemplateToChallengeType\"},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"type\":\"DefaultChallengeReviewer\",\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeTrack\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"track\",\"kind\":\"enum\",\"type\":\"ChallengeTrackEnum\"},{\"name\":\"challenges\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeTrack\"},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"type\":\"ChallengeTimelineTemplate\",\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\"},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"type\":\"DefaultChallengeReviewer\",\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeTimelineTemplate\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"typeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trackId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"type\":\"TimelineTemplate\",\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\"},{\"name\":\"track\",\"kind\":\"object\",\"type\":\"ChallengeTrack\",\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\"},{\"name\":\"type\",\"kind\":\"object\",\"type\":\"ChallengeType\",\"relationName\":\"ChallengeTimelineTemplateToChallengeType\"},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"AuditLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fieldName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"oldValue\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"newValue\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"memberId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"AuditLogToChallenge\"}],\"dbName\":null},\"Attachment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"AttachmentToChallenge\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fileSize\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeMetadata\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeMetadata\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"Prize\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"prizeSet\",\"kind\":\"object\",\"type\":\"ChallengePrizeSet\",\"relationName\":\"ChallengePrizeSetToPrize\"},{\"name\":\"prizeSetId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeWinner\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeWinner\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"handle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placement\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"PrizeSetTypeEnum\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeTerm\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeTerm\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"termId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeSkill\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeSkill\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"skillId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeBilling\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"billingAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"markup\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"clientBillingRate\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeBilling\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeLegacy\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reviewType\",\"kind\":\"enum\",\"type\":\"ReviewTypeEnum\"},{\"name\":\"confidentialityType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"forumId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"directProjectId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"screeningScorecardId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"reviewScorecardId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isTask\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"useSchedulingAPI\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"pureV5Task\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"pureV5\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"selfService\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"selfServiceCopilot\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"track\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"subTrack\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"legacySystemId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeLegacyRelation\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeEvent\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeDiscussion\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeDiscussion\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"DiscussionTypeEnum\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"options\",\"kind\":\"object\",\"type\":\"ChallengeDiscussionOption\",\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeDiscussionOption\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"discussion\",\"kind\":\"object\",\"type\":\"ChallengeDiscussion\",\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\"},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"optionKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"optionValue\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeConstraint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeConstraint\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"allowedRegistrants\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"Phase\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"duration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengePhases\",\"kind\":\"object\",\"type\":\"ChallengePhase\",\"relationName\":\"ChallengePhaseToPhase\"},{\"name\":\"ChallengeReviewer\",\"kind\":\"object\",\"type\":\"ChallengeReviewer\",\"relationName\":\"ChallengeReviewerToPhase\"},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"type\":\"DefaultChallengeReviewer\",\"relationName\":\"DefaultChallengeReviewerToPhase\"}],\"dbName\":null},\"ChallengePhase\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"duration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"scheduledStartDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"scheduledEndDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"actualStartDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"actualEndDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"constraints\",\"kind\":\"object\",\"type\":\"ChallengePhaseConstraint\",\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengePhase\"},{\"name\":\"phase\",\"kind\":\"object\",\"type\":\"Phase\",\"relationName\":\"ChallengePhaseToPhase\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengePhaseConstraint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengePhaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"challengePhase\",\"kind\":\"object\",\"type\":\"ChallengePhase\",\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengePrizeSet\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"PrizeSetTypeEnum\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"prizes\",\"kind\":\"object\",\"type\":\"Prize\",\"relationName\":\"ChallengePrizeSetToPrize\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengePrizeSet\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeReviewer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"ReviewOpportunityTypeEnum\"},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeReviewer\"},{\"name\":\"phase\",\"kind\":\"object\",\"type\":\"Phase\",\"relationName\":\"ChallengeReviewerToPhase\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"DefaultChallengeReviewer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"typeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trackId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"phaseName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"opportunityType\",\"kind\":\"enum\",\"type\":\"ReviewOpportunityTypeEnum\"},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"challengeType\",\"kind\":\"object\",\"type\":\"ChallengeType\",\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\"},{\"name\":\"challengeTrack\",\"kind\":\"object\",\"type\":\"ChallengeTrack\",\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\"},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"type\":\"TimelineTemplate\",\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\"},{\"name\":\"phase\",\"kind\":\"object\",\"type\":\"Phase\",\"relationName\":\"DefaultChallengeReviewerToPhase\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"TimelineTemplate\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"phases\",\"kind\":\"object\",\"type\":\"TimelineTemplatePhase\",\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeTimelineTemplates\",\"kind\":\"object\",\"type\":\"ChallengeTimelineTemplate\",\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\"},{\"name\":\"challenges\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToTimelineTemplate\"},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"type\":\"DefaultChallengeReviewer\",\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\"}],\"dbName\":null},\"TimelineTemplatePhase\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultDuration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"type\":\"TimelineTemplate\",\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\"}],\"dbName\":null},\"MemberChallengeAccess\":{\"fields\":[{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"memberId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToMemberChallengeAccess\"}],\"dbName\":\"MemberChallengeAccess\"}},\"enums\":{},\"types\":{}}") +config.runtimeDataModel = JSON.parse("{\"models\":{\"Challenge\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"privateDescription\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeSource\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"descriptionFormat\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"projectId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"typeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trackId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"overviewTotalPrizes\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"numOfRegistrants\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"numOfSubmissions\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"numOfCheckpointSubmissions\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"currentPhaseNames\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"wiproAllowed\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"funChallenge\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"tags\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"groups\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"taskIsTask\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"taskIsAssigned\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"taskMemberId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"submissionStartDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"submissionEndDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"registrationStartDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"registrationEndDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"startDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"endDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"billingRecord\",\"kind\":\"object\",\"type\":\"ChallengeBilling\",\"relationName\":\"ChallengeToChallengeBilling\"},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"legacyRecord\",\"kind\":\"object\",\"type\":\"ChallengeLegacy\",\"relationName\":\"ChallengeLegacyRelation\"},{\"name\":\"status\",\"kind\":\"enum\",\"type\":\"ChallengeStatusEnum\"},{\"name\":\"constraintRecord\",\"kind\":\"object\",\"type\":\"ChallengeConstraint\",\"relationName\":\"ChallengeToChallengeConstraint\"},{\"name\":\"events\",\"kind\":\"object\",\"type\":\"ChallengeEvent\",\"relationName\":\"ChallengeToChallengeEvent\"},{\"name\":\"discussions\",\"kind\":\"object\",\"type\":\"ChallengeDiscussion\",\"relationName\":\"ChallengeToChallengeDiscussion\"},{\"name\":\"metadata\",\"kind\":\"object\",\"type\":\"ChallengeMetadata\",\"relationName\":\"ChallengeToChallengeMetadata\"},{\"name\":\"phases\",\"kind\":\"object\",\"type\":\"ChallengePhase\",\"relationName\":\"ChallengeToChallengePhase\"},{\"name\":\"prizeSets\",\"kind\":\"object\",\"type\":\"ChallengePrizeSet\",\"relationName\":\"ChallengeToChallengePrizeSet\"},{\"name\":\"reviewers\",\"kind\":\"object\",\"type\":\"ChallengeReviewer\",\"relationName\":\"ChallengeToChallengeReviewer\"},{\"name\":\"winners\",\"kind\":\"object\",\"type\":\"ChallengeWinner\",\"relationName\":\"ChallengeToChallengeWinner\"},{\"name\":\"attachments\",\"kind\":\"object\",\"type\":\"Attachment\",\"relationName\":\"AttachmentToChallenge\"},{\"name\":\"terms\",\"kind\":\"object\",\"type\":\"ChallengeTerm\",\"relationName\":\"ChallengeToChallengeTerm\"},{\"name\":\"skills\",\"kind\":\"object\",\"type\":\"ChallengeSkill\",\"relationName\":\"ChallengeToChallengeSkill\"},{\"name\":\"auditLogs\",\"kind\":\"object\",\"type\":\"AuditLog\",\"relationName\":\"AuditLogToChallenge\"},{\"name\":\"memberAccesses\",\"kind\":\"object\",\"type\":\"MemberChallengeAccess\",\"relationName\":\"ChallengeToMemberChallengeAccess\"},{\"name\":\"type\",\"kind\":\"object\",\"type\":\"ChallengeType\",\"relationName\":\"ChallengeToChallengeType\"},{\"name\":\"track\",\"kind\":\"object\",\"type\":\"ChallengeTrack\",\"relationName\":\"ChallengeToChallengeTrack\"},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"type\":\"TimelineTemplate\",\"relationName\":\"ChallengeToTimelineTemplate\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeType\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"isTask\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isLegacy\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"challenges\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeType\"},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"type\":\"ChallengeTimelineTemplate\",\"relationName\":\"ChallengeTimelineTemplateToChallengeType\"},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"type\":\"DefaultChallengeReviewer\",\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeTrack\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"abbreviation\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"legacyId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"track\",\"kind\":\"enum\",\"type\":\"ChallengeTrackEnum\"},{\"name\":\"isLegacy\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"challenges\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeTrack\"},{\"name\":\"timelineTemplates\",\"kind\":\"object\",\"type\":\"ChallengeTimelineTemplate\",\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\"},{\"name\":\"defaultReviewers\",\"kind\":\"object\",\"type\":\"DefaultChallengeReviewer\",\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeTimelineTemplate\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"typeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trackId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"type\":\"TimelineTemplate\",\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\"},{\"name\":\"track\",\"kind\":\"object\",\"type\":\"ChallengeTrack\",\"relationName\":\"ChallengeTimelineTemplateToChallengeTrack\"},{\"name\":\"type\",\"kind\":\"object\",\"type\":\"ChallengeType\",\"relationName\":\"ChallengeTimelineTemplateToChallengeType\"},{\"name\":\"isDefault\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"AuditLog\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fieldName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"oldValue\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"newValue\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"memberId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"AuditLogToChallenge\"}],\"dbName\":null},\"Attachment\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"AttachmentToChallenge\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fileSize\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeMetadata\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeMetadata\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"Prize\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"prizeSet\",\"kind\":\"object\",\"type\":\"ChallengePrizeSet\",\"relationName\":\"ChallengePrizeSetToPrize\"},{\"name\":\"prizeSetId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeWinner\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeWinner\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"handle\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"placement\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"PrizeSetTypeEnum\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeTerm\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeTerm\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"termId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"roleId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeSkill\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeSkill\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"skillId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeBilling\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"billingAccountId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"markup\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"clientBillingRate\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeBilling\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeLegacy\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"reviewType\",\"kind\":\"enum\",\"type\":\"ReviewTypeEnum\"},{\"name\":\"confidentialityType\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"forumId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"directProjectId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"screeningScorecardId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"reviewScorecardId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"isTask\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"useSchedulingAPI\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"pureV5Task\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"pureV5\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"selfService\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"selfServiceCopilot\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"track\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"subTrack\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"legacySystemId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeLegacyRelation\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeEvent\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeEvent\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"eventId\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"key\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeDiscussion\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeDiscussion\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"DiscussionTypeEnum\"},{\"name\":\"provider\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"url\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"options\",\"kind\":\"object\",\"type\":\"ChallengeDiscussionOption\",\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeDiscussionOption\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"discussion\",\"kind\":\"object\",\"type\":\"ChallengeDiscussion\",\"relationName\":\"ChallengeDiscussionToChallengeDiscussionOption\"},{\"name\":\"discussionId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"optionKey\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"optionValue\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeConstraint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeConstraint\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"allowedRegistrants\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"Phase\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"duration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengePhases\",\"kind\":\"object\",\"type\":\"ChallengePhase\",\"relationName\":\"ChallengePhaseToPhase\"},{\"name\":\"ChallengeReviewer\",\"kind\":\"object\",\"type\":\"ChallengeReviewer\",\"relationName\":\"ChallengeReviewerToPhase\"},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"type\":\"DefaultChallengeReviewer\",\"relationName\":\"DefaultChallengeReviewerToPhase\"}],\"dbName\":null},\"ChallengePhase\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isOpen\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"duration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"scheduledStartDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"scheduledEndDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"actualStartDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"actualEndDate\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"constraints\",\"kind\":\"object\",\"type\":\"ChallengePhaseConstraint\",\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengePhase\"},{\"name\":\"phase\",\"kind\":\"object\",\"type\":\"Phase\",\"relationName\":\"ChallengePhaseToPhase\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengePhaseConstraint\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengePhaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"value\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"challengePhase\",\"kind\":\"object\",\"type\":\"ChallengePhase\",\"relationName\":\"ChallengePhaseToChallengePhaseConstraint\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengePrizeSet\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"PrizeSetTypeEnum\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"prizes\",\"kind\":\"object\",\"type\":\"Prize\",\"relationName\":\"ChallengePrizeSetToPrize\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengePrizeSet\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"ChallengeReviewer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"type\",\"kind\":\"enum\",\"type\":\"ReviewOpportunityTypeEnum\"},{\"name\":\"aiWorkflowId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeReviewer\"},{\"name\":\"phase\",\"kind\":\"object\",\"type\":\"Phase\",\"relationName\":\"ChallengeReviewerToPhase\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"DefaultChallengeReviewer\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"typeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"trackId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"scorecardId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isMemberReview\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"memberReviewerCount\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"phaseName\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"fixedAmount\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"baseCoefficient\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"incrementalCoefficient\",\"kind\":\"scalar\",\"type\":\"Float\"},{\"name\":\"opportunityType\",\"kind\":\"enum\",\"type\":\"ReviewOpportunityTypeEnum\"},{\"name\":\"aiConfigTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"shouldOpenOpportunity\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"challengeType\",\"kind\":\"object\",\"type\":\"ChallengeType\",\"relationName\":\"ChallengeTypeToDefaultChallengeReviewer\"},{\"name\":\"challengeTrack\",\"kind\":\"object\",\"type\":\"ChallengeTrack\",\"relationName\":\"ChallengeTrackToDefaultChallengeReviewer\"},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"type\":\"TimelineTemplate\",\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\"},{\"name\":\"phase\",\"kind\":\"object\",\"type\":\"Phase\",\"relationName\":\"DefaultChallengeReviewerToPhase\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"}],\"dbName\":null},\"TimelineTemplate\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"name\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"description\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"isActive\",\"kind\":\"scalar\",\"type\":\"Boolean\"},{\"name\":\"phases\",\"kind\":\"object\",\"type\":\"TimelineTemplatePhase\",\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challengeTimelineTemplates\",\"kind\":\"object\",\"type\":\"ChallengeTimelineTemplate\",\"relationName\":\"ChallengeTimelineTemplateToTimelineTemplate\"},{\"name\":\"challenges\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToTimelineTemplate\"},{\"name\":\"DefaultChallengeReviewer\",\"kind\":\"object\",\"type\":\"DefaultChallengeReviewer\",\"relationName\":\"DefaultChallengeReviewerToTimelineTemplate\"}],\"dbName\":null},\"TimelineTemplatePhase\":{\"fields\":[{\"name\":\"id\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplateId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"phaseId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"predecessor\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"defaultDuration\",\"kind\":\"scalar\",\"type\":\"Int\"},{\"name\":\"createdAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"createdBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"updatedAt\",\"kind\":\"scalar\",\"type\":\"DateTime\"},{\"name\":\"updatedBy\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"timelineTemplate\",\"kind\":\"object\",\"type\":\"TimelineTemplate\",\"relationName\":\"TimelineTemplateToTimelineTemplatePhase\"}],\"dbName\":null},\"MemberChallengeAccess\":{\"fields\":[{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"memberId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToMemberChallengeAccess\"}],\"dbName\":\"MemberChallengeAccess\"}},\"enums\":{},\"types\":{}}") defineDmmfProperty(exports.Prisma, config.runtimeDataModel) config.engineWasm = { getRuntime: async () => require('./query_engine_bg.js'), diff --git a/prisma/migrations/20260225100000_rename_default_ai_workflow_id/migration.sql b/prisma/migrations/20260225100000_rename_default_ai_workflow_id/migration.sql new file mode 100644 index 0000000..2832de5 --- /dev/null +++ b/prisma/migrations/20260225100000_rename_default_ai_workflow_id/migration.sql @@ -0,0 +1 @@ +ALTER TABLE "DefaultChallengeReviewer" RENAME COLUMN "aiWorkflowId" TO "aiConfigTemplateId"; \ No newline at end of file diff --git a/prisma/migrations/20260306100000_add_ai_screening_phase/migration.sql b/prisma/migrations/20260306100000_add_ai_screening_phase/migration.sql new file mode 100644 index 0000000..29e70f3 --- /dev/null +++ b/prisma/migrations/20260306100000_add_ai_screening_phase/migration.sql @@ -0,0 +1,23 @@ +-- Insert AI Screening phase +INSERT INTO "Phase" ( + "id", + "name", + "description", + "isOpen", + "duration", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy" +) VALUES ( + '9f4e3b2a-7c1d-4e9f-b8a6-5d3c1a9f2b4e', + 'AI Screening', + 'AI Screening Phase', + true, + 14400, + '2025-03-10T13:08:02.378Z', + 'topcoder user', + '2025-03-10T13:08:02.378Z', + 'topcoder user' +) +ON CONFLICT DO NOTHING; diff --git a/prisma/migrations/20260316090000_add_legacy_type_visibility_flags/migration.sql b/prisma/migrations/20260316090000_add_legacy_type_visibility_flags/migration.sql new file mode 100644 index 0000000..9ae4872 --- /dev/null +++ b/prisma/migrations/20260316090000_add_legacy_type_visibility_flags/migration.sql @@ -0,0 +1,64 @@ +ALTER TABLE "ChallengeType" +ADD COLUMN "legacyId" INTEGER, +ADD COLUMN "isLegacy" BOOLEAN NOT NULL DEFAULT false; + +ALTER TABLE "ChallengeTrack" +ADD COLUMN "isLegacy" BOOLEAN NOT NULL DEFAULT false; + +CREATE INDEX "ChallengeType_legacyId_idx" ON "ChallengeType"("legacyId"); +CREATE INDEX "ChallengeType_isLegacy_idx" ON "ChallengeType"("isLegacy"); +CREATE INDEX "ChallengeTrack_isLegacy_idx" ON "ChallengeTrack"("isLegacy"); + +UPDATE "ChallengeType" +SET "legacyId" = 149 +WHERE "name" = 'First2Finish' + AND "legacyId" IS NULL; + +INSERT INTO "ChallengeType" ( + "id", + "name", + "description", + "isActive", + "isTask", + "abbreviation", + "legacyId", + "isLegacy", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy" +) +SELECT + seed."id", + seed."name", + seed."description", + true, + false, + seed."abbreviation", + seed."legacyId", + true, + CURRENT_TIMESTAMP, + 'migration', + CURRENT_TIMESTAMP, + 'migration' +FROM ( + VALUES + ('ac043fcf-fe36-46c6-8480-2e12bd5300cd', 'SRM', 'Legacy SRM subtype retained for historical stats references.', 'SRM', NULL), + ('b02fdb46-8fad-4e91-aa81-14453f647ac9', 'CODE', 'Legacy develop subtype retained for historical stats references.', 'COD', 150), + ('7e361ed7-4846-4e8e-8cfe-d747590d2611', 'DESIGN', 'Legacy develop subtype retained for historical stats references.', 'LDES', NULL), + ('0984ef6a-e1f9-46de-8425-43b8d29f55f5', 'DEVELOPMENT', 'Legacy develop subtype retained for historical stats references.', 'LDEV', NULL), + ('ca4681e8-a4be-44f5-9ada-0b8b43428233', 'SPECIFICATION', 'Legacy develop subtype retained for historical stats references.', 'LSPC', NULL), + ('2e3a9589-21c5-42fc-bc91-27077e171c45', 'ARCHITECTURE', 'Legacy develop subtype retained for historical stats references.', 'LARC', NULL), + ('c2e6b73d-26e8-46c6-9a86-9c22144e98f2', 'TEST_SUITES', 'Legacy develop subtype retained for historical stats references.', 'LTST', NULL), + ('78253687-cc08-4aa8-b897-7a4f0c0b362d', 'ASSEMBLY_COMPETITION', 'Legacy develop subtype retained for historical stats references.', 'LASM', 125), + ('7d68e306-bc13-4c59-8481-d2b7f5d1c344', 'UI_PROTOTYPE_COMPETITION', 'Legacy develop subtype retained for historical stats references.', 'LUIP', NULL), + ('ce7fe807-fb83-4f9c-ac12-919adb89b411', 'CONCEPTUALIZATION', 'Legacy develop subtype retained for historical stats references.', 'LCON', 134), + ('dfd9b687-b1c8-4ec2-8fd2-bfbf07fe2802', 'RIA_BUILD_COMPETITION', 'Legacy develop subtype retained for historical stats references.', 'LRIA', NULL), + ('9bd8bf24-b4e9-4231-8fbf-ab1474906a5a', 'TEST_SCENARIOS', 'Legacy develop subtype retained for historical stats references.', 'LSCN', NULL), + ('cf86f84c-c601-42c5-b55b-36d82a17818b', 'COPILOT_POSTING', 'Legacy develop subtype retained for historical stats references.', 'LCOP', NULL) +) AS seed("id", "name", "description", "abbreviation", "legacyId") +WHERE NOT EXISTS ( + SELECT 1 + FROM "ChallengeType" existing + WHERE existing."name" = seed."name" +); diff --git a/prisma/migrations/20260323110000_add_content_creation_legacy_type/migration.sql b/prisma/migrations/20260323110000_add_content_creation_legacy_type/migration.sql new file mode 100644 index 0000000..73fc655 --- /dev/null +++ b/prisma/migrations/20260323110000_add_content_creation_legacy_type/migration.sql @@ -0,0 +1,38 @@ +INSERT INTO "ChallengeType" ( + "id", + "name", + "description", + "isActive", + "isTask", + "abbreviation", + "legacyId", + "isLegacy", + "createdAt", + "createdBy", + "updatedAt", + "updatedBy" +) +SELECT + seed."id", + seed."name", + seed."description", + true, + false, + seed."abbreviation", + seed."legacyId", + true, + CURRENT_TIMESTAMP, + 'migration', + CURRENT_TIMESTAMP, + 'migration' +FROM ( + VALUES + ('f9570d73-4f26-4d3a-b804-7f6f2f4b85e9', 'BUG_HUNT', 'Legacy develop subtype retained for historical stats references.', 'LBGH', 120), + ('65d2d4d4-a0e2-4f5d-94df-570f0b084439', 'CONTENT_CREATION', 'Legacy develop subtype retained for historical stats references.', 'LCTC', 146) +) AS seed("id", "name", "description", "abbreviation", "legacyId") +WHERE NOT EXISTS ( + SELECT 1 + FROM "ChallengeType" + WHERE "name" = seed."name" + OR "legacyId" = seed."legacyId" +); diff --git a/prisma/schema.prisma b/prisma/schema.prisma index e24bbb6..0ee5b96 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -195,6 +195,8 @@ model ChallengeType { isActive Boolean @default(true) isTask Boolean @default(false) abbreviation String + legacyId Int? + isLegacy Boolean @default(false) challenges Challenge[] timelineTemplates ChallengeTimelineTemplate[] @@ -207,6 +209,8 @@ model ChallengeType { updatedBy String @@index([abbreviation]) + @@index([legacyId]) + @@index([isLegacy]) } ////////////////////////////////////////// @@ -221,6 +225,7 @@ model ChallengeTrack { abbreviation String legacyId Int? // numeric legacy system id (if provided) track ChallengeTrackEnum? // enum value from ChallengeTrackEnum + isLegacy Boolean @default(false) challenges Challenge[] // Opposite relation for ChallengeTimelineTemplate timelineTemplates ChallengeTimelineTemplate[] @@ -233,6 +238,7 @@ model ChallengeTrack { updatedBy String @@index([legacyId]) + @@index([isLegacy]) } ////////////////////////////////////////// @@ -670,7 +676,7 @@ model DefaultChallengeReviewer { baseCoefficient Float? incrementalCoefficient Float? opportunityType ReviewOpportunityTypeEnum? - aiWorkflowId String? @db.VarChar(14) + aiConfigTemplateId String? @db.VarChar(14) shouldOpenOpportunity Boolean @default(true) // Relations diff --git a/src/common/challenge-helper.js b/src/common/challenge-helper.js index b3a2047..a319c36 100644 --- a/src/common/challenge-helper.js +++ b/src/common/challenge-helper.js @@ -3,9 +3,11 @@ const challengeTrackService = require("../services/ChallengeTrackService"); const timelineTemplateService = require("../services/TimelineTemplateService"); const HttpStatus = require("http-status-codes"); const _ = require("lodash"); +const moment = require("moment"); const errors = require("./errors"); const config = require("config"); const helper = require("./helper"); +const phaseHelper = require("./phase-helper"); const axios = require("axios"); const { getM2MToken } = require("./m2m-helper"); const { hasAdminRole } = require("./role-helper"); @@ -13,6 +15,7 @@ const { ensureAcessibilityToModifiedGroups } = require("./group-helper"); const { ChallengeStatusEnum } = require("@prisma/client"); const SUBMISSION_PHASE_PRIORITY = ["Topgear Submission", "Topcoder Submission", "Submission"]; +const CHECKPOINT_SUBMISSION_PHASE_NAME = "Checkpoint Submission"; class ChallengeHelper { /** @@ -52,7 +55,11 @@ class ChallengeHelper { let token = await getM2MToken(); const url = `${config.PROJECTS_API_URL}/${projectId}`; try { - const res = await axios.get(url, { headers: { Authorization: `Bearer ${token}` } }); + const res = await axios.get(url, { + headers: { Authorization: `Bearer ${token}` }, + // projects-api-v6 omits members unless explicitly requested. + params: { fields: "members" }, + }); if (currentUser.isMachine || hasAdminRole(currentUser)) { return res.data; } @@ -212,6 +219,440 @@ class ChallengeHelper { } } + /** + * If challenge reviewers are not provided, apply default reviewers for + * the challenge type/track (timeline-template specific first, then generic fallback). + * + * @param {Object} challenge challenge payload (mutated in-place) + * @param {Object} prisma Prisma client + */ + async applyDefaultMemberReviewersForChallengeCreation( + challenge, + prisma, + logDebugMessage, + ) { + if (!challenge || !prisma) { + return; + } + + if (Array.isArray(challenge.reviewers) && challenge.reviewers.length > 0) { + return; + } + + if (Array.isArray(challenge.reviewers) && challenge.reviewers.length > 0) { + return; + } + + if (!challenge.typeId || !challenge.trackId) { + return; + } + + logDebugMessage(`loading default member reviewers (trackId=${challenge.trackId}, typeId=${challenge.typeId})`); + const defaultReviewerWhere = { + typeId: challenge.typeId, + trackId: challenge.trackId, + }; + + let defaultReviewers = []; + if (challenge.timelineTemplateId) { + defaultReviewers = await prisma.defaultChallengeReviewer.findMany({ + where: { + ...defaultReviewerWhere, + isMemberReview: true, + timelineTemplateId: challenge.timelineTemplateId, + }, + orderBy: { createdAt: "asc" }, + }); + } + + if (_.isEmpty(defaultReviewers)) { + defaultReviewers = await prisma.defaultChallengeReviewer.findMany({ + where: { + ...defaultReviewerWhere, + isMemberReview: true, + timelineTemplateId: null, + }, + orderBy: { createdAt: "asc" }, + }); + } + logDebugMessage(`loaded ${defaultReviewers.length} default member reviewers`); + + if (!defaultReviewers || defaultReviewers.length === 0) { + return; + } + + const phaseNames = _.uniq(defaultReviewers.map((r) => r.phaseName)); + const phaseMap = new Map((challenge.phases || []).map((p) => [p.name, p.phaseId])); + + const missing = phaseNames.filter((name) => !phaseMap.has(name)); + if (missing.length > 0) { + throw new errors.BadRequestError( + `Default reviewers reference unknown phaseName(s): ${missing.join(", ")}` + ); + } + + challenge.reviewers = defaultReviewers.map((reviewer) => ({ + scorecardId: reviewer.scorecardId, + isMemberReview: reviewer.isMemberReview, + memberReviewerCount: reviewer.memberReviewerCount, + phaseId: phaseMap.get(reviewer.phaseName), + fixedAmount: reviewer.fixedAmount, + baseCoefficient: reviewer.baseCoefficient, + incrementalCoefficient: reviewer.incrementalCoefficient, + type: reviewer.opportunityType, + shouldOpenOpportunity: _.isBoolean(reviewer.shouldOpenOpportunity) + ? reviewer.shouldOpenOpportunity + : true, + })); + } + + /** + * If challenge reviewers are not provided, apply default reviewers for + * the challenge type/track (timeline-template specific first, then generic fallback). + * + * @param {Object} challenge challenge payload (mutated in-place) + * @param {Object} prisma Prisma client + */ + async applyDefaultAIConfigForChallengeCreation(challenge, prisma, logDebugMessage) { + if (!challenge || !prisma) { + return; + } + + if (!challenge.typeId || !challenge.trackId) { + return; + } + + logDebugMessage(`loading default ai configs (trackId=${challenge.trackId}, typeId=${challenge.typeId})`); + const defaultReviewerWhere = { + typeId: challenge.typeId, + trackId: challenge.trackId, + }; + + let defaultReviewers = []; + if (challenge.timelineTemplateId) { + defaultReviewers = await prisma.defaultChallengeReviewer.findMany({ + where: { + ...defaultReviewerWhere, + isMemberReview: false, + timelineTemplateId: challenge.timelineTemplateId, + }, + orderBy: { createdAt: "asc" }, + }); + } + + if (_.isEmpty(defaultReviewers)) { + defaultReviewers = await prisma.defaultChallengeReviewer.findMany({ + where: { + ...defaultReviewerWhere, + isMemberReview: false, + timelineTemplateId: null, + }, + orderBy: { createdAt: "asc" }, + }); + } + logDebugMessage(`loaded ${defaultReviewers.length} default ai configs`); + + if (!defaultReviewers || defaultReviewers.length === 0) { + return; + } + + const phaseNames = _.uniq(defaultReviewers.map((r) => r.phaseName)); + const phaseMap = new Map((challenge.phases || []).map((p) => [p.name, p.phaseId])); + + const missing = phaseNames.filter((name) => !phaseMap.has(name)); + if (missing.length > 0) { + throw new errors.BadRequestError( + `Default reviewers reference unknown phaseName(s): ${missing.join(", ")}` + ); + } + + const aiTemplates = new Map(); + const aiConfigsByTemplateId = new Map(); + const aiReviewers = []; + + for (const reviewer of defaultReviewers) { + if (!reviewer.aiConfigTemplateId) { + throw new errors.BadRequestError( + `Default AI reviewer is missing aiConfigTemplateId for phaseName: ${reviewer.phaseName}` + ); + } + + if (!aiTemplates.has(reviewer.aiConfigTemplateId)) { + aiTemplates.set( + reviewer.aiConfigTemplateId, + await this.getAIReviewTemplateById(reviewer.aiConfigTemplateId) + ); + } + + const template = aiTemplates.get(reviewer.aiConfigTemplateId); + const workflows = _.get(template, "workflows", []); + if (!Array.isArray(workflows) || workflows.length === 0) { + throw new errors.BadRequestError( + `AI review template '${reviewer.aiConfigTemplateId}' has no workflows` + ); + } + + const workflowIds = _.uniq( + workflows.map((workflow) => workflow.workflowId).filter((workflowId) => !!workflowId) + ); + if (workflowIds.length === 0) { + throw new errors.BadRequestError( + `AI review template '${reviewer.aiConfigTemplateId}' has no valid workflowId values` + ); + } + + for (const workflowId of workflowIds) { + aiReviewers.push({ + scorecardId: reviewer.scorecardId, + isMemberReview: false, + memberReviewerCount: null, + phaseId: phaseMap.get(reviewer.phaseName), + fixedAmount: reviewer.fixedAmount, + baseCoefficient: reviewer.baseCoefficient, + incrementalCoefficient: reviewer.incrementalCoefficient, + aiWorkflowId: workflowId, + shouldOpenOpportunity: _.isBoolean(reviewer.shouldOpenOpportunity) + ? reviewer.shouldOpenOpportunity + : true, + }); + } + + if (!aiConfigsByTemplateId.has(reviewer.aiConfigTemplateId)) { + aiConfigsByTemplateId.set(reviewer.aiConfigTemplateId, { + templateId: reviewer.aiConfigTemplateId, + minPassingThreshold: template.minPassingThreshold, + mode: template.mode, + autoFinalize: template.autoFinalize, + formula: _.isNil(template.formula) ? {} : template.formula, + workflows: workflows + .filter((workflow) => !!workflow.workflowId) + .map((workflow) => ({ + workflowId: workflow.workflowId, + weightPercent: workflow.weightPercent, + isGating: !!workflow.isGating, + })), + }); + } + } + + challenge.reviewers = [...(challenge.reviewers || []), ...aiReviewers]; + return Array.from(aiConfigsByTemplateId.values()); + } + + async createAIReviewConfigsForChallengeCreation(challengeId, aiReviewConfigs, logDebugMessage) { + if (!challengeId || !Array.isArray(aiReviewConfigs) || aiReviewConfigs.length === 0) { + return; + } + + const token = await getM2MToken(); + const reviewsApiBaseUrl = _.trimEnd( + config.REVIEWS_API_URL || "https://api.topcoder-dev.com", + "/" + ); + + const url = `${reviewsApiBaseUrl}/v6/ai-review/configs`; + + for (const aiReviewConfig of aiReviewConfigs) { + const payload = { + challengeId, + minPassingThreshold: aiReviewConfig.minPassingThreshold, + mode: aiReviewConfig.mode, + autoFinalize: aiReviewConfig.autoFinalize, + formula: _.isNil(aiReviewConfig.formula) ? {} : aiReviewConfig.formula, + templateId: aiReviewConfig.templateId, + workflows: aiReviewConfig.workflows, + }; + + logDebugMessage( + `creating ai review config (challengeId=${challengeId}, templateId=${aiReviewConfig.templateId}, workflowCount=${_.get( + aiReviewConfig, + "workflows.length", + 0 + )})` + ); + + try { + await axios.post(url, payload, { + headers: { Authorization: `Bearer ${token}` }, + }); + } catch (err) { + if ( + _.get(err, "response.status") === HttpStatus.NOT_FOUND || + _.get(err, "response.status") === HttpStatus.BAD_REQUEST + ) { + throw new errors.BadRequestError( + `Failed to create AI review config for templateId '${aiReviewConfig.templateId}'` + ); + } + throw err; + } + } + } + + async getAIReviewTemplateById(templateId) { + const token = await getM2MToken(); + const reviewsApiBaseUrl = _.trimEnd( + config.REVIEWS_API_URL || "https://api.topcoder-dev.com", + "/" + ); + const url = `${reviewsApiBaseUrl}/v6/ai-review/templates/${templateId}`; + + try { + const response = await axios.get(url, { + headers: { Authorization: `Bearer ${token}` }, + }); + return response.data; + } catch (err) { + if (_.get(err, "response.status") === HttpStatus.NOT_FOUND) { + throw new errors.BadRequestError( + `AI review template with id: ${templateId} doesn't exist` + ); + } + + throw err; + } + } + + /** + * Add AI Screening phase for challenges with AI reviewers. + * AI screening phases are positioned after submission/checkpoint submission and allocated 4 hours by default. + * + * @param {Object} challenge challenge payload (mutated in-place) + * @param {Object} prisma Prisma client + * @param {Function} logDebugMessage optional logging function + */ + async addAIScreeningPhaseForChallenge(challenge, prisma, logDebugMessage = () => {}) { + if (!challenge || !challenge.phases || !Array.isArray(challenge.reviewers)) { + return; + } + + // Check if there are any AI reviewers + const hasAIReviewers = challenge.reviewers.some((reviewer) => !reviewer.isMemberReview && reviewer.aiWorkflowId); + + if (!hasAIReviewers) { + logDebugMessage("no AI reviewers found, skipping AI screening phase creation"); + return; + } + + // Find the regular submission phase + const submissionPhaseName = SUBMISSION_PHASE_PRIORITY.find((name) => + challenge.phases.some((phase) => phase.name === name) + ); + + const submissionPhase = submissionPhaseName + ? challenge.phases.find((phase) => phase.name === submissionPhaseName) + : null; + + // Find the checkpoint submission phase (if present) + const checkpointSubmissionPhase = challenge.phases.find( + (phase) => phase.name === CHECKPOINT_SUBMISSION_PHASE_NAME + ); + + const sourceSubmissionPhases = _.compact([checkpointSubmissionPhase, submissionPhase]); + if (sourceSubmissionPhases.length === 0) { + throw new errors.BadRequestError( + `Cannot add AI screening phase: no submission/checkpoint submission phase found in challenge` + ); + } + + // Get the AI Screening phase definition from the database + const { phaseDefinitionMap } = await phaseHelper.getPhaseDefinitionsAndMap(); + const aiScreeningPhaseDefEntry = Array.from(phaseDefinitionMap.entries()).find( + ([_, phase]) => phase.name === "AI Screening" + ); + + if (!aiScreeningPhaseDefEntry) { + throw new errors.BadRequestError( + `AI Screening phase definition not found in the system` + ); + } + + const [aiScreeningPhaseId, aiScreeningPhaseDef] = aiScreeningPhaseDefEntry; + + sourceSubmissionPhases.forEach((sourcePhase) => { + const aiScreeningPhaseExistsForSource = challenge.phases.some( + (phase) => phase.name === "AI Screening" && phase.predecessor === sourcePhase.phaseId + ); + + if (aiScreeningPhaseExistsForSource) { + logDebugMessage( + `AI screening phase already exists for predecessor=${sourcePhase.phaseId}, skipping creation` + ); + return; + } + + const reviewPhases = challenge.phases.filter( + (phase) => + phase.name && + (phase.name.toLowerCase().includes("review") || phase.name.toLowerCase().includes("screening")) && + phase.predecessor === sourcePhase.phaseId + ); + + const aiScreeningPhase = { + phaseId: aiScreeningPhaseId, + name: "AI Screening", + description: aiScreeningPhaseDef.description, + duration: 14400, // 4 hours in seconds + isOpen: false, + predecessor: sourcePhase.phaseId, + constraints: [], + scheduledStartDate: undefined, + scheduledEndDate: undefined, + actualStartDate: undefined, + actualEndDate: undefined, + }; + + // Ensure AI Screening is ordered between source submission and review (or screening) phases. + const firstReviewIndex = challenge.phases.indexOf(reviewPhases[0]); + const sourcePhaseIndex = challenge.phases.indexOf(sourcePhase); + if (firstReviewIndex >= 0) { + challenge.phases.splice(firstReviewIndex, 0, aiScreeningPhase); + } else if (sourcePhaseIndex >= 0) { + challenge.phases.splice(sourcePhaseIndex + 1, 0, aiScreeningPhase); + } else { + challenge.phases.push(aiScreeningPhase); + } + + // Re-link review phase(s) so they start after AI Screening instead of source submission. + reviewPhases.forEach((phase) => { + phase.predecessor = aiScreeningPhase.phaseId; + }); + + // Recalculate phase dates to keep timeline in sync + if (sourcePhase.scheduledEndDate) { + aiScreeningPhase.scheduledStartDate = sourcePhase.scheduledEndDate; + aiScreeningPhase.scheduledEndDate = moment(aiScreeningPhase.scheduledStartDate) + .add(aiScreeningPhase.duration, "seconds") + .toDate() + .toISOString(); + + logDebugMessage( + `AI screening phase dates calculated (predecessor=${sourcePhase.phaseId}, start=${aiScreeningPhase.scheduledStartDate}, end=${aiScreeningPhase.scheduledEndDate})` + ); + + reviewPhases.forEach((phase) => { + if (_.isNil(phase.actualStartDate)) { + phase.scheduledStartDate = aiScreeningPhase.scheduledEndDate; + if (phase.duration) { + phase.scheduledEndDate = moment(phase.scheduledStartDate) + .add(phase.duration, "seconds") + .toDate() + .toISOString(); + + logDebugMessage( + `Updated ${phase.name} phase dates (start=${phase.scheduledStartDate}, end=${phase.scheduledEndDate})` + ); + } + } + }); + } + + logDebugMessage( + `AI screening phase added (phaseId=${aiScreeningPhase.phaseId}, predecessor=${sourcePhase.phaseId}), updated ${reviewPhases.length} review predecessor(s)` + ); + }); + } + async validateChallengeUpdateRequest(currentUser, challenge, data, challengeResources) { if (process.env.LOCAL != "true") { await helper.ensureUserCanModifyChallenge(currentUser, challenge, challengeResources); diff --git a/src/common/helper.js b/src/common/helper.js index 74b19f8..995f49c 100644 --- a/src/common/helper.js +++ b/src/common/helper.js @@ -1505,6 +1505,31 @@ async function getChallengeSubmissions(challengeId) { return allSubmissions; } +/** + * Get AI review config for challenge. + * @param {String} challengeId the challenge id + * @returns {Promise} AI review config or null when not found + */ +async function getAIReviewConfigByChallengeId(challengeId) { + const token = await m2mHelper.getM2MToken(); + const reviewsApiBaseUrl = _.trimEnd( + config.REVIEWS_API_URL || "https://api.topcoder-dev.com", + "/" + ); + + try { + const result = await axios.get(`${reviewsApiBaseUrl}/v6/ai-review/configs/${challengeId}`, { + headers: { Authorization: `Bearer ${token}` }, + }); + return result.data || null; + } catch (err) { + if (_.get(err, "response.status") === HttpStatus.NOT_FOUND) { + return null; + } + throw err; + } +} + /** * Get review summations for a challenge * @param {String} challengeId the challenge ID @@ -1829,6 +1854,7 @@ module.exports = { getProjectIdByRoundId, getGroupById, getChallengeSubmissions, + getAIReviewConfigByChallengeId, getReviewSummations, getMemberById, createSelfServiceProject, diff --git a/src/common/phase-helper.js b/src/common/phase-helper.js index 9dfcaed..0cb8c65 100644 --- a/src/common/phase-helper.js +++ b/src/common/phase-helper.js @@ -8,6 +8,8 @@ const errors = require("./errors"); const timelineTemplateService = require("../services/TimelineTemplateService"); const prisma = require("../common/prisma").getClient(); +const SUBMISSION_PHASE_PRIORITY = ["Topgear Submission", "Topcoder Submission", "Submission"]; + class ChallengePhaseHelper { phaseDefinitionMap = {}; timelineTemplateMap = {}; @@ -98,9 +100,27 @@ class ChallengePhaseHelper { // to incorrectly push earlier phases forward. Sorting by template order prevents that. const orderIndex = new Map(); _.each(timelineTempate, (tplPhase, idx) => orderIndex.set(tplPhase.phaseId, idx)); + const submissionPhaseName = SUBMISSION_PHASE_PRIORITY.find((name) => + _.some(challengePhases, (phase) => phase.name === name) + ); + const submissionPhase = submissionPhaseName + ? _.find(challengePhases, (phase) => phase.name === submissionPhaseName) + : null; + const submissionOrderIndex = _.isNil(submissionPhase) + ? null + : orderIndex.get(submissionPhase.phaseId); const challengePhasesOrdered = _.sortBy( challengePhases, - (p) => orderIndex.get(p.phaseId) ?? Number.MAX_SAFE_INTEGER + (p) => { + const templateOrder = orderIndex.get(p.phaseId); + if (!_.isNil(templateOrder)) { + return templateOrder; + } + if (p.name === "AI Screening" && !_.isNil(submissionOrderIndex)) { + return submissionOrderIndex + 0.5; + } + return Number.MAX_SAFE_INTEGER; + } ); let fixedStartDate = undefined; @@ -159,6 +179,27 @@ class ChallengePhaseHelper { } return updatedPhase; }); + + const aiScreeningPhase = _.find(updatedPhases, (phase) => phase.name === "AI Screening"); + const updateSubmissionPhaseName = SUBMISSION_PHASE_PRIORITY.find((name) => + _.some(updatedPhases, (phase) => phase.name === name) + ); + const updateSubmissionPhase = updateSubmissionPhaseName + ? _.find(updatedPhases, (phase) => phase.name === updateSubmissionPhaseName) + : null; + if (!_.isNil(aiScreeningPhase) && !_.isNil(updateSubmissionPhase)) { + aiScreeningPhase.predecessor = updateSubmissionPhase.phaseId; + _.each(updatedPhases, (phase) => { + if ( + phase.name && + phase.name.toLowerCase().includes("review") && + phase.predecessor === updateSubmissionPhase.phaseId + ) { + phase.predecessor = aiScreeningPhase.phaseId; + } + }); + } + let iterativeReviewSet = false; for (let phase of updatedPhases) { if (_.isNil(phase.predecessor)) { diff --git a/src/common/project-helper.js b/src/common/project-helper.js index d7cabc7..4c34843 100644 --- a/src/common/project-helper.js +++ b/src/common/project-helper.js @@ -8,9 +8,35 @@ const { hasAdminRole } = require("./role-helper"); const errors = require("./errors"); const logger = require("./logger"); +/** + * Normalizes billing-account markup to the decimal format persisted on + * challenges. + * + * Legacy project-service responses can return whole percentage points (for + * example `50` for 50%), while newer billing-account records use decimal + * fractions (for example `0.58` for 58%). This helper preserves modern values + * and converts only legacy percentages. + * + * @param {unknown} rawMarkup Markup value returned by Projects API. + * @returns {number|null} Decimal markup or `null` when the input is empty or invalid. + */ +function normalizeBillingMarkup(rawMarkup) { + if (_.isNil(rawMarkup) || rawMarkup === "") { + return null; + } + + const markup = _.toNumber(rawMarkup); + if (!Number.isFinite(markup)) { + return null; + } + + return markup > 1 ? markup / 100 : markup; +} + class ProjectHelper { /** - * Get Project Details + * Get Project Details. + * Requests project members explicitly so caller membership can be validated. * @param {String} projectId the project id * @param {String} currentUser the user * @@ -23,6 +49,8 @@ class ProjectHelper { try { const res = await axios.get(url, { headers: { Authorization: `Bearer ${token}` }, + // projects-api-v6 omits members unless explicitly requested. + params: { fields: "members" }, }); logger.debug( `projectHelper.getProject: response status ${res.status} for project ${projectId}` @@ -78,16 +106,9 @@ class ProjectHelper { `projectHelper.getProjectBillingInformation: response status ${res.status} for project ${projectId}` ); - let markup = _.get(res, "data.markup", null) - ? _.toNumber(_.get(res, "data.markup", null)) - : null; - - if (markup && markup > 0) { - markup = (markup * 100) / 10000; - } return { billingAccountId: _.get(res, "data.tcBillingAccountId", null), - markup, + markup: normalizeBillingMarkup(_.get(res, "data.markup", null)), }; } catch (err) { const responseCode = _.get(err, "response.status"); diff --git a/src/routes.js b/src/routes.js index 9178920..a55bc46 100644 --- a/src/routes.js +++ b/src/routes.js @@ -7,6 +7,21 @@ const { SCOPES: { READ, CREATE, UPDATE, DELETE, ALL }, } = require("config"); +const CHALLENGE_EDITOR_ACCESS_ROLES = [ + constants.UserRoles.Admin, + constants.UserRoles.Copilot, + constants.UserRoles.Manager, + constants.UserRoles.TalentManager, +]; + +const CHALLENGE_EDITOR_ACCESS_ROLES_WITH_SELF_SERVICE = [ + constants.UserRoles.Admin, + constants.UserRoles.SelfServiceCustomer, + constants.UserRoles.Copilot, + constants.UserRoles.Manager, + constants.UserRoles.TalentManager, +]; + module.exports = { "/challenges": { get: { @@ -25,12 +40,7 @@ module.exports = { controller: "ChallengeController", method: "createChallenge", auth: "jwt", - access: [ - constants.UserRoles.Admin, - constants.UserRoles.SelfServiceCustomer, - constants.UserRoles.Copilot, - constants.UserRoles.Manager, - ], + access: CHALLENGE_EDITOR_ACCESS_ROLES_WITH_SELF_SERVICE, scopes: [CREATE, ALL], }, }, @@ -78,36 +88,21 @@ module.exports = { controller: "ChallengeController", method: "updateChallenge", auth: "jwt", - access: [ - constants.UserRoles.Admin, - constants.UserRoles.SelfServiceCustomer, - constants.UserRoles.Copilot, - constants.UserRoles.Manager, - ], + access: CHALLENGE_EDITOR_ACCESS_ROLES_WITH_SELF_SERVICE, scopes: [UPDATE, ALL], }, patch: { controller: "ChallengeController", method: "updateChallenge", auth: "jwt", - access: [ - constants.UserRoles.Admin, - constants.UserRoles.SelfServiceCustomer, - constants.UserRoles.Copilot, - constants.UserRoles.Manager, - ], + access: CHALLENGE_EDITOR_ACCESS_ROLES_WITH_SELF_SERVICE, scopes: [UPDATE, ALL], }, delete: { controller: "ChallengeController", method: "deleteChallenge", auth: "jwt", - access: [ - constants.UserRoles.Admin, - constants.UserRoles.Copilot, - constants.UserRoles.SelfServiceCustomer, - constants.UserRoles.Manager, - ], + access: CHALLENGE_EDITOR_ACCESS_ROLES_WITH_SELF_SERVICE, scopes: [DELETE, ALL], }, }, @@ -411,7 +406,7 @@ module.exports = { controller: "AttachmentController", method: "createAttachment", auth: "jwt", - access: [constants.UserRoles.Admin, constants.UserRoles.Copilot, constants.UserRoles.Manager], + access: CHALLENGE_EDITOR_ACCESS_ROLES, scopes: [CREATE, ALL], }, }, @@ -426,21 +421,21 @@ module.exports = { controller: "AttachmentController", method: "updateAttachment", auth: "jwt", - access: [constants.UserRoles.Admin, constants.UserRoles.Copilot, constants.UserRoles.Manager], + access: CHALLENGE_EDITOR_ACCESS_ROLES, scopes: [UPDATE, ALL], }, patch: { controller: "AttachmentController", method: "partiallyUpdateAttachment", auth: "jwt", - access: [constants.UserRoles.Admin, constants.UserRoles.Copilot, constants.UserRoles.Manager], + access: CHALLENGE_EDITOR_ACCESS_ROLES, scopes: [UPDATE, ALL], }, delete: { controller: "AttachmentController", method: "deleteAttachment", auth: "jwt", - access: [constants.UserRoles.Admin, constants.UserRoles.Copilot, constants.UserRoles.Manager], + access: CHALLENGE_EDITOR_ACCESS_ROLES, scopes: [DELETE, ALL], }, }, @@ -469,14 +464,14 @@ module.exports = { controller: "ChallengePhaseController", method: "partiallyUpdateChallengePhase", auth: "jwt", - access: [constants.UserRoles.Admin, constants.UserRoles.SelfServiceCustomer, constants.UserRoles.Copilot, constants.UserRoles.Manager], + access: CHALLENGE_EDITOR_ACCESS_ROLES_WITH_SELF_SERVICE, scopes: [UPDATE, ALL], }, delete: { controller: "ChallengePhaseController", method: "deleteChallengePhase", auth: "jwt", - access: [constants.UserRoles.Admin, constants.UserRoles.SelfServiceCustomer, constants.UserRoles.Copilot, constants.UserRoles.Manager], + access: CHALLENGE_EDITOR_ACCESS_ROLES_WITH_SELF_SERVICE, scopes: [DELETE, ALL], }, }, diff --git a/src/scripts/seed/ChallengeTrack.json b/src/scripts/seed/ChallengeTrack.json index 10ca9af..bf704a5 100644 --- a/src/scripts/seed/ChallengeTrack.json +++ b/src/scripts/seed/ChallengeTrack.json @@ -5,46 +5,50 @@ "isActive": true, "abbreviation": "Dev", "legacyId": 1, - "track": "DEVELOP", + "track": "DEVELOPMENT", + "isLegacy": false, "createdAt": "2025-03-10T13:08:02.378Z", "createdBy": "topcoder user", "updatedAt": "2025-03-10T13:08:02.378Z", "updatedBy": "topcoder user" }, { - "id": "c0f5d461-8219-4c14-878a-c3a3f356466d", - "name": "Data Science", - "isActive": true, - "abbreviation": "DS", - "legacyId": 2, - "track": "DATA_SCIENCE", - "createdAt": "2025-03-10T13:08:02.378Z", - "createdBy": "topcoder user", - "updatedAt": "2025-03-10T13:08:02.378Z", - "updatedBy": "topcoder user" + "id": "c0f5d461-8219-4c14-878a-c3a3f356466d", + "name": "Data Science", + "isActive": true, + "abbreviation": "DS", + "legacyId": 2, + "track": "DATA_SCIENCE", + "isLegacy": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", - "name": "Design", - "isActive": true, - "abbreviation": "Des", - "legacyId": 3, - "track": "DESIGN", - "createdAt": "2025-03-10T13:08:02.378Z", - "createdBy": "topcoder user", - "updatedAt": "2025-03-10T13:08:02.378Z", - "updatedBy": "topcoder user" + "id": "5fa04185-041f-49a6-bfd1-fe82533cd6c8", + "name": "Design", + "isActive": true, + "abbreviation": "Des", + "legacyId": 3, + "track": "DESIGN", + "isLegacy": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" }, { - "id": "36e6a8d0-7e1e-4608-a673-64279d99c115", - "name": "Quality Assurance", - "isActive": true, - "abbreviation": "QA", - "legacyId": 4, - "track": "QA", - "createdAt": "2025-03-10T13:08:02.378Z", - "createdBy": "topcoder user", - "updatedAt": "2025-03-10T13:08:02.378Z", - "updatedBy": "topcoder user" + "id": "36e6a8d0-7e1e-4608-a673-64279d99c115", + "name": "Quality Assurance", + "isActive": true, + "abbreviation": "QA", + "legacyId": 4, + "track": "QUALITY_ASSURANCE", + "isLegacy": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" } ] diff --git a/src/scripts/seed/ChallengeType.json b/src/scripts/seed/ChallengeType.json index 20ee5ad..39960b6 100644 --- a/src/scripts/seed/ChallengeType.json +++ b/src/scripts/seed/ChallengeType.json @@ -1,50 +1,255 @@ [ { - "id": "ecd58c69-238f-43a4-a4bb-d172719b9f31", - "name": "Task", - "description": "An assignment earned by a sole competitor to demonstrate a specific skill set.", - "isActive": true, - "isTask": true, - "abbreviation": "TSK", - "createdAt": "2025-03-10T13:08:02.378Z", - "createdBy": "topcoder user", - "updatedAt": "2025-03-10T13:08:02.378Z", - "updatedBy": "topcoder user" - }, - { - "id": "929bc408-9cf2-4b3e-ba71-adfbf693046c", - "name": "Marathon Match", - "description": "A match predicated on solving one problem using only what is deemed the best method", - "isActive": true, - "isTask": false, - "abbreviation": "MM", - "createdAt": "2025-03-10T13:08:02.378Z", - "createdBy": "topcoder user", - "updatedAt": "2025-03-10T13:08:02.378Z", - "updatedBy": "topcoder user" - }, - { - "id": "927abff4-7af9-4145-8ba1-577c16e64e2e", - "name": "Challenge", - "description": "A competition-driven entity with a host of score-based challenges and rankings.", - "isActive": true, - "isTask": false, - "abbreviation": "CH", - "createdAt": "2025-03-10T13:08:02.378Z", - "createdBy": "topcoder user", - "updatedAt": "2025-03-10T13:08:02.378Z", - "updatedBy": "topcoder user" - }, - { - "id": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", - "name": "First2Finish", - "description": "A contest in which the winner is set by being the first to submit a completed task.", - "isActive": true, - "isTask": false, - "abbreviation": "F2F", - "createdAt": "2025-03-10T13:08:02.378Z", - "createdBy": "topcoder user", - "updatedAt": "2025-03-10T13:08:02.378Z", - "updatedBy": "topcoder user" + "id": "ecd58c69-238f-43a4-a4bb-d172719b9f31", + "name": "Task", + "description": "An assignment earned by a sole competitor to demonstrate a specific skill set.", + "isActive": true, + "isTask": true, + "abbreviation": "TSK", + "isLegacy": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "929bc408-9cf2-4b3e-ba71-adfbf693046c", + "name": "Marathon Match", + "description": "A match predicated on solving one problem using only what is deemed the best method", + "isActive": true, + "isTask": false, + "abbreviation": "MM", + "isLegacy": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "927abff4-7af9-4145-8ba1-577c16e64e2e", + "name": "Challenge", + "description": "A competition-driven entity with a host of score-based challenges and rankings.", + "isActive": true, + "isTask": false, + "abbreviation": "CH", + "isLegacy": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "dc876fa4-ef2d-4eee-b701-b555fcc6544c", + "name": "First2Finish", + "description": "A contest in which the winner is set by being the first to submit a completed task.", + "isActive": true, + "isTask": false, + "abbreviation": "F2F", + "legacyId": 149, + "isLegacy": false, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "ac043fcf-fe36-46c6-8480-2e12bd5300cd", + "name": "SRM", + "description": "Legacy SRM subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "SRM", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "b02fdb46-8fad-4e91-aa81-14453f647ac9", + "name": "CODE", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "COD", + "legacyId": 150, + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "7e361ed7-4846-4e8e-8cfe-d747590d2611", + "name": "DESIGN", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LDES", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "0984ef6a-e1f9-46de-8425-43b8d29f55f5", + "name": "DEVELOPMENT", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LDEV", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "ca4681e8-a4be-44f5-9ada-0b8b43428233", + "name": "SPECIFICATION", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LSPC", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "2e3a9589-21c5-42fc-bc91-27077e171c45", + "name": "ARCHITECTURE", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LARC", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "c2e6b73d-26e8-46c6-9a86-9c22144e98f2", + "name": "TEST_SUITES", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LTST", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "f9570d73-4f26-4d3a-b804-7f6f2f4b85e9", + "name": "BUG_HUNT", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LBGH", + "legacyId": 120, + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "78253687-cc08-4aa8-b897-7a4f0c0b362d", + "name": "ASSEMBLY_COMPETITION", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LASM", + "legacyId": 125, + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "7d68e306-bc13-4c59-8481-d2b7f5d1c344", + "name": "UI_PROTOTYPE_COMPETITION", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LUIP", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "ce7fe807-fb83-4f9c-ac12-919adb89b411", + "name": "CONCEPTUALIZATION", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LCON", + "legacyId": 134, + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "65d2d4d4-a0e2-4f5d-94df-570f0b084439", + "name": "CONTENT_CREATION", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LCTC", + "legacyId": 146, + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "dfd9b687-b1c8-4ec2-8fd2-bfbf07fe2802", + "name": "RIA_BUILD_COMPETITION", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LRIA", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "9bd8bf24-b4e9-4231-8fbf-ab1474906a5a", + "name": "TEST_SCENARIOS", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LSCN", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" + }, + { + "id": "cf86f84c-c601-42c5-b55b-36d82a17818b", + "name": "COPILOT_POSTING", + "description": "Legacy develop subtype retained for historical stats references.", + "isActive": true, + "isTask": false, + "abbreviation": "LCOP", + "isLegacy": true, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" } ] diff --git a/src/scripts/seed/Phase.json b/src/scripts/seed/Phase.json index b89745e..49404ed 100644 --- a/src/scripts/seed/Phase.json +++ b/src/scripts/seed/Phase.json @@ -207,5 +207,16 @@ "createdBy": "topcoder user", "updatedAt": "2025-03-10T13:08:02.378Z", "updatedBy": "topcoder user" + }, + { + "id": "9f4e3b2a-7c1d-4e9f-b8a6-5d3c1a9f2b4e", + "name": "AI Screening", + "description": "AI Screening Phase", + "isOpen": true, + "duration": 14400, + "createdAt": "2025-03-10T13:08:02.378Z", + "createdBy": "topcoder user", + "updatedAt": "2025-03-10T13:08:02.378Z", + "updatedBy": "topcoder user" } ] diff --git a/src/services/ChallengePhaseService.js b/src/services/ChallengePhaseService.js index 4c6c4da..a019d8a 100644 --- a/src/services/ChallengePhaseService.js +++ b/src/services/ChallengePhaseService.js @@ -11,7 +11,7 @@ const logger = require("../common/logger"); const errors = require("../common/errors"); const constants = require("../../app-constants"); const { getReviewClient } = require("../common/review-prisma"); -const { indexChallengeAndPostToKafka } = require("./ChallengeService"); +const { indexChallengeAndPostToKafka, ensureAIScreeningCanBeClosed } = require("./ChallengeService"); const { getClient } = require("../common/prisma"); const prisma = getClient(); @@ -154,6 +154,84 @@ async function recalculateDependentPhaseDates(tx, challengeId, predecessorPhase, } } +async function shiftDependentPhaseDates(tx, challengeId, predecessorPhase, deltaMs, currentUserId) { + if (!predecessorPhase || !Number.isFinite(deltaMs) || deltaMs === 0) { + return; + } + + const phases = await tx.challengePhase.findMany({ + where: { challengeId }, + }); + + const successorsByPredecessor = new Map(); + for (const phase of phases) { + if (_.isNil(phase.predecessor)) { + continue; + } + const key = String(phase.predecessor); + if (!successorsByPredecessor.has(key)) { + successorsByPredecessor.set(key, []); + } + successorsByPredecessor.get(key).push(phase); + } + + const queue = [predecessorPhase]; + const visited = new Set(); + + while (queue.length > 0) { + const currentPhase = queue.shift(); + const predecessorKeys = buildPhaseIdentifiers(currentPhase); + + for (const predecessorKey of predecessorKeys) { + const successors = successorsByPredecessor.get(predecessorKey) || []; + for (const successor of successors) { + if (visited.has(successor.id)) { + continue; + } + + let successorForQueue = successor; + if (_.isNil(successor.actualStartDate)) { + const scheduledStartTime = successor.scheduledStartDate + ? new Date(successor.scheduledStartDate).getTime() + : Number.NaN; + const scheduledEndTime = successor.scheduledEndDate + ? new Date(successor.scheduledEndDate).getTime() + : Number.NaN; + + if (Number.isFinite(scheduledStartTime) && Number.isFinite(scheduledEndTime)) { + const desiredStartDate = new Date(scheduledStartTime + deltaMs); + const desiredEndDate = new Date(scheduledEndTime + deltaMs); + const startChanged = !datesAreSame(successor.scheduledStartDate, desiredStartDate); + const endChanged = !datesAreSame(successor.scheduledEndDate, desiredEndDate); + + if (startChanged || endChanged) { + successorForQueue = await tx.challengePhase.update({ + data: { + scheduledStartDate: desiredStartDate, + scheduledEndDate: desiredEndDate, + updatedBy: currentUserId, + }, + where: { + id: successor.id, + }, + }); + } else { + successorForQueue = { + ...successor, + scheduledStartDate: successor.scheduledStartDate, + scheduledEndDate: successor.scheduledEndDate, + }; + } + } + } + + visited.add(successor.id); + queue.push(successorForQueue); + } + } + } +} + async function hasPendingScorecardsForPhase(challengePhaseId) { if (!config.REVIEW_DB_URL) { logger.debug( @@ -353,6 +431,48 @@ async function hasPendingAppealResponsesForChallenge(challengeId) { return Number(count) > 0; } +async function hasPendingEscalationRequestsForChallenge(challengeId) { + if (!config.REVIEW_DB_URL) { + logger.debug( + `Skipping pending escalation request check for challenge ${challengeId} because REVIEW_DB_URL is not configured` + ); + return false; + } + + const reviewPrisma = getReviewClient(); + const reviewSchema = config.REVIEW_DB_SCHEMA; + const escalationTable = Prisma.raw(`"${reviewSchema}"."aiReviewDecisionEscalation"`); + const decisionTable = Prisma.raw(`"${reviewSchema}"."aiReviewDecision"`); + const submissionTable = Prisma.raw(`"${reviewSchema}"."submission"`); + + let rows; + try { + rows = await reviewPrisma.$queryRaw( + Prisma.sql` + SELECT COUNT(DISTINCT arde."id")::int AS count + FROM ${escalationTable} arde + INNER JOIN ${decisionTable} ard ON ard."id" = arde."aiReviewDecisionId" + WHERE arde."status" = 'PENDING_APPROVAL' + AND EXISTS ( + SELECT 1 + FROM ${submissionTable} s + WHERE s."challengeId" = ${challengeId} + AND s."id" = ard."submissionId" + ) + ` + ); + } catch (err) { + logger.error( + `Failed to check pending escalation requests for challenge ${challengeId}: ${err.message}`, + err + ); + throw err; + } + + const [{ count = 0 } = {}] = rows || []; + return Number(count) > 0; +} + async function checkChallengeExists(challengeId) { const challenge = await prisma.challenge.findUnique({ where: { id: challengeId } }); if (!challenge) { @@ -559,6 +679,17 @@ async function partiallyUpdateChallengePhase(currentUser, challengeId, id, data) if (isOpeningPhase) { const phaseName = data.name || challengePhase.name; await ensureRequiredResourcesBeforeOpeningPhase(challengeId, phaseName); + + // Check if this is the Appeals phase + const normalizedPhaseName = normalizePhaseName(phaseName); + if (normalizedPhaseName === "appeals") { + const hasPendingEscalations = await hasPendingEscalationRequestsForChallenge(challengeId); + if (hasPendingEscalations) { + throw new errors.BadRequestError( + "Cannot open Appeals phase because there are pending escalation requests that need to be resolved first" + ); + } + } } if (data["scheduledStartDate"] || data["scheduledEndDate"]) { @@ -597,6 +728,7 @@ async function partiallyUpdateChallengePhase(currentUser, challengeId, id, data) "isOpen" in data && data["isOpen"] === true && !challengePhase.isOpen; if (isClosingPhase) { const closingPhaseName = data.name || challengePhase.name; + const normalizedClosingPhaseName = normalizePhaseName(closingPhaseName); const pendingScorecards = await hasPendingScorecardsForPhase(challengePhase.id); if (pendingScorecards) { const phaseName = closingPhaseName || "phase"; @@ -605,13 +737,26 @@ async function partiallyUpdateChallengePhase(currentUser, challengeId, id, data) ); } if ( - String(closingPhaseName || "").toLowerCase() === "appeals response" && + normalizedClosingPhaseName === "review" && + (await hasPendingEscalationRequestsForChallenge(challengePhase.challengeId)) + ) { + throw new errors.BadRequestError( + "Cannot close Review phase because there are pending escalation requests that need to be resolved first" + ); + } + if ( + normalizedClosingPhaseName === "appeals response" && (await hasPendingAppealResponsesForChallenge(challengePhase.challengeId)) ) { throw new errors.BadRequestError( "Appeals Response phase can't be closed because there are still appeals that haven't been responded to" ); } + + if (normalizedClosingPhaseName === "ai screening") { + await ensureAIScreeningCanBeClosed(challengePhase.challengeId); + } + if (!("actualEndDate" in data) || _.isNil(data.actualEndDate)) { data.actualEndDate = new Date(); } @@ -753,8 +898,9 @@ async function partiallyUpdateChallengePhase(currentUser, challengeId, id, data) id: challengePhase.id, }, }); + let scheduleExtended = false; if (shouldAttemptSuccessorRecalc) { - const scheduleExtended = dateIsAfter( + scheduleExtended = dateIsAfter( updatedPhase.scheduledEndDate, originalScheduledEndDate ); @@ -762,6 +908,24 @@ async function partiallyUpdateChallengePhase(currentUser, challengeId, id, data) await recalculateDependentPhaseDates(tx, challengeId, updatedPhase, currentUserId); } } + if (isClosingPhase && !_.isNil(originalScheduledEndDate) && !_.isNil(updatedPhase.actualEndDate)) { + const shiftBaselineScheduledEndDate = + scheduleExtended && !_.isNil(updatedPhase.scheduledEndDate) + ? updatedPhase.scheduledEndDate + : originalScheduledEndDate; + const scheduledEndTime = new Date(shiftBaselineScheduledEndDate).getTime(); + const actualEndTime = new Date(updatedPhase.actualEndDate).getTime(); + + if (Number.isFinite(scheduledEndTime) && Number.isFinite(actualEndTime)) { + await shiftDependentPhaseDates( + tx, + challengeId, + updatedPhase, + actualEndTime - scheduledEndTime, + currentUserId + ); + } + } if (data["constraints"]) { for (const constraint of data["constraints"]) { if (constraint.id) { diff --git a/src/services/ChallengeService.js b/src/services/ChallengeService.js index db8c42b..f2a88d6 100644 --- a/src/services/ChallengeService.js +++ b/src/services/ChallengeService.js @@ -4,7 +4,7 @@ const _ = require("lodash"); const Joi = require("joi"); const { Prisma } = require("@prisma/client"); -const { v4: uuid } = require('uuid'); +const { v4: uuid } = require("uuid"); const config = require("config"); const xss = require("xss"); const helper = require("../common/helper"); @@ -105,6 +105,124 @@ const REVIEW_PHASE_NAMES = Object.freeze([ ]); const REVIEW_PHASE_NAME_SET = new Set(REVIEW_PHASE_NAMES); const REQUIRED_REVIEW_PHASE_NAME_SET = new Set([...REVIEW_PHASE_NAMES, "iterative review"]); +const AI_SCREENING_PHASE_NAME = "ai screening"; + +function normalizePhaseNameForComparison(phaseName) { + return _.toString(phaseName).replace(/-/g, " ").trim().toLowerCase(); +} + +function extractSubmissionId(submission) { + const candidate = + _.get(submission, "id") || + _.get(submission, "submissionId") || + _.get(submission, "legacySubmissionId"); + if (_.isNil(candidate)) { + return null; + } + const normalized = _.toString(candidate).trim(); + return normalized.length > 0 ? normalized : null; +} + +async function ensureChallengeHasAiReviewers(challengeId) { + const reviewers = await prisma.challengeReviewer.findMany({ + where: { challengeId, isMemberReview: false, aiWorkflowId: { not: null } }, + }); + + const hasAIReviewers = Array.isArray(reviewers) && reviewers.length > 0; + + if (!hasAIReviewers) { + throw new errors.BadRequestError(`Challenge does not have any AI reviewers assigned`); + } +} + +async function ensureAIScreeningCanBeClosed(challengeId) { + logger.debug(`Validating AI Screening closure for challenge ${challengeId}`); + await ensureChallengeHasAiReviewers(challengeId); + + const aiReviewConfig = await helper.getAIReviewConfigByChallengeId(challengeId); + if (!aiReviewConfig || !aiReviewConfig.id) { + logger.debug( + `AI Screening closure blocked for challenge ${challengeId}: AI review configuration not found`, + ); + throw new errors.BadRequestError( + "Cannot close AI Screening phase because AI review configuration could not be fetched", + ); + } + + logger.debug(`Found AI review configuration ${aiReviewConfig.id} for challenge ${challengeId}`); + + const reviewPrisma = getReviewClient(); + const reviewSchema = config.REVIEW_DB_SCHEMA; + const submissionTable = Prisma.raw(`"${reviewSchema}"."submission"`); + const aiReviewDecisionTable = Prisma.raw(`"${reviewSchema}"."aiReviewDecision"`); + + let submissions; + let decisions; + try { + [submissions, decisions] = await Promise.all([ + reviewPrisma.$queryRaw( + Prisma.sql` + SELECT "id", "legacySubmissionId" + FROM ${submissionTable} + WHERE "challengeId" = ${challengeId} + AND "status"::text <> 'DELETED' + `, + ), + reviewPrisma.$queryRaw( + Prisma.sql` + SELECT "submissionId", "isFinal" + FROM ${aiReviewDecisionTable} + WHERE "configId" = ${aiReviewConfig.id} + `, + ), + ]); + } catch (err) { + logger.error( + `Failed to fetch AI screening submissions/decisions for challenge ${challengeId}: ${err.message}`, + err, + ); + throw err; + } + + logger.debug( + `AI Screening data for challenge ${challengeId}: submissions=${(submissions || []).length}, decisions=${ + (decisions || []).length + }`, + ); + + const submissionIds = _.uniq( + (submissions || []).map((submission) => extractSubmissionId(submission)).filter((id) => !!id), + ); + if (submissionIds.length === 0) { + logger.debug(`AI Screening closure allowed for challenge ${challengeId}: no submissions found`); + return; + } + + const finalizedDecisionSubmissionIds = new Set( + (decisions || []) + .filter((decision) => decision && decision.isFinal === true) + .map((decision) => extractSubmissionId(decision)) + .filter((id) => !!id), + ); + + const hasPendingDecision = (decisions || []).some( + (decision) => decision && decision.isFinal !== true, + ); + const missingFinalizedSubmissions = submissionIds.filter( + (submissionId) => !finalizedDecisionSubmissionIds.has(submissionId), + ); + + if (hasPendingDecision || missingFinalizedSubmissions.length > 0) { + logger.debug( + `AI Screening closure blocked for challenge ${challengeId}: hasPendingDecision=${hasPendingDecision}, missingFinalizedSubmissions=${missingFinalizedSubmissions.length}`, + ); + throw new errors.BadRequestError( + "Cannot close AI Screening phase because AI reviews are not complete", + ); + } + + logger.debug(`AI Screening closure allowed for challenge ${challengeId}: all reviews finalized`); +} /** * Enrich skills data with full details from standardized skills API. @@ -157,30 +275,32 @@ async function enrichSkillsData(challenge, { skillLookup } = {}) { return lookup[skillId]; }; - challenge.skills = _.uniqBy(challenge.skills, (skill) => skill.skillId || skill.id).map((skill) => { - const skillId = skill.skillId || skill.id; - const found = getFromLookup(skillId); - if (found) { - const enrichedSkill = { - id: skillId, - name: found.name, - }; - - if (found.category) { - enrichedSkill.category = { - id: found.category.id, - name: found.category.name, + challenge.skills = _.uniqBy(challenge.skills, (skill) => skill.skillId || skill.id).map( + (skill) => { + const skillId = skill.skillId || skill.id; + const found = getFromLookup(skillId); + if (found) { + const enrichedSkill = { + id: skillId, + name: found.name, }; - } - return enrichedSkill; - } + if (found.category) { + enrichedSkill.category = { + id: found.category.id, + name: found.category.name, + }; + } - return { - id: skillId, - name: skill.name || "", - }; - }); + return enrichedSkill; + } + + return { + id: skillId, + name: skill.name || "", + }; + }, + ); } /** @@ -189,7 +309,7 @@ async function enrichSkillsData(challenge, { skillLookup } = {}) { */ async function enrichSkillsDataBulk(challenges) { const challengesWithSkills = challenges.filter( - (challenge) => Array.isArray(challenge.skills) && challenge.skills.length > 0 + (challenge) => Array.isArray(challenge.skills) && challenge.skills.length > 0, ); if (challengesWithSkills.length === 0) { @@ -198,7 +318,7 @@ async function enrichSkillsDataBulk(challenges) { const uniqueSkillIds = _(challengesWithSkills) .flatMap((challenge) => - challenge.skills.map((skill) => skill.skillId || skill.id).filter((id) => !_.isNil(id)) + challenge.skills.map((skill) => skill.skillId || skill.id).filter((id) => !_.isNil(id)), ) .uniq() .value(); @@ -223,7 +343,7 @@ async function enrichSkillsDataBulk(challenges) { } await Promise.all( - challengesWithSkills.map((challenge) => enrichSkillsData(challenge, { skillLookup: lookup })) + challengesWithSkills.map((challenge) => enrichSkillsData(challenge, { skillLookup: lookup })), ); } @@ -249,11 +369,11 @@ const includeReturnFields = { }, events: true, prizeSets: { - include: { + include: { prizes: { orderBy: { value: "desc" }, }, - } + }, }, reviewers: { orderBy: { createdAt: "asc" }, @@ -331,7 +451,7 @@ async function getDefaultReviewers(currentUser, criteria) { baseCoefficient: r.baseCoefficient, incrementalCoefficient: r.incrementalCoefficient, type: r.opportunityType, - aiWorkflowId: r.aiWorkflowId, + aiConfigTemplateId: r.aiConfigTemplateId, shouldOpenOpportunity: _.isBoolean(r.shouldOpenOpportunity) ? r.shouldOpenOpportunity : true, })); } @@ -365,15 +485,17 @@ async function setDefaultReviewers(currentUser, data) { incrementalCoefficient: Joi.number().min(0).max(1).optional().allow(null), type: Joi.when("isMemberReview", { is: true, - then: Joi.string().valid(..._.values(ReviewOpportunityTypeEnum)).insensitive(), + then: Joi.string() + .valid(..._.values(ReviewOpportunityTypeEnum)) + .insensitive(), otherwise: Joi.forbidden(), }), - aiWorkflowId: Joi.when("isMemberReview", { + aiConfigTemplateId: Joi.when("isMemberReview", { is: false, then: Joi.string().required(), otherwise: Joi.forbidden(), }), - }) + }), ) .default([]), }) @@ -397,7 +519,7 @@ async function setDefaultReviewers(currentUser, data) { }); if (!timelineTemplate) { throw new errors.NotFoundError( - `TimelineTemplate with id: ${value.timelineTemplateId} doesn't exist` + `TimelineTemplate with id: ${value.timelineTemplateId} doesn't exist`, ); } } @@ -433,7 +555,7 @@ async function setDefaultReviewers(currentUser, data) { timelineTemplateId: _.isNil(value.timelineTemplateId) ? null : value.timelineTemplateId, scorecardId: String(r.scorecardId), isMemberReview: !!r.isMemberReview, - aiWorkflowId:_.isNil(r.aiWorkflowId) ? null : r.aiWorkflowId, + aiConfigTemplateId: _.isNil(r.aiConfigTemplateId) ? null : r.aiConfigTemplateId, memberReviewerCount: _.isNil(r.memberReviewerCount) ? null : Number(r.memberReviewerCount), @@ -702,7 +824,7 @@ async function searchChallenges(currentUser, criteria) { } const arrayValue = Array.isArray(list) ? list : [list]; return _.uniq( - arrayValue.map((value) => normalizeGroupIdValue(value)).filter((value) => !_.isNil(value)) + arrayValue.map((value) => normalizeGroupIdValue(value)).filter((value) => !_.isNil(value)), ); }; @@ -733,7 +855,7 @@ async function searchChallenges(currentUser, criteria) { if (typeIds.length > 0) { includedTypeIds = _.concat( includedTypeIds, - typeIds.map((t) => t.id) + typeIds.map((t) => t.id), ); } } @@ -745,7 +867,7 @@ async function searchChallenges(currentUser, criteria) { if (trackIds.length > 0) { includedTrackIds = _.concat( includedTrackIds, - trackIds.map((t) => t.id) + trackIds.map((t) => t.id), ); } } @@ -1039,29 +1161,22 @@ async function searchChallenges(currentUser, criteria) { } } - const requestedMemberId = !_.isNil(criteria.memberId) - ? _.toString(criteria.memberId) - : null; + const requestedMemberId = !_.isNil(criteria.memberId) ? _.toString(criteria.memberId) : null; const currentUserMemberId = - currentUser && !_hasAdminRole && !_isMachineToken - ? _.toString(currentUser.userId) - : null; + currentUser && !_hasAdminRole && !_isMachineToken ? _.toString(currentUser.userId) : null; const memberIdForTaskFilter = requestedMemberId || currentUserMemberId; - const isSelfMemberSearch = - Boolean(requestedMemberId && currentUserMemberId && requestedMemberId === currentUserMemberId); - const shouldApplyGroupVisibilityFilter = - Boolean(currentUser && !_isMachineToken && !_hasAdminRole && !isSelfMemberSearch); + const isSelfMemberSearch = Boolean( + requestedMemberId && currentUserMemberId && requestedMemberId === currentUserMemberId, + ); + const shouldApplyGroupVisibilityFilter = Boolean( + currentUser && !_isMachineToken && !_hasAdminRole && !isSelfMemberSearch, + ); let hasProjectManagerAccessForSearch = false; - if ( - currentUser && - !_hasAdminRole && - !_isMachineToken && - !_.isNil(criteria.projectId) - ) { + if (currentUser && !_hasAdminRole && !_isMachineToken && !_.isNil(criteria.projectId)) { hasProjectManagerAccessForSearch = await helper.userHasProjectManagerAccess( criteria.projectId, - currentUser + currentUser, ); } @@ -1326,9 +1441,7 @@ async function searchChallenges(currentUser, criteria) { }); const sortDirection = sortOrderProp === "asc" ? 1 : -1; - summaryRecords.sort( - (a, b) => compareStatusSortValues(a.status, b.status) * sortDirection - ); + summaryRecords.sort((a, b) => compareStatusSortValues(a.status, b.status) * sortDirection); total = summaryRecords.length; const offset = (page - 1) * perPage; @@ -1376,7 +1489,7 @@ async function searchChallenges(currentUser, criteria) { }); if (taskSyncTargets.length > 0) { await Promise.all( - taskSyncTargets.map((challenge) => helper.syncTaskAssignmentFromResources(challenge)) + taskSyncTargets.map((challenge) => helper.syncTaskAssignmentFromResources(challenge)), ); } if (!currentUser) { @@ -1411,8 +1524,7 @@ async function searchChallenges(currentUser, criteria) { if (!currentUser.isMachine && !_hasAdminRole) { result.forEach((challenge) => { _.unset(challenge, "billing"); - const hasCurrentUserAccess = - _.get(challenge, "memberAccesses.length", 0) > 0; + const hasCurrentUserAccess = _.get(challenge, "memberAccesses.length", 0) > 0; if (!hasCurrentUserAccess) { _.unset(challenge, "privateDescription"); } @@ -1453,7 +1565,7 @@ async function searchChallenges(currentUser, criteria) { `SearchChallenges timings (page=${page}, perPage=${perPage}): ${JSON.stringify({ totalElapsedMs: Date.now() - searchTimingStart, marks: searchTimingMarks, - })}` + })}`, ); } @@ -1489,7 +1601,9 @@ searchChallenges.schema = { projectId: Joi.number().integer().positive(), forumId: Joi.number().integer(), legacyId: Joi.number().integer().positive(), - status: Joi.string().valid(..._.values(ChallengeStatusEnum)).insensitive(), + status: Joi.string() + .valid(..._.values(ChallengeStatusEnum)) + .insensitive(), group: Joi.string(), startDateStart: Joi.date(), startDateEnd: Joi.date(), @@ -1556,25 +1670,25 @@ async function createChallenge(currentUser, challenge, userToken) { logger.debug(`createChallenge: request payload validated ${buildLogContext()}`); const prizeTypeTmp = challengeHelper.validatePrizeSetsAndGetPrizeType(challenge.prizeSets); logger.debug( - `createChallenge: initial prize validation complete (prizeType=${prizeTypeTmp}) ${buildLogContext()}` + `createChallenge: initial prize validation complete (prizeType=${prizeTypeTmp}) ${buildLogContext()}`, ); if (challenge.legacy && challenge.legacy.selfService) { // if self-service, create a new project (what about if projectId is provided in the payload? confirm with business!) if (!challenge.projectId && challengeHelper.isProjectIdRequired(challenge.timelineTemplateId)) { const selfServiceProjectName = `Self service - ${currentUser.handle} - ${challenge.name}`; logger.info( - `createChallenge: creating self-service project (name=${selfServiceProjectName}) ${buildLogContext()}` + `createChallenge: creating self-service project (name=${selfServiceProjectName}) ${buildLogContext()}`, ); challenge.projectId = await helper.createSelfServiceProject( selfServiceProjectName, "N/A", config.NEW_SELF_SERVICE_PROJECT_TYPE, - userToken + userToken, ); logger.info( `createChallenge: self-service project created (projectId=${ challenge.projectId - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); } @@ -1605,21 +1719,20 @@ async function createChallenge(currentUser, challenge, userToken) { normalizedDirectProjectId = _.toNumber(directProjectId); if (!Number.isInteger(normalizedDirectProjectId)) { throw new errors.BadRequestError( - `Project with id: ${projectId} has invalid directProjectId: ${directProjectId}` + `Project with id: ${projectId} has invalid directProjectId: ${directProjectId}`, ); } } logger.debug( - `createChallenge: fetched project details (directProjectId=${normalizedDirectProjectId}) ${buildLogContext()}` + `createChallenge: fetched project details (directProjectId=${normalizedDirectProjectId}) ${buildLogContext()}`, ); logger.debug(`createChallenge: fetching billing information ${buildLogContext()}`); - const { billingAccountId, markup } = await projectHelper.getProjectBillingInformation( - projectId - ); + const { billingAccountId, markup } = + await projectHelper.getProjectBillingInformation(projectId); logger.debug( `createChallenge: billing information retrieved (hasAccount=${ billingAccountId !== null && billingAccountId !== undefined - }, markup=${markup}) ${buildLogContext()}` + }, markup=${markup}) ${buildLogContext()}`, ); _.set(challenge, "legacy.directProjectId", normalizedDirectProjectId); @@ -1629,7 +1742,7 @@ async function createChallenge(currentUser, challenge, userToken) { } else { _.set(challenge, "billing.billingAccountId", null); } - _.set(challenge, "billing.markup", markup || 0); + _.set(challenge, "billing.markup", _.isNil(markup) ? 0 : markup); } if (!_.isUndefined(_.get(challenge, "legacy.reviewType"))) { @@ -1651,8 +1764,8 @@ async function createChallenge(currentUser, challenge, userToken) { logger.debug( `createChallenge: resolved challenge track/type (trackId=${_.get(track, "id")}, typeId=${_.get( type, - "id" - )}) ${buildLogContext()}` + "id", + )}) ${buildLogContext()}`, ); if (_.get(type, "isTask")) { @@ -1676,7 +1789,7 @@ async function createChallenge(currentUser, challenge, userToken) { logger.debug( `createChallenge: validating provided phases (count=${ challenge.phases.length - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); await phaseHelper.validatePhases(challenge.phases); logger.debug(`createChallenge: provided phases validated ${buildLogContext()}`); @@ -1688,7 +1801,7 @@ async function createChallenge(currentUser, challenge, userToken) { logger.debug( `createChallenge: fetching default timeline template (trackId=${ challenge.trackId - }, typeId=${challenge.typeId}) ${buildLogContext()}` + }, typeId=${challenge.typeId}) ${buildLogContext()}`, ); const supportedTemplates = await ChallengeTimelineTemplateService.searchChallengeTimelineTemplates({ @@ -1699,19 +1812,19 @@ async function createChallenge(currentUser, challenge, userToken) { logger.debug( `createChallenge: retrieved ${ supportedTemplates.result.length - } supported templates ${buildLogContext()}` + } supported templates ${buildLogContext()}`, ); const challengeTimelineTemplate = supportedTemplates.result[0]; if (!challengeTimelineTemplate) { throw new errors.BadRequestError( - `The selected trackId ${challenge.trackId} and typeId: ${challenge.typeId} does not have a default timeline template. Please provide a timelineTemplateId` + `The selected trackId ${challenge.trackId} and typeId: ${challenge.typeId} does not have a default timeline template. Please provide a timelineTemplateId`, ); } challenge.timelineTemplateId = challengeTimelineTemplate.timelineTemplateId; logger.debug( `createChallenge: using timelineTemplateId=${ challenge.timelineTemplateId - } ${buildLogContext()}` + } ${buildLogContext()}`, ); } else { throw new errors.BadRequestError(`trackId and typeId are required to create a challenge`); @@ -1720,15 +1833,15 @@ async function createChallenge(currentUser, challenge, userToken) { logger.debug( `createChallenge: populating phases for challenge creation (templateId=${ challenge.timelineTemplateId - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); challenge.phases = await phaseHelper.populatePhasesForChallengeCreation( challenge.phases, challenge.startDate, - challenge.timelineTemplateId + challenge.timelineTemplateId, ); logger.debug( - `createChallenge: phases populated (count=${challenge.phases.length}) ${buildLogContext()}` + `createChallenge: phases populated (count=${challenge.phases.length}) ${buildLogContext()}`, ); // populate challenge terms @@ -1740,8 +1853,8 @@ async function createChallenge(currentUser, challenge, userToken) { `createChallenge: validating challenge terms (count=${_.get( challenge.terms, "length", - 0 - )}) ${buildLogContext()}` + 0, + )}) ${buildLogContext()}`, ); challenge.terms = await helper.validateChallengeTerms(challenge.terms || []); logger.debug(`createChallenge: challenge terms validated ${buildLogContext()}`); @@ -1758,6 +1871,7 @@ async function createChallenge(currentUser, challenge, userToken) { if (challenge.events == null) challenge.events = []; if (challenge.attachments == null) challenge.attachments = []; if (challenge.prizeSets == null) challenge.prizeSets = []; + const hasProvidedReviewers = Array.isArray(challenge.reviewers) && challenge.reviewers.length > 0; if (challenge.reviewers == null) challenge.reviewers = []; if (challenge.metadata == null) challenge.metadata = []; if (challenge.groups == null) challenge.groups = []; @@ -1776,83 +1890,29 @@ async function createChallenge(currentUser, challenge, userToken) { // The amountInCents field doesn't exist in the database schema const prizeType = challengeHelper.validatePrizeSetsAndGetPrizeType(challenge.prizeSets); logger.debug( - `createChallenge: final prize validation complete (prizeType=${prizeType}) ${buildLogContext()}` + `createChallenge: final prize validation complete (prizeType=${prizeType}) ${buildLogContext()}`, ); - // If reviewers not provided, apply defaults for this (typeId, trackId) - if (!challenge.reviewers || challenge.reviewers.length === 0) { - if (challenge.typeId && challenge.trackId) { - logger.debug( - `createChallenge: loading default reviewers (trackId=${challenge.trackId}, typeId=${ - challenge.typeId - }) ${buildLogContext()}` - ); - const defaultReviewerWhere = { - typeId: challenge.typeId, - trackId: challenge.trackId, - }; - let defaultReviewers = []; - if (challenge.timelineTemplateId) { - defaultReviewers = await prisma.defaultChallengeReviewer.findMany({ - where: { - ...defaultReviewerWhere, - timelineTemplateId: challenge.timelineTemplateId, - }, - orderBy: { createdAt: "asc" }, - }); - } - if (_.isEmpty(defaultReviewers)) { - defaultReviewers = await prisma.defaultChallengeReviewer.findMany({ - where: { - ...defaultReviewerWhere, - timelineTemplateId: null, - }, - orderBy: { createdAt: "asc" }, - }); - } - logger.debug( - `createChallenge: loaded ${defaultReviewers.length} default reviewers ${buildLogContext()}` - ); - if (defaultReviewers && defaultReviewers.length > 0) { - // Resolve phaseId by name - const phaseNames = _.uniq(defaultReviewers.map((r) => r.phaseName)); - // Map phase name -> Phase definition id (Phase.id), NOT ChallengePhase.id - const phaseMap = new Map(challenge.phases.map((p) => [p.name, p.phaseId])); - - // ensure all required names exist - const missing = phaseNames.filter((n) => !phaseMap.has(n)); - if (missing.length > 0) { - throw new BadRequestError( - `Default reviewers reference unknown phaseName(s): ${missing.join(", ")}` - ); - } + // If reviewers are not provided, apply defaults for this challenge. + const debugLog = (message) => logger.debug(`createChallenge: ${message} ${buildLogContext()}`); + await challengeHelper.applyDefaultMemberReviewersForChallengeCreation( + challenge, + prisma, + debugLog, + ); + const aiReviewConfigsForCreation = !hasProvidedReviewers + ? await challengeHelper.applyDefaultAIConfigForChallengeCreation(challenge, prisma, debugLog) + : []; - challenge.reviewers = defaultReviewers.map((r) => ({ - scorecardId: r.scorecardId, - isMemberReview: r.isMemberReview, - memberReviewerCount: r.memberReviewerCount, - // connect reviewers to the Phase model via its id - phaseId: phaseMap.get(r.phaseName), - fixedAmount: r.fixedAmount, - baseCoefficient: r.baseCoefficient, - incrementalCoefficient: r.incrementalCoefficient, - type: r.opportunityType, - aiWorkflowId: r.aiWorkflowId, - shouldOpenOpportunity: _.isBoolean(r.shouldOpenOpportunity) - ? r.shouldOpenOpportunity - : true, - })); - } - } - } + // AI screening phase will be added when challenge is launched (status changed to ACTIVE) const prismaModel = prismaHelper.convertChallengeSchemaToPrisma(currentUser, challenge); logger.info( `createChallenge: creating challenge record via prisma ${buildLogContext()} phaseCount=${_.get( challenge, "phases.length", - 0 - )} prizeSetCount=${_.get(challenge, "prizeSets.length", 0)}` + 0, + )} prizeSetCount=${_.get(challenge, "prizeSets.length", 0)}`, ); const ret = await prisma.challenge.create({ data: prismaModel, @@ -1860,6 +1920,14 @@ async function createChallenge(currentUser, challenge, userToken) { }); logger.info(`createChallenge: challenge record created (id=${ret.id}) ${buildLogContext()}`); + if (!hasProvidedReviewers) { + await challengeHelper.createAIReviewConfigsForChallengeCreation( + ret.id, + aiReviewConfigsForCreation, + debugLog, + ); + } + ret.overview = { totalPrizes: ret.overviewTotalPrizes }; // No conversion needed - values are already in dollars in the database @@ -1875,13 +1943,13 @@ async function createChallenge(currentUser, challenge, userToken) { logger.debug( `createChallenge: assigning CLIENT_MANAGER role to creator (challengeId=${ ret.id - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); await helper.createResource(ret.id, ret.createdBy, config.CLIENT_MANAGER_ROLE_ID); logger.debug( `createChallenge: CLIENT_MANAGER role assignment complete (challengeId=${ ret.id - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); } } else { @@ -1889,13 +1957,13 @@ async function createChallenge(currentUser, challenge, userToken) { logger.debug( `createChallenge: assigning MANAGER role to creator (challengeId=${ ret.id - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); await helper.createResource(ret.id, ret.createdBy, config.MANAGER_ROLE_ID); logger.debug( `createChallenge: MANAGER role assignment complete (challengeId=${ ret.id - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); } } @@ -1904,13 +1972,13 @@ async function createChallenge(currentUser, challenge, userToken) { logger.info( `createChallenge: posting bus event ${constants.Topics.ChallengeCreated} (challengeId=${ ret.id - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); await helper.postBusEvent(constants.Topics.ChallengeCreated, ret); logger.info( `createChallenge: bus event posted ${constants.Topics.ChallengeCreated} (challengeId=${ ret.id - }) ${buildLogContext()}` + }) ${buildLogContext()}`, ); return helper.removeNullProperties(ret); @@ -1965,7 +2033,7 @@ createChallenge.schema = { Joi.object().keys({ name: Joi.string().required(), value: Joi.required(), - }) + }), ) .unique((a, b) => a.name === b.name), timelineTemplateId: Joi.string(), // Joi.optionalId(), @@ -1980,27 +2048,29 @@ createChallenge.schema = { name: Joi.string(), value: Joi.number().integer().min(0), }) - .optional() + .optional(), ) .optional(), - }) + }), ), events: Joi.array().items( Joi.object().keys({ id: Joi.number().required(), name: Joi.string(), key: Joi.string(), - }) + }), ), discussions: Joi.array().items( Joi.object().keys({ id: Joi.optionalId(), name: Joi.string().required(), - type: Joi.string().required().valid(..._.values(DiscussionTypeEnum)), + type: Joi.string() + .required() + .valid(..._.values(DiscussionTypeEnum)), provider: Joi.string().required(), url: Joi.string(), options: Joi.array().items(Joi.object()), - }) + }), ), reviewers: Joi.array().items( Joi.object().keys({ @@ -2015,7 +2085,9 @@ createChallenge.schema = { phaseId: Joi.id().required(), type: Joi.when("isMemberReview", { is: true, - then: Joi.string().valid(..._.values(ReviewOpportunityTypeEnum)).insensitive(), + then: Joi.string() + .valid(..._.values(ReviewOpportunityTypeEnum)) + .insensitive(), otherwise: Joi.forbidden(), }), aiWorkflowId: Joi.when("isMemberReview", { @@ -2026,11 +2098,13 @@ createChallenge.schema = { fixedAmount: Joi.number().min(0).optional().allow(null), baseCoefficient: Joi.number().min(0).max(1).optional().allow(null), incrementalCoefficient: Joi.number().min(0).max(1).optional().allow(null), - }) + }), ), prizeSets: Joi.array().items( Joi.object().keys({ - type: Joi.string().valid(..._.values(PrizeSetTypeEnum)).required(), + type: Joi.string() + .valid(..._.values(PrizeSetTypeEnum)) + .required(), description: Joi.string(), prizes: Joi.array() .items( @@ -2038,11 +2112,11 @@ createChallenge.schema = { description: Joi.string(), type: Joi.string().required(), value: Joi.number().min(0).required(), - }) + }), ) .min(1) .required(), - }) + }), ), tags: Joi.array().items(Joi.string()), // tag names projectId: Joi.number().integer().positive(), @@ -2057,7 +2131,7 @@ createChallenge.schema = { ChallengeStatusEnum.ACTIVE, ChallengeStatusEnum.NEW, ChallengeStatusEnum.DRAFT, - ChallengeStatusEnum.APPROVED + ChallengeStatusEnum.APPROVED, ), groups: Joi.array().items(Joi.optionalId()).unique(), // gitRepoURLs: Joi.array().items(Joi.string().uri()), @@ -2065,7 +2139,7 @@ createChallenge.schema = { Joi.object().keys({ id: Joi.id(), roleId: Joi.id(), - }) + }), ), skills: Joi.array() .items( @@ -2073,7 +2147,7 @@ createChallenge.schema = { .keys({ id: Joi.id(), }) - .unknown(true) + .unknown(true), ) .optional(), }) @@ -2110,18 +2184,15 @@ async function getChallenge(currentUser, id, checkIfExists) { _.unset(challenge, "billing"); if (_.isEmpty(challenge.privateDescription)) { _.unset(challenge, "privateDescription"); - } else if ( - !taskInfo.isTask || - !taskInfo.isAssigned - ) { + } else if (!taskInfo.isTask || !taskInfo.isAssigned) { const hasProjectWriteAccess = await helper.userHasProjectWriteAccess( challenge.projectId, - currentUser + currentUser, ); if (!hasProjectWriteAccess) { const memberResources = await helper.listResourcesByMemberAndChallenge( currentUser.userId, - challenge.id + challenge.id, ); if (_.isEmpty(memberResources)) { _.unset(challenge, "privateDescription"); @@ -2197,7 +2268,7 @@ async function getChallengeStatistics(currentUser, id) { score: _.get( _.find(submission.review || [], (r) => r.metadata), "score", - 0 + 0, ), }); } @@ -2230,7 +2301,7 @@ function buildCombinedWinnerPayload(data = {}) { ...data.winners.map((winner) => ({ ...winner, type: _.toUpper(winner.type || PrizeSetTypeEnum.PLACEMENT), - })) + })), ); } if (Array.isArray(data.checkpointWinners)) { @@ -2238,7 +2309,7 @@ function buildCombinedWinnerPayload(data = {}) { ...data.checkpointWinners.map((winner) => ({ ...winner, type: _.toUpper(winner.type || PrizeSetTypeEnum.CHECKPOINT), - })) + })), ); } return combined; @@ -2251,13 +2322,13 @@ async function validateWinners(winners, challengeResources) { for (const winner of filteredWinners) { if (!_.find(registrants, (r) => _.toString(r.memberId) === _.toString(winner.userId))) { throw new errors.BadRequestError( - `Member with userId: ${winner.userId} is not registered on the challenge` + `Member with userId: ${winner.userId} is not registered on the challenge`, ); } const diffWinners = _.differenceWith(filteredWinners, [winner], _.isEqual); if (diffWinners.length + 1 !== filteredWinners.length) { throw new errors.BadRequestError( - `Duplicate member with placement: ${helper.toString(winner)}` + `Duplicate member with placement: ${helper.toString(winner)}`, ); } @@ -2270,7 +2341,7 @@ async function validateWinners(winners, challengeResources) { (placementExists.userId !== winner.userId || placementExists.handle !== winner.handle) ) { throw new errors.BadRequestError( - `Only one member can have a placement: ${winner.placement}` + `Only one member can have a placement: ${winner.placement}`, ); } @@ -2280,7 +2351,7 @@ async function validateWinners(winners, challengeResources) { }); if (memberExists && memberExists.placement !== winner.placement) { throw new errors.BadRequestError( - `The same member ${winner.userId} cannot have multiple placements` + `The same member ${winner.userId} cannot have multiple placements`, ); } } @@ -2322,14 +2393,14 @@ function validateTask(currentUser, challenge, data, challengeResources) { challengeResources, (r) => r.roleId === config.SUBMITTER_ROLE_ID && - _.toString(r.memberId) === _.toString(currentUser.userId) + _.toString(r.memberId) === _.toString(currentUser.userId), ).length > 0; if (assignedToCurrentUser) { throw new errors.ForbiddenError( `You are not allowed to ${ data.status === ChallengeStatusEnum.ACTIVE ? "lanuch" : "complete" - } task assigned to yourself. Please contact manager to operate.` + } task assigned to yourself. Please contact manager to operate.`, ); } } @@ -2347,7 +2418,7 @@ function prepareTaskCompletionData(challenge, challengeResources, data) { const submitters = _.filter( challengeResources, - (resource) => resource.roleId === config.SUBMITTER_ROLE_ID + (resource) => resource.roleId === config.SUBMITTER_ROLE_ID, ); if (!submitters || submitters.length === 0) { @@ -2432,13 +2503,13 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { projectId = _.get(challenge, "projectId"); logger.debug( - `updateChallenge(${challengeId}): requesting billing information for project ${projectId}` + `updateChallenge(${challengeId}): requesting billing information for project ${projectId}`, ); ({ billingAccountId, markup } = await projectHelper.getProjectBillingInformation(projectId)); logger.debug( `updateChallenge(${challengeId}): billing lookup complete (hasAccount=${ billingAccountId != null - })` + })`, ); if (billingAccountId && _.isUndefined(_.get(challenge, "billing.billingAccountId"))) { @@ -2448,7 +2519,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { } else { _.set(data, "billing.billingAccountId", null); } - _.set(data, "billing.markup", markup || 0); + _.set(data, "billing.markup", _.isNil(markup) ? 0 : markup); } // Make sure the user cannot change the direct project ID @@ -2479,7 +2550,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { logger.debug(`updateChallenge(${challengeId}): fetching challenge resources`); const challengeResources = await helper.getChallengeResources(challengeId); logger.debug( - `updateChallenge(${challengeId}): fetched ${challengeResources.length} challenge resources` + `updateChallenge(${challengeId}): fetched ${challengeResources.length} challenge resources`, ); logger.debug(`updateChallenge(${challengeId}): validating update payload`); @@ -2487,7 +2558,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { currentUser, challenge, data, - challengeResources + challengeResources, ); logger.debug(`updateChallenge(${challengeId}): payload validation complete`); validateTask(currentUser, challenge, data, challengeResources); @@ -2529,16 +2600,16 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { const workItemSummary = _.get( _.find(_.get(challenge, "metadata", []), (m) => m.name === "websitePurpose.description"), "value", - "N/A" + "N/A", ); logger.debug( - `updateChallenge(${challengeId}): activating self-service project ${projectId}` + `updateChallenge(${challengeId}): activating self-service project ${projectId}`, ); await helper.activateProject( projectId, currentUser, selfServiceProjectName, - workItemSummary + workItemSummary, ); sendActivationEmail = data.status === ChallengeStatusEnum.ACTIVE; @@ -2550,13 +2621,13 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { ...data, status: ChallengeStatusEnum.CANCELLED_PAYMENT_FAILED, cancelReason: `Failed to activate project. Error: ${e.message}. JSON: ${JSON.stringify( - e + e, )}`, }, - false + false, ); throw new errors.BadRequestError( - "Failed to activate the challenge! The challenge has been canceled!" + "Failed to activate the challenge! The challenge has been canceled!", ); } } @@ -2567,12 +2638,12 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { ) { try { logger.debug( - `updateChallenge(${challengeId}): updating self-service project info for project ${projectId}` + `updateChallenge(${challengeId}): updating self-service project info for project ${projectId}`, ); await helper.updateSelfServiceProjectInfo( projectId, data.endDate || challenge.endDate, - currentUser + currentUser, ); } catch (e) { logger.debug(`There was an error trying to update the project: ${e.message}`); @@ -2586,7 +2657,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { ) { try { logger.debug( - `updateChallenge(${challengeId}): cancelling self-service project ${challenge.projectId}` + `updateChallenge(${challengeId}): cancelling self-service project ${challenge.projectId}`, ); await helper.cancelProject(challenge.projectId, data.cancelReason, currentUser); } catch (e) { @@ -2609,7 +2680,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { challengeHelper.isProjectIdRequired(challenge.timelineTemplateId) ) { throw new errors.BadRequestError( - "Cannot Activate this project, it has no active billing account." + "Cannot Activate this project, it has no active billing account.", ); } } @@ -2627,7 +2698,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { ChallengeStatusEnum.CANCELLED_CLIENT_REQUEST, ChallengeStatusEnum.CANCELLED_ZERO_REGISTRATIONS, ], - data.status + data.status, ) ) { isChallengeBeingCancelled = true; @@ -2658,7 +2729,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { } else if (!currentUser.isMachine) { const existingDiscussion = _.find( _.get(challenge, "discussions", []), - (d) => d.id === data.discussions[i].id + (d) => d.id === data.discussions[i].id, ); if (existingDiscussion) { _.assign(data.discussions[i], _.pick(existingDiscussion, ["url", "options"])); @@ -2673,7 +2744,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { data.discussions[i].id = uuid(); data.discussions[i].name = data.discussions[i].name.substring( 0, - config.FORUM_TITLE_LENGTH_LIMIT + config.FORUM_TITLE_LENGTH_LIMIT, ); } } @@ -2694,7 +2765,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { finalTimelineTemplateId !== challenge.timelineTemplateId ) { throw new errors.BadRequestError( - `Cannot change the timelineTemplateId for challenges with status: ${finalStatus}` + `Cannot change the timelineTemplateId for challenges with status: ${finalStatus}`, ); } } else if (finalTimelineTemplateId !== challenge.timelineTemplateId) { @@ -2711,7 +2782,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { // Allow only M2M to update prizeSets for completed challenges if (!currentUser.isMachine || (challenge.task != null && challenge.task.isTask !== true)) { throw new errors.BadRequestError( - `Cannot update prizeSets for challenges with status: ${finalStatus}!` + `Cannot update prizeSets for challenges with status: ${finalStatus}!`, ); } } @@ -2736,7 +2807,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { challenge.status.indexOf(ChallengeStatusEnum.CANCELLED) > -1 ) { throw new BadRequestError( - `Challenge phase/start date can not be modified for COMPLETED or CANCELLED challenges.` + `Challenge phase/start date can not be modified for COMPLETED or CANCELLED challenges.`, ); } const newStartDate = data.startDate || challenge.startDate; @@ -2745,14 +2816,14 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { newPhases = await phaseHelper.populatePhasesForChallengeCreation( data.phases, newStartDate, - finalTimelineTemplateId + finalTimelineTemplateId, ); } else { newPhases = await phaseHelper.populatePhasesForChallengeUpdate( challenge.phases, data.phases, challenge.timelineTemplateId, - isChallengeBeingActivated + isChallengeBeingActivated, ); } phasesUpdated = true; @@ -2764,7 +2835,68 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { phasesUpdated = true; phasesForUpdate = _.cloneDeep(data.phases); } - const phasesForDates = phasesUpdated ? data.phases : challenge.phases; + const hasAIReviewers = (reviewers) => + Array.isArray(reviewers) && + reviewers.some( + (reviewer) => + reviewer && + reviewer.isMemberReview === false && + !_.isNil(reviewer.aiWorkflowId) && + _.toString(reviewer.aiWorkflowId).trim() !== "", + ); + + const hadAIReviewersBeforeUpdate = hasAIReviewers(challenge.reviewers); + const hasAIReviewersAfterUpdate = hasAIReviewers( + !_.isNil(data.reviewers) ? data.reviewers : challenge.reviewers, + ); + logger.debug( + `updateChallenge: AI reviewers - before=${hadAIReviewersBeforeUpdate}, after=${hasAIReviewersAfterUpdate}`, + ); + logger.debug( + `updateChallenge: reviewersPayloadPreview=${JSON.stringify( + (!_.isNil(data.reviewers) ? data.reviewers : challenge.reviewers) || [], + ).slice(0, 200)}`, + ); + const isActiveWithNewAIReviewers = + challenge.status === ChallengeStatusEnum.ACTIVE && + !hadAIReviewersBeforeUpdate && + hasAIReviewersAfterUpdate; + logger.debug(`updateChallenge: isActiveWithNewAIReviewers=${isActiveWithNewAIReviewers}`); + const shouldEnsureAIScreeningPhase = isStatusChangingToActive || isActiveWithNewAIReviewers; + logger.debug( + `updateChallenge: shouldEnsureAIScreeningPhase=${shouldEnsureAIScreeningPhase} isStatusChangingToActive=${isStatusChangingToActive}`, + ); + + // Add AI screening phase when activating a challenge, or when AI reviewers are newly added + // to an already ACTIVE challenge. + if (shouldEnsureAIScreeningPhase) { + logger.debug( + `updateChallenge: checking if AI screening phase needs to be added (challengeId=${challengeId})`, + ); + const tempChallenge = { + phases: _.cloneDeep(phasesForUpdate || challenge.phases), + reviewers: _.cloneDeep(data.reviewers || challenge.reviewers), + }; + logger.debug( + `updateChallenge: tempChallenge preview reviewers=${JSON.stringify( + tempChallenge.reviewers || [], + ).slice(0, 200)} phasesCount=${(tempChallenge.phases || []).length}`, + ); + const debugLogForAI = (message) => + logger.debug(`updateChallenge(AI screening): ${message} (challengeId=${challengeId})`); + await challengeHelper.addAIScreeningPhaseForChallenge(tempChallenge, prisma, debugLogForAI); + logger.info( + `updateChallenge: AI screening phase ensured (challengeId=${challengeId}) resultingPhases=${( + tempChallenge.phases || [] + ).length}`, + ); + // Update phasesForUpdate with the updated phases after AI screening addition + phasesForUpdate = tempChallenge.phases; + phasesUpdated = true; + data.phases = phasesForUpdate; + } + + let phasesForDates = phasesUpdated ? data.phases : challenge.phases; if (phasesUpdated || data.startDate) { const startSource = @@ -2823,13 +2955,13 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { logger.info( `User ${ currentUser.handle || currentUser.sub - } is not allowed to modify the task information on challenge ${challengeId}` + } is not allowed to modify the task information on challenge ${challengeId}`, ); data.task = challenge.task; logger.info( `Task information on challenge ${challengeId} is reset to ${JSON.stringify( - challenge.task - )}. Original data: ${JSON.stringify(data.task)}` + challenge.task, + )}. Original data: ${JSON.stringify(data.task)}`, ); } else { delete data.task; @@ -2844,8 +2976,8 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { logger.info( `Setting task.memberId to ${winnerMemberId} for challenge ${challengeId}. Task ${_.get( data, - "task" - )} - ${_.get(challenge, "task")}` + "task", + )} - ${_.get(challenge, "task")}`, ); if (winnerMemberId != null && _.get(data, "task.memberId") !== winnerMemberId) { @@ -2856,7 +2988,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { memberId: winnerMemberId, }; logger.warn( - `task.memberId mismatched with winner memberId. task.memberId is updated to ${winnerMemberId}` + `task.memberId mismatched with winner memberId. task.memberId is updated to ${winnerMemberId}`, ); } else { logger.info(`task ${challengeId} has no winner set yet.`); @@ -2881,19 +3013,19 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { if (!_.isEmpty(_.get(data, "task.memberId"))) { const registrants = _.filter( challengeResources, - (r) => r.roleId === config.SUBMITTER_ROLE_ID + (r) => r.roleId === config.SUBMITTER_ROLE_ID, ); if ( !_.find( registrants, - (r) => _.toString(r.memberId) === _.toString(_.get(data, "task.memberId")) + (r) => _.toString(r.memberId) === _.toString(_.get(data, "task.memberId")), ) ) { throw new errors.BadRequestError( `Member ${_.get( data, - "task.memberId" - )} is not a submitter resource of challenge ${challengeId}` + "task.memberId", + )} is not a submitter resource of challenge ${challengeId}`, ); } } @@ -2936,7 +3068,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { // Validate all referenced Phase ids exist const uniquePhaseIds = _.uniq( - data.reviewers.filter((r) => r && r.phaseId).map((r) => r.phaseId) + data.reviewers.filter((r) => r && r.phaseId).map((r) => r.phaseId), ); if (uniquePhaseIds.length > 0) { const foundPhases = await prisma.phase.findMany({ where: { id: { in: uniquePhaseIds } } }); @@ -2944,7 +3076,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { const missing = uniquePhaseIds.filter((id) => !foundIds.has(id)); if (missing.length > 0) { throw new errors.BadRequestError( - `Invalid reviewer.phaseId value(s); Phase not found: ${missing.join(", ")}` + `Invalid reviewer.phaseId value(s); Phase not found: ${missing.join(", ")}`, ); } } @@ -2974,8 +3106,8 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { const effectiveReviewers = Array.isArray(data.reviewers) ? data.reviewers : Array.isArray(challenge.reviewers) - ? challenge.reviewers - : []; + ? challenge.reviewers + : []; const reviewersMissingFields = []; effectiveReviewers.forEach((reviewer, index) => { @@ -2995,24 +3127,27 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { if (reviewersMissingFields.length > 0) { throw new errors.BadRequestError( `Cannot activate challenge; reviewers are missing required fields: ${reviewersMissingFields.join( - "; " - )}` + "; ", + )}`, ); } const reviewerPhaseIds = new Set( effectiveReviewers .filter((reviewer) => reviewer && reviewer.phaseId) - .map((reviewer) => String(reviewer.phaseId)) + .map((reviewer) => String(reviewer.phaseId)), ); if (reviewerPhaseIds.size === 0) { throw new errors.BadRequestError( - "Cannot activate a challenge without at least one reviewer configured" + "Cannot activate a challenge without at least one reviewer configured", ); } - const normalizePhaseName = (name) => String(name || "").trim().toLowerCase(); + const normalizePhaseName = (name) => + String(name || "") + .trim() + .toLowerCase(); const effectivePhases = (Array.isArray(phasesForUpdate) && phasesForUpdate.length > 0 ? phasesForUpdate @@ -3036,8 +3171,8 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { if (missingPhaseNames.size > 0) { throw new errors.BadRequestError( `Cannot activate challenge; missing reviewers for phase(s): ${Array.from( - missingPhaseNames - ).join(", ")}` + missingPhaseNames, + ).join(", ")}`, ); } } @@ -3045,7 +3180,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { // convert data to prisma models const updateData = prismaHelper.convertChallengeSchemaToPrisma( currentUser, - _.omit(data, ["cancelReason"]) + _.omit(data, ["cancelReason"]), ); updateData.updatedBy = _.toString(currentUser.userId); // reset createdBy @@ -3061,7 +3196,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { challengeId, phasesForUpdate, auditUserId, - originalChallengePhases + originalChallengePhases, ); } // drop nested data if updated @@ -3116,9 +3251,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { logger.warn(`Failed to generate payments for Task challenge ${challengeId}`); } } catch (err) { - logger.error( - `Error generating payments for Task challenge ${challengeId}: ${err.message}` - ); + logger.error(`Error generating payments for Task challenge ${challengeId}: ${err.message}`); } } // Re-fetch the challenge outside the transaction to ensure we publish @@ -3145,7 +3278,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { { handle: creator.handle, workItemName: updatedChallenge.name, - } + }, ); } if (sendActivationEmail) { @@ -3156,7 +3289,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { handle: creator.handle, workItemName: updatedChallenge.name, workItemUrl: `${config.SELF_SERVICE_APP_URL}/work-items/${updatedChallenge.id}`, - } + }, ); } if (sendCompletedEmail) { @@ -3167,7 +3300,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { handle: creator.handle, workItemName: updatedChallenge.name, workItemUrl: `${config.SELF_SERVICE_APP_URL}/work-items/${updatedChallenge.id}?tab=solutions`, - } + }, ); } if (sendRejectedEmail || data.cancelReason) { @@ -3178,7 +3311,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { { handle: creator.handle, workItemName: updatedChallenge.name, - } + }, ); } } @@ -3246,7 +3379,7 @@ updateChallenge.schema = { name: Joi.string().required(), value: Joi.required(), }) - .unknown(true) + .unknown(true), ) .unique((a, b) => a.name === b.name), timelineTemplateId: Joi.string().optional(), // changing this to update migrated challenges @@ -3266,11 +3399,11 @@ updateChallenge.schema = { name: Joi.string(), value: Joi.number().integer().min(0), }) - .optional() + .optional(), ) .optional(), }) - .unknown(true) + .unknown(true), ) .min(1) .optional(), @@ -3282,18 +3415,20 @@ updateChallenge.schema = { key: Joi.string(), }) .unknown(true) - .optional() + .optional(), ), discussions: Joi.array() .items( Joi.object().keys({ id: Joi.optionalId(), name: Joi.string().required(), - type: Joi.string().required().valid(..._.values(DiscussionTypeEnum)), + type: Joi.string() + .required() + .valid(..._.values(DiscussionTypeEnum)), provider: Joi.string().required(), url: Joi.string(), options: Joi.array().items(Joi.object()), - }) + }), ) .optional(), reviewers: Joi.array() @@ -3310,7 +3445,9 @@ updateChallenge.schema = { phaseId: Joi.id().required(), type: Joi.when("isMemberReview", { is: true, - then: Joi.string().valid(..._.values(ReviewOpportunityTypeEnum)).insensitive(), + then: Joi.string() + .valid(..._.values(ReviewOpportunityTypeEnum)) + .insensitive(), otherwise: Joi.forbidden(), }), aiWorkflowId: Joi.when("isMemberReview", { @@ -3321,7 +3458,7 @@ updateChallenge.schema = { fixedAmount: Joi.number().min(0).optional().allow(null), baseCoefficient: Joi.number().min(0).max(1).optional().allow(null), incrementalCoefficient: Joi.number().min(0).max(1).optional().allow(null), - }) + }), ) .optional(), startDate: Joi.date().iso(), @@ -3329,7 +3466,9 @@ updateChallenge.schema = { .items( Joi.object() .keys({ - type: Joi.string().valid(..._.values(PrizeSetTypeEnum)).required(), + type: Joi.string() + .valid(..._.values(PrizeSetTypeEnum)) + .required(), description: Joi.string(), prizes: Joi.array() .items( @@ -3337,12 +3476,12 @@ updateChallenge.schema = { description: Joi.string(), type: Joi.string().required(), value: Joi.number().min(0).required(), - }) + }), ) .min(1) .required(), }) - .unknown(true) + .unknown(true), ) .min(1), tags: Joi.array().items(Joi.string()), // tag names @@ -3353,7 +3492,9 @@ updateChallenge.schema = { allowedRegistrants: Joi.array().items(Joi.string().trim().lowercase()).optional(), }) .optional(), - status: Joi.string().valid(..._.values(ChallengeStatusEnum)).insensitive(), + status: Joi.string() + .valid(..._.values(ChallengeStatusEnum)) + .insensitive(), attachments: Joi.array().items( Joi.object().keys({ id: Joi.id(), @@ -3362,7 +3503,7 @@ updateChallenge.schema = { url: Joi.string().uri().required(), fileSize: Joi.fileSize(), description: Joi.string(), - }) + }), ), groups: Joi.array().items(Joi.optionalId()).unique(), // gitRepoURLs: Joi.array().items(Joi.string().uri()), @@ -3375,7 +3516,7 @@ updateChallenge.schema = { placement: Joi.number().integer().positive().required(), type: Joi.string().valid(..._.values(PrizeSetTypeEnum)), }) - .unknown(true) + .unknown(true), ) .optional(), checkpointWinners: Joi.array() @@ -3387,14 +3528,14 @@ updateChallenge.schema = { placement: Joi.number().integer().positive().required(), type: Joi.string().valid(..._.values(PrizeSetTypeEnum)), }) - .unknown(true) + .unknown(true), ) .optional(), terms: Joi.array().items( Joi.object().keys({ id: Joi.id(), roleId: Joi.id(), - }) + }), ), skills: Joi.array() .items( @@ -3402,7 +3543,7 @@ updateChallenge.schema = { .keys({ id: Joi.id(), }) - .unknown(true) + .unknown(true), ) .optional(), overview: Joi.any().forbidden(), @@ -3427,7 +3568,7 @@ async function sendNotifications(currentUser, challengeId) { handle: creator.handle, workItemName: challenge.name, workItemUrl: `${config.SELF_SERVICE_APP_URL}/work-items/${challenge.id}?tab=solutions`, - } + }, ); return { type: constants.SelfServiceNotificationTypes.WORK_COMPLETED }; } @@ -3486,8 +3627,8 @@ async function ensureScorecardChangeDoesNotConflict({ new Set( originalList .map((r) => (!_.isNil(r) && !_.isNil(r.scorecardId) ? String(r.scorecardId) : null)) - .filter((scorecardId) => !_.isNil(scorecardId)) - ) + .filter((scorecardId) => !_.isNil(scorecardId)), + ), ); if (originalScorecards.length === 0) { @@ -3498,12 +3639,12 @@ async function ensureScorecardChangeDoesNotConflict({ new Set( updatedList .map((r) => (!_.isNil(r) && !_.isNil(r.scorecardId) ? String(r.scorecardId) : null)) - .filter((scorecardId) => !_.isNil(scorecardId)) - ) + .filter((scorecardId) => !_.isNil(scorecardId)), + ), ); const removedScorecards = originalScorecards.filter( - (scorecardId) => !updatedScorecards.includes(scorecardId) + (scorecardId) => !updatedScorecards.includes(scorecardId), ); if (removedScorecards.length > 0) { @@ -3529,7 +3670,7 @@ async function ensureScorecardChangeDoesNotConflict({ if (!config.REVIEW_DB_URL) { logger.debug( - `Skipping scorecard change guard for challenge ${challengeId} because REVIEW_DB_URL is not configured` + `Skipping scorecard change guard for challenge ${challengeId} because REVIEW_DB_URL is not configured`, ); return; } @@ -3539,19 +3680,17 @@ async function ensureScorecardChangeDoesNotConflict({ reviewClient = getReviewClient(); } catch (error) { logger.warn( - `Unable to initialize review Prisma client for challenge ${challengeId}: ${error.message}` + `Unable to initialize review Prisma client for challenge ${challengeId}: ${error.message}`, ); throw new errors.ServiceUnavailableError( - "Cannot change the scorecard because review status could not be verified. Please try again later." + "Cannot change the scorecard because review status could not be verified. Please try again later.", ); } if (!reviewClient || typeof reviewClient.$queryRaw !== "function") { - logger.warn( - `Prisma review client does not support raw queries for challenge ${challengeId}` - ); + logger.warn(`Prisma review client does not support raw queries for challenge ${challengeId}`); throw new errors.ServiceUnavailableError( - "Cannot change the scorecard because review status could not be verified. Please try again later." + "Cannot change the scorecard because review status could not be verified. Please try again later.", ); } @@ -3576,7 +3715,7 @@ async function ensureScorecardChangeDoesNotConflict({ } const reviewPhaseKeysToCheck = Array.from(removedScorecardsByPhase.keys()).filter((phaseKey) => - openReviewPhaseNameByKey.has(phaseKey) + openReviewPhaseNameByKey.has(phaseKey), ); const reviewPhaseKeysSet = new Set(removedScorecardsByPhase.keys()); @@ -3600,9 +3739,7 @@ async function ensureScorecardChangeDoesNotConflict({ if (challengePhaseIdList.length > 0) { const reviewSchema = String(config.REVIEW_DB_SCHEMA || "").trim(); const reviewTableIdentifier = Prisma.raw( - reviewSchema - ? `"${reviewSchema.replace(/"/g, '""')}"."review"` - : '"review"' + reviewSchema ? `"${reviewSchema.replace(/"/g, '""')}"."review"` : '"review"', ); let blockingReviewRows = []; @@ -3616,10 +3753,10 @@ async function ensureScorecardChangeDoesNotConflict({ `; } catch (error) { logger.warn( - `Failed to query the review database for challenge ${challengeId}: ${error.message}` + `Failed to query the review database for challenge ${challengeId}: ${error.message}`, ); throw new errors.ServiceUnavailableError( - "Cannot change the scorecard because review status could not be verified. Please try again later." + "Cannot change the scorecard because review status could not be verified. Please try again later.", ); } @@ -3640,7 +3777,7 @@ async function ensureScorecardChangeDoesNotConflict({ const scorecardKey = `${phaseId}|${scorecardId}`; blockingCountByPhaseAndScorecard.set( scorecardKey, - (blockingCountByPhaseAndScorecard.get(scorecardKey) || 0) + countValue + (blockingCountByPhaseAndScorecard.get(scorecardKey) || 0) + countValue, ); } } @@ -3651,7 +3788,7 @@ async function ensureScorecardChangeDoesNotConflict({ const challengePhaseIds = Array.from(phaseIdToChallengePhaseIds.get(phaseKey) || []); if (challengePhaseIds.length === 0) { logger.debug( - `Skipping active phase scorecard guard for challenge ${challengeId} phase ${phaseKey} because no matching challenge phases were found` + `Skipping active phase scorecard guard for challenge ${challengeId} phase ${phaseKey} because no matching challenge phases were found`, ); continue; } @@ -3664,7 +3801,7 @@ async function ensureScorecardChangeDoesNotConflict({ if (activePhaseReviewCount > 0) { const phaseName = openReviewPhaseNameByKey.get(phaseKey) || "phase"; throw new BadRequestError( - `Cannot change the scorecard for phase '${phaseName}' because reviews are already in progress or completed` + `Cannot change the scorecard for phase '${phaseName}' because reviews are already in progress or completed`, ); } } @@ -3675,7 +3812,7 @@ async function ensureScorecardChangeDoesNotConflict({ if (challengePhaseIds.length === 0) { logger.debug( - `Skipping scorecard change guard for challenge ${challengeId} phase ${phaseKey} because no matching challenge phases were found` + `Skipping scorecard change guard for challenge ${challengeId} phase ${phaseKey} because no matching challenge phases were found`, ); continue; } @@ -3694,7 +3831,7 @@ async function ensureScorecardChangeDoesNotConflict({ if (conflictingReviews > 0) { throw new BadRequestError( - "Can't change the scorecard at this time because at least one review has already started with the old scorecard" + "Can't change the scorecard at this time because at least one review has already started with the old scorecard", ); } } @@ -3767,7 +3904,7 @@ function sanitizeChallenge(challenge) { } if (challenge.phases) { sanitized.phases = _.map(challenge.phases, (phase) => - _.pick(phase, ["phaseId", "duration", "scheduledStartDate", "constraints"]) + _.pick(phase, ["phaseId", "duration", "scheduledStartDate", "constraints"]), ); } if (challenge.prizeSets) { @@ -3789,7 +3926,7 @@ function sanitizeChallenge(challenge) { "shouldOpenOpportunity", "type", "aiWorkflowId", - ]) + ]), ); } if (challenge.events) { @@ -3797,12 +3934,12 @@ function sanitizeChallenge(challenge) { } if (challenge.winners) { sanitized.winners = _.map(challenge.winners, (winner) => - _.pick(winner, ["userId", "handle", "placement", "type"]) + _.pick(winner, ["userId", "handle", "placement", "type"]), ); } if (challenge.checkpointWinners) { sanitized.checkpointWinners = _.map(challenge.checkpointWinners, (winner) => - _.pick(winner, ["userId", "handle", "placement", "type"]) + _.pick(winner, ["userId", "handle", "placement", "type"]), ); } if (challenge.discussions) { @@ -3817,14 +3954,20 @@ function sanitizeChallenge(challenge) { } if (challenge.attachments) { sanitized.attachments = _.map(challenge.attachments, (attachment) => - _.pick(attachment, ["id", "name", "url", "fileSize", "description", "challengeId"]) + _.pick(attachment, ["id", "name", "url", "fileSize", "description", "challengeId"]), ); } return sanitized; } -async function syncChallengePhases(tx, challengeId, updatedPhases, auditUserId, originalPhases = []) { +async function syncChallengePhases( + tx, + challengeId, + updatedPhases, + auditUserId, + originalPhases = [], +) { if (!Array.isArray(updatedPhases)) { return; } @@ -3975,7 +4118,7 @@ async function deleteChallenge(currentUser, challengeId) { }); if (_.isNil(challenge) || _.isNil(challenge.id)) { throw new errors.NotFoundError( - `Challenge with id: ${challengeId} doesn't exist or is not in New status` + `Challenge with id: ${challengeId} doesn't exist or is not in New status`, ); } // ensure user can modify challenge @@ -4000,7 +4143,7 @@ async function advancePhase(currentUser, challengeId, data) { const machineOrAdmin = currentUser && (currentUser.isMachine || hasAdminRole(currentUser)); if (!machineOrAdmin) { throw new errors.ForbiddenError( - `Admin role or an M2M token is required to advance the challenge phase.` + `Admin role or an M2M token is required to advance the challenge phase.`, ); } const challenge = await prisma.challenge.findUnique({ @@ -4015,12 +4158,19 @@ async function advancePhase(currentUser, challengeId, data) { throw new errors.BadRequestError(`Challenge with id: ${challengeId} is not in ACTIVE status.`); } + const isClosingAIScreening = + data.operation === "close" && + normalizePhaseNameForComparison(data.phase) === AI_SCREENING_PHASE_NAME; + if (isClosingAIScreening) { + await ensureAIScreeningCanBeClosed(challenge.id); + } + const phaseAdvancerResult = await phaseAdvancer.advancePhase( challenge.id, challenge.legacyId, challenge.phases, data.operation, - data.phase + data.phase, ); const auditFields = { @@ -4036,7 +4186,7 @@ async function advancePhase(currentUser, challengeId, data) { prismaHelper.convertChallengePhaseSchema( { phases: phaseAdvancerResult.updatedPhases }, challengeData, - auditFields + auditFields, ); // Persist phases based on the raw updated phases array from PhaseAdvancer const newPhases = phaseAdvancerResult.updatedPhases; @@ -4106,7 +4256,7 @@ async function advancePhase(currentUser, challengeId, data) { } } catch (e) { logger.error( - `Failed to upsert phase ${p.name} (${p.phaseId}) for ${challengeId}: ${e.message}` + `Failed to upsert phase ${p.name} (${p.phaseId}) for ${challengeId}: ${e.message}`, ); throw e; } @@ -4131,7 +4281,7 @@ async function closeMarathonMatch(currentUser, challengeId) { const machineOrAdmin = currentUser && (currentUser.isMachine || hasAdminRole(currentUser)); if (!machineOrAdmin) { throw new errors.ForbiddenError( - `Admin role or an M2M token is required to close the marathon match.` + `Admin role or an M2M token is required to close the marathon match.`, ); } @@ -4146,24 +4296,26 @@ async function closeMarathonMatch(currentUser, challengeId) { if (!challenge.type || challenge.type.name !== "Marathon Match") { throw new errors.BadRequestError( - `Challenge with id: ${challengeId} is not a Marathon Match challenge.` + `Challenge with id: ${challengeId} is not a Marathon Match challenge.`, ); } const reviewSummations = await helper.getReviewSummations(challengeId); - const finalSummations = (reviewSummations || []).filter((summation) => summation.isFinal === true); + const finalSummations = (reviewSummations || []).filter( + (summation) => summation.isFinal === true, + ); const orderedSummations = _.orderBy( finalSummations, ["aggregateScore", "createdAt"], - ["desc", "asc"] + ["desc", "asc"], ); const winners = orderedSummations.map((summation, index) => { const parsedUserId = Number(summation.submitterId); if (!Number.isFinite(parsedUserId) || !Number.isInteger(parsedUserId)) { throw new errors.BadRequestError( - `Invalid submitterId ${summation.submitterId} for review summation winner` + `Invalid submitterId ${summation.submitterId} for review summation winner`, ); } @@ -4178,19 +4330,19 @@ async function closeMarathonMatch(currentUser, challengeId) { if (winners.length > 0) { const challengeResources = await helper.getChallengeResources(challengeId); const submitterResources = challengeResources.filter( - (resource) => resource.roleId === config.SUBMITTER_ROLE_ID + (resource) => resource.roleId === config.SUBMITTER_ROLE_ID, ); const missingResources = winners.filter( (winner) => !submitterResources.some( - (resource) => _.toString(resource.memberId) === _.toString(winner.userId) - ) + (resource) => _.toString(resource.memberId) === _.toString(winner.userId), + ), ); if (missingResources.length > 0) { throw new errors.BadRequestError( `Submitter resources are required to close Marathon Match challenge ${challengeId}. Missing submitter resources for userIds: ${missingResources .map((winner) => winner.userId) - .join(", ")}` + .join(", ")}`, ); } } @@ -4210,7 +4362,7 @@ async function closeMarathonMatch(currentUser, challengeId) { phases: updatedPhases, status: ChallengeStatusEnum.COMPLETED, }, - { emitEvent: true } + { emitEvent: true }, ); return updatedChallenge; @@ -4252,7 +4404,7 @@ async function indexChallengeAndPostToKafka(updatedChallenge, track, type) { // post bus event logger.debug( - `Post Bus Event: ${constants.Topics.ChallengeUpdated} ${JSON.stringify(updatedChallenge)}` + `Post Bus Event: ${constants.Topics.ChallengeUpdated} ${JSON.stringify(updatedChallenge)}`, ); prismaHelper.convertModelToResponse(updatedChallenge); @@ -4280,6 +4432,7 @@ module.exports = { getDefaultReviewers, setDefaultReviewers, indexChallengeAndPostToKafka, + ensureAIScreeningCanBeClosed, }; logger.buildService(module.exports); diff --git a/src/services/ChallengeTrackService.js b/src/services/ChallengeTrackService.js index 6f03104..51b125c 100644 --- a/src/services/ChallengeTrackService.js +++ b/src/services/ChallengeTrackService.js @@ -77,7 +77,7 @@ function getSearchFilter(criteria) { if (!_.isEmpty(criteria.abbreviation)) { ret.abbreviation = { equals: criteria.abbreviation }; } - if (_.isUndefined(criteria.isActive)) { + if (!_.isUndefined(criteria.isActive)) { ret.isActive = { equals: criteria.isActive }; } if (criteria.legacyId) { @@ -86,6 +86,7 @@ function getSearchFilter(criteria) { if (!_.isEmpty(criteria.track)) { ret.track = { equals: normalizeTrackValue(criteria.track) }; } + ret.isLegacy = { equals: _.isUndefined(criteria.isLegacy) ? false : criteria.isLegacy }; return ret; } @@ -98,7 +99,10 @@ searchChallengeTracks.schema = { isActive: Joi.boolean(), abbreviation: Joi.string(), legacyId: Joi.number().integer().positive(), - track: Joi.string().uppercase().valid(...supportedTrackValues), + track: Joi.string() + .uppercase() + .valid(...supportedTrackValues), + isLegacy: Joi.boolean(), }), }; @@ -127,7 +131,7 @@ async function checkTrackAbrv(abbreviation) { }); if (existingByAbbr.length > 0) { throw new errors.ConflictError( - `ChallengeTrack with abbreviation ${abbreviation} already exists` + `ChallengeTrack with abbreviation ${abbreviation} already exists`, ); } } @@ -144,6 +148,7 @@ async function createChallengeTrack(authUser, type) { const normalizedTrack = normalizeTrackValue(type.track); let ret = await prisma.challengeTrack.create({ data: { + isLegacy: false, ...type, track: normalizedTrack, createdBy: authUser.userId, @@ -166,7 +171,10 @@ createChallengeTrack.schema = { isActive: Joi.boolean().required(), abbreviation: Joi.string().required(), legacyId: Joi.number().integer().positive(), - track: Joi.string().uppercase().valid(...supportedTrackValues), + track: Joi.string() + .uppercase() + .valid(...supportedTrackValues), + isLegacy: Joi.boolean().default(false), }) .required(), }; @@ -215,6 +223,9 @@ async function fullyUpdateChallengeTrack(authUser, id, data) { } else { data.track = normalizeTrackValue(data.track); } + if (_.isUndefined(data.isLegacy)) { + data.isLegacy = false; + } data.updatedBy = authUser.userId; let ret = await prisma.challengeTrack.update({ where: { id }, @@ -237,7 +248,10 @@ fullyUpdateChallengeTrack.schema = { isActive: Joi.boolean().required(), abbreviation: Joi.string().required(), legacyId: Joi.number().integer().positive(), - track: Joi.string().uppercase().valid(...supportedTrackValues), + track: Joi.string() + .uppercase() + .valid(...supportedTrackValues), + isLegacy: Joi.boolean(), }) .required(), }; @@ -282,7 +296,10 @@ partiallyUpdateChallengeTrack.schema = { isActive: Joi.boolean(), abbreviation: Joi.string(), legacyId: Joi.number().integer().positive(), - track: Joi.string().uppercase().valid(...supportedTrackValues), + track: Joi.string() + .uppercase() + .valid(...supportedTrackValues), + isLegacy: Joi.boolean(), }) .required(), }; diff --git a/src/services/ChallengeTypeService.js b/src/services/ChallengeTypeService.js index 8508f75..59edd87 100644 --- a/src/services/ChallengeTypeService.js +++ b/src/services/ChallengeTypeService.js @@ -1,5 +1,5 @@ /** - * This service provides operations of challenge tracks. + * This service provides operations of challenge types. */ const _ = require("lodash"); const Joi = require("joi"); @@ -59,6 +59,10 @@ function getSearchFilter(criteria) { if (!_.isUndefined(criteria.isTask)) { ret.isTask = { equals: criteria.isTask }; } + if (!_.isUndefined(criteria.legacyId)) { + ret.legacyId = { equals: criteria.legacyId }; + } + ret.isLegacy = { equals: _.isUndefined(criteria.isLegacy) ? false : criteria.isLegacy }; return ret; } @@ -71,6 +75,8 @@ searchChallengeTypes.schema = { isActive: Joi.boolean(), isTask: Joi.boolean(), abbreviation: Joi.string(), + legacyId: Joi.number().integer().positive(), + isLegacy: Joi.boolean(), }), }; @@ -99,11 +105,33 @@ async function checkTypeAbrv(abbreviation) { }); if (existingByAbbr && existingByAbbr.length > 0) { throw new errors.ConflictError( - `ChallengeType with abbreviation: ${abbreviation} already exist` + `ChallengeType with abbreviation: ${abbreviation} already exist`, ); } } +/** + * Check challenge type exists by same legacyId. + * @param {Number} legacyId challenge type legacy id + * @param {String} [excludeId] optional type id to exclude from the lookup + * @throws conflict error if same legacy id exists + */ +async function checkTypeLegacyId(legacyId, excludeId) { + if (_.isNil(legacyId)) { + return; + } + + const existingByLegacyId = await prisma.challengeType.findMany({ + where: { + legacyId, + ...(excludeId ? { id: { not: excludeId } } : {}), + }, + }); + if (existingByLegacyId && existingByLegacyId.length > 0) { + throw new errors.ConflictError(`ChallengeType with legacyId: ${legacyId} already exist`); + } +} + /** * Create challenge type. * @param {Object} authUser auth user info @@ -113,8 +141,10 @@ async function checkTypeAbrv(abbreviation) { async function createChallengeType(authUser, type) { await checkTypeName(type.name); await checkTypeAbrv(type.abbreviation); + await checkTypeLegacyId(type.legacyId); let ret = await prisma.challengeType.create({ data: { + isLegacy: false, ...type, createdBy: authUser.userId, updatedBy: authUser.userId, @@ -136,6 +166,8 @@ createChallengeType.schema = { isActive: Joi.boolean().required(), isTask: Joi.boolean(), abbreviation: Joi.string().required(), + legacyId: Joi.number().integer().positive(), + isLegacy: Joi.boolean().default(false), }) .required(), }; @@ -175,9 +207,18 @@ async function fullyUpdateChallengeType(authUser, id, data) { if (type.abbreviation.toLowerCase() !== data.abbreviation.toLowerCase()) { await checkTypeAbrv(data.abbreviation); } + if (type.legacyId !== data.legacyId) { + await checkTypeLegacyId(data.legacyId, id); + } if (_.isUndefined(data.description)) { data.description = null; } + if (_.isUndefined(data.legacyId)) { + data.legacyId = null; + } + if (_.isUndefined(data.isLegacy)) { + data.isLegacy = false; + } let ret = await prisma.challengeType.update({ data: { ...data, @@ -201,6 +242,8 @@ fullyUpdateChallengeType.schema = { isActive: Joi.boolean().required(), isTask: Joi.boolean(), abbreviation: Joi.string().required(), + legacyId: Joi.number().integer().positive(), + isLegacy: Joi.boolean(), }) .required(), }; @@ -220,6 +263,9 @@ async function partiallyUpdateChallengeType(authUser, id, data) { if (data.abbreviation && type.abbreviation.toLowerCase() !== data.abbreviation.toLowerCase()) { await checkTypeAbrv(data.abbreviation); } + if (!_.isUndefined(data.legacyId) && type.legacyId !== data.legacyId) { + await checkTypeLegacyId(data.legacyId, id); + } data.updatedBy = authUser.userId; let ret = await prisma.challengeType.update({ where: { id }, @@ -242,6 +288,8 @@ partiallyUpdateChallengeType.schema = { isActive: Joi.boolean(), isTask: Joi.boolean().default(false), abbreviation: Joi.string(), + legacyId: Joi.number().integer().positive(), + isLegacy: Joi.boolean(), }) .required(), }; diff --git a/src/services/DefaultChallengeReviewerService.js b/src/services/DefaultChallengeReviewerService.js index 694b2d5..cb5a0c5 100644 --- a/src/services/DefaultChallengeReviewerService.js +++ b/src/services/DefaultChallengeReviewerService.js @@ -262,8 +262,8 @@ function normalizePayload(data = {}, isPartial = false) { } else if (!isPartial && _.isNil(data.opportunityType)) { normalized.opportunityType = null; } - if (shouldAssign(data.aiWorkflowId)) { - normalized.aiWorkflowId = data.aiWorkflowId; + if (shouldAssign(data.aiConfigTemplateId)) { + normalized.aiConfigTemplateId = data.aiConfigTemplateId; } if (shouldAssign(data.shouldOpenOpportunity)) { normalized.shouldOpenOpportunity = data.shouldOpenOpportunity; @@ -338,7 +338,7 @@ createDefaultChallengeReviewer.schema = { baseCoefficient: Joi.number().min(0).max(1).allow(null), incrementalCoefficient: Joi.number().min(0).max(1).allow(null), opportunityType: Joi.string().valid(..._.values(ReviewOpportunityTypeEnum)).insensitive(), - aiWorkflowId: Joi.when("isMemberReview", { + aiConfigTemplateId: Joi.when("isMemberReview", { is: false, then: Joi.string().required(), otherwise: Joi.valid(null), @@ -421,7 +421,7 @@ fullyUpdateDefaultChallengeReviewer.schema = { baseCoefficient: Joi.number().min(0).max(1).allow(null), incrementalCoefficient: Joi.number().min(0).max(1).allow(null), opportunityType: Joi.string().valid(..._.values(ReviewOpportunityTypeEnum)).insensitive(), - aiWorkflowId: Joi.when("isMemberReview", { + aiConfigTemplateId: Joi.when("isMemberReview", { is: false, then: Joi.string().required(), otherwise: Joi.valid(null), @@ -524,7 +524,7 @@ partiallyUpdateDefaultChallengeReviewer.schema = { .valid(..._.values(ReviewOpportunityTypeEnum)) .insensitive() .allow(null), - aiWorkflowId: Joi.string(), + aiConfigTemplateId: Joi.string(), shouldOpenOpportunity: Joi.boolean(), }) .required(), diff --git a/test/testHelper.js b/test/testHelper.js index c480bc6..cfe77ae 100644 --- a/test/testHelper.js +++ b/test/testHelper.js @@ -58,7 +58,7 @@ async function createData () { name: `type-${new Date().getTime()}`, description: 'desc', isActive: true, - track: 'DEVELOP', + track: 'DEVELOPMENT', abbreviation: 'abbr', createdBy: testUserId, updatedBy: testUserId diff --git a/test/unit/ChallengePhaseService.test.js b/test/unit/ChallengePhaseService.test.js index 89631b5..c828f44 100644 --- a/test/unit/ChallengePhaseService.test.js +++ b/test/unit/ChallengePhaseService.test.js @@ -227,6 +227,90 @@ describe('challenge phase service unit tests', () => { actualEndMs.should.be.at.most(after.getTime()) }) + it('partially update challenge phase - closing shifts successor schedules to actual end date', async () => { + const aiScreeningTemplateId = uuid() + const aiScreeningPhaseId = uuid() + const submissionStartDate = new Date('2025-03-01T00:00:00.000Z') + const submissionScheduledEndDate = new Date('2025-03-03T00:00:00.000Z') + const aiScreeningScheduledStartDate = new Date('2025-03-03T00:00:00.000Z') + const aiScreeningScheduledEndDate = new Date('2025-03-04T00:00:00.000Z') + + await prisma.phase.create({ + data: { + id: aiScreeningTemplateId, + name: `AI Screening ${Date.now()}`, + description: 'ai screening test phase', + isOpen: true, + duration: 86400, + createdBy: 'admin', + updatedBy: 'admin' + } + }) + + await prisma.challengePhase.update({ + where: { id: data.challengePhase2Id }, + data: { + isOpen: true, + actualStartDate: submissionStartDate, + actualEndDate: null, + scheduledStartDate: submissionStartDate, + scheduledEndDate: submissionScheduledEndDate + } + }) + + await prisma.challengePhase.create({ + data: { + id: aiScreeningPhaseId, + challengeId: data.challenge.id, + phaseId: aiScreeningTemplateId, + name: 'AI Screening', + duration: 86400, + predecessor: data.challengePhase2Id, + scheduledStartDate: aiScreeningScheduledStartDate, + scheduledEndDate: aiScreeningScheduledEndDate, + createdBy: 'admin', + updatedBy: 'admin' + } + }) + + try { + const before = new Date() + const challengePhase = await service.partiallyUpdateChallengePhase( + authUser, + data.challenge.id, + data.challengePhase2Id, + { + isOpen: false + } + ) + const after = new Date() + + const successorPhase = await prisma.challengePhase.findUnique({ + where: { id: aiScreeningPhaseId } + }) + + should.equal(challengePhase.isOpen, false) + should.exist(successorPhase) + + const actualEndMs = new Date(challengePhase.actualEndDate).getTime() + const successorStartMs = new Date(successorPhase.scheduledStartDate).getTime() + const successorEndMs = new Date(successorPhase.scheduledEndDate).getTime() + const aiScreeningDurationMs = aiScreeningScheduledEndDate.getTime() - aiScreeningScheduledStartDate.getTime() + + actualEndMs.should.be.at.least(before.getTime()) + actualEndMs.should.be.at.most(after.getTime()) + successorStartMs.should.equal(actualEndMs) + successorEndMs.should.equal(actualEndMs + aiScreeningDurationMs) + } finally { + await prisma.challengePhase.delete({ + where: { id: aiScreeningPhaseId } + }) + await prisma.phase.delete({ + where: { id: aiScreeningTemplateId } + }) + } + }) + it('partially update challenge phase - reopening clears actual end date and sets start date', async () => { const previousEndDate = new Date() await prisma.challengePhase.update({ diff --git a/test/unit/ChallengeRoutes.test.js b/test/unit/ChallengeRoutes.test.js new file mode 100644 index 0000000..81dedb7 --- /dev/null +++ b/test/unit/ChallengeRoutes.test.js @@ -0,0 +1,35 @@ +const { expect } = require("chai"); + +const constants = require("../../app-constants"); +const routes = require("../../src/routes"); + +describe("Challenge route access", () => { + const talentManagerRoles = [ + constants.UserRoles.TalentManager, + ]; + + const challengeEditRoutes = [ + ["/challenges", "post"], + ["/challenges/:challengeId", "put"], + ["/challenges/:challengeId", "patch"], + ["/challenges/:challengeId", "delete"], + ["/challenges/:challengeId/attachments", "post"], + ["/challenges/:challengeId/attachments/:attachmentId", "put"], + ["/challenges/:challengeId/attachments/:attachmentId", "patch"], + ["/challenges/:challengeId/attachments/:attachmentId", "delete"], + ["/challenges/:challengeId/phases/:id", "patch"], + ["/challenges/:challengeId/phases/:id", "delete"], + ]; + + it("allows talent manager roles on challenge create and edit routes", () => { + challengeEditRoutes.forEach(([path, method]) => { + const accessRoles = routes[path][method].access || []; + + talentManagerRoles.forEach((role) => { + expect(accessRoles, `${method.toUpperCase()} ${path} should allow ${role}`).to.include( + role, + ); + }); + }); + }); +}); diff --git a/test/unit/ChallengeService.test.js b/test/unit/ChallengeService.test.js index 3bdcca6..d070454 100644 --- a/test/unit/ChallengeService.test.js +++ b/test/unit/ChallengeService.test.js @@ -14,6 +14,7 @@ const chai = require('chai') const constants = require('../../app-constants') const service = require('../../src/services/ChallengeService') const helper = require('../../src/common/helper') +const challengeHelper = require('../../src/common/challenge-helper') const projectHelper = require('../../src/common/project-helper') const testHelper = require('../testHelper') const { getClient, ChallengeStatusEnum, PrizeSetTypeEnum } = require('../../src/common/prisma') @@ -225,7 +226,7 @@ describe('challenge service unit tests', () => { const result = await service.createChallenge( { isMachine: true, sub: 'sub', userId: 'testuser' }, challengeData, - config.M2M_FULL_ACCESS_TOKEN + config.M2M_FULL_ACCESS_TOKEN || 'test-token' ) id2 = result.id should.equal(_.get(result, 'legacy.directProjectId'), 33541) @@ -234,6 +235,115 @@ describe('challenge service unit tests', () => { } }) + it('create challenge applies default ai configs when reviewers are not provided', async () => { + const challengeData = _.cloneDeep(testChallengeData) + challengeData.discussions[0].type = 'CHALLENGE' + challengeData.prizeSets[0].type = 'PLACEMENT' + challengeData.status = 'NEW' + const originalGetProject = projectHelper.getProject + const originalApplyDefaultMemberReviewers = challengeHelper.applyDefaultMemberReviewersForChallengeCreation + const originalApplyDefaultAIConfig = challengeHelper.applyDefaultAIConfigForChallengeCreation + const originalCreateAIReviewConfigs = challengeHelper.createAIReviewConfigsForChallengeCreation + const aiReviewConfigs = [{ + templateId: 'template-1', + minPassingThreshold: 80, + mode: 'aggregated', + autoFinalize: false, + formula: {}, + workflows: [{ workflowId: 'wf-1', weightPercent: 100, isGating: true }] + }] + + let applyDefaultAICallCount = 0 + let createAIConfigCallCount = 0 + let createdChallengeId + let createdConfigs + let tempChallengeId + + projectHelper.getProject = async () => ({ directProjectId: '33541' }) + challengeHelper.applyDefaultMemberReviewersForChallengeCreation = async () => {} + challengeHelper.applyDefaultAIConfigForChallengeCreation = async () => { + applyDefaultAICallCount += 1 + return aiReviewConfigs + } + challengeHelper.createAIReviewConfigsForChallengeCreation = async (challengeIdArg, aiConfigsArg) => { + createAIConfigCallCount += 1 + createdChallengeId = challengeIdArg + createdConfigs = aiConfigsArg + } + + try { + const result = await service.createChallenge( + { isMachine: true, sub: 'sub', userId: 'testuser' }, + challengeData, + config.M2M_FULL_ACCESS_TOKEN || 'test-token' + ) + tempChallengeId = result.id + + should.equal(applyDefaultAICallCount, 1) + should.equal(createAIConfigCallCount, 1) + should.equal(createdChallengeId, result.id) + createdConfigs.should.deep.equal(aiReviewConfigs) + } finally { + projectHelper.getProject = originalGetProject + challengeHelper.applyDefaultMemberReviewersForChallengeCreation = originalApplyDefaultMemberReviewers + challengeHelper.applyDefaultAIConfigForChallengeCreation = originalApplyDefaultAIConfig + challengeHelper.createAIReviewConfigsForChallengeCreation = originalCreateAIReviewConfigs + + if (tempChallengeId) { + await prisma.challenge.delete({ where: { id: tempChallengeId } }) + } + } + }).timeout(10000) + + it('create challenge skips default ai configs when reviewers are provided', async () => { + const challengeData = _.cloneDeep(testChallengeData) + challengeData.discussions[0].type = 'CHALLENGE' + challengeData.prizeSets[0].type = 'PLACEMENT' + challengeData.status = 'NEW' + const originalGetProject = projectHelper.getProject + challengeData.reviewers = [{ + scorecardId: 'provided-scorecard', + isMemberReview: false, + phaseId: data.phase.id, + aiWorkflowId: 'wf-provided' + }] + + const originalApplyDefaultAIConfig = challengeHelper.applyDefaultAIConfigForChallengeCreation + const originalCreateAIReviewConfigs = challengeHelper.createAIReviewConfigsForChallengeCreation + let applyDefaultAICalled = false + let createAIConfigCalled = false + let tempChallengeId + + projectHelper.getProject = async () => ({ directProjectId: '33541' }) + challengeHelper.applyDefaultAIConfigForChallengeCreation = async () => { + applyDefaultAICalled = true + return [] + } + challengeHelper.createAIReviewConfigsForChallengeCreation = async () => { + createAIConfigCalled = true + } + + try { + const result = await service.createChallenge( + { isMachine: true, sub: 'sub', userId: 'testuser' }, + challengeData, + config.M2M_FULL_ACCESS_TOKEN || 'test-token' + ) + tempChallengeId = result.id + + should.equal(applyDefaultAICalled, false) + should.equal(createAIConfigCalled, false) + } finally { + projectHelper.getProject = originalGetProject + challengeHelper.applyDefaultAIConfigForChallengeCreation = originalApplyDefaultAIConfig + challengeHelper.createAIReviewConfigsForChallengeCreation = originalCreateAIReviewConfigs + + if (tempChallengeId) { + await prisma.challenge.delete({ where: { id: tempChallengeId } }) + } + } + }).timeout(10000) + it('create challenge - type not found', async () => { const challengeData = _.clone(testChallengeData) challengeData.typeId = notFoundId diff --git a/test/unit/ChallengeTrackService.test.js b/test/unit/ChallengeTrackService.test.js index cebd4ec..bbe32b2 100644 --- a/test/unit/ChallengeTrackService.test.js +++ b/test/unit/ChallengeTrackService.test.js @@ -2,40 +2,40 @@ * Unit tests of challenge track service */ -require('../../app-bootstrap') -const { v4: uuid } = require('uuid') -const chai = require('chai') +require("../../app-bootstrap"); +const { v4: uuid } = require("uuid"); +const chai = require("chai"); -const service = require('../../src/services/ChallengeTrackService') -const prisma = require('../../src/common/prisma').getClient() +const service = require("../../src/services/ChallengeTrackService"); +const prisma = require("../../src/common/prisma").getClient(); -const should = chai.should() +const should = chai.should(); -describe('challenge track service unit tests', () => { - let originalFindMany - let originalCreate - let originalFindUnique - let originalUpdate +describe("challenge track service unit tests", () => { + let originalFindMany; + let originalCreate; + let originalFindUnique; + let originalUpdate; beforeEach(() => { - originalFindMany = prisma.challengeTrack.findMany - originalCreate = prisma.challengeTrack.create - originalFindUnique = prisma.challengeTrack.findUnique - originalUpdate = prisma.challengeTrack.update - }) + originalFindMany = prisma.challengeTrack.findMany; + originalCreate = prisma.challengeTrack.create; + originalFindUnique = prisma.challengeTrack.findUnique; + originalUpdate = prisma.challengeTrack.update; + }); afterEach(() => { - prisma.challengeTrack.findMany = originalFindMany - prisma.challengeTrack.create = originalCreate - prisma.challengeTrack.findUnique = originalFindUnique - prisma.challengeTrack.update = originalUpdate - }) - - it('create challenge track - accepts DEVELOP alias', async () => { - let createdPayload - prisma.challengeTrack.findMany = async () => [] + prisma.challengeTrack.findMany = originalFindMany; + prisma.challengeTrack.create = originalCreate; + prisma.challengeTrack.findUnique = originalFindUnique; + prisma.challengeTrack.update = originalUpdate; + }); + + it("create challenge track - accepts DEVELOP alias", async () => { + let createdPayload; + prisma.challengeTrack.findMany = async () => []; prisma.challengeTrack.create = async ({ data }) => { - createdPayload = data + createdPayload = data; return { id: uuid(), name: data.name, @@ -47,72 +47,93 @@ describe('challenge track service unit tests', () => { createdAt: new Date(), createdBy: data.createdBy, updatedAt: new Date(), - updatedBy: data.updatedBy - } - } + updatedBy: data.updatedBy, + }; + }; - const result = await service.createChallengeTrack({ userId: 'test-user' }, { - name: `track-${Date.now()}`, - isActive: true, - abbreviation: `abbr-${Date.now()}`, - track: 'DEVELOP' - }) + const result = await service.createChallengeTrack( + { userId: "test-user" }, + { + name: `track-${Date.now()}`, + isActive: true, + abbreviation: `abbr-${Date.now()}`, + track: "DEVELOP", + }, + ); - should.equal(createdPayload.track, 'DEVELOPMENT') - should.equal(result.track, 'DEVELOPMENT') - }) + should.equal(createdPayload.track, "DEVELOPMENT"); + should.equal(result.track, "DEVELOPMENT"); + }); - it('search challenge tracks - accepts QA alias', async () => { - let receivedFilter + it("search challenge tracks - accepts QA alias", async () => { + let receivedFilter; prisma.challengeTrack.findMany = async ({ where }) => { - receivedFilter = where - return [] - } + receivedFilter = where; + return []; + }; const result = await service.searchChallengeTracks({ page: 1, perPage: 10, - track: 'QA' - }) + track: "QA", + }); + + should.equal(result.total, 0); + should.equal(receivedFilter.track.equals, "QUALITY_ASSURANCE"); + should.equal(receivedFilter.isLegacy.equals, false); + }); - should.equal(result.total, 0) - should.equal(receivedFilter.track.equals, 'QUALITY_ASSURANCE') - }) + it("search challenge tracks - supports explicit legacy filter", async () => { + let receivedFilter; + prisma.challengeTrack.findMany = async ({ where }) => { + receivedFilter = where; + return []; + }; - it('partially update challenge track - accepts QA alias', async () => { - let updatedPayload - const id = uuid() + const result = await service.searchChallengeTracks({ + page: 1, + perPage: 10, + isLegacy: true, + }); + + should.equal(result.total, 0); + should.equal(receivedFilter.isLegacy.equals, true); + }); + + it("partially update challenge track - accepts QA alias", async () => { + let updatedPayload; + const id = uuid(); prisma.challengeTrack.findUnique = async () => ({ id, - name: 'Design', + name: "Design", description: null, isActive: true, - abbreviation: 'DS', + abbreviation: "DS", legacyId: null, - track: 'DESIGN', + track: "DESIGN", createdAt: new Date(), - createdBy: 'seed-user', + createdBy: "seed-user", updatedAt: new Date(), - updatedBy: 'seed-user' - }) - prisma.challengeTrack.findMany = async () => [] + updatedBy: "seed-user", + }); + prisma.challengeTrack.findMany = async () => []; prisma.challengeTrack.update = async ({ data }) => { - updatedPayload = data + updatedPayload = data; return { id, ...data, createdAt: new Date(), - createdBy: 'seed-user', + createdBy: "seed-user", updatedAt: new Date(), - updatedBy: data.updatedBy - } - } - - const result = await service.partiallyUpdateChallengeTrack({ userId: 'test-user' }, id, { - track: 'QA' - }) - - should.equal(updatedPayload.track, 'QUALITY_ASSURANCE') - should.equal(result.track, 'QUALITY_ASSURANCE') - }) -}) + updatedBy: data.updatedBy, + }; + }; + + const result = await service.partiallyUpdateChallengeTrack({ userId: "test-user" }, id, { + track: "QA", + }); + + should.equal(updatedPayload.track, "QUALITY_ASSURANCE"); + should.equal(result.track, "QUALITY_ASSURANCE"); + }); +}); diff --git a/test/unit/ChallengeTypeService.legacy.test.js b/test/unit/ChallengeTypeService.legacy.test.js new file mode 100644 index 0000000..e9d4a1e --- /dev/null +++ b/test/unit/ChallengeTypeService.legacy.test.js @@ -0,0 +1,100 @@ +/* + * Unit tests for legacy-specific challenge type behavior. + */ + +require("../../app-bootstrap"); +const { v4: uuid } = require("uuid"); +const chai = require("chai"); + +const service = require("../../src/services/ChallengeTypeService"); +const prisma = require("../../src/common/prisma").getClient(); + +const should = chai.should(); + +describe("challenge type service legacy unit tests", () => { + let originalFindMany; + let originalCreate; + + beforeEach(() => { + originalFindMany = prisma.challengeType.findMany; + originalCreate = prisma.challengeType.create; + }); + + afterEach(() => { + prisma.challengeType.findMany = originalFindMany; + prisma.challengeType.create = originalCreate; + }); + + it("search challenge types hides legacy records by default", async () => { + let receivedFilter; + prisma.challengeType.findMany = async ({ where }) => { + receivedFilter = where; + return []; + }; + + const result = await service.searchChallengeTypes({ + page: 1, + perPage: 10, + name: "ARCHITECTURE", + }); + + should.equal(result.total, 0); + should.equal(receivedFilter.isLegacy.equals, false); + }); + + it("search challenge types supports explicit legacy filter", async () => { + let receivedFilter; + prisma.challengeType.findMany = async ({ where }) => { + receivedFilter = where; + return []; + }; + + const result = await service.searchChallengeTypes({ + page: 1, + perPage: 10, + isLegacy: true, + }); + + should.equal(result.total, 0); + should.equal(receivedFilter.isLegacy.equals, true); + }); + + it("create challenge type accepts legacy metadata", async () => { + let createdPayload; + prisma.challengeType.findMany = async () => []; + prisma.challengeType.create = async ({ data }) => { + createdPayload = data; + return { + id: uuid(), + name: data.name, + description: data.description || null, + isActive: data.isActive, + isTask: data.isTask || false, + abbreviation: data.abbreviation, + legacyId: data.legacyId || null, + isLegacy: data.isLegacy || false, + createdAt: new Date(), + createdBy: data.createdBy, + updatedAt: new Date(), + updatedBy: data.updatedBy, + }; + }; + + const result = await service.createChallengeType( + { userId: "test-user" }, + { + name: `legacy-type-${Date.now()}`, + description: "Legacy historical subtype", + isActive: true, + abbreviation: `lg-${Date.now()}`, + legacyId: 150, + isLegacy: true, + }, + ); + + should.equal(createdPayload.legacyId, 150); + should.equal(createdPayload.isLegacy, true); + should.equal(result.legacyId, 150); + should.equal(result.isLegacy, true); + }); +}); diff --git a/test/unit/project-helper.test.js b/test/unit/project-helper.test.js new file mode 100644 index 0000000..285c8b4 --- /dev/null +++ b/test/unit/project-helper.test.js @@ -0,0 +1,58 @@ +const chai = require('chai') + +const axios = require('axios') +const m2mHelper = require('../../src/common/m2m-helper') +const projectHelper = require('../../src/common/project-helper') + +chai.should() + +describe('project helper unit tests', () => { + let originalAxiosGet + let originalGetM2MToken + + beforeEach(() => { + originalAxiosGet = axios.get + originalGetM2MToken = m2mHelper.getM2MToken + }) + + afterEach(() => { + axios.get = originalAxiosGet + m2mHelper.getM2MToken = originalGetM2MToken + }) + + it('preserves decimal billing markup returned by projects api', async () => { + m2mHelper.getM2MToken = async () => 'test-token' + axios.get = async () => ({ + status: 200, + data: { + tcBillingAccountId: '80004217', + markup: 0.58 + } + }) + + const result = await projectHelper.getProjectBillingInformation(123) + + result.should.deep.equal({ + billingAccountId: '80004217', + markup: 0.58 + }) + }) + + it('converts legacy whole-percentage billing markup to decimal format', async () => { + m2mHelper.getM2MToken = async () => 'test-token' + axios.get = async () => ({ + status: 200, + data: { + tcBillingAccountId: '80004217', + markup: 58 + } + }) + + const result = await projectHelper.getProjectBillingInformation(123) + + result.should.deep.equal({ + billingAccountId: '80004217', + markup: 0.58 + }) + }) +})