diff --git a/.circleci/config.yml b/.circleci/config.yml index b61dec4..632368c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -92,6 +92,7 @@ workflows: - develop - PM-4478_add-ai-screening-phase-when-editing-after-launch - review-context + - PM-4684_challenge-approval-flow - "build-qa": context: org-global diff --git a/.github/workflows/code_reviewer.yml b/.github/workflows/code_reviewer.yml deleted file mode 100644 index 82c7862..0000000 --- a/.github/workflows/code_reviewer.yml +++ /dev/null @@ -1,22 +0,0 @@ -name: AI PR Reviewer - -on: - pull_request: - types: - - opened - - synchronize -permissions: - pull-requests: write -jobs: - tc-ai-pr-review: - runs-on: ubuntu-latest - steps: - - name: Checkout Repo - uses: actions/checkout@v3 - - - name: TC AI PR Reviewer - uses: topcoder-platform/tc-ai-pr-reviewer@master - with: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # The GITHUB_TOKEN is there by default so you just need to keep it like it is and not necessarily need to add it as secret as it will throw an error. [More Details](https://docs.github.com/en/actions/security-guides/automatic-token-authentication#about-the-github_token-secret) - LAB45_API_KEY: ${{ secrets.LAB45_API_KEY }} - exclude: '**/*.json, **/*.md, **/*.jpg, **/*.png, **/*.jpeg, **/*.bmp, **/*.webp' # Optional: exclude patterns separated by commas \ No newline at end of file diff --git a/README.md b/README.md index 37456e7..d047c0e 100644 --- a/README.md +++ b/README.md @@ -52,6 +52,7 @@ The following parameters can be set in config files or in env variables: - AMAZON.AWS_REGION: The Amazon certificate region to use when connecting. - AMAZON.ATTACHMENT_S3_BUCKET: the AWS S3 bucket to store attachments - FILE_UPLOAD_SIZE_LIMIT: the file upload size limit in bytes +- MEMBERS_API_URL: member-api members base URL; used to trigger challenge submitter rating updates after a challenge is completed - RESOURCES_API_URL: TC resources API base URL - GROUPS_API_URL: TC groups API base URL - PROJECTS_API_URL: TC projects API base URL diff --git a/app-constants.js b/app-constants.js index c4aa466..fdc998d 100644 --- a/app-constants.js +++ b/app-constants.js @@ -7,6 +7,7 @@ const UserRoles = { Admin: "administrator", Copilot: "copilot", Manager: "Connect Manager", + ProjectManager: "Project Manager", TalentManager: "Talent Manager", User: "Topcoder User", SelfServiceCustomer: "Self-Service Customer", diff --git a/packages/challenge-prisma-client/edge.js b/packages/challenge-prisma-client/edge.js index 1cd1d88..cdb8295 100644 --- a/packages/challenge-prisma-client/edge.js +++ b/packages/challenge-prisma-client/edge.js @@ -130,6 +130,11 @@ exports.Prisma.ChallengeScalarFieldEnum = { updatedBy: 'updatedBy' }; +exports.Prisma.ChallengeUserWhitelistScalarFieldEnum = { + challengeId: 'challengeId', + userId: 'userId' +}; + exports.Prisma.ChallengeTypeScalarFieldEnum = { id: 'id', name: 'name', @@ -491,6 +496,11 @@ exports.Prisma.ChallengeOrderByRelevanceFieldEnum = { updatedBy: 'updatedBy' }; +exports.Prisma.ChallengeUserWhitelistOrderByRelevanceFieldEnum = { + challengeId: 'challengeId', + userId: 'userId' +}; + exports.Prisma.ChallengeTypeOrderByRelevanceFieldEnum = { id: 'id', name: 'name', @@ -771,6 +781,7 @@ exports.ReviewOpportunityTypeEnum = exports.$Enums.ReviewOpportunityTypeEnum = { exports.Prisma.ModelName = { Challenge: 'Challenge', + ChallengeUserWhitelist: 'ChallengeUserWhitelist', ChallengeType: 'ChallengeType', ChallengeTrack: 'ChallengeTrack', ChallengeTimelineTemplate: 'ChallengeTimelineTemplate', @@ -852,13 +863,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 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", + "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 userWhitelist ChallengeUserWhitelist[]\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// Challenge user whitelist - member/challenge pairs allowed to access restricted challenges\n//////////////////////////////////////////\n\nmodel ChallengeUserWhitelist {\n challengeId String\n userId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n @@id([challengeId, userId])\n @@index([challengeId])\n @@index([userId])\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": "6753f3f63bc1895caf833af5127cc8a05e8be5541a69a7584ca96249e47fe064", "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\":\"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\":{}}") +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\":\"userWhitelist\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeUserWhitelist\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeUserWhitelist\",\"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},\"ChallengeUserWhitelist\":{\"dbName\":null,\"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\":\"userId\",\"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\":\"ChallengeToChallengeUserWhitelist\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":{\"name\":null,\"fields\":[\"challengeId\",\"userId\"]},\"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 24545d3..a5e965e 100644 --- a/packages/challenge-prisma-client/index-browser.js +++ b/packages/challenge-prisma-client/index-browser.js @@ -158,6 +158,11 @@ exports.Prisma.ChallengeScalarFieldEnum = { updatedBy: 'updatedBy' }; +exports.Prisma.ChallengeUserWhitelistScalarFieldEnum = { + challengeId: 'challengeId', + userId: 'userId' +}; + exports.Prisma.ChallengeTypeScalarFieldEnum = { id: 'id', name: 'name', @@ -519,6 +524,11 @@ exports.Prisma.ChallengeOrderByRelevanceFieldEnum = { updatedBy: 'updatedBy' }; +exports.Prisma.ChallengeUserWhitelistOrderByRelevanceFieldEnum = { + challengeId: 'challengeId', + userId: 'userId' +}; + exports.Prisma.ChallengeTypeOrderByRelevanceFieldEnum = { id: 'id', name: 'name', @@ -799,6 +809,7 @@ exports.ReviewOpportunityTypeEnum = exports.$Enums.ReviewOpportunityTypeEnum = { exports.Prisma.ModelName = { Challenge: 'Challenge', + ChallengeUserWhitelist: 'ChallengeUserWhitelist', ChallengeType: 'ChallengeType', ChallengeTrack: 'ChallengeTrack', ChallengeTimelineTemplate: 'ChallengeTimelineTemplate', diff --git a/packages/challenge-prisma-client/index.d.ts b/packages/challenge-prisma-client/index.d.ts index c9c10e0..4e1855b 100644 --- a/packages/challenge-prisma-client/index.d.ts +++ b/packages/challenge-prisma-client/index.d.ts @@ -18,6 +18,11 @@ export type PrismaPromise = $Public.PrismaPromise * */ export type Challenge = $Result.DefaultSelection +/** + * Model ChallengeUserWhitelist + * + */ +export type ChallengeUserWhitelist = $Result.DefaultSelection /** * Model ChallengeType * @@ -374,6 +379,16 @@ export class PrismaClient< */ get challenge(): Prisma.ChallengeDelegate; + /** + * `prisma.challengeUserWhitelist`: Exposes CRUD operations for the **ChallengeUserWhitelist** model. + * Example usage: + * ```ts + * // Fetch zero or more ChallengeUserWhitelists + * const challengeUserWhitelists = await prisma.challengeUserWhitelist.findMany() + * ``` + */ + get challengeUserWhitelist(): Prisma.ChallengeUserWhitelistDelegate; + /** * `prisma.challengeType`: Exposes CRUD operations for the **ChallengeType** model. * Example usage: @@ -1065,6 +1080,7 @@ export namespace Prisma { export const ModelName: { Challenge: 'Challenge', + ChallengeUserWhitelist: 'ChallengeUserWhitelist', ChallengeType: 'ChallengeType', ChallengeTrack: 'ChallengeTrack', ChallengeTimelineTemplate: 'ChallengeTimelineTemplate', @@ -1108,7 +1124,7 @@ export namespace Prisma { omit: GlobalOmitOptions } meta: { - modelProps: "challenge" | "challengeType" | "challengeTrack" | "challengeTimelineTemplate" | "auditLog" | "attachment" | "challengeMetadata" | "prize" | "challengeWinner" | "challengeTerm" | "challengeSkill" | "challengeBilling" | "challengeLegacy" | "challengeEvent" | "challengeDiscussion" | "challengeDiscussionOption" | "challengeConstraint" | "phase" | "challengePhase" | "challengePhaseConstraint" | "challengePrizeSet" | "challengeReviewer" | "defaultChallengeReviewer" | "timelineTemplate" | "timelineTemplatePhase" | "memberChallengeAccess" + modelProps: "challenge" | "challengeUserWhitelist" | "challengeType" | "challengeTrack" | "challengeTimelineTemplate" | "auditLog" | "attachment" | "challengeMetadata" | "prize" | "challengeWinner" | "challengeTerm" | "challengeSkill" | "challengeBilling" | "challengeLegacy" | "challengeEvent" | "challengeDiscussion" | "challengeDiscussionOption" | "challengeConstraint" | "phase" | "challengePhase" | "challengePhaseConstraint" | "challengePrizeSet" | "challengeReviewer" | "defaultChallengeReviewer" | "timelineTemplate" | "timelineTemplatePhase" | "memberChallengeAccess" txIsolationLevel: Prisma.TransactionIsolationLevel } model: { @@ -1186,6 +1202,80 @@ export namespace Prisma { } } } + ChallengeUserWhitelist: { + payload: Prisma.$ChallengeUserWhitelistPayload + fields: Prisma.ChallengeUserWhitelistFieldRefs + operations: { + findUnique: { + args: Prisma.ChallengeUserWhitelistFindUniqueArgs + result: $Utils.PayloadToResult | null + } + findUniqueOrThrow: { + args: Prisma.ChallengeUserWhitelistFindUniqueOrThrowArgs + result: $Utils.PayloadToResult + } + findFirst: { + args: Prisma.ChallengeUserWhitelistFindFirstArgs + result: $Utils.PayloadToResult | null + } + findFirstOrThrow: { + args: Prisma.ChallengeUserWhitelistFindFirstOrThrowArgs + result: $Utils.PayloadToResult + } + findMany: { + args: Prisma.ChallengeUserWhitelistFindManyArgs + result: $Utils.PayloadToResult[] + } + create: { + args: Prisma.ChallengeUserWhitelistCreateArgs + result: $Utils.PayloadToResult + } + createMany: { + args: Prisma.ChallengeUserWhitelistCreateManyArgs + result: BatchPayload + } + createManyAndReturn: { + args: Prisma.ChallengeUserWhitelistCreateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + delete: { + args: Prisma.ChallengeUserWhitelistDeleteArgs + result: $Utils.PayloadToResult + } + update: { + args: Prisma.ChallengeUserWhitelistUpdateArgs + result: $Utils.PayloadToResult + } + deleteMany: { + args: Prisma.ChallengeUserWhitelistDeleteManyArgs + result: BatchPayload + } + updateMany: { + args: Prisma.ChallengeUserWhitelistUpdateManyArgs + result: BatchPayload + } + updateManyAndReturn: { + args: Prisma.ChallengeUserWhitelistUpdateManyAndReturnArgs + result: $Utils.PayloadToResult[] + } + upsert: { + args: Prisma.ChallengeUserWhitelistUpsertArgs + result: $Utils.PayloadToResult + } + aggregate: { + args: Prisma.ChallengeUserWhitelistAggregateArgs + result: $Utils.Optional + } + groupBy: { + args: Prisma.ChallengeUserWhitelistGroupByArgs + result: $Utils.Optional[] + } + count: { + args: Prisma.ChallengeUserWhitelistCountArgs + result: $Utils.Optional | number + } + } + } ChallengeType: { payload: Prisma.$ChallengeTypePayload fields: Prisma.ChallengeTypeFieldRefs @@ -3089,6 +3179,7 @@ export namespace Prisma { } export type GlobalOmitConfig = { challenge?: ChallengeOmit + challengeUserWhitelist?: ChallengeUserWhitelistOmit challengeType?: ChallengeTypeOmit challengeTrack?: ChallengeTrackOmit challengeTimelineTemplate?: ChallengeTimelineTemplateOmit @@ -3206,6 +3297,7 @@ export namespace Prisma { skills: number auditLogs: number memberAccesses: number + userWhitelist: number } export type ChallengeCountOutputTypeSelect = { @@ -3221,6 +3313,7 @@ export namespace Prisma { skills?: boolean | ChallengeCountOutputTypeCountSkillsArgs auditLogs?: boolean | ChallengeCountOutputTypeCountAuditLogsArgs memberAccesses?: boolean | ChallengeCountOutputTypeCountMemberAccessesArgs + userWhitelist?: boolean | ChallengeCountOutputTypeCountUserWhitelistArgs } // Custom InputTypes @@ -3318,6 +3411,13 @@ export namespace Prisma { where?: MemberChallengeAccessWhereInput } + /** + * ChallengeCountOutputType without action + */ + export type ChallengeCountOutputTypeCountUserWhitelistArgs = { + where?: ChallengeUserWhitelistWhereInput + } + /** * Count Type ChallengeTypeCountOutputType @@ -4074,6 +4174,7 @@ export namespace Prisma { skills?: boolean | Challenge$skillsArgs auditLogs?: boolean | Challenge$auditLogsArgs memberAccesses?: boolean | Challenge$memberAccessesArgs + userWhitelist?: boolean | Challenge$userWhitelistArgs type?: boolean | ChallengeTypeDefaultArgs track?: boolean | ChallengeTrackDefaultArgs timelineTemplate?: boolean | Challenge$timelineTemplateArgs @@ -4214,6 +4315,7 @@ export namespace Prisma { skills?: boolean | Challenge$skillsArgs auditLogs?: boolean | Challenge$auditLogsArgs memberAccesses?: boolean | Challenge$memberAccessesArgs + userWhitelist?: boolean | Challenge$userWhitelistArgs type?: boolean | ChallengeTypeDefaultArgs track?: boolean | ChallengeTrackDefaultArgs timelineTemplate?: boolean | Challenge$timelineTemplateArgs @@ -4248,6 +4350,7 @@ export namespace Prisma { skills: Prisma.$ChallengeSkillPayload[] auditLogs: Prisma.$AuditLogPayload[] memberAccesses: Prisma.$MemberChallengeAccessPayload[] + userWhitelist: Prisma.$ChallengeUserWhitelistPayload[] type: Prisma.$ChallengeTypePayload track: Prisma.$ChallengeTrackPayload timelineTemplate: Prisma.$TimelineTemplatePayload | null @@ -4696,6 +4799,7 @@ export namespace Prisma { skills = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> auditLogs = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> memberAccesses = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> + userWhitelist = {}>(args?: Subset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions> | Null> type = {}>(args?: Subset>): Prisma__ChallengeTypeClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> track = {}>(args?: Subset>): Prisma__ChallengeTrackClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> timelineTemplate = {}>(args?: Subset>): Prisma__TimelineTemplateClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> @@ -5501,6 +5605,30 @@ export namespace Prisma { distinct?: MemberChallengeAccessScalarFieldEnum | MemberChallengeAccessScalarFieldEnum[] } + /** + * Challenge.userWhitelist + */ + export type Challenge$userWhitelistArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + where?: ChallengeUserWhitelistWhereInput + orderBy?: ChallengeUserWhitelistOrderByWithRelationInput | ChallengeUserWhitelistOrderByWithRelationInput[] + cursor?: ChallengeUserWhitelistWhereUniqueInput + take?: number + skip?: number + distinct?: ChallengeUserWhitelistScalarFieldEnum | ChallengeUserWhitelistScalarFieldEnum[] + } + /** * Challenge.timelineTemplate */ @@ -5539,6 +5667,1025 @@ export namespace Prisma { } + /** + * Model ChallengeUserWhitelist + */ + + export type AggregateChallengeUserWhitelist = { + _count: ChallengeUserWhitelistCountAggregateOutputType | null + _min: ChallengeUserWhitelistMinAggregateOutputType | null + _max: ChallengeUserWhitelistMaxAggregateOutputType | null + } + + export type ChallengeUserWhitelistMinAggregateOutputType = { + challengeId: string | null + userId: string | null + } + + export type ChallengeUserWhitelistMaxAggregateOutputType = { + challengeId: string | null + userId: string | null + } + + export type ChallengeUserWhitelistCountAggregateOutputType = { + challengeId: number + userId: number + _all: number + } + + + export type ChallengeUserWhitelistMinAggregateInputType = { + challengeId?: true + userId?: true + } + + export type ChallengeUserWhitelistMaxAggregateInputType = { + challengeId?: true + userId?: true + } + + export type ChallengeUserWhitelistCountAggregateInputType = { + challengeId?: true + userId?: true + _all?: true + } + + export type ChallengeUserWhitelistAggregateArgs = { + /** + * Filter which ChallengeUserWhitelist to aggregate. + */ + where?: ChallengeUserWhitelistWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ChallengeUserWhitelists to fetch. + */ + orderBy?: ChallengeUserWhitelistOrderByWithRelationInput | ChallengeUserWhitelistOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the start position + */ + cursor?: ChallengeUserWhitelistWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ChallengeUserWhitelists from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ChallengeUserWhitelists. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Count returned ChallengeUserWhitelists + **/ + _count?: true | ChallengeUserWhitelistCountAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the minimum value + **/ + _min?: ChallengeUserWhitelistMinAggregateInputType + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/aggregations Aggregation Docs} + * + * Select which fields to find the maximum value + **/ + _max?: ChallengeUserWhitelistMaxAggregateInputType + } + + export type GetChallengeUserWhitelistAggregateType = { + [P in keyof T & keyof AggregateChallengeUserWhitelist]: P extends '_count' | 'count' + ? T[P] extends true + ? number + : GetScalarType + : GetScalarType + } + + + + + export type ChallengeUserWhitelistGroupByArgs = { + where?: ChallengeUserWhitelistWhereInput + orderBy?: ChallengeUserWhitelistOrderByWithAggregationInput | ChallengeUserWhitelistOrderByWithAggregationInput[] + by: ChallengeUserWhitelistScalarFieldEnum[] | ChallengeUserWhitelistScalarFieldEnum + having?: ChallengeUserWhitelistScalarWhereWithAggregatesInput + take?: number + skip?: number + _count?: ChallengeUserWhitelistCountAggregateInputType | true + _min?: ChallengeUserWhitelistMinAggregateInputType + _max?: ChallengeUserWhitelistMaxAggregateInputType + } + + export type ChallengeUserWhitelistGroupByOutputType = { + challengeId: string + userId: string + _count: ChallengeUserWhitelistCountAggregateOutputType | null + _min: ChallengeUserWhitelistMinAggregateOutputType | null + _max: ChallengeUserWhitelistMaxAggregateOutputType | null + } + + type GetChallengeUserWhitelistGroupByPayload = Prisma.PrismaPromise< + Array< + PickEnumerable & + { + [P in ((keyof T) & (keyof ChallengeUserWhitelistGroupByOutputType))]: P extends '_count' + ? T[P] extends boolean + ? number + : GetScalarType + : GetScalarType + } + > + > + + + export type ChallengeUserWhitelistSelect = $Extensions.GetSelect<{ + challengeId?: boolean + userId?: boolean + challenge?: boolean | ChallengeDefaultArgs + }, ExtArgs["result"]["challengeUserWhitelist"]> + + export type ChallengeUserWhitelistSelectCreateManyAndReturn = $Extensions.GetSelect<{ + challengeId?: boolean + userId?: boolean + challenge?: boolean | ChallengeDefaultArgs + }, ExtArgs["result"]["challengeUserWhitelist"]> + + export type ChallengeUserWhitelistSelectUpdateManyAndReturn = $Extensions.GetSelect<{ + challengeId?: boolean + userId?: boolean + challenge?: boolean | ChallengeDefaultArgs + }, ExtArgs["result"]["challengeUserWhitelist"]> + + export type ChallengeUserWhitelistSelectScalar = { + challengeId?: boolean + userId?: boolean + } + + export type ChallengeUserWhitelistOmit = $Extensions.GetOmit<"challengeId" | "userId", ExtArgs["result"]["challengeUserWhitelist"]> + export type ChallengeUserWhitelistInclude = { + challenge?: boolean | ChallengeDefaultArgs + } + export type ChallengeUserWhitelistIncludeCreateManyAndReturn = { + challenge?: boolean | ChallengeDefaultArgs + } + export type ChallengeUserWhitelistIncludeUpdateManyAndReturn = { + challenge?: boolean | ChallengeDefaultArgs + } + + export type $ChallengeUserWhitelistPayload = { + name: "ChallengeUserWhitelist" + objects: { + challenge: Prisma.$ChallengePayload + } + scalars: $Extensions.GetPayloadResult<{ + challengeId: string + userId: string + }, ExtArgs["result"]["challengeUserWhitelist"]> + composites: {} + } + + type ChallengeUserWhitelistGetPayload = $Result.GetResult + + type ChallengeUserWhitelistCountArgs = + Omit & { + select?: ChallengeUserWhitelistCountAggregateInputType | true + } + + export interface ChallengeUserWhitelistDelegate { + [K: symbol]: { types: Prisma.TypeMap['model']['ChallengeUserWhitelist'], meta: { name: 'ChallengeUserWhitelist' } } + /** + * Find zero or one ChallengeUserWhitelist that matches the filter. + * @param {ChallengeUserWhitelistFindUniqueArgs} args - Arguments to find a ChallengeUserWhitelist + * @example + * // Get one ChallengeUserWhitelist + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.findUnique({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUnique(args: SelectSubset>): Prisma__ChallengeUserWhitelistClient<$Result.GetResult, T, "findUnique", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find one ChallengeUserWhitelist that matches the filter or throw an error with `error.code='P2025'` + * if no matches were found. + * @param {ChallengeUserWhitelistFindUniqueOrThrowArgs} args - Arguments to find a ChallengeUserWhitelist + * @example + * // Get one ChallengeUserWhitelist + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.findUniqueOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findUniqueOrThrow(args: SelectSubset>): Prisma__ChallengeUserWhitelistClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ChallengeUserWhitelist that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ChallengeUserWhitelistFindFirstArgs} args - Arguments to find a ChallengeUserWhitelist + * @example + * // Get one ChallengeUserWhitelist + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.findFirst({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirst(args?: SelectSubset>): Prisma__ChallengeUserWhitelistClient<$Result.GetResult, T, "findFirst", GlobalOmitOptions> | null, null, ExtArgs, GlobalOmitOptions> + + /** + * Find the first ChallengeUserWhitelist that matches the filter or + * throw `PrismaKnownClientError` with `P2025` code if no matches were found. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ChallengeUserWhitelistFindFirstOrThrowArgs} args - Arguments to find a ChallengeUserWhitelist + * @example + * // Get one ChallengeUserWhitelist + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.findFirstOrThrow({ + * where: { + * // ... provide filter here + * } + * }) + */ + findFirstOrThrow(args?: SelectSubset>): Prisma__ChallengeUserWhitelistClient<$Result.GetResult, T, "findFirstOrThrow", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Find zero or more ChallengeUserWhitelists that matches the filter. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ChallengeUserWhitelistFindManyArgs} args - Arguments to filter and select certain fields only. + * @example + * // Get all ChallengeUserWhitelists + * const challengeUserWhitelists = await prisma.challengeUserWhitelist.findMany() + * + * // Get first 10 ChallengeUserWhitelists + * const challengeUserWhitelists = await prisma.challengeUserWhitelist.findMany({ take: 10 }) + * + * // Only select the `challengeId` + * const challengeUserWhitelistWithChallengeIdOnly = await prisma.challengeUserWhitelist.findMany({ select: { challengeId: true } }) + * + */ + findMany(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "findMany", GlobalOmitOptions>> + + /** + * Create a ChallengeUserWhitelist. + * @param {ChallengeUserWhitelistCreateArgs} args - Arguments to create a ChallengeUserWhitelist. + * @example + * // Create one ChallengeUserWhitelist + * const ChallengeUserWhitelist = await prisma.challengeUserWhitelist.create({ + * data: { + * // ... data to create a ChallengeUserWhitelist + * } + * }) + * + */ + create(args: SelectSubset>): Prisma__ChallengeUserWhitelistClient<$Result.GetResult, T, "create", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Create many ChallengeUserWhitelists. + * @param {ChallengeUserWhitelistCreateManyArgs} args - Arguments to create many ChallengeUserWhitelists. + * @example + * // Create many ChallengeUserWhitelists + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.createMany({ + * data: [ + * // ... provide data here + * ] + * }) + * + */ + createMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Create many ChallengeUserWhitelists and returns the data saved in the database. + * @param {ChallengeUserWhitelistCreateManyAndReturnArgs} args - Arguments to create many ChallengeUserWhitelists. + * @example + * // Create many ChallengeUserWhitelists + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.createManyAndReturn({ + * data: [ + * // ... provide data here + * ] + * }) + * + * // Create many ChallengeUserWhitelists and only return the `challengeId` + * const challengeUserWhitelistWithChallengeIdOnly = await prisma.challengeUserWhitelist.createManyAndReturn({ + * select: { challengeId: true }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + createManyAndReturn(args?: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "createManyAndReturn", GlobalOmitOptions>> + + /** + * Delete a ChallengeUserWhitelist. + * @param {ChallengeUserWhitelistDeleteArgs} args - Arguments to delete one ChallengeUserWhitelist. + * @example + * // Delete one ChallengeUserWhitelist + * const ChallengeUserWhitelist = await prisma.challengeUserWhitelist.delete({ + * where: { + * // ... filter to delete one ChallengeUserWhitelist + * } + * }) + * + */ + delete(args: SelectSubset>): Prisma__ChallengeUserWhitelistClient<$Result.GetResult, T, "delete", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Update one ChallengeUserWhitelist. + * @param {ChallengeUserWhitelistUpdateArgs} args - Arguments to update one ChallengeUserWhitelist. + * @example + * // Update one ChallengeUserWhitelist + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.update({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + update(args: SelectSubset>): Prisma__ChallengeUserWhitelistClient<$Result.GetResult, T, "update", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + /** + * Delete zero or more ChallengeUserWhitelists. + * @param {ChallengeUserWhitelistDeleteManyArgs} args - Arguments to filter ChallengeUserWhitelists to delete. + * @example + * // Delete a few ChallengeUserWhitelists + * const { count } = await prisma.challengeUserWhitelist.deleteMany({ + * where: { + * // ... provide filter here + * } + * }) + * + */ + deleteMany(args?: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ChallengeUserWhitelists. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ChallengeUserWhitelistUpdateManyArgs} args - Arguments to update one or more rows. + * @example + * // Update many ChallengeUserWhitelists + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.updateMany({ + * where: { + * // ... provide filter here + * }, + * data: { + * // ... provide data here + * } + * }) + * + */ + updateMany(args: SelectSubset>): Prisma.PrismaPromise + + /** + * Update zero or more ChallengeUserWhitelists and returns the data updated in the database. + * @param {ChallengeUserWhitelistUpdateManyAndReturnArgs} args - Arguments to update many ChallengeUserWhitelists. + * @example + * // Update many ChallengeUserWhitelists + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.updateManyAndReturn({ + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * + * // Update zero or more ChallengeUserWhitelists and only return the `challengeId` + * const challengeUserWhitelistWithChallengeIdOnly = await prisma.challengeUserWhitelist.updateManyAndReturn({ + * select: { challengeId: true }, + * where: { + * // ... provide filter here + * }, + * data: [ + * // ... provide data here + * ] + * }) + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * + */ + updateManyAndReturn(args: SelectSubset>): Prisma.PrismaPromise<$Result.GetResult, T, "updateManyAndReturn", GlobalOmitOptions>> + + /** + * Create or update one ChallengeUserWhitelist. + * @param {ChallengeUserWhitelistUpsertArgs} args - Arguments to update or create a ChallengeUserWhitelist. + * @example + * // Update or create a ChallengeUserWhitelist + * const challengeUserWhitelist = await prisma.challengeUserWhitelist.upsert({ + * create: { + * // ... data to create a ChallengeUserWhitelist + * }, + * update: { + * // ... in case it already exists, update + * }, + * where: { + * // ... the filter for the ChallengeUserWhitelist we want to update + * } + * }) + */ + upsert(args: SelectSubset>): Prisma__ChallengeUserWhitelistClient<$Result.GetResult, T, "upsert", GlobalOmitOptions>, never, ExtArgs, GlobalOmitOptions> + + + /** + * Count the number of ChallengeUserWhitelists. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ChallengeUserWhitelistCountArgs} args - Arguments to filter ChallengeUserWhitelists to count. + * @example + * // Count the number of ChallengeUserWhitelists + * const count = await prisma.challengeUserWhitelist.count({ + * where: { + * // ... the filter for the ChallengeUserWhitelists we want to count + * } + * }) + **/ + count( + args?: Subset, + ): Prisma.PrismaPromise< + T extends $Utils.Record<'select', any> + ? T['select'] extends true + ? number + : GetScalarType + : number + > + + /** + * Allows you to perform aggregations operations on a ChallengeUserWhitelist. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ChallengeUserWhitelistAggregateArgs} args - Select which aggregations you would like to apply and on what fields. + * @example + * // Ordered by age ascending + * // Where email contains prisma.io + * // Limited to the 10 users + * const aggregations = await prisma.user.aggregate({ + * _avg: { + * age: true, + * }, + * where: { + * email: { + * contains: "prisma.io", + * }, + * }, + * orderBy: { + * age: "asc", + * }, + * take: 10, + * }) + **/ + aggregate(args: Subset): Prisma.PrismaPromise> + + /** + * Group by ChallengeUserWhitelist. + * Note, that providing `undefined` is treated as the value not being there. + * Read more here: https://pris.ly/d/null-undefined + * @param {ChallengeUserWhitelistGroupByArgs} args - Group by arguments. + * @example + * // Group by city, order by createdAt, get count + * const result = await prisma.user.groupBy({ + * by: ['city', 'createdAt'], + * orderBy: { + * createdAt: true + * }, + * _count: { + * _all: true + * }, + * }) + * + **/ + groupBy< + T extends ChallengeUserWhitelistGroupByArgs, + HasSelectOrTake extends Or< + Extends<'skip', Keys>, + Extends<'take', Keys> + >, + OrderByArg extends True extends HasSelectOrTake + ? { orderBy: ChallengeUserWhitelistGroupByArgs['orderBy'] } + : { orderBy?: ChallengeUserWhitelistGroupByArgs['orderBy'] }, + OrderFields extends ExcludeUnderscoreKeys>>, + ByFields extends MaybeTupleToUnion, + ByValid extends Has, + HavingFields extends GetHavingFields, + HavingValid extends Has, + ByEmpty extends T['by'] extends never[] ? True : False, + InputErrors extends ByEmpty extends True + ? `Error: "by" must not be empty.` + : HavingValid extends False + ? { + [P in HavingFields]: P extends ByFields + ? never + : P extends string + ? `Error: Field "${P}" used in "having" needs to be provided in "by".` + : [ + Error, + 'Field ', + P, + ` in "having" needs to be provided in "by"`, + ] + }[HavingFields] + : 'take' extends Keys + ? 'orderBy' extends Keys + ? ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "take", you also need to provide "orderBy"' + : 'skip' extends Keys + ? 'orderBy' extends Keys + ? ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + : 'Error: If you provide "skip", you also need to provide "orderBy"' + : ByValid extends True + ? {} + : { + [P in OrderFields]: P extends ByFields + ? never + : `Error: Field "${P}" in "orderBy" needs to be provided in "by"` + }[OrderFields] + >(args: SubsetIntersection & InputErrors): {} extends InputErrors ? GetChallengeUserWhitelistGroupByPayload : Prisma.PrismaPromise + /** + * Fields of the ChallengeUserWhitelist model + */ + readonly fields: ChallengeUserWhitelistFieldRefs; + } + + /** + * The delegate class that acts as a "Promise-like" for ChallengeUserWhitelist. + * Why is this prefixed with `Prisma__`? + * Because we want to prevent naming conflicts as mentioned in + * https://github.com/prisma/prisma-client-js/issues/707 + */ + export interface Prisma__ChallengeUserWhitelistClient extends Prisma.PrismaPromise { + readonly [Symbol.toStringTag]: "PrismaPromise" + challenge = {}>(args?: Subset>): Prisma__ChallengeClient<$Result.GetResult, T, "findUniqueOrThrow", GlobalOmitOptions> | Null, Null, ExtArgs, GlobalOmitOptions> + /** + * Attaches callbacks for the resolution and/or rejection of the Promise. + * @param onfulfilled The callback to execute when the Promise is resolved. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of which ever callback is executed. + */ + then(onfulfilled?: ((value: T) => TResult1 | PromiseLike) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * Attaches a callback for only the rejection of the Promise. + * @param onrejected The callback to execute when the Promise is rejected. + * @returns A Promise for the completion of the callback. + */ + catch(onrejected?: ((reason: any) => TResult | PromiseLike) | undefined | null): $Utils.JsPromise + /** + * Attaches a callback that is invoked when the Promise is settled (fulfilled or rejected). The + * resolved value cannot be modified from the callback. + * @param onfinally The callback to execute when the Promise is settled (fulfilled or rejected). + * @returns A Promise for the completion of the callback. + */ + finally(onfinally?: (() => void) | undefined | null): $Utils.JsPromise + } + + + + + /** + * Fields of the ChallengeUserWhitelist model + */ + interface ChallengeUserWhitelistFieldRefs { + readonly challengeId: FieldRef<"ChallengeUserWhitelist", 'String'> + readonly userId: FieldRef<"ChallengeUserWhitelist", 'String'> + } + + + // Custom InputTypes + /** + * ChallengeUserWhitelist findUnique + */ + export type ChallengeUserWhitelistFindUniqueArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * Filter, which ChallengeUserWhitelist to fetch. + */ + where: ChallengeUserWhitelistWhereUniqueInput + } + + /** + * ChallengeUserWhitelist findUniqueOrThrow + */ + export type ChallengeUserWhitelistFindUniqueOrThrowArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * Filter, which ChallengeUserWhitelist to fetch. + */ + where: ChallengeUserWhitelistWhereUniqueInput + } + + /** + * ChallengeUserWhitelist findFirst + */ + export type ChallengeUserWhitelistFindFirstArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * Filter, which ChallengeUserWhitelist to fetch. + */ + where?: ChallengeUserWhitelistWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ChallengeUserWhitelists to fetch. + */ + orderBy?: ChallengeUserWhitelistOrderByWithRelationInput | ChallengeUserWhitelistOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ChallengeUserWhitelists. + */ + cursor?: ChallengeUserWhitelistWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ChallengeUserWhitelists from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ChallengeUserWhitelists. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ChallengeUserWhitelists. + */ + distinct?: ChallengeUserWhitelistScalarFieldEnum | ChallengeUserWhitelistScalarFieldEnum[] + } + + /** + * ChallengeUserWhitelist findFirstOrThrow + */ + export type ChallengeUserWhitelistFindFirstOrThrowArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * Filter, which ChallengeUserWhitelist to fetch. + */ + where?: ChallengeUserWhitelistWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ChallengeUserWhitelists to fetch. + */ + orderBy?: ChallengeUserWhitelistOrderByWithRelationInput | ChallengeUserWhitelistOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for searching for ChallengeUserWhitelists. + */ + cursor?: ChallengeUserWhitelistWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ChallengeUserWhitelists from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ChallengeUserWhitelists. + */ + skip?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/distinct Distinct Docs} + * + * Filter by unique combinations of ChallengeUserWhitelists. + */ + distinct?: ChallengeUserWhitelistScalarFieldEnum | ChallengeUserWhitelistScalarFieldEnum[] + } + + /** + * ChallengeUserWhitelist findMany + */ + export type ChallengeUserWhitelistFindManyArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * Filter, which ChallengeUserWhitelists to fetch. + */ + where?: ChallengeUserWhitelistWhereInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/sorting Sorting Docs} + * + * Determine the order of ChallengeUserWhitelists to fetch. + */ + orderBy?: ChallengeUserWhitelistOrderByWithRelationInput | ChallengeUserWhitelistOrderByWithRelationInput[] + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination#cursor-based-pagination Cursor Docs} + * + * Sets the position for listing ChallengeUserWhitelists. + */ + cursor?: ChallengeUserWhitelistWhereUniqueInput + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Take `±n` ChallengeUserWhitelists from the position of the cursor. + */ + take?: number + /** + * {@link https://www.prisma.io/docs/concepts/components/prisma-client/pagination Pagination Docs} + * + * Skip the first `n` ChallengeUserWhitelists. + */ + skip?: number + distinct?: ChallengeUserWhitelistScalarFieldEnum | ChallengeUserWhitelistScalarFieldEnum[] + } + + /** + * ChallengeUserWhitelist create + */ + export type ChallengeUserWhitelistCreateArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * The data needed to create a ChallengeUserWhitelist. + */ + data: XOR + } + + /** + * ChallengeUserWhitelist createMany + */ + export type ChallengeUserWhitelistCreateManyArgs = { + /** + * The data used to create many ChallengeUserWhitelists. + */ + data: ChallengeUserWhitelistCreateManyInput | ChallengeUserWhitelistCreateManyInput[] + skipDuplicates?: boolean + } + + /** + * ChallengeUserWhitelist createManyAndReturn + */ + export type ChallengeUserWhitelistCreateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelectCreateManyAndReturn | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * The data used to create many ChallengeUserWhitelists. + */ + data: ChallengeUserWhitelistCreateManyInput | ChallengeUserWhitelistCreateManyInput[] + skipDuplicates?: boolean + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistIncludeCreateManyAndReturn | null + } + + /** + * ChallengeUserWhitelist update + */ + export type ChallengeUserWhitelistUpdateArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * The data needed to update a ChallengeUserWhitelist. + */ + data: XOR + /** + * Choose, which ChallengeUserWhitelist to update. + */ + where: ChallengeUserWhitelistWhereUniqueInput + } + + /** + * ChallengeUserWhitelist updateMany + */ + export type ChallengeUserWhitelistUpdateManyArgs = { + /** + * The data used to update ChallengeUserWhitelists. + */ + data: XOR + /** + * Filter which ChallengeUserWhitelists to update + */ + where?: ChallengeUserWhitelistWhereInput + /** + * Limit how many ChallengeUserWhitelists to update. + */ + limit?: number + } + + /** + * ChallengeUserWhitelist updateManyAndReturn + */ + export type ChallengeUserWhitelistUpdateManyAndReturnArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelectUpdateManyAndReturn | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * The data used to update ChallengeUserWhitelists. + */ + data: XOR + /** + * Filter which ChallengeUserWhitelists to update + */ + where?: ChallengeUserWhitelistWhereInput + /** + * Limit how many ChallengeUserWhitelists to update. + */ + limit?: number + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistIncludeUpdateManyAndReturn | null + } + + /** + * ChallengeUserWhitelist upsert + */ + export type ChallengeUserWhitelistUpsertArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * The filter to search for the ChallengeUserWhitelist to update in case it exists. + */ + where: ChallengeUserWhitelistWhereUniqueInput + /** + * In case the ChallengeUserWhitelist found by the `where` argument doesn't exist, create a new ChallengeUserWhitelist with this data. + */ + create: XOR + /** + * In case the ChallengeUserWhitelist was found with the provided `where` argument, update it with this data. + */ + update: XOR + } + + /** + * ChallengeUserWhitelist delete + */ + export type ChallengeUserWhitelistDeleteArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + /** + * Filter which ChallengeUserWhitelist to delete. + */ + where: ChallengeUserWhitelistWhereUniqueInput + } + + /** + * ChallengeUserWhitelist deleteMany + */ + export type ChallengeUserWhitelistDeleteManyArgs = { + /** + * Filter which ChallengeUserWhitelists to delete + */ + where?: ChallengeUserWhitelistWhereInput + /** + * Limit how many ChallengeUserWhitelists to delete. + */ + limit?: number + } + + /** + * ChallengeUserWhitelist without action + */ + export type ChallengeUserWhitelistDefaultArgs = { + /** + * Select specific fields to fetch from the ChallengeUserWhitelist + */ + select?: ChallengeUserWhitelistSelect | null + /** + * Omit specific fields from the ChallengeUserWhitelist + */ + omit?: ChallengeUserWhitelistOmit | null + /** + * Choose, which related nodes to fetch as well + */ + include?: ChallengeUserWhitelistInclude | null + } + + /** * Model ChallengeType */ @@ -34270,6 +35417,14 @@ export namespace Prisma { export type ChallengeScalarFieldEnum = (typeof ChallengeScalarFieldEnum)[keyof typeof ChallengeScalarFieldEnum] + export const ChallengeUserWhitelistScalarFieldEnum: { + challengeId: 'challengeId', + userId: 'userId' + }; + + export type ChallengeUserWhitelistScalarFieldEnum = (typeof ChallengeUserWhitelistScalarFieldEnum)[keyof typeof ChallengeUserWhitelistScalarFieldEnum] + + export const ChallengeTypeScalarFieldEnum: { id: 'id', name: 'name', @@ -34718,6 +35873,14 @@ export namespace Prisma { export type ChallengeOrderByRelevanceFieldEnum = (typeof ChallengeOrderByRelevanceFieldEnum)[keyof typeof ChallengeOrderByRelevanceFieldEnum] + export const ChallengeUserWhitelistOrderByRelevanceFieldEnum: { + challengeId: 'challengeId', + userId: 'userId' + }; + + export type ChallengeUserWhitelistOrderByRelevanceFieldEnum = (typeof ChallengeUserWhitelistOrderByRelevanceFieldEnum)[keyof typeof ChallengeUserWhitelistOrderByRelevanceFieldEnum] + + export const ChallengeTypeOrderByRelevanceFieldEnum: { id: 'id', name: 'name', @@ -35227,6 +36390,7 @@ export namespace Prisma { skills?: ChallengeSkillListRelationFilter auditLogs?: AuditLogListRelationFilter memberAccesses?: MemberChallengeAccessListRelationFilter + userWhitelist?: ChallengeUserWhitelistListRelationFilter type?: XOR track?: XOR timelineTemplate?: XOR | null @@ -35282,6 +36446,7 @@ export namespace Prisma { skills?: ChallengeSkillOrderByRelationAggregateInput auditLogs?: AuditLogOrderByRelationAggregateInput memberAccesses?: MemberChallengeAccessOrderByRelationAggregateInput + userWhitelist?: ChallengeUserWhitelistOrderByRelationAggregateInput type?: ChallengeTypeOrderByWithRelationInput track?: ChallengeTrackOrderByWithRelationInput timelineTemplate?: TimelineTemplateOrderByWithRelationInput @@ -35341,6 +36506,7 @@ export namespace Prisma { skills?: ChallengeSkillListRelationFilter auditLogs?: AuditLogListRelationFilter memberAccesses?: MemberChallengeAccessListRelationFilter + userWhitelist?: ChallengeUserWhitelistListRelationFilter type?: XOR track?: XOR timelineTemplate?: XOR | null @@ -35428,6 +36594,48 @@ export namespace Prisma { updatedBy?: StringWithAggregatesFilter<"Challenge"> | string } + export type ChallengeUserWhitelistWhereInput = { + AND?: ChallengeUserWhitelistWhereInput | ChallengeUserWhitelistWhereInput[] + OR?: ChallengeUserWhitelistWhereInput[] + NOT?: ChallengeUserWhitelistWhereInput | ChallengeUserWhitelistWhereInput[] + challengeId?: StringFilter<"ChallengeUserWhitelist"> | string + userId?: StringFilter<"ChallengeUserWhitelist"> | string + challenge?: XOR + } + + export type ChallengeUserWhitelistOrderByWithRelationInput = { + challengeId?: SortOrder + userId?: SortOrder + challenge?: ChallengeOrderByWithRelationInput + _relevance?: ChallengeUserWhitelistOrderByRelevanceInput + } + + export type ChallengeUserWhitelistWhereUniqueInput = Prisma.AtLeast<{ + challengeId_userId?: ChallengeUserWhitelistChallengeIdUserIdCompoundUniqueInput + AND?: ChallengeUserWhitelistWhereInput | ChallengeUserWhitelistWhereInput[] + OR?: ChallengeUserWhitelistWhereInput[] + NOT?: ChallengeUserWhitelistWhereInput | ChallengeUserWhitelistWhereInput[] + challengeId?: StringFilter<"ChallengeUserWhitelist"> | string + userId?: StringFilter<"ChallengeUserWhitelist"> | string + challenge?: XOR + }, "challengeId_userId"> + + export type ChallengeUserWhitelistOrderByWithAggregationInput = { + challengeId?: SortOrder + userId?: SortOrder + _count?: ChallengeUserWhitelistCountOrderByAggregateInput + _max?: ChallengeUserWhitelistMaxOrderByAggregateInput + _min?: ChallengeUserWhitelistMinOrderByAggregateInput + } + + export type ChallengeUserWhitelistScalarWhereWithAggregatesInput = { + AND?: ChallengeUserWhitelistScalarWhereWithAggregatesInput | ChallengeUserWhitelistScalarWhereWithAggregatesInput[] + OR?: ChallengeUserWhitelistScalarWhereWithAggregatesInput[] + NOT?: ChallengeUserWhitelistScalarWhereWithAggregatesInput | ChallengeUserWhitelistScalarWhereWithAggregatesInput[] + challengeId?: StringWithAggregatesFilter<"ChallengeUserWhitelist"> | string + userId?: StringWithAggregatesFilter<"ChallengeUserWhitelist"> | string + } + export type ChallengeTypeWhereInput = { AND?: ChallengeTypeWhereInput | ChallengeTypeWhereInput[] OR?: ChallengeTypeWhereInput[] @@ -37591,6 +38799,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -37646,6 +38855,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeUpdateInput = { @@ -37695,6 +38905,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -37750,6 +38961,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateManyInput = { @@ -37860,6 +39072,40 @@ export namespace Prisma { updatedBy?: StringFieldUpdateOperationsInput | string } + export type ChallengeUserWhitelistCreateInput = { + userId: string + challenge: ChallengeCreateNestedOneWithoutUserWhitelistInput + } + + export type ChallengeUserWhitelistUncheckedCreateInput = { + challengeId: string + userId: string + } + + export type ChallengeUserWhitelistUpdateInput = { + userId?: StringFieldUpdateOperationsInput | string + challenge?: ChallengeUpdateOneRequiredWithoutUserWhitelistNestedInput + } + + export type ChallengeUserWhitelistUncheckedUpdateInput = { + challengeId?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + } + + export type ChallengeUserWhitelistCreateManyInput = { + challengeId: string + userId: string + } + + export type ChallengeUserWhitelistUpdateManyMutationInput = { + userId?: StringFieldUpdateOperationsInput | string + } + + export type ChallengeUserWhitelistUncheckedUpdateManyInput = { + challengeId?: StringFieldUpdateOperationsInput | string + userId?: StringFieldUpdateOperationsInput | string + } + export type ChallengeTypeCreateInput = { id?: string name: string @@ -40352,6 +41598,12 @@ export namespace Prisma { none?: MemberChallengeAccessWhereInput } + export type ChallengeUserWhitelistListRelationFilter = { + every?: ChallengeUserWhitelistWhereInput + some?: ChallengeUserWhitelistWhereInput + none?: ChallengeUserWhitelistWhereInput + } + export type ChallengeTypeScalarRelationFilter = { is?: ChallengeTypeWhereInput isNot?: ChallengeTypeWhereInput @@ -40420,6 +41672,10 @@ export namespace Prisma { _count?: SortOrder } + export type ChallengeUserWhitelistOrderByRelationAggregateInput = { + _count?: SortOrder + } + export type ChallengeOrderByRelevanceInput = { fields: ChallengeOrderByRelevanceFieldEnum | ChallengeOrderByRelevanceFieldEnum[] sort: SortOrder @@ -40681,6 +41937,37 @@ export namespace Prisma { _max?: NestedDateTimeFilter<$PrismaModel> } + export type ChallengeScalarRelationFilter = { + is?: ChallengeWhereInput + isNot?: ChallengeWhereInput + } + + export type ChallengeUserWhitelistOrderByRelevanceInput = { + fields: ChallengeUserWhitelistOrderByRelevanceFieldEnum | ChallengeUserWhitelistOrderByRelevanceFieldEnum[] + sort: SortOrder + search: string + } + + export type ChallengeUserWhitelistChallengeIdUserIdCompoundUniqueInput = { + challengeId: string + userId: string + } + + export type ChallengeUserWhitelistCountOrderByAggregateInput = { + challengeId?: SortOrder + userId?: SortOrder + } + + export type ChallengeUserWhitelistMaxOrderByAggregateInput = { + challengeId?: SortOrder + userId?: SortOrder + } + + export type ChallengeUserWhitelistMinOrderByAggregateInput = { + challengeId?: SortOrder + userId?: SortOrder + } + export type ChallengeListRelationFilter = { every?: ChallengeWhereInput some?: ChallengeWhereInput @@ -40937,11 +42224,6 @@ export namespace Prisma { memberId?: SortOrder } - export type ChallengeScalarRelationFilter = { - is?: ChallengeWhereInput - isNot?: ChallengeWhereInput - } - export type AttachmentOrderByRelevanceInput = { fields: AttachmentOrderByRelevanceFieldEnum | AttachmentOrderByRelevanceFieldEnum[] sort: SortOrder @@ -42295,6 +43577,13 @@ export namespace Prisma { connect?: MemberChallengeAccessWhereUniqueInput | MemberChallengeAccessWhereUniqueInput[] } + export type ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput = { + create?: XOR | ChallengeUserWhitelistCreateWithoutChallengeInput[] | ChallengeUserWhitelistUncheckedCreateWithoutChallengeInput[] + connectOrCreate?: ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput | ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput[] + createMany?: ChallengeUserWhitelistCreateManyChallengeInputEnvelope + connect?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + } + export type ChallengeTypeCreateNestedOneWithoutChallengesInput = { create?: XOR connectOrCreate?: ChallengeTypeCreateOrConnectWithoutChallengesInput @@ -42412,6 +43701,13 @@ export namespace Prisma { connect?: MemberChallengeAccessWhereUniqueInput | MemberChallengeAccessWhereUniqueInput[] } + export type ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput = { + create?: XOR | ChallengeUserWhitelistCreateWithoutChallengeInput[] | ChallengeUserWhitelistUncheckedCreateWithoutChallengeInput[] + connectOrCreate?: ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput | ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput[] + createMany?: ChallengeUserWhitelistCreateManyChallengeInputEnvelope + connect?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + } + export type StringFieldUpdateOperationsInput = { set?: string } @@ -42669,6 +43965,20 @@ export namespace Prisma { deleteMany?: MemberChallengeAccessScalarWhereInput | MemberChallengeAccessScalarWhereInput[] } + export type ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput = { + create?: XOR | ChallengeUserWhitelistCreateWithoutChallengeInput[] | ChallengeUserWhitelistUncheckedCreateWithoutChallengeInput[] + connectOrCreate?: ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput | ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput[] + upsert?: ChallengeUserWhitelistUpsertWithWhereUniqueWithoutChallengeInput | ChallengeUserWhitelistUpsertWithWhereUniqueWithoutChallengeInput[] + createMany?: ChallengeUserWhitelistCreateManyChallengeInputEnvelope + set?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + disconnect?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + delete?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + connect?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + update?: ChallengeUserWhitelistUpdateWithWhereUniqueWithoutChallengeInput | ChallengeUserWhitelistUpdateWithWhereUniqueWithoutChallengeInput[] + updateMany?: ChallengeUserWhitelistUpdateManyWithWhereWithoutChallengeInput | ChallengeUserWhitelistUpdateManyWithWhereWithoutChallengeInput[] + deleteMany?: ChallengeUserWhitelistScalarWhereInput | ChallengeUserWhitelistScalarWhereInput[] + } + export type ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput = { create?: XOR connectOrCreate?: ChallengeTypeCreateOrConnectWithoutChallengesInput @@ -42889,6 +44199,34 @@ export namespace Prisma { deleteMany?: MemberChallengeAccessScalarWhereInput | MemberChallengeAccessScalarWhereInput[] } + export type ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput = { + create?: XOR | ChallengeUserWhitelistCreateWithoutChallengeInput[] | ChallengeUserWhitelistUncheckedCreateWithoutChallengeInput[] + connectOrCreate?: ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput | ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput[] + upsert?: ChallengeUserWhitelistUpsertWithWhereUniqueWithoutChallengeInput | ChallengeUserWhitelistUpsertWithWhereUniqueWithoutChallengeInput[] + createMany?: ChallengeUserWhitelistCreateManyChallengeInputEnvelope + set?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + disconnect?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + delete?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + connect?: ChallengeUserWhitelistWhereUniqueInput | ChallengeUserWhitelistWhereUniqueInput[] + update?: ChallengeUserWhitelistUpdateWithWhereUniqueWithoutChallengeInput | ChallengeUserWhitelistUpdateWithWhereUniqueWithoutChallengeInput[] + updateMany?: ChallengeUserWhitelistUpdateManyWithWhereWithoutChallengeInput | ChallengeUserWhitelistUpdateManyWithWhereWithoutChallengeInput[] + deleteMany?: ChallengeUserWhitelistScalarWhereInput | ChallengeUserWhitelistScalarWhereInput[] + } + + export type ChallengeCreateNestedOneWithoutUserWhitelistInput = { + create?: XOR + connectOrCreate?: ChallengeCreateOrConnectWithoutUserWhitelistInput + connect?: ChallengeWhereUniqueInput + } + + export type ChallengeUpdateOneRequiredWithoutUserWhitelistNestedInput = { + create?: XOR + connectOrCreate?: ChallengeCreateOrConnectWithoutUserWhitelistInput + upsert?: ChallengeUpsertWithoutUserWhitelistInput + connect?: ChallengeWhereUniqueInput + update?: XOR, ChallengeUncheckedUpdateWithoutUserWhitelistInput> + } + export type ChallengeCreateNestedManyWithoutTypeInput = { create?: XOR | ChallengeCreateWithoutTypeInput[] | ChallengeUncheckedCreateWithoutTypeInput[] connectOrCreate?: ChallengeCreateOrConnectWithoutTypeInput | ChallengeCreateOrConnectWithoutTypeInput[] @@ -44830,6 +46168,24 @@ export namespace Prisma { challenge?: XOR } + export type ChallengeUserWhitelistCreateWithoutChallengeInput = { + userId: string + } + + export type ChallengeUserWhitelistUncheckedCreateWithoutChallengeInput = { + userId: string + } + + export type ChallengeUserWhitelistCreateOrConnectWithoutChallengeInput = { + where: ChallengeUserWhitelistWhereUniqueInput + create: XOR + } + + export type ChallengeUserWhitelistCreateManyChallengeInputEnvelope = { + data: ChallengeUserWhitelistCreateManyChallengeInput | ChallengeUserWhitelistCreateManyChallengeInput[] + skipDuplicates?: boolean + } + export type ChallengeTypeCreateWithoutChallengesInput = { id?: string name: string @@ -45431,6 +46787,30 @@ export namespace Prisma { memberId?: StringFilter<"MemberChallengeAccess"> | string } + export type ChallengeUserWhitelistUpsertWithWhereUniqueWithoutChallengeInput = { + where: ChallengeUserWhitelistWhereUniqueInput + update: XOR + create: XOR + } + + export type ChallengeUserWhitelistUpdateWithWhereUniqueWithoutChallengeInput = { + where: ChallengeUserWhitelistWhereUniqueInput + data: XOR + } + + export type ChallengeUserWhitelistUpdateManyWithWhereWithoutChallengeInput = { + where: ChallengeUserWhitelistScalarWhereInput + data: XOR + } + + export type ChallengeUserWhitelistScalarWhereInput = { + AND?: ChallengeUserWhitelistScalarWhereInput | ChallengeUserWhitelistScalarWhereInput[] + OR?: ChallengeUserWhitelistScalarWhereInput[] + NOT?: ChallengeUserWhitelistScalarWhereInput | ChallengeUserWhitelistScalarWhereInput[] + challengeId?: StringFilter<"ChallengeUserWhitelist"> | string + userId?: StringFilter<"ChallengeUserWhitelist"> | string + } + export type ChallengeTypeUpsertWithoutChallengesInput = { update: XOR create: XOR @@ -45560,6 +46940,230 @@ export namespace Prisma { DefaultChallengeReviewer?: DefaultChallengeReviewerUncheckedUpdateManyWithoutTimelineTemplateNestedInput } + export type ChallengeCreateWithoutUserWhitelistInput = { + id?: string + name: string + description?: string | null + privateDescription?: string | null + challengeSource?: string | null + descriptionFormat?: string | null + projectId?: number | null + overviewTotalPrizes?: number | null + numOfRegistrants?: number + numOfSubmissions?: number + numOfCheckpointSubmissions?: number + currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] + wiproAllowed?: boolean + funChallenge?: boolean + tags?: ChallengeCreatetagsInput | string[] + groups?: ChallengeCreategroupsInput | string[] + taskIsTask?: boolean + taskIsAssigned?: boolean + taskMemberId?: string | null + submissionStartDate?: Date | string | null + submissionEndDate?: Date | string | null + registrationStartDate?: Date | string | null + registrationEndDate?: Date | string | null + startDate?: Date | string | null + endDate?: Date | string | null + legacyId?: number | null + status?: $Enums.ChallengeStatusEnum + createdAt?: Date | string + createdBy: string + updatedAt?: Date | string + updatedBy: string + billingRecord?: ChallengeBillingCreateNestedOneWithoutChallengeInput + legacyRecord?: ChallengeLegacyCreateNestedOneWithoutChallengeInput + constraintRecord?: ChallengeConstraintCreateNestedOneWithoutChallengeInput + events?: ChallengeEventCreateNestedManyWithoutChallengeInput + discussions?: ChallengeDiscussionCreateNestedManyWithoutChallengeInput + metadata?: ChallengeMetadataCreateNestedManyWithoutChallengeInput + phases?: ChallengePhaseCreateNestedManyWithoutChallengeInput + prizeSets?: ChallengePrizeSetCreateNestedManyWithoutChallengeInput + reviewers?: ChallengeReviewerCreateNestedManyWithoutChallengeInput + winners?: ChallengeWinnerCreateNestedManyWithoutChallengeInput + attachments?: AttachmentCreateNestedManyWithoutChallengeInput + terms?: ChallengeTermCreateNestedManyWithoutChallengeInput + skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput + auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput + memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + type: ChallengeTypeCreateNestedOneWithoutChallengesInput + track: ChallengeTrackCreateNestedOneWithoutChallengesInput + timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput + } + + export type ChallengeUncheckedCreateWithoutUserWhitelistInput = { + id?: string + name: string + description?: string | null + privateDescription?: string | null + challengeSource?: string | null + descriptionFormat?: string | null + projectId?: number | null + typeId: string + trackId: string + timelineTemplateId?: string | null + overviewTotalPrizes?: number | null + numOfRegistrants?: number + numOfSubmissions?: number + numOfCheckpointSubmissions?: number + currentPhaseNames?: ChallengeCreatecurrentPhaseNamesInput | string[] + wiproAllowed?: boolean + funChallenge?: boolean + tags?: ChallengeCreatetagsInput | string[] + groups?: ChallengeCreategroupsInput | string[] + taskIsTask?: boolean + taskIsAssigned?: boolean + taskMemberId?: string | null + submissionStartDate?: Date | string | null + submissionEndDate?: Date | string | null + registrationStartDate?: Date | string | null + registrationEndDate?: Date | string | null + startDate?: Date | string | null + endDate?: Date | string | null + legacyId?: number | null + status?: $Enums.ChallengeStatusEnum + createdAt?: Date | string + createdBy: string + updatedAt?: Date | string + updatedBy: string + billingRecord?: ChallengeBillingUncheckedCreateNestedOneWithoutChallengeInput + legacyRecord?: ChallengeLegacyUncheckedCreateNestedOneWithoutChallengeInput + constraintRecord?: ChallengeConstraintUncheckedCreateNestedOneWithoutChallengeInput + events?: ChallengeEventUncheckedCreateNestedManyWithoutChallengeInput + discussions?: ChallengeDiscussionUncheckedCreateNestedManyWithoutChallengeInput + metadata?: ChallengeMetadataUncheckedCreateNestedManyWithoutChallengeInput + phases?: ChallengePhaseUncheckedCreateNestedManyWithoutChallengeInput + prizeSets?: ChallengePrizeSetUncheckedCreateNestedManyWithoutChallengeInput + reviewers?: ChallengeReviewerUncheckedCreateNestedManyWithoutChallengeInput + winners?: ChallengeWinnerUncheckedCreateNestedManyWithoutChallengeInput + attachments?: AttachmentUncheckedCreateNestedManyWithoutChallengeInput + terms?: ChallengeTermUncheckedCreateNestedManyWithoutChallengeInput + skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput + auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput + memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + } + + export type ChallengeCreateOrConnectWithoutUserWhitelistInput = { + where: ChallengeWhereUniqueInput + create: XOR + } + + export type ChallengeUpsertWithoutUserWhitelistInput = { + update: XOR + create: XOR + where?: ChallengeWhereInput + } + + export type ChallengeUpdateToOneWithWhereWithoutUserWhitelistInput = { + where?: ChallengeWhereInput + data: XOR + } + + export type ChallengeUpdateWithoutUserWhitelistInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + description?: NullableStringFieldUpdateOperationsInput | string | null + privateDescription?: NullableStringFieldUpdateOperationsInput | string | null + challengeSource?: NullableStringFieldUpdateOperationsInput | string | null + descriptionFormat?: NullableStringFieldUpdateOperationsInput | string | null + projectId?: NullableIntFieldUpdateOperationsInput | number | null + overviewTotalPrizes?: NullableFloatFieldUpdateOperationsInput | number | null + numOfRegistrants?: IntFieldUpdateOperationsInput | number + numOfSubmissions?: IntFieldUpdateOperationsInput | number + numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number + currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] + wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean + tags?: ChallengeUpdatetagsInput | string[] + groups?: ChallengeUpdategroupsInput | string[] + taskIsTask?: BoolFieldUpdateOperationsInput | boolean + taskIsAssigned?: BoolFieldUpdateOperationsInput | boolean + taskMemberId?: NullableStringFieldUpdateOperationsInput | string | null + submissionStartDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + submissionEndDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + registrationStartDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + registrationEndDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + startDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + endDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + status?: EnumChallengeStatusEnumFieldUpdateOperationsInput | $Enums.ChallengeStatusEnum + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdBy?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedBy?: StringFieldUpdateOperationsInput | string + billingRecord?: ChallengeBillingUpdateOneWithoutChallengeNestedInput + legacyRecord?: ChallengeLegacyUpdateOneWithoutChallengeNestedInput + constraintRecord?: ChallengeConstraintUpdateOneWithoutChallengeNestedInput + events?: ChallengeEventUpdateManyWithoutChallengeNestedInput + discussions?: ChallengeDiscussionUpdateManyWithoutChallengeNestedInput + metadata?: ChallengeMetadataUpdateManyWithoutChallengeNestedInput + phases?: ChallengePhaseUpdateManyWithoutChallengeNestedInput + prizeSets?: ChallengePrizeSetUpdateManyWithoutChallengeNestedInput + reviewers?: ChallengeReviewerUpdateManyWithoutChallengeNestedInput + winners?: ChallengeWinnerUpdateManyWithoutChallengeNestedInput + attachments?: AttachmentUpdateManyWithoutChallengeNestedInput + terms?: ChallengeTermUpdateManyWithoutChallengeNestedInput + skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput + auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput + memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput + track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput + timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput + } + + export type ChallengeUncheckedUpdateWithoutUserWhitelistInput = { + id?: StringFieldUpdateOperationsInput | string + name?: StringFieldUpdateOperationsInput | string + description?: NullableStringFieldUpdateOperationsInput | string | null + privateDescription?: NullableStringFieldUpdateOperationsInput | string | null + challengeSource?: NullableStringFieldUpdateOperationsInput | string | null + descriptionFormat?: NullableStringFieldUpdateOperationsInput | string | null + projectId?: NullableIntFieldUpdateOperationsInput | number | null + typeId?: StringFieldUpdateOperationsInput | string + trackId?: StringFieldUpdateOperationsInput | string + timelineTemplateId?: NullableStringFieldUpdateOperationsInput | string | null + overviewTotalPrizes?: NullableFloatFieldUpdateOperationsInput | number | null + numOfRegistrants?: IntFieldUpdateOperationsInput | number + numOfSubmissions?: IntFieldUpdateOperationsInput | number + numOfCheckpointSubmissions?: IntFieldUpdateOperationsInput | number + currentPhaseNames?: ChallengeUpdatecurrentPhaseNamesInput | string[] + wiproAllowed?: BoolFieldUpdateOperationsInput | boolean + funChallenge?: BoolFieldUpdateOperationsInput | boolean + tags?: ChallengeUpdatetagsInput | string[] + groups?: ChallengeUpdategroupsInput | string[] + taskIsTask?: BoolFieldUpdateOperationsInput | boolean + taskIsAssigned?: BoolFieldUpdateOperationsInput | boolean + taskMemberId?: NullableStringFieldUpdateOperationsInput | string | null + submissionStartDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + submissionEndDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + registrationStartDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + registrationEndDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + startDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + endDate?: NullableDateTimeFieldUpdateOperationsInput | Date | string | null + legacyId?: NullableIntFieldUpdateOperationsInput | number | null + status?: EnumChallengeStatusEnumFieldUpdateOperationsInput | $Enums.ChallengeStatusEnum + createdAt?: DateTimeFieldUpdateOperationsInput | Date | string + createdBy?: StringFieldUpdateOperationsInput | string + updatedAt?: DateTimeFieldUpdateOperationsInput | Date | string + updatedBy?: StringFieldUpdateOperationsInput | string + billingRecord?: ChallengeBillingUncheckedUpdateOneWithoutChallengeNestedInput + legacyRecord?: ChallengeLegacyUncheckedUpdateOneWithoutChallengeNestedInput + constraintRecord?: ChallengeConstraintUncheckedUpdateOneWithoutChallengeNestedInput + events?: ChallengeEventUncheckedUpdateManyWithoutChallengeNestedInput + discussions?: ChallengeDiscussionUncheckedUpdateManyWithoutChallengeNestedInput + metadata?: ChallengeMetadataUncheckedUpdateManyWithoutChallengeNestedInput + phases?: ChallengePhaseUncheckedUpdateManyWithoutChallengeNestedInput + prizeSets?: ChallengePrizeSetUncheckedUpdateManyWithoutChallengeNestedInput + reviewers?: ChallengeReviewerUncheckedUpdateManyWithoutChallengeNestedInput + winners?: ChallengeWinnerUncheckedUpdateManyWithoutChallengeNestedInput + attachments?: AttachmentUncheckedUpdateManyWithoutChallengeNestedInput + terms?: ChallengeTermUncheckedUpdateManyWithoutChallengeNestedInput + skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput + auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput + memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + } + export type ChallengeCreateWithoutTypeInput = { id?: string name: string @@ -45607,6 +47211,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput } @@ -45660,6 +47265,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutTypeInput = { @@ -45931,6 +47537,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput } @@ -45984,6 +47591,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutTrackInput = { @@ -46414,6 +48022,7 @@ export namespace Prisma { terms?: ChallengeTermCreateNestedManyWithoutChallengeInput skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -46468,6 +48077,7 @@ export namespace Prisma { terms?: ChallengeTermUncheckedCreateNestedManyWithoutChallengeInput skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutAuditLogsInput = { @@ -46532,6 +48142,7 @@ export namespace Prisma { terms?: ChallengeTermUpdateManyWithoutChallengeNestedInput skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -46586,6 +48197,7 @@ export namespace Prisma { terms?: ChallengeTermUncheckedUpdateManyWithoutChallengeNestedInput skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutAttachmentsInput = { @@ -46634,6 +48246,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -46688,6 +48301,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutAttachmentsInput = { @@ -46752,6 +48366,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -46806,6 +48421,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutMetadataInput = { @@ -46854,6 +48470,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -46908,6 +48525,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutMetadataInput = { @@ -46972,6 +48590,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -47026,6 +48645,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengePrizeSetCreateWithoutPrizesInput = { @@ -47134,6 +48754,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -47188,6 +48809,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutWinnersInput = { @@ -47252,6 +48874,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -47306,6 +48929,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutTermsInput = { @@ -47354,6 +48978,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -47408,6 +49033,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutTermsInput = { @@ -47472,6 +49098,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -47526,6 +49153,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutSkillsInput = { @@ -47574,6 +49202,7 @@ export namespace Prisma { terms?: ChallengeTermCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -47628,6 +49257,7 @@ export namespace Prisma { terms?: ChallengeTermUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutSkillsInput = { @@ -47692,6 +49322,7 @@ export namespace Prisma { terms?: ChallengeTermUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -47746,6 +49377,7 @@ export namespace Prisma { terms?: ChallengeTermUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutBillingRecordInput = { @@ -47794,6 +49426,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -47848,6 +49481,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutBillingRecordInput = { @@ -47912,6 +49546,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -47966,6 +49601,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutLegacyRecordInput = { @@ -48014,6 +49650,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -48068,6 +49705,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutLegacyRecordInput = { @@ -48132,6 +49770,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -48186,6 +49825,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutEventsInput = { @@ -48234,6 +49874,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -48288,6 +49929,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutEventsInput = { @@ -48352,6 +49994,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -48406,6 +50049,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutDiscussionsInput = { @@ -48454,6 +50098,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -48508,6 +50153,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutDiscussionsInput = { @@ -48602,6 +50248,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -48656,6 +50303,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeDiscussionOptionUpsertWithWhereUniqueWithoutDiscussionInput = { @@ -48806,6 +50454,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -48860,6 +50509,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutConstraintRecordInput = { @@ -48924,6 +50574,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -48978,6 +50629,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengePhaseCreateWithoutPhaseInput = { @@ -49250,6 +50902,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -49304,6 +50957,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutPhasesInput = { @@ -49431,6 +51085,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -49485,6 +51140,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type PhaseUpsertWithoutChallengePhasesInput = { @@ -49696,6 +51352,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -49750,6 +51407,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutPrizeSetsInput = { @@ -49845,6 +51503,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -49899,6 +51558,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeCreateWithoutReviewersInput = { @@ -49947,6 +51607,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput timelineTemplate?: TimelineTemplateCreateNestedOneWithoutChallengesInput @@ -50001,6 +51662,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutReviewersInput = { @@ -50098,6 +51760,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput @@ -50152,6 +51815,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type PhaseUpsertWithoutChallengeReviewerInput = { @@ -50616,6 +52280,7 @@ export namespace Prisma { skills?: ChallengeSkillCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistCreateNestedManyWithoutChallengeInput type: ChallengeTypeCreateNestedOneWithoutChallengesInput track: ChallengeTrackCreateNestedOneWithoutChallengesInput } @@ -50669,6 +52334,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedCreateNestedManyWithoutChallengeInput auditLogs?: AuditLogUncheckedCreateNestedManyWithoutChallengeInput memberAccesses?: MemberChallengeAccessUncheckedCreateNestedManyWithoutChallengeInput + userWhitelist?: ChallengeUserWhitelistUncheckedCreateNestedManyWithoutChallengeInput } export type ChallengeCreateOrConnectWithoutTimelineTemplateInput = { @@ -51017,6 +52683,10 @@ export namespace Prisma { memberId?: string | null } + export type ChallengeUserWhitelistCreateManyChallengeInput = { + userId: string + } + export type ChallengeEventUpdateWithoutChallengeInput = { id?: StringFieldUpdateOperationsInput | string eventId?: IntFieldUpdateOperationsInput | number @@ -51438,6 +53108,18 @@ export namespace Prisma { memberId?: StringFieldUpdateOperationsInput | string } + export type ChallengeUserWhitelistUpdateWithoutChallengeInput = { + userId?: StringFieldUpdateOperationsInput | string + } + + export type ChallengeUserWhitelistUncheckedUpdateWithoutChallengeInput = { + userId?: StringFieldUpdateOperationsInput | string + } + + export type ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeInput = { + userId?: StringFieldUpdateOperationsInput | string + } + export type ChallengeCreateManyTypeInput = { id?: string name: string @@ -51553,6 +53235,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput } @@ -51606,6 +53289,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeUncheckedUpdateManyWithoutTypeInput = { @@ -51855,6 +53539,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput timelineTemplate?: TimelineTemplateUpdateOneWithoutChallengesNestedInput } @@ -51908,6 +53593,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeUncheckedUpdateManyWithoutTrackInput = { @@ -52588,6 +54274,7 @@ export namespace Prisma { skills?: ChallengeSkillUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUpdateManyWithoutChallengeNestedInput type?: ChallengeTypeUpdateOneRequiredWithoutChallengesNestedInput track?: ChallengeTrackUpdateOneRequiredWithoutChallengesNestedInput } @@ -52641,6 +54328,7 @@ export namespace Prisma { skills?: ChallengeSkillUncheckedUpdateManyWithoutChallengeNestedInput auditLogs?: AuditLogUncheckedUpdateManyWithoutChallengeNestedInput memberAccesses?: MemberChallengeAccessUncheckedUpdateManyWithoutChallengeNestedInput + userWhitelist?: ChallengeUserWhitelistUncheckedUpdateManyWithoutChallengeNestedInput } export type ChallengeUncheckedUpdateManyWithoutTimelineTemplateInput = { diff --git a/packages/challenge-prisma-client/index.js b/packages/challenge-prisma-client/index.js index f485946..2638355 100644 --- a/packages/challenge-prisma-client/index.js +++ b/packages/challenge-prisma-client/index.js @@ -131,6 +131,11 @@ exports.Prisma.ChallengeScalarFieldEnum = { updatedBy: 'updatedBy' }; +exports.Prisma.ChallengeUserWhitelistScalarFieldEnum = { + challengeId: 'challengeId', + userId: 'userId' +}; + exports.Prisma.ChallengeTypeScalarFieldEnum = { id: 'id', name: 'name', @@ -492,6 +497,11 @@ exports.Prisma.ChallengeOrderByRelevanceFieldEnum = { updatedBy: 'updatedBy' }; +exports.Prisma.ChallengeUserWhitelistOrderByRelevanceFieldEnum = { + challengeId: 'challengeId', + userId: 'userId' +}; + exports.Prisma.ChallengeTypeOrderByRelevanceFieldEnum = { id: 'id', name: 'name', @@ -772,6 +782,7 @@ exports.ReviewOpportunityTypeEnum = exports.$Enums.ReviewOpportunityTypeEnum = { exports.Prisma.ModelName = { Challenge: 'Challenge', + ChallengeUserWhitelist: 'ChallengeUserWhitelist', ChallengeType: 'ChallengeType', ChallengeTrack: 'ChallengeTrack', ChallengeTimelineTemplate: 'ChallengeTimelineTemplate', @@ -853,8 +864,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 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", + "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 userWhitelist ChallengeUserWhitelist[]\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// Challenge user whitelist - member/challenge pairs allowed to access restricted challenges\n//////////////////////////////////////////\n\nmodel ChallengeUserWhitelist {\n challengeId String\n userId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n @@id([challengeId, userId])\n @@index([challengeId])\n @@index([userId])\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": "6753f3f63bc1895caf833af5127cc8a05e8be5541a69a7584ca96249e47fe064", "copyEngine": true } @@ -875,7 +886,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\":\"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\":{}}") +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\":\"userWhitelist\",\"kind\":\"object\",\"isList\":true,\"isRequired\":true,\"isUnique\":false,\"isId\":false,\"isReadOnly\":false,\"hasDefaultValue\":false,\"type\":\"ChallengeUserWhitelist\",\"nativeType\":null,\"relationName\":\"ChallengeToChallengeUserWhitelist\",\"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},\"ChallengeUserWhitelist\":{\"dbName\":null,\"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\":\"userId\",\"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\":\"ChallengeToChallengeUserWhitelist\",\"relationFromFields\":[\"challengeId\"],\"relationToFields\":[\"id\"],\"relationOnDelete\":\"Cascade\",\"isGenerated\":false,\"isUpdatedAt\":false}],\"primaryKey\":{\"name\":null,\"fields\":[\"challengeId\",\"userId\"]},\"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 b098a5b..9fa6974 100644 --- a/packages/challenge-prisma-client/package.json +++ b/packages/challenge-prisma-client/package.json @@ -1,5 +1,5 @@ { - "name": "prisma-client-e2cf38d434b78ed912a564b65835f204eb8d7146f275867a9db51b0649d6da72", + "name": "prisma-client-e744e9b1efacd7e6351c1e7f027a0b525a969a43ec500294d88aab18d33d9ec0", "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 9e38a96..2d8e0a4 100644 --- a/packages/challenge-prisma-client/schema.prisma +++ b/packages/challenge-prisma-client/schema.prisma @@ -137,6 +137,7 @@ model Challenge { skills ChallengeSkill[] auditLogs AuditLog[] memberAccesses MemberChallengeAccess[] + userWhitelist ChallengeUserWhitelist[] // Relation to ChallengeType (FK: typeId) type ChallengeType @relation(fields: [typeId], references: [id]) @@ -171,6 +172,21 @@ model Challenge { @@index([projectId, status]) } +////////////////////////////////////////// +// Challenge user whitelist - member/challenge pairs allowed to access restricted challenges +////////////////////////////////////////// + +model ChallengeUserWhitelist { + challengeId String + userId String + + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + + @@id([challengeId, userId]) + @@index([challengeId]) + @@index([userId]) +} + ////////////////////////////////////////// // MemberChallengeAccess view – member/challenge pairs from resources schema ////////////////////////////////////////// diff --git a/packages/challenge-prisma-client/wasm.js b/packages/challenge-prisma-client/wasm.js index 0e47dd7..8cd5d7d 100644 --- a/packages/challenge-prisma-client/wasm.js +++ b/packages/challenge-prisma-client/wasm.js @@ -130,6 +130,11 @@ exports.Prisma.ChallengeScalarFieldEnum = { updatedBy: 'updatedBy' }; +exports.Prisma.ChallengeUserWhitelistScalarFieldEnum = { + challengeId: 'challengeId', + userId: 'userId' +}; + exports.Prisma.ChallengeTypeScalarFieldEnum = { id: 'id', name: 'name', @@ -491,6 +496,11 @@ exports.Prisma.ChallengeOrderByRelevanceFieldEnum = { updatedBy: 'updatedBy' }; +exports.Prisma.ChallengeUserWhitelistOrderByRelevanceFieldEnum = { + challengeId: 'challengeId', + userId: 'userId' +}; + exports.Prisma.ChallengeTypeOrderByRelevanceFieldEnum = { id: 'id', name: 'name', @@ -771,6 +781,7 @@ exports.ReviewOpportunityTypeEnum = exports.$Enums.ReviewOpportunityTypeEnum = { exports.Prisma.ModelName = { Challenge: 'Challenge', + ChallengeUserWhitelist: 'ChallengeUserWhitelist', ChallengeType: 'ChallengeType', ChallengeTrack: 'ChallengeTrack', ChallengeTimelineTemplate: 'ChallengeTimelineTemplate', @@ -852,13 +863,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 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", + "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 userWhitelist ChallengeUserWhitelist[]\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// Challenge user whitelist - member/challenge pairs allowed to access restricted challenges\n//////////////////////////////////////////\n\nmodel ChallengeUserWhitelist {\n challengeId String\n userId String\n\n challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade)\n\n @@id([challengeId, userId])\n @@index([challengeId])\n @@index([userId])\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": "6753f3f63bc1895caf833af5127cc8a05e8be5541a69a7584ca96249e47fe064", "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\":\"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\":{}}") +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\":\"userWhitelist\",\"kind\":\"object\",\"type\":\"ChallengeUserWhitelist\",\"relationName\":\"ChallengeToChallengeUserWhitelist\"},{\"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},\"ChallengeUserWhitelist\":{\"fields\":[{\"name\":\"challengeId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"userId\",\"kind\":\"scalar\",\"type\":\"String\"},{\"name\":\"challenge\",\"kind\":\"object\",\"type\":\"Challenge\",\"relationName\":\"ChallengeToChallengeUserWhitelist\"}],\"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/20260427090000_add_challenge_user_whitelist/migration.sql b/prisma/migrations/20260427090000_add_challenge_user_whitelist/migration.sql new file mode 100644 index 0000000..eb29322 --- /dev/null +++ b/prisma/migrations/20260427090000_add_challenge_user_whitelist/migration.sql @@ -0,0 +1,16 @@ +-- CreateTable +CREATE TABLE "ChallengeUserWhitelist" ( + "challengeId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + + CONSTRAINT "ChallengeUserWhitelist_pkey" PRIMARY KEY ("challengeId", "userId") +); + +-- CreateIndex +CREATE INDEX "ChallengeUserWhitelist_challengeId_idx" ON "ChallengeUserWhitelist"("challengeId"); + +-- CreateIndex +CREATE INDEX "ChallengeUserWhitelist_userId_idx" ON "ChallengeUserWhitelist"("userId"); + +-- AddForeignKey +ALTER TABLE "ChallengeUserWhitelist" ADD CONSTRAINT "ChallengeUserWhitelist_challengeId_fkey" FOREIGN KEY ("challengeId") REFERENCES "Challenge"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/20260429123000_add_challenge_approval_status/migration.sql b/prisma/migrations/20260429123000_add_challenge_approval_status/migration.sql new file mode 100644 index 0000000..0e39a1e --- /dev/null +++ b/prisma/migrations/20260429123000_add_challenge_approval_status/migration.sql @@ -0,0 +1,7 @@ +-- Add budget approval workflow fields for challenge launch gating. +CREATE TYPE "ChallengeApprovalStatusEnum" AS ENUM ('PENDING_APPROVAL', 'APPROVED', 'REJECTED'); + +ALTER TABLE "Challenge" +ADD COLUMN "approvalStatus" "ChallengeApprovalStatusEnum" NOT NULL DEFAULT 'PENDING_APPROVAL', +ADD COLUMN "approvalRejectionReason" TEXT, +ADD COLUMN "approvalApprovedBy" TEXT; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 0ee5b96..e7cab37 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -61,6 +61,12 @@ enum PrizeSetTypeEnum { CHECKPOINT } +enum ChallengeApprovalStatusEnum { + PENDING_APPROVAL + APPROVED + REJECTED +} + // Enum for review opportunity types on reviewers enum ReviewOpportunityTypeEnum { REGULAR_REVIEW @@ -118,6 +124,9 @@ model Challenge { // Additional fields from createChallenge schema status ChallengeStatusEnum @default(NEW) // new challenges default to status "New" + approvalStatus ChallengeApprovalStatusEnum @default(PENDING_APPROVAL) + approvalRejectionReason String? + approvalApprovedBy String? // Normalized top‑level constraints (e.g. allowedRegistrants) for a challenge constraintRecord ChallengeConstraint? @@ -137,6 +146,7 @@ model Challenge { skills ChallengeSkill[] auditLogs AuditLog[] memberAccesses MemberChallengeAccess[] + userWhitelist ChallengeUserWhitelist[] // Relation to ChallengeType (FK: typeId) type ChallengeType @relation(fields: [typeId], references: [id]) @@ -171,6 +181,21 @@ model Challenge { @@index([projectId, status]) } +////////////////////////////////////////// +// Challenge user whitelist - member/challenge pairs allowed to access restricted challenges +////////////////////////////////////////// + +model ChallengeUserWhitelist { + challengeId String + userId String + + challenge Challenge @relation(fields: [challengeId], references: [id], onDelete: Cascade) + + @@id([challengeId, userId]) + @@index([challengeId]) + @@index([userId]) +} + ////////////////////////////////////////// // MemberChallengeAccess view – member/challenge pairs from resources schema ////////////////////////////////////////// diff --git a/src/common/challenge-helper.js b/src/common/challenge-helper.js index a319c36..896f689 100644 --- a/src/common/challenge-helper.js +++ b/src/common/challenge-helper.js @@ -132,11 +132,13 @@ class ChallengeHelper { /** * Validate Challenge skills. - * @param {Object} challenge the challenge - * @param {oldChallenge} challenge the old challenge data + * @param {Object} challenge the challenge payload. When skills are omitted they are left + * unchanged. + * @param {Object} oldChallenge the old challenge data used to block skill edits on completed + * challenges */ async validateSkills(challenge, oldChallenge) { - if (!challenge.skills || _.isEmpty(challenge.skills)) { + if (!challenge.skills) { return; } diff --git a/src/common/helper.js b/src/common/helper.js index 995f49c..8b9bcd4 100644 --- a/src/common/helper.js +++ b/src/common/helper.js @@ -18,11 +18,13 @@ const logger = require("./logger"); const projectHelper = require("./project-helper"); const m2mHelper = require("./m2m-helper"); const { hasAdminRole } = require("./role-helper"); +const { getClient } = require("./prisma"); const DISABLED_TOPICS = new Set(constants.DisabledTopics || []); const PROJECT_WRITE_ACCESS_ROLES = new Set(["manager", "copilot", "customer", "write"]); const PROJECT_MANAGER_ACCESS_ROLES = new Set(["manager"]); const PROJECT_TASK_VIEW_ACCESS_ROLES = new Set(["manager", "copilot"]); +const prisma = getClient(); // Bus API Client let busApiClient; @@ -110,7 +112,7 @@ function setResHeaders(req, res, result) { if (totalPages > 0) { let link = `<${getPageLink(req, 1)}>; rel="first", <${getPageLink( req, - totalPages + totalPages, )}>; rel="last"`; if (parseInt(result.page, 10) > 1) { link += `, <${getPageLink(req, parseInt(result.page, 10) - 1)}>; rel="prev"`; @@ -136,7 +138,7 @@ function _sanitizeObject(obj) { return `Array(${value.length})`; } return value; - }) + }), ); } catch (e) { return obj; @@ -207,14 +209,14 @@ async function downloadFromFileStack(url) { async function downloadFromS3(bucket, key) { const command = new GetObjectCommand({ Bucket: bucket, Key: key }); const response = await s3Client.send(command); - + // Convert the readable stream to buffer const chunks = []; for await (const chunk of response.Body) { chunks.push(chunk); } const buffer = Buffer.concat(chunks); - + return { data: buffer, mimetype: response.ContentType, @@ -243,7 +245,7 @@ async function getChallengeResources(challengeId, roleId = null) { let page = 1; let result = []; logger.debug( - `helper.getChallengeResources: start challenge ${challengeId}${roleId ? ` role ${roleId}` : ""}` + `helper.getChallengeResources: start challenge ${challengeId}${roleId ? ` role ${roleId}` : ""}`, ); while (true) { const url = `${ @@ -260,16 +262,18 @@ async function getChallengeResources(challengeId, roleId = null) { }); } catch (err) { logger.debug( - `helper.getChallengeResources: error page ${page} for challenge ${challengeId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.getChallengeResources: error page ${page} for challenge ${challengeId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } logger.debug( `helper.getChallengeResources: page ${page} -> status ${res.status}, items ${ _.get(res, "data.length", 0) || 0 - }` + }`, ); if (!res.data || res.data.length === 0) { break; @@ -299,14 +303,16 @@ async function getChallengeResourcesCount(challengeId, roleId = null) { headers: { Authorization: `Bearer ${token}` }, }); logger.debug( - `helper.getChallengeResourcesCount: response status ${res.status} for challenge ${challengeId}` + `helper.getChallengeResourcesCount: response status ${res.status} for challenge ${challengeId}`, ); return res.data; } catch (err) { logger.debug( - `helper.getChallengeResourcesCount: error for challenge ${challengeId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.getChallengeResourcesCount: error for challenge ${challengeId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } @@ -350,7 +356,7 @@ axiosRetry(axios, { }, onRetry: (retryCount, error, requestConfig) => logger.info( - `${error.message} while calling: ${requestConfig.url} - retry count: ${retryCount}` + `${error.message} while calling: ${requestConfig.url} - retry count: ${retryCount}`, ), retryDelay: exponentialDelay, }); @@ -409,15 +415,17 @@ async function getProjectPayment(projectId) { logger.debug( `helper.getProjectPayment: response status ${res.status} (records=${ _.get(res, "data.length", 0) || 0 - })` + })`, ); const [payment] = res.data; return payment; } catch (err) { logger.debug( - `helper.getProjectPayment: error for project ${projectId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.getProjectPayment: error for project ${projectId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } @@ -441,9 +449,11 @@ async function capturePayment(paymentId) { return res.data; } catch (err) { logger.debug( - `helper.capturePayment: error for payment ${paymentId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.capturePayment: error for payment ${paymentId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } @@ -466,9 +476,11 @@ async function cancelPayment(paymentId) { return res.data; } catch (err) { logger.debug( - `helper.cancelPayment: error for payment ${paymentId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.cancelPayment: error for payment ${paymentId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } @@ -495,15 +507,59 @@ async function generateChallengePayments(challengeId) { {}, { headers: { Authorization: `Bearer ${token}` }, - } + }, ); logger.debug(`helper.generateChallengePayments: response status ${res.status}`); return res.status >= 200 && res.status < 300; } catch (err) { logger.debug( - `helper.generateChallengePayments: error for challenge ${challengeId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.generateChallengePayments: error for challenge ${challengeId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, + ); + return false; + } +} + +/** + * Trigger member-api to rerate all rating dimensions for submitters on a completed challenge. + * Member-api owns the rating dimension selection, including native track/type + * ratings and configured named rating paths such as AI. + * @param {String|Number} challengeId the completed challenge id + * @returns {Boolean} true if member-api accepted the request, false otherwise + */ +async function rerateChallengeSubmitterRatings(challengeId) { + if (!config.MEMBERS_API_URL) { + logger.warn("helper.rerateChallengeSubmitterRatings: MEMBERS_API_URL not configured"); + return false; + } + + const baseUrl = String(config.MEMBERS_API_URL).replace(/\/+$/, ""); + const url = `${baseUrl}/stats/rerate-challenge`; + logger.debug(`helper.rerateChallengeSubmitterRatings: POST ${url}`); + + try { + const token = await m2mHelper.getM2MToken(); + const res = await axios.post( + url, + { challengeId }, + { + headers: { Authorization: `Bearer ${token}` }, + }, + ); + logger.debug( + `helper.rerateChallengeSubmitterRatings: response status ${res.status} for challenge ${challengeId}`, + ); + return res.status >= 200 && res.status < 300; + } catch (err) { + logger.debug( + `helper.rerateChallengeSubmitterRatings: error for challenge ${challengeId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); return false; } @@ -543,14 +599,16 @@ async function cancelProject(projectId, cancelReason, currentUser) { paymentStatus: payment.status, }, }, - { headers: { Authorization: `Bearer ${token}` } } + { headers: { Authorization: `Bearer ${token}` } }, ); logger.debug(`helper.cancelProject: PATCH success for project ${projectId}`); } catch (err) { logger.debug( - `helper.cancelProject: error for project ${projectId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.cancelProject: error for project ${projectId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } @@ -576,7 +634,7 @@ async function activateProject(projectId, currentUser, name, description) { await cancelProject( projectId, `Failed to charge payment ${payment.id} with error: ${e.message}`, - currentUser + currentUser, ); throw new Error(`Failed to charge payment ${payment.id} with error: ${e.message}`); } @@ -601,13 +659,15 @@ async function activateProject(projectId, currentUser, name, description) { paymentStatus: payment.status, }, }, - { headers: { Authorization: `Bearer ${token}` } } + { headers: { Authorization: `Bearer ${token}` } }, ); } catch (err) { logger.debug( - `helper.activateProject: error for project ${projectId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.activateProject: error for project ${projectId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } @@ -647,16 +707,16 @@ async function updateSelfServiceProjectInfo(projectId, workItemPlannedEndDate, c workItemPlannedEndDate, }, }, - { headers: { Authorization: `Bearer ${token}` } } - ); - logger.debug( - `helper.updateSelfServiceProjectInfo: PATCH success for project ${projectId}` + { headers: { Authorization: `Bearer ${token}` } }, ); + logger.debug(`helper.updateSelfServiceProjectInfo: PATCH success for project ${projectId}`); } catch (err) { logger.debug( - `helper.updateSelfServiceProjectInfo: error for project ${projectId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.updateSelfServiceProjectInfo: error for project ${projectId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } @@ -684,7 +744,7 @@ async function userHasFullAccess(challengeId, userId, challengeResources) { const resourceRoles = await getResourceRoles(); const rolesWithFullAccess = _.map( _.filter(resourceRoles, (r) => r.fullWriteAccess), - "id" + "id", ); if (!challengeResources) { challengeResources = await getChallengeResources(challengeId); @@ -693,7 +753,7 @@ async function userHasFullAccess(challengeId, userId, challengeResources) { _.filter( challengeResources, (r) => - _.toString(r.memberId) === _.toString(userId) && _.includes(rolesWithFullAccess, r.roleId) + _.toString(r.memberId) === _.toString(userId) && _.includes(rolesWithFullAccess, r.roleId), ).length > 0 ); } @@ -715,7 +775,7 @@ async function userHasProjectWriteAccess(projectId, currentUser) { const project = await projectHelper.getProject(projectId, currentUser); const member = _.find( _.get(project, "members", []), - (m) => _.toString(m.userId) === _.toString(currentUser.userId) + (m) => _.toString(m.userId) === _.toString(currentUser.userId), ); const role = _.toLower(_.get(member, "role", "")); return PROJECT_WRITE_ACCESS_ROLES.has(role); @@ -727,7 +787,7 @@ async function userHasProjectWriteAccess(projectId, currentUser) { logger.debug( `helper.userHasProjectWriteAccess: error for project ${projectId} - status ${ status || "n/a" - }: ${err.message}` + }: ${err.message}`, ); return false; } @@ -750,7 +810,7 @@ async function userHasProjectManagerAccess(projectId, currentUser) { const project = await projectHelper.getProject(projectId, currentUser); const member = _.find( _.get(project, "members", []), - (m) => _.toString(m.userId) === _.toString(currentUser.userId) + (m) => _.toString(m.userId) === _.toString(currentUser.userId), ); const role = _.toLower(_.get(member, "role", "")); return PROJECT_MANAGER_ACCESS_ROLES.has(role); @@ -762,7 +822,7 @@ async function userHasProjectManagerAccess(projectId, currentUser) { logger.debug( `helper.userHasProjectManagerAccess: error for project ${projectId} - status ${ status || "n/a" - }: ${err.message}` + }: ${err.message}`, ); return false; } @@ -785,7 +845,7 @@ async function userHasProjectTaskViewAccess(projectId, currentUser) { const project = await projectHelper.getProject(projectId, currentUser); const member = _.find( _.get(project, "members", []), - (m) => _.toString(m.userId) === _.toString(currentUser.userId) + (m) => _.toString(m.userId) === _.toString(currentUser.userId), ); const role = _.toLower(_.get(member, "role", "")); return PROJECT_TASK_VIEW_ACCESS_ROLES.has(role); @@ -797,7 +857,7 @@ async function userHasProjectTaskViewAccess(projectId, currentUser) { logger.debug( `helper.userHasProjectTaskViewAccess: error for project ${projectId} - status ${ status || "n/a" - }: ${err.message}` + }: ${err.message}`, ); return false; } @@ -857,14 +917,16 @@ async function getCompleteUserGroupTreeIds(userId) { logger.debug( `helper.getCompleteUserGroupTreeIds: response status ${result.status} (groups=${ normalizedGroupIds.length - })` + })`, ); return normalizedGroupIds; } catch (err) { logger.debug( - `helper.getCompleteUserGroupTreeIds: error for user ${userId} - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.getCompleteUserGroupTreeIds: error for user ${userId} - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } @@ -1023,7 +1085,7 @@ function getBusApiClient() { "BUSAPI_URL", "KAFKA_ERROR_TOPIC", "AUTH0_PROXY_SERVER_URL", - ]) + ]), ); } @@ -1053,15 +1115,13 @@ async function postBusEvent(topic, payload, options = {}) { message.key = options.key; } logger.debug( - `helper.postBusEvent: publishing topic ${topic}${options.key ? ` key ${options.key}` : ""}` + `helper.postBusEvent: publishing topic ${topic}${options.key ? ` key ${options.key}` : ""}`, ); try { await client.postEvent(message); logger.debug(`helper.postBusEvent: publish complete for topic ${topic}`); } catch (err) { - logger.debug( - `helper.postBusEvent: error publishing topic ${topic} - ${err.message}` - ); + logger.debug(`helper.postBusEvent: error publishing topic ${topic} - ${err.message}`); throw err; } } @@ -1112,7 +1172,7 @@ async function listResourcesByMemberAndChallenge(memberId, challengeId) { } catch (e) { logger.debug( `Failed to get resources on challenge ${challengeId} that memberId ${memberId} has`, - e + e, ); } const result = response.data || []; @@ -1160,7 +1220,7 @@ function dedupeChallengeTerms(terms = []) { const idKey = _.toString(term.id).trim(); const roleKey = _.isNil(term.roleId) ? "" : _.toString(term.roleId).trim(); return `${idKey}:${roleKey}`; - } + }, ); } @@ -1187,7 +1247,7 @@ async function validateChallengeTerms(terms = []) { } catch (e) { if (_.get(e, "response.status") === HttpStatus.NOT_FOUND) { throw new errors.BadRequestError( - `Terms of use identified by the id ${term.id} does not exist` + `Terms of use identified by the id ${term.id} does not exist`, ); } else { // re-throw other error @@ -1199,6 +1259,115 @@ async function validateChallengeTerms(terms = []) { return listOfTerms; } +/** + * Determine whether challenge whitelist checks apply for a request. + * Interactive users, including admins and anonymous callers, must be evaluated; + * M2M callers are allowed to bypass this user-facing access control. + * + * @param {Object} currentUser the user who performs the operation + * @returns {Boolean} true when whitelist rules should be applied + */ +function shouldApplyChallengeWhitelist(currentUser) { + return !_.get(currentUser, "isMachine", false); +} + +/** + * Build a Prisma filter that hides restricted challenges from interactive + * challenge listing queries. Challenges with no whitelist rows stay visible. + * + * @param {Object} currentUser the user who performs the operation + * @returns {Object|null} Prisma where fragment, or null for M2M callers + */ +function getChallengeWhitelistAccessFilter(currentUser) { + if (!shouldApplyChallengeWhitelist(currentUser)) { + return null; + } + + const userId = _.toString(_.get(currentUser, "userId", "")).trim(); + if (!userId) { + return { + userWhitelist: { + none: {}, + }, + }; + } + + return { + OR: [ + { + userWhitelist: { + none: {}, + }, + }, + { + userWhitelist: { + some: { userId }, + }, + }, + ], + }; +} + +/** + * Evaluate challenge whitelist access for a single direct challenge request. + * A challenge is unrestricted when it has no whitelist rows. Evaluation errors + * fail closed for interactive users. + * + * @param {Object} currentUser the user who performs the operation + * @param {String} challengeId the challenge id to evaluate + * @returns {Promise} true when the caller may access the challenge + */ +async function canAccessChallengeByWhitelist(currentUser, challengeId) { + if (!shouldApplyChallengeWhitelist(currentUser)) { + return true; + } + + if (!challengeId) { + return false; + } + + const userId = _.toString(_.get(currentUser, "userId", "")).trim(); + + try { + const totalRows = await prisma.challengeUserWhitelist.count({ + where: { challengeId }, + }); + + if (totalRows === 0) { + return true; + } + + if (!userId) { + return false; + } + + const matchingRows = await prisma.challengeUserWhitelist.count({ + where: { challengeId, userId }, + }); + return matchingRows > 0; + } catch (err) { + logger.warn( + `helper.canAccessChallengeByWhitelist: failed for challenge ${challengeId}: ${err.message}`, + ); + return false; + } +} + +/** + * Ensure an interactive caller is allowed by the challenge whitelist. + * + * @param {Object} currentUser the user who performs the operation + * @param {String} challengeId the challenge id to evaluate + * @returns {Promise} + * @throws {ForbiddenError} when the whitelist blocks the caller or evaluation fails + */ +async function ensureChallengeWhitelistAccess(currentUser, challengeId) { + const allowed = await canAccessChallengeByWhitelist(currentUser, challengeId); + if (!allowed) { + throw new errors.ForbiddenError(`You don't have access to view this challenge`); + } +} + /** * Filter challenges by groups access * @param {Object} currentUser the user who perform operation @@ -1217,7 +1386,7 @@ async function _filterChallengesByGroupsAccess(currentUser, challenges) { for (const challenge of challenges) { challenge.groups = _.filter( challenge.groups, - (g) => !_.includes(["null", "undefined"], _.toString(g).toLowerCase()) + (g) => !_.includes(["null", "undefined"], _.toString(g).toLowerCase()), ); if ( !challenge.groups || @@ -1247,7 +1416,7 @@ async function ensureAccessibleByGroupsAccess(currentUser, challenge) { const filtered = await _filterChallengesByGroupsAccess(currentUser, [challenge]); if (filtered.length === 0) { throw new errors.ForbiddenError( - "helper ensureAcessibilityToModifiedGroups :: You don't have access to this group!" + "helper ensureAcessibilityToModifiedGroups :: You don't have access to this group!", ); } } @@ -1282,10 +1451,7 @@ async function syncTaskAssignmentFromResources(challenge) { } let isAssigned = taskInfo.isAssigned || !_.isNil(taskInfo.memberId); if (!isAssigned) { - const counts = await getChallengeResourcesCount( - challenge.id, - config.SUBMITTER_ROLE_ID - ); + const counts = await getChallengeResourcesCount(challenge.id, config.SUBMITTER_ROLE_ID); const submitterCount = _.get(counts, config.SUBMITTER_ROLE_ID, 0); if (submitterCount > 0) { isAssigned = true; @@ -1323,18 +1489,17 @@ async function _ensureAccessibleForTaskChallenge(currentUser, challenge) { } const hasProjectTaskViewAccess = await userHasProjectTaskViewAccess( challenge.projectId, - currentUser + currentUser, ); if (hasProjectTaskViewAccess) { return; } const memberResources = await listResourcesByMemberAndChallenge( currentUser.userId, - challenge.id + challenge.id, ); - const copilotRoleIds = _.map( - [].concat(config.COPILOT_RESOURCE_ROLE_IDS || []), - (roleId) => _.toString(roleId) + const copilotRoleIds = _.map([].concat(config.COPILOT_RESOURCE_ROLE_IDS || []), (roleId) => + _.toString(roleId), ); const isCopilotResource = _.some(memberResources, (resource) => { const roleId = _.toString(resource.roleId); @@ -1346,7 +1511,7 @@ async function _ensureAccessibleForTaskChallenge(currentUser, challenge) { } const isSubmitterResource = _.some( memberResources, - (resource) => resource.roleId === config.SUBMITTER_ROLE_ID + (resource) => resource.roleId === config.SUBMITTER_ROLE_ID, ); if (!isSubmitterResource) { throw new errors.ForbiddenError(`You don't have access to view this challenge`); @@ -1361,6 +1526,7 @@ async function _ensureAccessibleForTaskChallenge(currentUser, challenge) { * @param {Object} challenge the challenge to check */ async function ensureUserCanViewChallenge(currentUser, challenge) { + await ensureChallengeWhitelistAccess(currentUser, challenge.id); // check groups authorization await ensureAccessibleByGroupsAccess(currentUser, challenge); // check if user can access a challenge that is a task @@ -1376,35 +1542,33 @@ async function ensureUserCanViewChallenge(currentUser, challenge) { * @returns {Promise} */ async function ensureUserCanModifyChallenge(currentUser, challenge, challengeResources) { + await ensureChallengeWhitelistAccess(currentUser, challenge.id); // check groups authorization await ensureAccessibleByGroupsAccess(currentUser, challenge); // check full access const isUserHasFullAccess = await userHasFullAccess( challenge.id, currentUser.userId, - challengeResources + challengeResources, ); - const challengeCreator = _.isNil(challenge.createdBy) - ? null - : _.toString(challenge.createdBy); + const challengeCreator = _.isNil(challenge.createdBy) ? null : _.toString(challenge.createdBy); const currentUserId = _.isNil(currentUser.userId) ? null : _.toString(currentUser.userId); const currentUserHandle = currentUser.handle ? _.toLower(currentUser.handle) : null; const isChallengeCreator = (!!challengeCreator && !!currentUserId && challengeCreator === currentUserId) || - (!!challengeCreator && !!currentUserHandle && _.toLower(challengeCreator) === currentUserHandle); + (!!challengeCreator && + !!currentUserHandle && + _.toLower(challengeCreator) === currentUserHandle); if ( !currentUser.isMachine && !hasAdminRole(currentUser) && !isChallengeCreator && !isUserHasFullAccess ) { - const hasProjectWriteAccess = await userHasProjectWriteAccess( - challenge.projectId, - currentUser - ); + const hasProjectWriteAccess = await userHasProjectWriteAccess(challenge.projectId, currentUser); if (!hasProjectWriteAccess) { throw new errors.ForbiddenError( - "Only M2M, admin, challenge's copilot, users with full access, or project members with write/full/copilot access can perform modification." + "Only M2M, admin, challenge's copilot, users with full access, or project members with write/full/copilot access can perform modification.", ); } } @@ -1441,9 +1605,12 @@ async function getGroupById(groupId) { const token = await m2mHelper.getM2MToken(); const requestHeaders = { Authorization: `Bearer ${token}` }; try { - const result = await axios.get(`${config.GROUPS_API_URL}/${encodeURIComponent(normalizedGroupId)}`, { - headers: requestHeaders, - }); + const result = await axios.get( + `${config.GROUPS_API_URL}/${encodeURIComponent(normalizedGroupId)}`, + { + headers: requestHeaders, + }, + ); return result.data; } catch (err) { const status = _.get(err, "response.status"); @@ -1514,7 +1681,7 @@ async function getAIReviewConfigByChallengeId(challengeId) { const token = await m2mHelper.getM2MToken(); const reviewsApiBaseUrl = _.trimEnd( config.REVIEWS_API_URL || "https://api.topcoder-dev.com", - "/" + "/", ); try { @@ -1540,13 +1707,16 @@ async function getReviewSummations(challengeId) { let allReviewSummations = []; let page = 1; while (true) { - const result = await axios.get(`${config.REVIEW_SUMMATIONS_API_URL}?challengeId=${challengeId}`, { - headers: { Authorization: `Bearer ${token}` }, - params: { - page, - perPage: 500, + const result = await axios.get( + `${config.REVIEW_SUMMATIONS_API_URL}?challengeId=${challengeId}`, + { + headers: { Authorization: `Bearer ${token}` }, + params: { + page, + perPage: 500, + }, }, - }); + ); const reviewSummations = result.data.data || []; if (reviewSummations.length === 0) { break; @@ -1600,7 +1770,7 @@ async function getMembersByHandles(handles) { `${config.MEMBERS_API_URL}/?fields=handle&handlesLower=["${_.join(handles, '","')}"]`, { headers: { Authorization: `Bearer ${token}` }, - } + }, ); return res.data; } @@ -1638,18 +1808,20 @@ async function getStandSkills(ids) { logger.debug( `helper.getStandSkills: response status ${res.status} (items=${ _.get(res, "data.length", 0) || 0 - })` + })`, ); return res.data; } catch (err) { logger.debug( - `helper.getStandSkills: error fetching skills batch - status ${ - _.get(err, "response.status", "n/a") - }: ${err.message}` + `helper.getStandSkills: error fetching skills batch - status ${_.get( + err, + "response.status", + "n/a", + )}: ${err.message}`, ); throw err; } - })() + })(), ); } @@ -1698,8 +1870,8 @@ async function sendSelfServiceNotification(type, recipients, data) { * @param {String|Date} at - The date/time when the phase opened/closed */ function buildPhaseChangeEmailData({ challengeId, challengeName, phaseName, operation, at }) { - const isOpen = operation === 'open' || operation === 'reopen'; - const isClose = operation === 'close'; + const isOpen = operation === "open" || operation === "reopen"; + const isClose = operation === "close"; return { challengeURL: `${config.CHALLENGE_URL}/${challengeId}`, @@ -1711,7 +1883,6 @@ function buildPhaseChangeEmailData({ challengeId, challengeName, phaseName, oper }; } - /** * Send phase change notification * @param {String} type the notification type @@ -1729,7 +1900,7 @@ async function sendPhaseChangeNotification(type, recipients, data) { if (!settings.sendgridTemplateId) { logger.debug( - `sendPhaseChangeNotification: sendgridTemplateId not configured for type ${type}` + `sendPhaseChangeNotification: sendgridTemplateId not configured for type ${type}`, ); return; } @@ -1740,16 +1911,14 @@ async function sendPhaseChangeNotification(type, recipients, data) { return; } - await postBusEvent('external.action.email', - { - from: config.EMAIL_FROM, - replyTo: config.EMAIL_FROM, - recipients: safeRecipients, - data: data, - sendgrid_template_id: settings.sendgridTemplateId, - version: 'v3', - }, - ); + await postBusEvent("external.action.email", { + from: config.EMAIL_FROM, + replyTo: config.EMAIL_FROM, + recipients: safeRecipients, + data: data, + sendgrid_template_id: settings.sendgridTemplateId, + version: "v3", + }); } catch (e) { logger.debug(`Failed to post notification ${type}: ${e.message}`); } @@ -1773,7 +1942,7 @@ async function submitZendeskRequest(request) { username: `${request.requester.email}/token`, password: config.ZENDESK_API_TOKEN, }, - } + }, ); return res.data || {}; } catch (e) { @@ -1842,6 +2011,10 @@ module.exports = { getCompleteUserGroupTreeIds, expandWithParentGroups, getResourceRoles, + shouldApplyChallengeWhitelist, + getChallengeWhitelistAccessFilter, + canAccessChallengeByWhitelist, + ensureChallengeWhitelistAccess, ensureAccessibleByGroupsAccess, getTaskInfo, syncTaskAssignmentFromResources, @@ -1864,6 +2037,7 @@ module.exports = { capturePayment, cancelPayment, generateChallengePayments, + rerateChallengeSubmitterRatings, sendSelfServiceNotification, getMemberByHandle, getMembersByHandles, @@ -1875,7 +2049,7 @@ module.exports = { flushInternalCache, removeNullProperties, buildPhaseChangeEmailData, - sendPhaseChangeNotification + sendPhaseChangeNotification, }; logger.buildService(module.exports); diff --git a/src/common/prisma-helper.js b/src/common/prisma-helper.js index e20a8b2..f658f1d 100644 --- a/src/common/prisma-helper.js +++ b/src/common/prisma-helper.js @@ -99,6 +99,9 @@ function convertChallengeSchemaToPrisma(currentUser, challenge) { "numOfRegistrants", "numOfSubmissions", "numOfCheckpointSubmissions", + "approvalStatus", + "approvalRejectionReason", + "approvalApprovedBy", ]); // set legacy data if (!_.isNil(challenge.legacy)) { @@ -208,6 +211,9 @@ function convertChallengeSchemaToPrisma(currentUser, challenge) { if (challenge.status) { result.status = challenge.status.toUpperCase(); } + if (challenge.approvalStatus) { + result.approvalStatus = challenge.approvalStatus.toUpperCase(); + } // terms if (!_.isNil(challenge.terms)) { result.terms = { diff --git a/src/common/project-helper.js b/src/common/project-helper.js index 4bd6f47..a2d5cec 100644 --- a/src/common/project-helper.js +++ b/src/common/project-helper.js @@ -248,6 +248,75 @@ class ProjectHelper { throw err; } } + + /** + * Locks the current challenge member-payment budget against a billing account. + * + * The billing-account ledger stores amounts after markup is applied. This + * helper accepts the member-payment amount from challenge persistence, + * applies the billing markup, and writes one CHALLENGE lock row keyed by the + * challenge id. + * + * @param {object} params Lock request parameters. + * @param {string|number} params.billingAccountId Billing-account identifier. + * @param {string} params.challengeId Challenge id to use as the external reference. + * @param {number|string} params.memberPaymentAmount Challenge member-payment amount before markup. + * @param {number|string|null|undefined} params.markup Billing-account markup as a decimal or percentage. + * @returns {Promise} Billing Accounts API lock response. + * @throws {errors.BadRequestError} When required values are missing or invalid. + * @throws {Error} When the Billing Accounts API rejects the lock request. + */ + async lockChallengeBillingAccountAmount({ + billingAccountId, + challengeId, + memberPaymentAmount, + markup, + }) { + const normalizedBillingAccountId = normalizeOptionalString(billingAccountId); + const normalizedChallengeId = normalizeOptionalString(challengeId); + const amount = normalizeOptionalNumber(memberPaymentAmount); + const normalizedMarkup = normalizeBillingMarkup(markup) || 0; + + if (!normalizedBillingAccountId) { + throw new errors.BadRequestError("Cannot lock challenge budget without a billing account."); + } + + if (!normalizedChallengeId) { + throw new errors.BadRequestError("Cannot lock challenge budget without a challenge id."); + } + + if (_.isNil(amount) || amount < 0) { + throw new errors.BadRequestError("Cannot lock challenge budget with an invalid amount."); + } + + if (normalizedMarkup < 0) { + throw new errors.BadRequestError("Cannot lock challenge budget with an invalid markup."); + } + + const token = await m2mHelper.getM2MToken(); + const lockAmount = Number((amount * (1 + normalizedMarkup)).toFixed(4)); + const url = `${config.BILLING_ACCOUNTS_API_URL}/${encodeURIComponent( + normalizedBillingAccountId + )}/lock-amount`; + logger.debug( + `projectHelper.lockChallengeBillingAccountAmount: PATCH ${url} challengeId=${normalizedChallengeId}` + ); + + const res = await axios.patch( + url, + { + amount: lockAmount, + challengeId: normalizedChallengeId, + externalId: normalizedChallengeId, + externalType: "CHALLENGE", + }, + { + headers: { Authorization: `Bearer ${token}` }, + } + ); + + return res.data; + } } module.exports = new ProjectHelper(); diff --git a/src/controllers/ChallengeController.js b/src/controllers/ChallengeController.js index ef4d603..1511aee 100644 --- a/src/controllers/ChallengeController.js +++ b/src/controllers/ChallengeController.js @@ -23,7 +23,7 @@ async function searchChallenges(req, res) { logger.debug(`Staring to get mm challengeId`); const legacyId = await helper.getProjectIdByRoundId(req.query.legacyId); logger.debug(`Get mm challengeId successfully ${legacyId}`); - result = await service.searchChallenges(req, req.authUser, { + result = await service.searchChallenges(req.authUser, { ...req.query, ...req.body, legacyId, @@ -48,7 +48,7 @@ async function searchChallenges(req, res) { */ async function createChallenge(req, res) { logger.debug( - `createChallenge User: ${JSON.stringify(req.authUser)} - Body: ${JSON.stringify(req.body)}` + `createChallenge User: ${JSON.stringify(req.authUser)} - Body: ${JSON.stringify(req.body)}`, ); const result = await service.createChallenge(req.authUser, req.body, req.userToken); res.status(HttpStatus.CREATED).send(result); @@ -73,7 +73,7 @@ async function getChallenge(req, res) { const result = await service.getChallenge( req.authUser, req.params.challengeId, - req.query.checkIfExists + req.query.checkIfExists, ); res.send(result); } @@ -97,7 +97,7 @@ async function updateChallenge(req, res) { logger.debug( `updateChallenge User: ${JSON.stringify(req.authUser)} - ChallengeID: ${ req.params.challengeId - } - Body: ${JSON.stringify(req.body)}` + } - Body: ${JSON.stringify(req.body)}`, ); const result = await service.updateChallenge(req.authUser, req.params.challengeId, req.body); res.send(result); @@ -110,7 +110,7 @@ async function updateChallenge(req, res) { */ async function deleteChallenge(req, res) { logger.debug( - `deleteChallenge User: ${JSON.stringify(req.authUser)} - ChallengeID: ${req.params.challengeId}` + `deleteChallenge User: ${JSON.stringify(req.authUser)} - ChallengeID: ${req.params.challengeId}`, ); const result = await service.deleteChallenge(req.authUser, req.params.challengeId); res.send(result); @@ -132,7 +132,7 @@ async function advancePhase(req, res) { */ async function closeMarathonMatch(req, res) { logger.debug( - `closeMarathonMatch User: ${JSON.stringify(req.authUser)} - ChallengeID: ${req.params.challengeId}` + `closeMarathonMatch User: ${JSON.stringify(req.authUser)} - ChallengeID: ${req.params.challengeId}`, ); const result = await service.closeMarathonMatch(req.authUser, req.params.challengeId); res.send(result); diff --git a/src/controllers/ChallengePhaseController.js b/src/controllers/ChallengePhaseController.js index b38dda3..664c160 100644 --- a/src/controllers/ChallengePhaseController.js +++ b/src/controllers/ChallengePhaseController.js @@ -9,7 +9,7 @@ const service = require("../services/ChallengePhaseService"); * @param {Object} res the response */ async function getAllChallengePhases(req, res) { - const result = await service.getAllChallengePhases(req.params.challengeId); + const result = await service.getAllChallengePhases(req.params.challengeId, req.authUser); res.send(result); } @@ -19,7 +19,11 @@ async function getAllChallengePhases(req, res) { * @param {Object} res the response */ async function getChallengePhase(req, res) { - const result = await service.getChallengePhase(req.params.challengeId, req.params.id); + const result = await service.getChallengePhase( + req.params.challengeId, + req.params.id, + req.authUser, + ); res.send(result); } @@ -33,7 +37,7 @@ async function partiallyUpdateChallengePhase(req, res) { req.authUser, req.params.challengeId, req.params.id, - req.body + req.body, ); res.send(result); } @@ -47,7 +51,7 @@ async function deleteChallengePhase(req, res) { const result = await service.deleteChallengePhase( req.authUser, req.params.challengeId, - req.params.id + req.params.id, ); res.send(result); } diff --git a/src/phase-management/PhaseAdvancer.js b/src/phase-management/PhaseAdvancer.js index fc44e3b..110bc29 100644 --- a/src/phase-management/PhaseAdvancer.js +++ b/src/phase-management/PhaseAdvancer.js @@ -395,7 +395,7 @@ class PhaseAdvancer { OR (r."legacySubmissionId" IS NOT NULL AND s."legacySubmissionId" = r."legacySubmissionId") ) WHERE s."challengeId" = ${challengeId} - AND r."status" = ${"COMPLETED"} + AND r."status"::text = ${"COMPLETED"} ` ); diff --git a/src/routes.js b/src/routes.js index a55bc46..cbcad9b 100644 --- a/src/routes.js +++ b/src/routes.js @@ -11,6 +11,7 @@ const CHALLENGE_EDITOR_ACCESS_ROLES = [ constants.UserRoles.Admin, constants.UserRoles.Copilot, constants.UserRoles.Manager, + constants.UserRoles.ProjectManager, constants.UserRoles.TalentManager, ]; @@ -19,6 +20,7 @@ const CHALLENGE_EDITOR_ACCESS_ROLES_WITH_SELF_SERVICE = [ constants.UserRoles.SelfServiceCustomer, constants.UserRoles.Copilot, constants.UserRoles.Manager, + constants.UserRoles.ProjectManager, constants.UserRoles.TalentManager, ]; diff --git a/src/scripts/add-ai-tags-to-challenges.sql b/src/scripts/add-ai-tags-to-challenges.sql new file mode 100644 index 0000000..d5ec9e6 --- /dev/null +++ b/src/scripts/add-ai-tags-to-challenges.sql @@ -0,0 +1,86 @@ +-- Add the "AI" and "AI Exponential League" tags to selected challenges. +-- +-- Replace the ARRAY values below with the challenge IDs to update, then run this +-- against the PostgreSQL database that contains the "challenges" schema. +-- Existing tags are preserved, and either tag is only appended when it is not +-- already present on a challenge. + +BEGIN; + +CREATE TEMP TABLE "_challenge_ai_tag_input" ( + "challengeId" TEXT PRIMARY KEY +) ON COMMIT DROP; + +INSERT INTO "_challenge_ai_tag_input" ("challengeId") +SELECT DISTINCT input."challengeId" +FROM unnest( + ARRAY[ + -- '00000000-0000-0000-0000-000000000000' + ]::text[] +) AS input("challengeId") +WHERE input."challengeId" IS NOT NULL; + +-- IDs from the input array that do not match an existing challenge. +SELECT input."challengeId" AS "missingChallengeId" +FROM "_challenge_ai_tag_input" input +LEFT JOIN "challenges"."Challenge" c + ON c."id" = input."challengeId" +WHERE c."id" IS NULL +ORDER BY input."challengeId"; + +-- Summary before the update. +WITH requested_tags AS ( + SELECT ARRAY['AI', 'AI Exponential League']::text[] AS "tags" +), +matched_challenges AS ( + SELECT + c."id", + c."tags", + requested_tags."tags" AS "requestedTags" + FROM "challenges"."Challenge" c + INNER JOIN "_challenge_ai_tag_input" input + ON input."challengeId" = c."id" + CROSS JOIN requested_tags +) +SELECT + COUNT(*) AS "matchingChallenges", + COUNT(*) FILTER ( + WHERE NOT COALESCE("tags", ARRAY[]::text[]) @> "requestedTags" + ) AS "challengesNeedingUpdate" +FROM matched_challenges; + +WITH requested_tags AS ( + SELECT ARRAY['AI', 'AI Exponential League']::text[] AS "tags" +), +updated AS ( + UPDATE "challenges"."Challenge" c + SET + "tags" = COALESCE(c."tags", ARRAY[]::text[]) || ARRAY( + SELECT requested."tag" + FROM unnest(requested_tags."tags") AS requested("tag") + WHERE NOT requested."tag" = ANY(COALESCE(c."tags", ARRAY[]::text[])) + ), + "updatedAt" = CURRENT_TIMESTAMP, + "updatedBy" = 'add-ai-tags-to-challenges' + FROM "_challenge_ai_tag_input" input + CROSS JOIN requested_tags + WHERE c."id" = input."challengeId" + AND NOT COALESCE(c."tags", ARRAY[]::text[]) @> requested_tags."tags" + RETURNING + c."id", + c."tags" +) +SELECT + COUNT(*) AS "challengesUpdated" +FROM updated; + +-- Spot-check all input challenges after the update. +SELECT + c."id" AS "challengeId", + c."tags" +FROM "challenges"."Challenge" c +INNER JOIN "_challenge_ai_tag_input" input + ON input."challengeId" = c."id" +ORDER BY c."id"; + +COMMIT; diff --git a/src/services/AttachmentService.js b/src/services/AttachmentService.js index 110694c..78950a6 100644 --- a/src/services/AttachmentService.js +++ b/src/services/AttachmentService.js @@ -13,7 +13,7 @@ const { enrichChallengeForResponse } = require("../common/challenge-helper"); const prismaHelper = require("../common/prisma-helper"); const bucketWhitelist = config.AMAZON.BUCKET_WHITELIST.split(",").map((bucketName) => - bucketName.trim() + bucketName.trim(), ); const prisma = require("../common/prisma").getClient(); @@ -46,7 +46,7 @@ async function _getChallengeAttachment(challengeId, attachmentId) { const attachment = await prisma.attachment.findUnique({ where: { id: attachmentId } }); if (!challenge || !challenge.id || !attachment || attachment.challengeId !== challengeId) { throw new errors.NotFoundError( - `Attachment ${attachmentId} not found in challenge ${challengeId}` + `Attachment ${attachmentId} not found in challenge ${challengeId}`, ); } // convert challenge data @@ -91,7 +91,7 @@ createAttachment.schema = { url: Joi.string().uri().required(), fileSize: Joi.fileSize(), description: Joi.string(), - }) + }), ) .required() .min(1), @@ -143,7 +143,7 @@ async function update(currentUser, challengeId, attachmentId, data, isFull) { // post bus event await helper.postBusEvent( constants.Topics.ChallengeAttachmentUpdated, - isFull ? ret : _.assignIn({ id: attachmentId }, data) + isFull ? ret : _.assignIn({ id: attachmentId }, data), ); return ret; } diff --git a/src/services/ChallengePhaseService.js b/src/services/ChallengePhaseService.js index d7389e3..e7857f0 100644 --- a/src/services/ChallengePhaseService.js +++ b/src/services/ChallengePhaseService.js @@ -1,261 +1,261 @@ /** * This service provides operations of challenge phases. */ -const _ = require('lodash') -const Joi = require('joi') -const moment = require('moment') -const { Prisma } = require('@prisma/client') -const config = require('config') -const helper = require('../common/helper') -const logger = require('../common/logger') -const errors = require('../common/errors') -const constants = require('../../app-constants') -const { getReviewClient } = require('../common/review-prisma') +const _ = require("lodash"); +const Joi = require("joi"); +const moment = require("moment"); +const { Prisma } = require("@prisma/client"); +const config = require("config"); +const helper = require("../common/helper"); +const logger = require("../common/logger"); +const errors = require("../common/errors"); +const constants = require("../../app-constants"); +const { getReviewClient } = require("../common/review-prisma"); const { indexChallengeAndPostToKafka, - ensureAIScreeningCanBeClosed -} = require('./ChallengeService') + ensureAIScreeningCanBeClosed, +} = require("./ChallengeService"); -const { getClient } = require('../common/prisma') -const prisma = getClient() -const PENDING_REVIEW_STATUSES = Object.freeze(['PENDING', 'IN_PROGRESS', 'DRAFT', 'SUBMITTED']) +const { getClient } = require("../common/prisma"); +const prisma = getClient(); +const PENDING_REVIEW_STATUSES = Object.freeze(["PENDING", "IN_PROGRESS", "DRAFT", "SUBMITTED"]); const REVIEW_PHASE_NAMES = Object.freeze([ - 'checkpoint review', - 'checkpoint screening', - 'screening', - 'review', - 'approval' -]) -const REVIEW_PHASE_NAME_SET = new Set(REVIEW_PHASE_NAMES.map((name) => name.toLowerCase())) + "checkpoint review", + "checkpoint screening", + "screening", + "review", + "approval", +]); +const REVIEW_PHASE_NAME_SET = new Set(REVIEW_PHASE_NAMES.map((name) => name.toLowerCase())); const PHASE_RESOURCE_ROLE_REQUIREMENTS = Object.freeze({ - 'iterative review': 'Iterative Reviewer', - 'checkpoint screening': 'Checkpoint Screener', - screening: 'Screener', - review: 'Reviewer', - approval: 'Approver', - 'checkpoint review': 'Checkpoint Reviewer' -}) + "iterative review": "Iterative Reviewer", + "checkpoint screening": "Checkpoint Screener", + screening: "Screener", + review: "Reviewer", + approval: "Approver", + "checkpoint review": "Checkpoint Reviewer", +}); const normalizePhaseName = (name) => - String(name || '') + String(name || "") .trim() - .toLowerCase() + .toLowerCase(); -function datesAreSame (dateA, dateB) { +function datesAreSame(dateA, dateB) { if (_.isNil(dateA) && _.isNil(dateB)) { - return true + return true; } if (_.isNil(dateA) || _.isNil(dateB)) { - return false + return false; } - return new Date(dateA).getTime() === new Date(dateB).getTime() + return new Date(dateA).getTime() === new Date(dateB).getTime(); } -function dateIsAfter (dateA, dateB) { +function dateIsAfter(dateA, dateB) { if (_.isNil(dateA) || _.isNil(dateB)) { - return false + return false; } - const timeA = new Date(dateA).getTime() - const timeB = new Date(dateB).getTime() + const timeA = new Date(dateA).getTime(); + const timeB = new Date(dateB).getTime(); if (Number.isNaN(timeA) || Number.isNaN(timeB)) { - return false + return false; } - return timeA > timeB + return timeA > timeB; } -function buildPhaseIdentifiers (phase) { - const identifiers = [] +function buildPhaseIdentifiers(phase) { + const identifiers = []; if (phase && phase.id) { - identifiers.push(String(phase.id)) + identifiers.push(String(phase.id)); } if (phase && !_.isNil(phase.phaseId)) { - identifiers.push(String(phase.phaseId)) + identifiers.push(String(phase.phaseId)); } - return identifiers + return identifiers; } -async function recalculateDependentPhaseDates (tx, challengeId, predecessorPhase, currentUserId) { +async function recalculateDependentPhaseDates(tx, challengeId, predecessorPhase, currentUserId) { if (!predecessorPhase || _.isNil(predecessorPhase.scheduledEndDate)) { - return + return; } const phases = await tx.challengePhase.findMany({ - where: { challengeId } - }) + where: { challengeId }, + }); - const successorsByPredecessor = new Map() + const successorsByPredecessor = new Map(); for (const phase of phases) { if (_.isNil(phase.predecessor)) { - continue + continue; } - const key = String(phase.predecessor) + const key = String(phase.predecessor); if (!successorsByPredecessor.has(key)) { - successorsByPredecessor.set(key, []) + successorsByPredecessor.set(key, []); } - successorsByPredecessor.get(key).push(phase) + successorsByPredecessor.get(key).push(phase); } - const queue = [predecessorPhase] - const visited = new Set() + const queue = [predecessorPhase]; + const visited = new Set(); while (queue.length > 0) { - const currentPhase = queue.shift() - const currentEndDate = currentPhase?.scheduledEndDate + const currentPhase = queue.shift(); + const currentEndDate = currentPhase?.scheduledEndDate; if (_.isNil(currentEndDate)) { - continue + continue; } - const predecessorKeys = buildPhaseIdentifiers(currentPhase) + const predecessorKeys = buildPhaseIdentifiers(currentPhase); for (const predecessorKey of predecessorKeys) { - const successors = successorsByPredecessor.get(predecessorKey) || [] + const successors = successorsByPredecessor.get(predecessorKey) || []; for (const successor of successors) { if (visited.has(successor.id)) { - continue + continue; } - let successorForQueue = successor + let successorForQueue = successor; if (_.isNil(successor.actualStartDate)) { - const alignToPredecessorStart = normalizePhaseName(successor.name) === 'iterative review' + const alignToPredecessorStart = normalizePhaseName(successor.name) === "iterative review"; const desiredStartDate = new Date( alignToPredecessorStart && currentPhase.scheduledStartDate ? currentPhase.scheduledStartDate - : currentEndDate - ) - const durationSeconds = Number(successor.duration) + : currentEndDate, + ); + const durationSeconds = Number(successor.duration); if (!Number.isFinite(durationSeconds) || Number.isNaN(desiredStartDate.getTime())) { - visited.add(successor.id) - queue.push(successorForQueue) - continue + visited.add(successor.id); + queue.push(successorForQueue); + continue; } - const desiredEndDate = new Date(desiredStartDate.getTime() + durationSeconds * 1000) - const startChanged = !datesAreSame(successor.scheduledStartDate, desiredStartDate) - const endChanged = !datesAreSame(successor.scheduledEndDate, desiredEndDate) + const desiredEndDate = new Date(desiredStartDate.getTime() + durationSeconds * 1000); + 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 + updatedBy: currentUserId, }, where: { - id: successor.id - } - }) + id: successor.id, + }, + }); } else { successorForQueue = { ...successor, scheduledStartDate: successor.scheduledStartDate, - scheduledEndDate: successor.scheduledEndDate - } + scheduledEndDate: successor.scheduledEndDate, + }; } } - visited.add(successor.id) - queue.push(successorForQueue) + visited.add(successor.id); + queue.push(successorForQueue); } } } } -async function shiftDependentPhaseDates (tx, challengeId, predecessorPhase, deltaMs, currentUserId) { +async function shiftDependentPhaseDates(tx, challengeId, predecessorPhase, deltaMs, currentUserId) { if (!predecessorPhase || !Number.isFinite(deltaMs) || deltaMs === 0) { - return + return; } const phases = await tx.challengePhase.findMany({ - where: { challengeId } - }) + where: { challengeId }, + }); - const successorsByPredecessor = new Map() + const successorsByPredecessor = new Map(); for (const phase of phases) { if (_.isNil(phase.predecessor)) { - continue + continue; } - const key = String(phase.predecessor) + const key = String(phase.predecessor); if (!successorsByPredecessor.has(key)) { - successorsByPredecessor.set(key, []) + successorsByPredecessor.set(key, []); } - successorsByPredecessor.get(key).push(phase) + successorsByPredecessor.get(key).push(phase); } - const queue = [predecessorPhase] - const visited = new Set() + const queue = [predecessorPhase]; + const visited = new Set(); while (queue.length > 0) { - const currentPhase = queue.shift() - const predecessorKeys = buildPhaseIdentifiers(currentPhase) + const currentPhase = queue.shift(); + const predecessorKeys = buildPhaseIdentifiers(currentPhase); for (const predecessorKey of predecessorKeys) { - const successors = successorsByPredecessor.get(predecessorKey) || [] + const successors = successorsByPredecessor.get(predecessorKey) || []; for (const successor of successors) { if (visited.has(successor.id)) { - continue + continue; } - let successorForQueue = successor + let successorForQueue = successor; if (_.isNil(successor.actualStartDate)) { const scheduledStartTime = successor.scheduledStartDate ? new Date(successor.scheduledStartDate).getTime() - : Number.NaN + : Number.NaN; const scheduledEndTime = successor.scheduledEndDate ? new Date(successor.scheduledEndDate).getTime() - : Number.NaN + : 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) + 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 + updatedBy: currentUserId, }, where: { - id: successor.id - } - }) + id: successor.id, + }, + }); } else { successorForQueue = { ...successor, scheduledStartDate: successor.scheduledStartDate, - scheduledEndDate: successor.scheduledEndDate - } + scheduledEndDate: successor.scheduledEndDate, + }; } } } - visited.add(successor.id) - queue.push(successorForQueue) + visited.add(successor.id); + queue.push(successorForQueue); } } } } -async function hasPendingScorecardsForPhase (challengePhaseId) { +async function hasPendingScorecardsForPhase(challengePhaseId) { if (!config.REVIEW_DB_URL) { logger.debug( - `Skipping pending scorecard check for phase ${challengePhaseId} because REVIEW_DB_URL is not configured` - ) - return false + `Skipping pending scorecard check for phase ${challengePhaseId} because REVIEW_DB_URL is not configured`, + ); + return false; } - const reviewPrisma = getReviewClient() - const reviewSchema = config.REVIEW_DB_SCHEMA - const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`) - const statusText = Prisma.raw('"status"::text') + const reviewPrisma = getReviewClient(); + const reviewSchema = config.REVIEW_DB_SCHEMA; + const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`); + const statusText = Prisma.raw('"status"::text'); const pendingStatusClause = PENDING_REVIEW_STATUSES.length > 0 ? Prisma.sql`${statusText} IN (${Prisma.join( - PENDING_REVIEW_STATUSES.map((status) => Prisma.sql`${status}`) + PENDING_REVIEW_STATUSES.map((status) => Prisma.sql`${status}`), )})` - : Prisma.sql`FALSE` + : Prisma.sql`FALSE`; - let rows + let rows; try { rows = await reviewPrisma.$queryRaw( Prisma.sql` @@ -266,54 +266,54 @@ async function hasPendingScorecardsForPhase (challengePhaseId) { "status" IS NULL OR ${pendingStatusClause} ) - ` - ) + `, + ); } catch (err) { logger.error( `Failed to check pending scorecards for phase ${challengePhaseId}: ${err.message}`, - err - ) - throw err + err, + ); + throw err; } - const [{ count = 0 } = {}] = rows || [] - return Number(count) > 0 + const [{ count = 0 } = {}] = rows || []; + return Number(count) > 0; } -async function hasCompletedReviewsForPhase (challengePhaseIdOrIds) { +async function hasCompletedReviewsForPhase(challengePhaseIdOrIds) { if (!config.REVIEW_DB_URL) { logger.debug( - `Skipping completed review check for phase ${challengePhaseIdOrIds} because REVIEW_DB_URL is not configured` - ) - return false + `Skipping completed review check for phase ${challengePhaseIdOrIds} because REVIEW_DB_URL is not configured`, + ); + return false; } const phaseIds = Array.isArray(challengePhaseIdOrIds) ? challengePhaseIdOrIds.filter((id) => !_.isNil(id)) - : [challengePhaseIdOrIds] + : [challengePhaseIdOrIds]; if (phaseIds.length === 0) { - return false + return false; } - const reviewPrisma = getReviewClient() - const reviewSchema = config.REVIEW_DB_SCHEMA - const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`) - const statusText = Prisma.raw('"status"::text') - const completedStatuses = ['IN_PROGRESS', 'COMPLETED'] + const reviewPrisma = getReviewClient(); + const reviewSchema = config.REVIEW_DB_SCHEMA; + const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`); + const statusText = Prisma.raw('"status"::text'); + const completedStatuses = ["IN_PROGRESS", "COMPLETED"]; const phaseIdClause = phaseIds.length === 1 ? Prisma.sql`"phaseId" = ${phaseIds[0]}` : Prisma.sql`"phaseId" IN (${Prisma.join( - phaseIds.map((phaseId) => Prisma.sql`${phaseId}`) - )})` + phaseIds.map((phaseId) => Prisma.sql`${phaseId}`), + )})`; const completedStatusClause = Prisma.sql`${statusText} IN (${Prisma.join( - completedStatuses.map((status) => Prisma.sql`${status}`) - )})` + completedStatuses.map((status) => Prisma.sql`${status}`), + )})`; - let rows + let rows; try { rows = await reviewPrisma.$queryRaw( Prisma.sql` @@ -321,37 +321,37 @@ async function hasCompletedReviewsForPhase (challengePhaseIdOrIds) { FROM ${reviewTable} WHERE ${phaseIdClause} AND ${completedStatusClause} - ` - ) + `, + ); } catch (err) { logger.error( - `Failed to check completed reviews for phase(s) ${phaseIds.join(', ')}: ${err.message}`, - err - ) - throw err + `Failed to check completed reviews for phase(s) ${phaseIds.join(", ")}: ${err.message}`, + err, + ); + throw err; } - const [{ count = 0 } = {}] = rows || [] - return Number(count) > 0 + const [{ count = 0 } = {}] = rows || []; + return Number(count) > 0; } -async function hasSubmittedAppealsForChallenge (challengeId) { +async function hasSubmittedAppealsForChallenge(challengeId) { if (!config.REVIEW_DB_URL) { logger.debug( - `Skipping submitted appeals check for challenge ${challengeId} because REVIEW_DB_URL is not configured` - ) - return false + `Skipping submitted appeals check for challenge ${challengeId} because REVIEW_DB_URL is not configured`, + ); + return false; } - const reviewPrisma = getReviewClient() - const reviewSchema = config.REVIEW_DB_SCHEMA - const appealTable = Prisma.raw(`"${reviewSchema}"."appeal"`) - const reviewItemCommentTable = Prisma.raw(`"${reviewSchema}"."reviewItemComment"`) - const reviewItemTable = Prisma.raw(`"${reviewSchema}"."reviewItem"`) - const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`) - const submissionTable = Prisma.raw(`"${reviewSchema}"."submission"`) + const reviewPrisma = getReviewClient(); + const reviewSchema = config.REVIEW_DB_SCHEMA; + const appealTable = Prisma.raw(`"${reviewSchema}"."appeal"`); + const reviewItemCommentTable = Prisma.raw(`"${reviewSchema}"."reviewItemComment"`); + const reviewItemTable = Prisma.raw(`"${reviewSchema}"."reviewItem"`); + const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`); + const submissionTable = Prisma.raw(`"${reviewSchema}"."submission"`); - let rows + let rows; try { rows = await reviewPrisma.$queryRaw( Prisma.sql` @@ -369,38 +369,38 @@ async function hasSubmittedAppealsForChallenge (challengeId) { OR (r."legacySubmissionId" IS NOT NULL AND s."legacySubmissionId" = r."legacySubmissionId") ) ) - ` - ) + `, + ); } catch (err) { logger.error( `Failed to check submitted appeals for challenge ${challengeId}: ${err.message}`, - err - ) - throw err + err, + ); + throw err; } - const [{ count = 0 } = {}] = rows || [] - return Number(count) > 0 + const [{ count = 0 } = {}] = rows || []; + return Number(count) > 0; } -async function hasPendingAppealResponsesForChallenge (challengeId) { +async function hasPendingAppealResponsesForChallenge(challengeId) { if (!config.REVIEW_DB_URL) { logger.debug( - `Skipping pending appeal response check for challenge ${challengeId} because REVIEW_DB_URL is not configured` - ) - return false + `Skipping pending appeal response check for challenge ${challengeId} because REVIEW_DB_URL is not configured`, + ); + return false; } - const reviewPrisma = getReviewClient() - const reviewSchema = config.REVIEW_DB_SCHEMA - const appealTable = Prisma.raw(`"${reviewSchema}"."appeal"`) - const appealResponseTable = Prisma.raw(`"${reviewSchema}"."appealResponse"`) - const reviewItemCommentTable = Prisma.raw(`"${reviewSchema}"."reviewItemComment"`) - const reviewItemTable = Prisma.raw(`"${reviewSchema}"."reviewItem"`) - const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`) - const submissionTable = Prisma.raw(`"${reviewSchema}"."submission"`) + const reviewPrisma = getReviewClient(); + const reviewSchema = config.REVIEW_DB_SCHEMA; + const appealTable = Prisma.raw(`"${reviewSchema}"."appeal"`); + const appealResponseTable = Prisma.raw(`"${reviewSchema}"."appealResponse"`); + const reviewItemCommentTable = Prisma.raw(`"${reviewSchema}"."reviewItemComment"`); + const reviewItemTable = Prisma.raw(`"${reviewSchema}"."reviewItem"`); + const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`); + const submissionTable = Prisma.raw(`"${reviewSchema}"."submission"`); - let rows + let rows; try { rows = await reviewPrisma.$queryRaw( Prisma.sql` @@ -420,35 +420,35 @@ async function hasPendingAppealResponsesForChallenge (challengeId) { OR (r."legacySubmissionId" IS NOT NULL AND s."legacySubmissionId" = r."legacySubmissionId") ) ) - ` - ) + `, + ); } catch (err) { logger.error( `Failed to check pending appeal responses for challenge ${challengeId}: ${err.message}`, - err - ) - throw err + err, + ); + throw err; } - const [{ count = 0 } = {}] = rows || [] - return Number(count) > 0 + const [{ count = 0 } = {}] = rows || []; + return Number(count) > 0; } -async function hasPendingEscalationRequestsForChallenge (challengeId) { +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 + `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"`) + 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 + let rows; try { rows = await reviewPrisma.$queryRaw( Prisma.sql` @@ -462,178 +462,220 @@ async function hasPendingEscalationRequestsForChallenge (challengeId) { 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 + err, + ); + throw err; } - const [{ count = 0 } = {}] = rows || [] - return Number(count) > 0 + const [{ count = 0 } = {}] = rows || []; + return Number(count) > 0; } -async function checkChallengeExists (challengeId) { - const challenge = await prisma.challenge.findUnique({ where: { id: challengeId } }) +/** + * Load a challenge for challenge-scoped phase operations. + * @param {String} challengeId the challenge id + * @returns {Object} the challenge with the given id and type metadata + * @throws {NotFoundError} when the challenge does not exist + */ +async function getChallengeForPhaseAccess(challengeId) { + const challenge = await prisma.challenge.findUnique({ + where: { id: challengeId }, + include: { type: true }, + }); if (!challenge) { - throw new errors.NotFoundError(`Challenge with id: ${challengeId} doesn't exist`) + throw new errors.NotFoundError(`Challenge with id: ${challengeId} doesn't exist`); } + return challenge; } /** * Publish a challenge update event with the latest challenge payload. * @param {String} challengeId the challenge id */ -async function postChallengeUpdatedNotification (challengeId) { +async function postChallengeUpdatedNotification(challengeId) { try { - const challenge = await prisma.challenge.findUnique({ where: { id: challengeId } }) + const challenge = await prisma.challenge.findUnique({ where: { id: challengeId } }); if (!challenge) { - logger.error(`Failed to publish challenge update event: challenge ${challengeId} not found`) - return + logger.error(`Failed to publish challenge update event: challenge ${challengeId} not found`); + return; } - await indexChallengeAndPostToKafka(challenge) + await indexChallengeAndPostToKafka(challenge); } catch (error) { logger.error( `Failed to publish challenge update event for challenge ${challengeId}: ${error.message}`, - error - ) - throw error + error, + ); + throw error; } } -async function ensureRequiredResourcesBeforeOpeningPhase (challengeId, phaseName) { - const normalizedPhaseName = _.toLower(_.trim(phaseName || '')) - const requiredRoleName = PHASE_RESOURCE_ROLE_REQUIREMENTS[normalizedPhaseName] +/** + * Check whether a challenge is the Marathon Match challenge type. + * @param {Object} challenge challenge data loaded with its type relation + * @returns {Boolean} true when the challenge type name is Marathon Match + */ +function isMarathonMatchChallengeType(challenge) { + const typeName = _.get(challenge, "type.name"); + return _.toLower(_.trim(typeName || "")) === "marathon match"; +} + +/** + * Ensure a challenge has the configured resource role before a phase opens. + * @param {Object} challenge challenge data loaded with its type relation + * @param {String} phaseName phase name being opened + * @throws {BadRequestError} when the challenge is missing the required resource role + */ +async function ensureRequiredResourcesBeforeOpeningPhase(challenge, phaseName) { + const normalizedPhaseName = _.toLower(_.trim(phaseName || "")); + const requiredRoleName = PHASE_RESOURCE_ROLE_REQUIREMENTS[normalizedPhaseName]; if (!requiredRoleName) { - return + return; + } + + if (normalizedPhaseName === "review" && isMarathonMatchChallengeType(challenge)) { + return; } - const challengeResources = await helper.getChallengeResources(challengeId) - const requiredRoleNameLower = _.toLower(requiredRoleName) + const challengeId = challenge.id; + const challengeResources = await helper.getChallengeResources(challengeId); + const requiredRoleNameLower = _.toLower(requiredRoleName); const hasRequiredRoleByName = (challengeResources || []).some((resource) => { const roleName = resource.roleName || resource.role || - _.get(resource, 'role.name') || - _.get(resource, 'resourceRoleName') || - _.get(resource, 'resourceRole.name') - return roleName && _.toLower(roleName) === requiredRoleNameLower - }) + _.get(resource, "role.name") || + _.get(resource, "resourceRoleName") || + _.get(resource, "resourceRole.name"); + return roleName && _.toLower(roleName) === requiredRoleNameLower; + }); - let hasRequiredRole = hasRequiredRoleByName + let hasRequiredRole = hasRequiredRoleByName; if (!hasRequiredRole) { - const resourceRoles = await helper.getResourceRoles() + const resourceRoles = await helper.getResourceRoles(); const requiredRoleIds = (resourceRoles || []) .filter((role) => role.name && _.toLower(role.name) === requiredRoleNameLower) - .map((role) => _.toString(role.id)) + .map((role) => _.toString(role.id)); if (requiredRoleIds.length > 0) { - const requiredRoleIdSet = new Set(requiredRoleIds) + const requiredRoleIdSet = new Set(requiredRoleIds); hasRequiredRole = (challengeResources || []).some( - (resource) => resource.roleId && requiredRoleIdSet.has(_.toString(resource.roleId)) - ) + (resource) => resource.roleId && requiredRoleIdSet.has(_.toString(resource.roleId)), + ); } } if (!hasRequiredRole) { - const displayPhaseName = phaseName || 'phase' + const displayPhaseName = phaseName || "phase"; throw new errors.BadRequestError( - `Cannot open ${displayPhaseName} phase because the challenge does not have any resource with the ${requiredRoleName} role` - ) + `Cannot open ${displayPhaseName} phase because the challenge does not have any resource with the ${requiredRoleName} role`, + ); } } /** * Get all phase information for that challenge * @param {String} challengeId the challenge id + * @param {Object} [currentUser] the user who performs the operation * @returns {[Object]} the list of challenge phase + * @throws {ForbiddenError} when the current user cannot view the challenge */ -async function getAllChallengePhases (challengeId) { - await checkChallengeExists(challengeId) +async function getAllChallengePhases(challengeId, currentUser) { + const challenge = await getChallengeForPhaseAccess(challengeId); + await helper.ensureUserCanViewChallenge(currentUser, challenge); const result = await prisma.challengePhase.findMany({ where: { challengeId }, - include: { phase: true, constraints: true } - }) + include: { phase: true, constraints: true }, + }); return _.map(result, (obj) => { - const ret = _.omit(obj, constants.auditFields) - ret.phase = _.omit(obj.phase, constants.auditFields) + const ret = _.omit(obj, constants.auditFields); + ret.phase = _.omit(obj.phase, constants.auditFields); ret.constraints = _.map(obj.constraints, (constraint) => - _.omit(constraint, constants.auditFields) - ) - return ret - }) + _.omit(constraint, constants.auditFields), + ); + return ret; + }); } getAllChallengePhases.schema = { - challengeId: Joi.id() -} + challengeId: Joi.id(), + currentUser: Joi.any(), +}; /** * Get challenge phase. * @param {String} challengeId the challenge id * @param {String} id the challenge phase id + * @param {Object} [currentUser] the user who performs the operation * @returns {Object} the challengePhase with given challengeId and id + * @throws {ForbiddenError} when the current user cannot view the challenge */ -async function getChallengePhase (challengeId, id) { - await checkChallengeExists(challengeId) +async function getChallengePhase(challengeId, id, currentUser) { + const challenge = await getChallengeForPhaseAccess(challengeId); + await helper.ensureUserCanViewChallenge(currentUser, challenge); const result = await prisma.challengePhase.findFirst({ where: { challengeId, id }, - include: { phase: true, constraints: true } - }) + include: { phase: true, constraints: true }, + }); if (!result) { throw new errors.NotFoundError( - `ChallengePhase with challengeId: ${challengeId}, phaseId: ${id} doesn't exist` - ) + `ChallengePhase with challengeId: ${challengeId}, phaseId: ${id} doesn't exist`, + ); } - const ret = _.omit(result, constants.auditFields) - ret.phase = _.omit(result.phase, constants.auditFields) - ret.constraints = _.map(result.constraints, (constraint) => _.omit(constraint)) - return ret + const ret = _.omit(result, constants.auditFields); + ret.phase = _.omit(result.phase, constants.auditFields); + ret.constraints = _.map(result.constraints, (constraint) => _.omit(constraint)); + return ret; } getChallengePhase.schema = { challengeId: Joi.id(), - id: Joi.id() -} + id: Joi.id(), + currentUser: Joi.any(), +}; /** * Partially update challenge phase * @param {Object} currentUser the user who perform operation * @param {String} challengeId the challenge id * @param {String} id the phase id + * @param {Object} data the partial phase update * @returns {Object} the updated challengePhase + * @throws {ForbiddenError} when the current user cannot modify the challenge */ -async function partiallyUpdateChallengePhase (currentUser, challengeId, id, data) { - await checkChallengeExists(challengeId) +async function partiallyUpdateChallengePhase(currentUser, challengeId, id, data) { + const challenge = await getChallengeForPhaseAccess(challengeId); + await helper.ensureUserCanModifyChallenge(currentUser, challenge); const challengePhase = await prisma.challengePhase.findFirst({ where: { challengeId, id }, - include: { constraints: true } - }) + include: { constraints: true }, + }); if (!challengePhase) { throw new errors.NotFoundError( - `ChallengePhase with challengeId: ${challengeId}, phaseId: ${id} doesn't exist` - ) + `ChallengePhase with challengeId: ${challengeId}, phaseId: ${id} doesn't exist`, + ); } - const originalScheduledEndDate = challengePhase.scheduledEndDate + const originalScheduledEndDate = challengePhase.scheduledEndDate; const shouldAttemptSuccessorRecalc = Boolean( - data.duration || data.scheduledStartDate || data.scheduledEndDate - ) + data.duration || data.scheduledStartDate || data.scheduledEndDate, + ); // isOpen should be false if it's passed as null - if ('isOpen' in data) { + if ("isOpen" in data) { if (!data.isOpen) { - data.isOpen = false + data.isOpen = false; } } // check ChallengePhase data if (data.phaseId) { - const phase = await prisma.phase.findUnique({ where: { id: data.phaseId } }) + const phase = await prisma.phase.findUnique({ where: { id: data.phaseId } }); if (!phase) { - throw new errors.BadRequestError('phaseId should be a valid phase') + throw new errors.BadRequestError("phaseId should be a valid phase"); } } @@ -641,25 +683,25 @@ async function partiallyUpdateChallengePhase (currentUser, challengeId, id, data const predecessor = await prisma.challengePhase.findFirst({ where: { challengeId, - OR: [{ id: data.predecessor }, { phaseId: data.predecessor }] - } - }) + OR: [{ id: data.predecessor }, { phaseId: data.predecessor }], + }, + }); if (!predecessor) { throw new errors.BadRequestError( - `predecessor should be a valid challenge phase in the same challenge: ${challengeId}` - ) + `predecessor should be a valid challenge phase in the same challenge: ${challengeId}`, + ); } } - const isOpeningPhase = 'isOpen' in data && data.isOpen === true - const predecessorId = data.predecessor || challengePhase.predecessor + const isOpeningPhase = "isOpen" in data && data.isOpen === true; + const predecessorId = data.predecessor || challengePhase.predecessor; if (isOpeningPhase && predecessorId) { const predecessorPhase = await prisma.challengePhase.findFirst({ where: { challengeId, - OR: [{ id: predecessorId }, { phaseId: predecessorId }] - } - }) + OR: [{ id: predecessorId }, { phaseId: predecessorId }], + }, + }); if ( !predecessorPhase || @@ -668,44 +710,44 @@ async function partiallyUpdateChallengePhase (currentUser, challengeId, id, data _.isNil(predecessorPhase.actualEndDate) ) { throw new errors.BadRequestError( - 'Cannot open phase because predecessor phase must be closed with both actualStartDate and actualEndDate set' - ) + "Cannot open phase because predecessor phase must be closed with both actualStartDate and actualEndDate set", + ); } } if (isOpeningPhase) { - const phaseName = data.name || challengePhase.name - await ensureRequiredResourcesBeforeOpeningPhase(challengeId, phaseName) + const phaseName = data.name || challengePhase.name; + await ensureRequiredResourcesBeforeOpeningPhase(challenge, phaseName); // Check if this is the Appeals phase - const normalizedPhaseName = normalizePhaseName(phaseName) - if (normalizedPhaseName === 'appeals') { - const hasPendingEscalations = await hasPendingEscalationRequestsForChallenge(challengeId) + 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' - ) + "Cannot open Appeals phase because there are pending escalation requests that need to be resolved first", + ); } } } if (data.scheduledStartDate || data.scheduledEndDate) { - const startDate = data.scheduledStartDate || challengePhase.scheduledStartDate - const endDate = data.scheduledEndDate || challengePhase.scheduledEndDate + const startDate = data.scheduledStartDate || challengePhase.scheduledStartDate; + const endDate = data.scheduledEndDate || challengePhase.scheduledEndDate; if (moment(startDate).isAfter(moment(endDate))) { throw new errors.BadRequestError( - `scheduledStartDate: ${startDate.toISOString()} should not be after scheduledEndDate: ${endDate.toISOString()}` - ) + `scheduledStartDate: ${startDate.toISOString()} should not be after scheduledEndDate: ${endDate.toISOString()}`, + ); } } if (data.actualStartDate || data.actualEndDate) { - const startDate = data.actualStartDate || challengePhase.actualStartDate - const endDate = data.actualEndDate || challengePhase.actualEndDate + const startDate = data.actualStartDate || challengePhase.actualStartDate; + const endDate = data.actualEndDate || challengePhase.actualEndDate; if (moment(startDate).isAfter(moment(endDate))) { throw new errors.BadRequestError( - `actualStartDate: ${startDate.toISOString()} should not be after actualEndDate: ${endDate.toISOString()}` - ) + `actualStartDate: ${startDate.toISOString()} should not be after actualEndDate: ${endDate.toISOString()}`, + ); } } @@ -713,183 +755,183 @@ async function partiallyUpdateChallengePhase (currentUser, challengeId, id, data for (const constrain of data.constraints) { if (constrain.id && !challengePhase.constraints.some((cst) => cst.id === constrain.id)) { throw new errors.BadRequestError( - `constraint: ${constrain.id} is not exists for the ChallengePhase` - ) + `constraint: ${constrain.id} is not exists for the ChallengePhase`, + ); } } } const isClosingPhase = - 'isOpen' in data && data.isOpen === false && Boolean(challengePhase.isOpen) - const isReopeningPhase = 'isOpen' in data && data.isOpen === true && !challengePhase.isOpen + "isOpen" in data && data.isOpen === false && Boolean(challengePhase.isOpen); + const isReopeningPhase = "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) + const closingPhaseName = data.name || challengePhase.name; + const normalizedClosingPhaseName = normalizePhaseName(closingPhaseName); + const pendingScorecards = await hasPendingScorecardsForPhase(challengePhase.id); if (pendingScorecards) { - const phaseName = closingPhaseName || 'phase' + const phaseName = closingPhaseName || "phase"; throw new errors.ForbiddenError( - `Cannot close ${phaseName} because there are still pending scorecards` - ) + `Cannot close ${phaseName} because there are still pending scorecards`, + ); } if ( - normalizedClosingPhaseName === 'review' && + 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' - ) + "Cannot close Review phase because there are pending escalation requests that need to be resolved first", + ); } if ( - normalizedClosingPhaseName === 'appeals response' && + 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" - ) + "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 (normalizedClosingPhaseName === "ai screening") { + await ensureAIScreeningCanBeClosed(challengePhase.challengeId); } - if (!('actualEndDate' in data) || _.isNil(data.actualEndDate)) { - data.actualEndDate = new Date() + if (!("actualEndDate" in data) || _.isNil(data.actualEndDate)) { + data.actualEndDate = new Date(); } } if (isReopeningPhase) { - const phaseName = challengePhase.name + const phaseName = challengePhase.name; const openPhases = await prisma.challengePhase.findMany({ where: { challengeId: challengePhase.challengeId, - isOpen: true + isOpen: true, }, select: { id: true, phaseId: true, predecessor: true, - name: true - } - }) + name: true, + }, + }); const activeReviewPhase = openPhases.find((phase) => - REVIEW_PHASE_NAME_SET.has(String(phase?.name || '').toLowerCase()) - ) + REVIEW_PHASE_NAME_SET.has(String(phase?.name || "").toLowerCase()), + ); if (activeReviewPhase) { - const hasActiveScorecards = await hasCompletedReviewsForPhase(activeReviewPhase.id) + const hasActiveScorecards = await hasCompletedReviewsForPhase(activeReviewPhase.id); if (hasActiveScorecards) { throw new errors.BadRequestError( - `Cannot reopen ${phaseName} because the currently open phase '${activeReviewPhase.name}' has reviews in progress or completed` - ) + `Cannot reopen ${phaseName} because the currently open phase '${activeReviewPhase.name}' has reviews in progress or completed`, + ); } } - if (phaseName === 'Submission' || phaseName === 'Registration') { - const hasCompletedReviews = await hasCompletedReviewsForPhase(challengePhase.id) + if (phaseName === "Submission" || phaseName === "Registration") { + const hasCompletedReviews = await hasCompletedReviewsForPhase(challengePhase.id); if (hasCompletedReviews) { throw new errors.ForbiddenError( - 'Cannot reopen Submission/Registration phase because reviews are already in progress or completed' - ) + "Cannot reopen Submission/Registration phase because reviews are already in progress or completed", + ); } } - if (phaseName === 'Checkpoint Submission') { + if (phaseName === "Checkpoint Submission") { const checkpointPhases = await prisma.challengePhase.findMany({ where: { challengeId: challengePhase.challengeId, - name: { in: ['Checkpoint Screening', 'Checkpoint Review'] } + name: { in: ["Checkpoint Screening", "Checkpoint Review"] }, }, - select: { id: true } - }) - const checkpointPhaseIds = checkpointPhases.map((cp) => cp.id) + select: { id: true }, + }); + const checkpointPhaseIds = checkpointPhases.map((cp) => cp.id); if (checkpointPhaseIds.length > 0) { - const hasCheckpointReviews = await hasCompletedReviewsForPhase(checkpointPhaseIds) + const hasCheckpointReviews = await hasCompletedReviewsForPhase(checkpointPhaseIds); if (hasCheckpointReviews) { throw new errors.ForbiddenError( - 'Cannot reopen Checkpoint Submission phase because Checkpoint Screening or Checkpoint Review reviews are already in progress or completed' - ) + "Cannot reopen Checkpoint Submission phase because Checkpoint Screening or Checkpoint Review reviews are already in progress or completed", + ); } } } - const hasActualStartDate = !_.isNil(challengePhase.actualStartDate) - const hasActualEndDate = !_.isNil(challengePhase.actualEndDate) + const hasActualStartDate = !_.isNil(challengePhase.actualStartDate); + const hasActualEndDate = !_.isNil(challengePhase.actualEndDate); if (hasActualStartDate && hasActualEndDate && openPhases.length > 0) { - const reopenedPhaseIdentifiers = new Set([String(challengePhase.id)]) + const reopenedPhaseIdentifiers = new Set([String(challengePhase.id)]); if (!_.isNil(challengePhase.phaseId)) { - reopenedPhaseIdentifiers.add(String(challengePhase.phaseId)) + reopenedPhaseIdentifiers.add(String(challengePhase.phaseId)); } const dependentOpenPhases = openPhases.filter((phase) => { if (!phase || _.isNil(phase.predecessor)) { - return false + return false; } - return reopenedPhaseIdentifiers.has(String(phase.predecessor)) - }) + return reopenedPhaseIdentifiers.has(String(phase.predecessor)); + }); if (dependentOpenPhases.length === 0) { throw new errors.ForbiddenError( - `Cannot reopen ${phaseName} because no currently open phase depends on it` - ) + `Cannot reopen ${phaseName} because no currently open phase depends on it`, + ); } const appealsDependentPhaseExists = dependentOpenPhases.some( - (phase) => String(phase.name || '').toLowerCase() === 'appeals' - ) + (phase) => String(phase.name || "").toLowerCase() === "appeals", + ); if (appealsDependentPhaseExists) { const hasSubmittedAppeals = await hasSubmittedAppealsForChallenge( - challengePhase.challengeId - ) + challengePhase.challengeId, + ); if (hasSubmittedAppeals) { throw new errors.ForbiddenError( - `Cannot reopen ${phaseName} because submitted appeals already exist in the Appeals phase` - ) + `Cannot reopen ${phaseName} because submitted appeals already exist in the Appeals phase`, + ); } } } if (hasActualStartDate) { - data.actualStartDate = challengePhase.actualStartDate - } else if (!('actualStartDate' in data) || _.isNil(data.actualStartDate)) { - data.actualStartDate = new Date() + data.actualStartDate = challengePhase.actualStartDate; + } else if (!("actualStartDate" in data) || _.isNil(data.actualStartDate)) { + data.actualStartDate = new Date(); } - data.actualEndDate = null + data.actualEndDate = null; } // Update ChallengePhase - const currentUserId = String(currentUser.userId) - data.updatedBy = currentUserId + const currentUserId = String(currentUser.userId); + data.updatedBy = currentUserId; if (!_.isNil(data.duration)) { const startInput = !_.isNil(data.scheduledStartDate) ? data.scheduledStartDate : !_.isNil(challengePhase.scheduledStartDate) - ? challengePhase.scheduledStartDate - : null + ? challengePhase.scheduledStartDate + : null; if (startInput) { - const startDate = new Date(startInput) + const startDate = new Date(startInput); if (!Number.isNaN(startDate.getTime())) { const recalculatedScheduledEndDate = new Date( - startDate.getTime() + Number(data.duration) * 1000 - ) - data.scheduledEndDate = recalculatedScheduledEndDate + startDate.getTime() + Number(data.duration) * 1000, + ); + data.scheduledEndDate = recalculatedScheduledEndDate; } } } - const dataToUpdate = _.omit(data, 'constraints') + const dataToUpdate = _.omit(data, "constraints"); const shouldRefreshPhaseNames = - Object.prototype.hasOwnProperty.call(data, 'isOpen') || - Object.prototype.hasOwnProperty.call(data, 'name') + Object.prototype.hasOwnProperty.call(data, "isOpen") || + Object.prototype.hasOwnProperty.call(data, "name"); const result = await prisma.$transaction(async (tx) => { const updatedPhase = await tx.challengePhase.update({ data: dataToUpdate, where: { - id: challengePhase.id - } - }) - let scheduleExtended = false + id: challengePhase.id, + }, + }); + let scheduleExtended = false; if (shouldAttemptSuccessorRecalc) { - scheduleExtended = dateIsAfter(updatedPhase.scheduledEndDate, originalScheduledEndDate) + scheduleExtended = dateIsAfter(updatedPhase.scheduledEndDate, originalScheduledEndDate); if (scheduleExtended) { - await recalculateDependentPhaseDates(tx, challengeId, updatedPhase, currentUserId) + await recalculateDependentPhaseDates(tx, challengeId, updatedPhase, currentUserId); } } if ( @@ -900,9 +942,9 @@ async function partiallyUpdateChallengePhase (currentUser, challengeId, id, data const shiftBaselineScheduledEndDate = scheduleExtended && !_.isNil(updatedPhase.scheduledEndDate) ? updatedPhase.scheduledEndDate - : originalScheduledEndDate - const scheduledEndTime = new Date(shiftBaselineScheduledEndDate).getTime() - const actualEndTime = new Date(updatedPhase.actualEndDate).getTime() + : originalScheduledEndDate; + const scheduledEndTime = new Date(shiftBaselineScheduledEndDate).getTime(); + const actualEndTime = new Date(updatedPhase.actualEndDate).getTime(); if (Number.isFinite(scheduledEndTime) && Number.isFinite(actualEndTime)) { await shiftDependentPhaseDates( @@ -910,8 +952,8 @@ async function partiallyUpdateChallengePhase (currentUser, challengeId, id, data challengeId, updatedPhase, actualEndTime - scheduledEndTime, - currentUserId - ) + currentUserId, + ); } } if (data.constraints) { @@ -921,12 +963,12 @@ async function partiallyUpdateChallengePhase (currentUser, challengeId, id, data data: { name: constraint.name, value: constraint.value, - updatedBy: currentUserId + updatedBy: currentUserId, }, where: { - id: constraint.id - } - }) + id: constraint.id, + }, + }); } else { await tx.challengePhaseConstraint.create({ data: { @@ -934,100 +976,100 @@ async function partiallyUpdateChallengePhase (currentUser, challengeId, id, data value: constraint.value, challengePhaseId: updatedPhase.id, createdBy: currentUserId, - updatedBy: currentUserId - } - }) + updatedBy: currentUserId, + }, + }); } } } if (shouldRefreshPhaseNames) { const openPhases = await tx.challengePhase.findMany({ where: { challengeId, isOpen: true }, - select: { name: true } - }) + select: { name: true }, + }); const currentPhaseNames = _.uniq( - openPhases.map((phase) => phase.name).filter((name) => !_.isNil(name)) - ) + openPhases.map((phase) => phase.name).filter((name) => !_.isNil(name)), + ); await tx.challenge.update({ where: { id: challengeId }, data: { currentPhaseNames, - updatedBy: currentUserId - } - }) + updatedBy: currentUserId, + }, + }); } - return updatedPhase - }) - helper.flushInternalCache() + return updatedPhase; + }); + helper.flushInternalCache(); // post bus event await helper.postBusEvent( constants.Topics.ChallengePhaseUpdated, - _.assignIn({ id: result.id }, data) - ) - await postChallengeUpdatedNotification(challengeId) + _.assignIn({ id: result.id }, data), + ); + await postChallengeUpdatedNotification(challengeId); // send notification logic try { - const shouldNotifyClose = Boolean(isClosingPhase) - const shouldNotifyOpen = Boolean(isOpeningPhase) // includes reopen + const shouldNotifyClose = Boolean(isClosingPhase); + const shouldNotifyOpen = Boolean(isOpeningPhase); // includes reopen if (shouldNotifyClose || shouldNotifyOpen) { // Single template - single type - const notificationType = 'PHASE_CHANGE' + const notificationType = "PHASE_CHANGE"; - const operation = shouldNotifyClose ? 'close' : isReopeningPhase ? 'reopen' : 'open' + const operation = shouldNotifyClose ? "close" : isReopeningPhase ? "reopen" : "open"; const at = shouldNotifyClose ? result.actualEndDate || new Date().toISOString() - : result.actualStartDate || new Date().toISOString() + : result.actualStartDate || new Date().toISOString(); // fetch challenge name const challenge = await prisma.challenge.findUnique({ where: { id: challengeId }, - select: { name: true } - }) + select: { name: true }, + }); - const challengeName = challenge?.name + const challengeName = challenge?.name; // build recipients - const resources = await helper.getChallengeResources(challengeId) + const resources = await helper.getChallengeResources(challengeId); const recipients = Array.from( new Set( (resources || []) .map((r) => r?.email || r?.memberEmail) .filter(Boolean) - .map((e) => String(e).trim().toLowerCase()) - ) - ) + .map((e) => String(e).trim().toLowerCase()), + ), + ); if (!recipients.length) { logger.debug( - `phase change notification skipped: no recipients for challenge ${challengeId}` - ) - return _.omit(result, constants.auditFields) + `phase change notification skipped: no recipients for challenge ${challengeId}`, + ); + return _.omit(result, constants.auditFields); } // build payload that matches the SendGrid HTML template - const phaseName = result.name || data.name || challengePhase.name + const phaseName = result.name || data.name || challengePhase.name; const payload = helper.buildPhaseChangeEmailData({ challengeId, challengeName, phaseName, operation, - at - }) + at, + }); - await helper.sendPhaseChangeNotification(notificationType, recipients, payload) + await helper.sendPhaseChangeNotification(notificationType, recipients, payload); } } catch (e) { logger.debug( - `phase change notification failed for challenge ${challengeId}, phase ${id}: ${e.message}` - ) + `phase change notification failed for challenge ${challengeId}, phase ${id}: ${e.message}`, + ); } - return _.omit(result, constants.auditFields) + return _.omit(result, constants.auditFields); } partiallyUpdateChallengePhase.schema = { @@ -1051,12 +1093,12 @@ partiallyUpdateChallengePhase.schema = { Joi.object({ id: Joi.any().optional(), name: Joi.string().required(), - value: Joi.number().integer().min(0).required() - }) + value: Joi.number().integer().min(0).required(), + }), ) - .optional() - }) -} + .optional(), + }), +}; /** * Delete challenge phase. @@ -1064,16 +1106,18 @@ partiallyUpdateChallengePhase.schema = { * @param {String} challengeId the challenge id * @param {String} id the phase id * @returns {Object} the deleted challenge phase + * @throws {ForbiddenError} when the current user cannot modify the challenge */ -async function deleteChallengePhase (currentUser, challengeId, id) { - await checkChallengeExists(challengeId) +async function deleteChallengePhase(currentUser, challengeId, id) { + const challenge = await getChallengeForPhaseAccess(challengeId); + await helper.ensureUserCanModifyChallenge(currentUser, challenge); const result = await prisma.challengePhase.findFirst({ - where: { challengeId, id } - }) + where: { challengeId, id }, + }); if (!result) { throw new errors.NotFoundError( - `ChallengePhase with challengeId: ${challengeId}, phaseId: ${id} doesn't exist` - ) + `ChallengePhase with challengeId: ${challengeId}, phaseId: ${id} doesn't exist`, + ); } await prisma.$transaction(async (tx) => { // recalculates the predecessors @@ -1082,45 +1126,45 @@ async function deleteChallengePhase (currentUser, challengeId, id) { // if result.predecessor exists, update successor's predecessor to predecessor of current challenge phase // otherwise update successor's predecessor to null predecessor: result.predecessor || null, - updatedBy: String(currentUser.userId) + updatedBy: String(currentUser.userId), }, where: { challengeId, - predecessor: result.id - } - }) + predecessor: result.id, + }, + }); // delete challengePhaseConstraint await tx.challengePhaseConstraint.deleteMany({ where: { - challengePhaseId: result.id - } - }) + challengePhaseId: result.id, + }, + }); // delete challengePhase await tx.challengePhase.delete({ where: { - id: result.id - } - }) - }) - helper.flushInternalCache() - const ret = _.omit(result, constants.auditFields) + id: result.id, + }, + }); + }); + helper.flushInternalCache(); + const ret = _.omit(result, constants.auditFields); // post bus event - await helper.postBusEvent(constants.Topics.ChallengePhaseDeleted, ret) - await postChallengeUpdatedNotification(challengeId) - return ret + await helper.postBusEvent(constants.Topics.ChallengePhaseDeleted, ret); + await postChallengeUpdatedNotification(challengeId); + return ret; } deleteChallengePhase.schema = { currentUser: Joi.any(), challengeId: Joi.id(), - id: Joi.id() -} + id: Joi.id(), +}; module.exports = { getAllChallengePhases, getChallengePhase, partiallyUpdateChallengePhase, - deleteChallengePhase -} + deleteChallengePhase, +}; -logger.buildService(module.exports) +logger.buildService(module.exports); diff --git a/src/services/ChallengeService.js b/src/services/ChallengeService.js index 079ee88..7dc668b 100644 --- a/src/services/ChallengeService.js +++ b/src/services/ChallengeService.js @@ -36,6 +36,34 @@ const { } = require("../common/prisma"); const prisma = getClient(); +const BILLING_MARKUP_COPILOT_ROLES = new Set(["copilot", "connect copilot"]); +const BILLING_MARKUP_VISIBLE_ROLES = new Set([ + "administrator", + "connect admin", + "connect manager", + "project manager", + "topcoder project manager", + "talent manager", + "topcoder talent manager", +]); +const CHALLENGE_BILLING_LOCK_STATUSES = new Set([ + ChallengeStatusEnum.DRAFT, + ChallengeStatusEnum.APPROVED, + ChallengeStatusEnum.ACTIVE, +]); + +const CHALLENGE_APPROVAL_STATUS = { + PENDING_APPROVAL: "PENDING_APPROVAL", + APPROVED: "APPROVED", + REJECTED: "REJECTED", +}; +const CHALLENGE_APPROVAL_ACTION_STATUSES = new Set([ + CHALLENGE_APPROVAL_STATUS.APPROVED, + CHALLENGE_APPROVAL_STATUS.REJECTED, +]); + +const DEFAULT_ESTIMATED_SUBMISSIONS_COUNT = 2; + // Provide aliases for friendlier sortBy query params const sortByAliases = { updated: constants.validChallengeParams.Updated, @@ -47,6 +75,27 @@ const allowedSortByValues = _.uniq([ ...Object.keys(sortByAliases), ]); +const CANCELLED_CHALLENGE_STATUSES = new Set([ + ChallengeStatusEnum.CANCELLED, + ChallengeStatusEnum.CANCELLED_REQUIREMENTS_INFEASIBLE, + ChallengeStatusEnum.CANCELLED_PAYMENT_FAILED, + ChallengeStatusEnum.CANCELLED_FAILED_REVIEW, + ChallengeStatusEnum.CANCELLED_FAILED_SCREENING, + ChallengeStatusEnum.CANCELLED_ZERO_SUBMISSIONS, + ChallengeStatusEnum.CANCELLED_WINNER_UNRESPONSIVE, + ChallengeStatusEnum.CANCELLED_CLIENT_REQUEST, + ChallengeStatusEnum.CANCELLED_ZERO_REGISTRATIONS, +]); + +/** + * Determines whether a challenge status is one of the terminal cancelled states. + * @param {String} status challenge status from the update payload or stored challenge + * @returns {Boolean} true when the status represents a cancelled challenge + */ +function isCancelledChallengeStatus(status) { + return CANCELLED_CHALLENGE_STATUSES.has(status); +} + function normalizeStatusSortValue(statusValue) { if (_.isNil(statusValue)) { return null; @@ -60,6 +109,39 @@ function normalizeStatusSortValue(statusValue) { return normalizedStatus; } +function normalizeApprovalStatus(value) { + if (_.isNil(value)) { + return null; + } + + const normalized = _.toString(value).trim().toUpperCase(); + if (!normalized) { + return null; + } + + if (!Object.values(CHALLENGE_APPROVAL_STATUS).includes(normalized)) { + return null; + } + + return normalized; +} + +async function userCanApproveChallengeBudget(currentUser, challengeOrProjectId) { + if (!currentUser) { + return false; + } + + if (currentUser.isMachine || hasAdminRole(currentUser)) { + return true; + } + + const projectId = _.isObject(challengeOrProjectId) + ? _.get(challengeOrProjectId, "projectId") + : challengeOrProjectId; + + return helper.userHasProjectManagerAccess(projectId, currentUser); +} + function compareStatusSortValues(aStatusValue, bStatusValue) { const normalizedA = normalizeStatusSortValue(aStatusValue); const normalizedB = normalizeStatusSortValue(bStatusValue); @@ -78,6 +160,257 @@ function compareStatusSortValues(aStatusValue, bStatusValue) { return normalizedA.localeCompare(normalizedB); } +/** + * Determines whether the challenge budget should remain locked. + * + * @param {string|undefined|null} status Challenge status from the request or persistence. + * @returns {boolean} True when the challenge should reserve billing-account budget. + */ +function isChallengeBillingLockStatus(status) { + return CHALLENGE_BILLING_LOCK_STATUSES.has(normalizeStatusSortValue(status)); +} + +/** + * Calculates the billable USD prize-set total for a challenge. + * + * @param {object} challenge Challenge model or response object. + * @returns {number|undefined} USD prize-set member-payment amount before markup, + * or `undefined` when prize sets are not loaded. + */ +function getChallengePrizeSetMemberPaymentAmount(challenge) { + const prizeSets = _.get(challenge, "prizeSets"); + + if (!Array.isArray(prizeSets)) { + return undefined; + } + + return prizeSets.reduce((total, prizeSet) => { + const prizes = Array.isArray(prizeSet && prizeSet.prizes) ? prizeSet.prizes : []; + + return ( + total + + prizes.reduce((prizeTotal, prize) => { + if (_.toString(_.get(prize, "type")).toUpperCase() !== constants.prizeTypes.USD) { + return prizeTotal; + } + + const prizeValue = _.toNumber(_.get(prize, "value")); + + return Number.isFinite(prizeValue) ? prizeTotal + prizeValue : prizeTotal; + }, 0) + ); + }, 0); +} + +/** + * Reads the first-place placement prize used by reviewer cost estimates. + * + * @param {object} challenge Challenge model or response object. + * @returns {number|undefined} First-place USD placement prize amount, or undefined when unavailable. + */ +function getFirstPlacePrizeValue(challenge) { + const prizeSets = _.get(challenge, "prizeSets"); + + if (!Array.isArray(prizeSets)) { + return undefined; + } + + const placementPrizeSet = _.find( + prizeSets, + (prizeSet) => _.toString(_.get(prizeSet, "type")).toUpperCase() === PrizeSetTypeEnum.PLACEMENT, + ); + const firstPrize = _.get(placementPrizeSet, "prizes[0]"); + + if (_.toString(_.get(firstPrize, "type")).toUpperCase() !== constants.prizeTypes.USD) { + return undefined; + } + + const prizeValue = _.toNumber(_.get(firstPrize, "value")); + + return Number.isFinite(prizeValue) ? prizeValue : undefined; +} + +/** + * Calculates the estimated member-review payment amount for billing locks. + * + * The work app shows review cost using a two-submission estimate, so draft + * budget locks need the same fixed and coefficient-based reviewer math. + * + * @param {object} challenge Challenge model or response object. + * @returns {number} Estimated member-review payment amount before markup. + */ +function getEstimatedReviewerPaymentAmount(challenge) { + const reviewers = _.get(challenge, "reviewers"); + + if (!Array.isArray(reviewers)) { + return 0; + } + + const firstPlacePrizeValue = getFirstPlacePrizeValue(challenge); + + if (_.isNil(firstPlacePrizeValue)) { + return 0; + } + + return reviewers.reduce((total, reviewer) => { + if (_.get(reviewer, "isMemberReview") === false) { + return total; + } + + const fixedAmount = _.toNumber(_.get(reviewer, "fixedAmount")); + const baseCoefficient = _.toNumber(_.get(reviewer, "baseCoefficient")); + const incrementalCoefficient = _.toNumber(_.get(reviewer, "incrementalCoefficient")); + const memberReviewerCount = Math.max( + 1, + Math.trunc(_.toNumber(_.get(reviewer, "memberReviewerCount")) || 1), + ); + const reviewerPayment = + (Number.isFinite(fixedAmount) ? fixedAmount : 0) + + ((Number.isFinite(baseCoefficient) ? baseCoefficient : 0) + + (Number.isFinite(incrementalCoefficient) ? incrementalCoefficient : 0) * + DEFAULT_ESTIMATED_SUBMISSIONS_COUNT) * + firstPlacePrizeValue; + + return total + reviewerPayment * memberReviewerCount; + }, 0); +} + +/** + * Reads the currently persisted challenge member-payment total. + * + * @param {object} challenge Challenge model or response object. + * @returns {number|undefined} Total USD member-payment amount before markup, + * including estimated member-review cost when prize sets are loaded. + */ +function getChallengeMemberPaymentAmount(challenge) { + const prizeSetMemberPaymentAmount = getChallengePrizeSetMemberPaymentAmount(challenge); + + if (!_.isNil(prizeSetMemberPaymentAmount)) { + return Number( + (prizeSetMemberPaymentAmount + getEstimatedReviewerPaymentAmount(challenge)).toFixed(2), + ); + } + + const totalPrizes = _.get( + challenge, + "overview.totalPrizes", + _.get(challenge, "overviewTotalPrizes"), + ); + const amount = _.toNumber(totalPrizes); + + return Number.isFinite(amount) ? amount : undefined; +} + +/** + * Synchronizes the draft/active challenge budget lock to billing accounts. + * + * The challenge service owns the current estimated member-payment amount while + * finance later consumes the finalized payment amount after payment generation. + * This keeps draft challenge rows visible as locked budget in billing-account + * details until finance moves the row to consumed. + * + * @param {object} challenge Challenge model or response object after persistence. + * @returns {Promise} Resolves after the billing-account lock is written or skipped. + * @throws {Error} When the Billing Accounts API rejects the lock request. + */ +async function syncChallengeBillingAccountLock(challenge) { + if (!isChallengeBillingLockStatus(challenge && challenge.status)) { + return; + } + + const billing = _.get(challenge, "billing", _.get(challenge, "billingRecord")); + const billingAccountId = _.get(billing, "billingAccountId"); + const hasBillingAccountId = !_.isNil(billingAccountId) && _.toString(billingAccountId).trim(); + const memberPaymentAmount = getChallengeMemberPaymentAmount(challenge); + + if (!hasBillingAccountId || _.isNil(memberPaymentAmount)) { + logger.warn("Skipping challenge billing lock sync due to missing billing context", { + challengeId: _.get(challenge, "id"), + hasBillingAccountId: Boolean(hasBillingAccountId), + hasMemberPaymentAmount: !_.isNil(memberPaymentAmount), + }); + return; + } + + await projectHelper.lockChallengeBillingAccountAmount({ + billingAccountId, + challengeId: challenge.id, + markup: _.get(billing, "clientBillingRate", _.get(billing, "markup")), + memberPaymentAmount, + }); +} + +/** + * Returns normalized role names from the authenticated user payload. + * @param {Object} currentUser the authenticated user + * @returns {Set} lower-cased role names + */ +function getNormalizedUserRoles(currentUser) { + const roles = _.get(currentUser, "roles", []); + const roleValues = Array.isArray(roles) + ? roles + : _.toString(roles) + .split(",") + .map((role) => role.trim()); + + return new Set( + _.map(roleValues, (role) => _.toString(role).trim().toLowerCase()).filter(Boolean), + ); +} + +/** + * Determines whether challenge billing markup should be hidden from the caller. + * @param {Object} currentUser the authenticated user + * @returns {Boolean} true when the caller is copilot-only and should not see markup + */ +function shouldHideBillingMarkupForCopilot(currentUser) { + if (!currentUser || _.get(currentUser, "isMachine", false)) { + return false; + } + + const roles = getNormalizedUserRoles(currentUser); + const hasCopilotRole = [...BILLING_MARKUP_COPILOT_ROLES].some((role) => roles.has(role)); + + if (!hasCopilotRole) { + return false; + } + + return ![...BILLING_MARKUP_VISIBLE_ROLES].some((role) => roles.has(role)); +} + +/** + * Removes raw billing markup from challenge response data for copilot-only callers. + * @param {Object} currentUser the authenticated user + * @param {Object} challenge the challenge response object to sanitize + * @returns {Object} the same challenge object after response sanitization + */ +function sanitizeBillingMarkupForCaller(currentUser, challenge) { + if (shouldHideBillingMarkupForCopilot(currentUser)) { + _.unset(challenge, "billing.markup"); + } + + return challenge; +} + +/** + * Keeps persisted billing markup intact when copilot-only callers submit billing data. + * @param {Object} currentUser the authenticated user + * @param {Object} data incoming update payload + * @param {Object} challenge persisted challenge response shape + * @returns {Object} the update payload with protected billing markup restored + */ +function preserveBillingMarkupForCopilotUpdate(currentUser, data, challenge) { + if ( + shouldHideBillingMarkupForCopilot(currentUser) && + _.has(data, "billing") && + _.has(challenge, "billing.markup") + ) { + _.set(data, "billing.markup", _.get(challenge, "billing.markup")); + } + + return data; +} + // Minimal domain adapter for PhaseAdvancer to fetch phase-specific facts. // For now this returns an empty factResponses array which makes the // PhaseAdvancer default to conservative behavior when such facts are needed. @@ -591,13 +924,28 @@ setDefaultReviewers.schema = { currentUser: Joi.any(), data: Joi.any() }; * @returns {Array} the search result */ async function searchByLegacyId(currentUser, legacyId, page, perPage) { + const whitelistFilter = helper.getChallengeWhitelistAccessFilter(currentUser); + const where = { legacyId }; + if (whitelistFilter) { + where.AND = [whitelistFilter]; + } + // Do not take nested objects, query will be faster - const challenges = await prisma.challenge.findMany({ - take: perPage, - skip: (page - 1) * perPage, - where: { legacyId }, - include: includeReturnFields, - }); + let challenges; + try { + challenges = await prisma.challenge.findMany({ + take: perPage, + skip: (page - 1) * perPage, + where, + include: includeReturnFields, + }); + } catch (err) { + if (helper.shouldApplyChallengeWhitelist(currentUser)) { + logger.warn(`searchByLegacyId whitelist-filtered query failed: ${err.message}`); + return []; + } + throw err; + } _.forEach(challenges, (c) => { prismaHelper.convertModelToResponse(c); @@ -782,7 +1130,10 @@ async function searchChallenges(currentUser, criteria) { } if (!_.isUndefined(criteria.legacyId)) { const result = await searchByLegacyId(currentUser, criteria.legacyId, page, perPage); - return { total: result.length, page, perPage, result }; + const sanitizedResult = result.map((challenge) => + helper.removeNullProperties(sanitizeBillingMarkupForCaller(currentUser, challenge)), + ); + return { total: sanitizedResult.length, page, perPage, result: sanitizedResult }; } const prismaFilter = { @@ -802,6 +1153,10 @@ async function searchChallenges(currentUser, criteria) { const _hasAdminRole = hasAdminRole(currentUser); const _isMachineToken = _.get(currentUser, "isMachine", false); + const whitelistFilter = helper.getChallengeWhitelistAccessFilter(currentUser); + if (whitelistFilter) { + prismaFilter.where.AND.push(whitelistFilter); + } const normalizeGroupIdValue = (value) => { if (_.isNil(value)) { @@ -1564,7 +1919,9 @@ async function searchChallenges(currentUser, criteria) { } }); - const sanitizedResult = result.map((challenge) => helper.removeNullProperties(challenge)); + const sanitizedResult = result.map((challenge) => + helper.removeNullProperties(sanitizeBillingMarkupForCaller(currentUser, challenge)), + ); if (searchTimingEnabled) { logger.info( @@ -1755,6 +2112,39 @@ async function createChallenge(currentUser, challenge, userToken) { _.set(challenge, "legacy.reviewType", _.toUpper(_.get(challenge, "legacy.reviewType"))); } + const requestedApprovalStatus = normalizeApprovalStatus(challenge.approvalStatus); + const canApproveChallengeBudget = await userCanApproveChallengeBudget(currentUser, challenge); + + if (!requestedApprovalStatus) { + challenge.approvalStatus = CHALLENGE_APPROVAL_STATUS.PENDING_APPROVAL; + } else { + challenge.approvalStatus = requestedApprovalStatus; + } + + if ( + CHALLENGE_APPROVAL_ACTION_STATUSES.has(challenge.approvalStatus) && + !canApproveChallengeBudget + ) { + throw new errors.ForbiddenError( + "Only admins or project managers with full access can approve or reject challenge budgets.", + ); + } + + if (challenge.approvalStatus === CHALLENGE_APPROVAL_STATUS.REJECTED) { + const rejectionReason = _.toString(challenge.approvalRejectionReason || "").trim(); + if (!rejectionReason) { + throw new errors.BadRequestError("Rejection reason is required when rejecting a challenge."); + } + challenge.approvalRejectionReason = rejectionReason; + challenge.approvalApprovedBy = null; + } else if (challenge.approvalStatus === CHALLENGE_APPROVAL_STATUS.APPROVED) { + challenge.approvalRejectionReason = null; + challenge.approvalApprovedBy = _.toString(currentUser.handle || "").trim() || null; + } else { + challenge.approvalRejectionReason = null; + challenge.approvalApprovedBy = null; + } + if (!challenge.status) { challenge.status = ChallengeStatusEnum.NEW; } @@ -1940,6 +2330,7 @@ async function createChallenge(currentUser, challenge, userToken) { prismaHelper.convertModelToResponse(ret); await enrichSkillsData(ret); enrichChallengeForResponse(ret, track, type); + await syncChallengeBillingAccountLock(ret); // If the challenge is self-service, add the creating user as the "client manager", *not* the manager // This is necessary for proper handling of the vanilla embed on the self-service work item dashboard @@ -1987,7 +2378,7 @@ async function createChallenge(currentUser, challenge, userToken) { }) ${buildLogContext()}`, ); - return helper.removeNullProperties(ret); + return helper.removeNullProperties(sanitizeBillingMarkupForCaller(currentUser, ret)); } createChallenge.schema = { currentUser: Joi.any(), @@ -2133,6 +2524,11 @@ createChallenge.schema = { }) .optional(), startDate: Joi.date().iso(), + approvalStatus: Joi.string() + .valid(...Object.values(CHALLENGE_APPROVAL_STATUS)) + .insensitive(), + approvalRejectionReason: Joi.string().allow(null, ""), + approvalApprovedBy: Joi.string().allow(null, ""), status: Joi.string().valid( ChallengeStatusEnum.ACTIVE, ChallengeStatusEnum.NEW, @@ -2179,6 +2575,7 @@ async function getChallenge(currentUser, id, checkIfExists) { if (_.isNil(challenge) || _.isNil(challenge.id)) { throw new errors.NotFoundError(`Challenge of id ${id} is not found.`); } + await helper.ensureChallengeWhitelistAccess(currentUser, challenge.id); if (checkIfExists) { return _.pick(challenge, ["id", "legacyId"]); } @@ -2235,7 +2632,7 @@ async function getChallenge(currentUser, id, checkIfExists) { // Note: numOfRegistrants and numOfSubmissions are no longer calculated here. - return helper.removeNullProperties(challenge); + return helper.removeNullProperties(sanitizeBillingMarkupForCaller(currentUser, challenge)); } getChallenge.schema = { currentUser: Joi.any(), @@ -2247,9 +2644,18 @@ getChallenge.schema = { * Get challenge statistics * @param {Object} currentUser the user who perform operation * @param {String} id the challenge id - * @returns {Object} the challenge with given id + * @returns {Object} the challenge statistics for the given challenge + * @throws {NotFoundError} when the challenge does not exist + * @throws {ForbiddenError} when the current user cannot view the challenge */ async function getChallengeStatistics(currentUser, id) { + const challenge = await prisma.challenge.findUnique({ + where: { id }, + }); + if (_.isNil(challenge) || _.isNil(challenge.id)) { + throw new errors.NotFoundError(`Challenge of id ${id} is not found.`); + } + await helper.ensureUserCanViewChallenge(currentUser, challenge); // get submissions console.log("Getting challenge submissions for challenge ID: " + id); const submissions = await helper.getChallengeSubmissions(id); @@ -2297,7 +2703,20 @@ getChallengeStatistics.schema = { * @returns {Boolean} true if different, false otherwise */ function isDifferentPrizeSets(prizeSets = [], otherPrizeSets = []) { - return !_.isEqual(_.sortBy(prizeSets, "type"), _.sortBy(otherPrizeSets, "type")); + const buildPrizeKeys = (sets) => + _.sortBy( + _.flatMap(sets || [], (prizeSet) => { + const normalizedType = _.toString(_.get(prizeSet, "type", "")).trim().toUpperCase(); + const prizes = Array.isArray(prizeSet && prizeSet.prizes) ? prizeSet.prizes : []; + + return prizes.map((prize) => { + const normalizedValue = _.toString(_.get(prize, "value", "")).trim(); + return `${normalizedType}:${normalizedValue}`; + }); + }), + ); + + return !_.isEqual(buildPrizeKeys(prizeSets), buildPrizeKeys(otherPrizeSets)); } /** @@ -2676,6 +3095,8 @@ function prepareTaskCompletionData(challenge, challengeResources, data) { /** * Update challenge. + * When a challenge transitions to completed task status or a cancelled status, + * payment generation is requested after the database update commits. * @param {Object} currentUser the user who perform operation * @param {String} challengeId the challenge id * @param {Object} data the challenge data to be updated @@ -2698,6 +3119,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { if (!challenge || !challenge.id) { throw new errors.NotFoundError(`Challenge with id: ${challengeId} doesn't exist`); } + await helper.ensureChallengeWhitelistAccess(currentUser, challenge.id); enrichChallengeForResponse(challenge); prismaHelper.convertModelToResponse(challenge); const originalChallengePhases = _.cloneDeep(challenge.phases || []); @@ -2727,14 +3149,17 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { })`, ); - if (billingAccountId && _.isUndefined(_.get(challenge, "billing.billingAccountId"))) { - // Ensure billingAccountId is a string or null to match Prisma schema - if (billingAccountId !== null && billingAccountId !== undefined) { - _.set(data, "billing.billingAccountId", String(billingAccountId)); - } else { - _.set(data, "billing.billingAccountId", null); - } - _.set(data, "billing.markup", _.isNil(markup) ? 0 : markup); + const existingBillingAccountId = normalizeOptionalString( + _.get(challenge, "billing.billingAccountId"), + ); + const projectBillingAccountId = normalizeOptionalString(billingAccountId); + if (projectBillingAccountId && !existingBillingAccountId) { + data.billing = { + ..._.get(challenge, "billing", {}), + ..._.get(data, "billing", {}), + billingAccountId: projectBillingAccountId, + markup: _.isNil(markup) ? 0 : markup, + }; } // Make sure the user cannot change the direct project ID @@ -2755,11 +3180,68 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { delete data.reviews; } + data = preserveBillingMarkupForCopilotUpdate(currentUser, data, challenge); + const rawApprovalRejectionReason = _.toString(_.get(data, "approvalRejectionReason", "")); + // Remove fields from data that are not allowed to be updated and that match the existing challenge data = sanitizeData(sanitizeChallenge(data), challenge); const sanitizedIncludesTerms = Object.prototype.hasOwnProperty.call(data, "terms"); const shouldReplaceTerms = sanitizedIncludesTerms || (payloadIncludesTerms && originalTermsValue === null); + const canApproveChallengeBudget = await userCanApproveChallengeBudget(currentUser, challenge); + const requestedApprovalStatus = normalizeApprovalStatus(data.approvalStatus); + const prizeSetsUpdated = + Array.isArray(data.prizeSets) && isDifferentPrizeSets(data.prizeSets, challenge.prizeSets); + + if ( + requestedApprovalStatus != null && + requestedApprovalStatus !== challenge.approvalStatus && + !canApproveChallengeBudget + ) { + throw new errors.ForbiddenError( + "Only admins or project managers with full access can change the challenge budget approval status.", + ); + } + + if (requestedApprovalStatus === CHALLENGE_APPROVAL_STATUS.REJECTED) { + const rejectionReason = rawApprovalRejectionReason.trim(); + if (!rejectionReason) { + throw new errors.BadRequestError("Rejection reason is required when rejecting a challenge."); + } + data.approvalRejectionReason = rejectionReason; + data.approvalApprovedBy = null; + } else if (requestedApprovalStatus === CHALLENGE_APPROVAL_STATUS.APPROVED) { + data.approvalRejectionReason = null; + data.approvalApprovedBy = _.toString(currentUser.handle || "").trim() || null; + } else if (requestedApprovalStatus === CHALLENGE_APPROVAL_STATUS.PENDING_APPROVAL) { + data.approvalRejectionReason = null; + data.approvalApprovedBy = null; + } + + if ( + challenge.status === ChallengeStatusEnum.ACTIVE && + prizeSetsUpdated && + !canApproveChallengeBudget + ) { + throw new errors.ForbiddenError( + "Prizes and copilot fee are locked after launch. Contact the Project Manager for updates.", + ); + } + + if ( + prizeSetsUpdated && + challenge.status !== ChallengeStatusEnum.ACTIVE && + (requestedApprovalStatus == null || !canApproveChallengeBudget) + ) { + data.approvalStatus = CHALLENGE_APPROVAL_STATUS.PENDING_APPROVAL; + data.approvalRejectionReason = null; + data.approvalApprovedBy = null; + } + + const resolvedApprovalStatus = + normalizeApprovalStatus(data.approvalStatus) || + normalizeApprovalStatus(challenge.approvalStatus) || + CHALLENGE_APPROVAL_STATUS.PENDING_APPROVAL; logger.debug(`Sanitized Data: ${JSON.stringify(data)}`); logger.debug(`updateChallenge(${challengeId}): fetching challenge resources`); @@ -2781,6 +3263,14 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { const isStatusChangingToActive = data.status === ChallengeStatusEnum.ACTIVE && challenge.status !== ChallengeStatusEnum.ACTIVE; + const isStatusChangingToCompleted = + data.status === ChallengeStatusEnum.COMPLETED && + challenge.status !== ChallengeStatusEnum.COMPLETED; + + if (isStatusChangingToActive && resolvedApprovalStatus !== CHALLENGE_APPROVAL_STATUS.APPROVED) { + throw new errors.BadRequestError("Challenge launch is blocked until budget approval is Approved."); + } + let sendActivationEmail = false; let sendSubmittedEmail = false; let sendCompletedEmail = false; @@ -2886,6 +3376,8 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { let isChallengeBeingActivated = isStatusChangingToActive; let isChallengeBeingCancelled = false; + const isStatusChangingToCancelled = + isCancelledChallengeStatus(data.status) && !isCancelledChallengeStatus(challenge.status); if (data.status) { if (data.status === ChallengeStatusEnum.ACTIVE) { await validateChallengeActivationBillingAccount({ @@ -2896,22 +3388,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { }); } - if ( - _.includes( - [ - ChallengeStatusEnum.CANCELLED, - ChallengeStatusEnum.CANCELLED_REQUIREMENTS_INFEASIBLE, - ChallengeStatusEnum.CANCELLED_PAYMENT_FAILED, - ChallengeStatusEnum.CANCELLED_FAILED_REVIEW, - ChallengeStatusEnum.CANCELLED_FAILED_SCREENING, - ChallengeStatusEnum.CANCELLED_ZERO_SUBMISSIONS, - ChallengeStatusEnum.CANCELLED_WINNER_UNRESPONSIVE, - ChallengeStatusEnum.CANCELLED_CLIENT_REQUEST, - ChallengeStatusEnum.CANCELLED_ZERO_REGISTRATIONS, - ], - data.status, - ) - ) { + if (isCancelledChallengeStatus(data.status)) { isChallengeBeingCancelled = true; } @@ -3444,9 +3921,9 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { if (shouldReplaceTerms) { await tx.challengeTerm.deleteMany({ where: { challengeId } }); } - // if (_.isNil(updateData.skills)) { - // await tx.challengeSkill.deleteMany({ where: { challengeId } }); - // } + if (!_.isNil(updateData.skills)) { + await tx.challengeSkill.deleteMany({ where: { challengeId } }); + } return await tx.challenge.update({ data: updateData, @@ -3454,6 +3931,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { include: includeReturnFields, }); }); + await syncChallengeBillingAccountLock(updatedChallenge); if (taskCompletionInfo && taskCompletionInfo.shouldTriggerPayments) { logger.info(`Triggering payment generation for Task challenge ${challengeId}`); try { @@ -3465,6 +3943,19 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { logger.error(`Error generating payments for Task challenge ${challengeId}: ${err.message}`); } } + if (isStatusChangingToCancelled) { + logger.info(`Triggering payment generation for cancelled challenge ${challengeId}`); + try { + const paymentSuccess = await helper.generateChallengePayments(challengeId); + if (!paymentSuccess) { + logger.warn(`Failed to generate payments for cancelled challenge ${challengeId}`); + } + } catch (err) { + logger.error( + `Error generating payments for cancelled challenge ${challengeId}: ${err.message}`, + ); + } + } // Re-fetch the challenge outside the transaction to ensure we publish // only after the commit succeeds and using the committed snapshot. if (emitEvent) { @@ -3475,6 +3966,11 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { await indexChallengeAndPostToKafka(committed, track, type); } + if (isStatusChangingToCompleted) { + logger.info(`Triggering member rating updates for completed challenge ${challengeId}`); + void helper.rerateChallengeSubmitterRatings(challengeId); + } + // Convert to response shape before any business-logic checks that expect it prismaHelper.convertModelToResponse(updatedChallenge); await enrichSkillsData(updatedChallenge); @@ -3527,7 +4023,7 @@ async function updateChallenge(currentUser, challengeId, data, options = {}) { } } - return helper.removeNullProperties(updatedChallenge); + return helper.removeNullProperties(sanitizeBillingMarkupForCaller(currentUser, updatedChallenge)); } updateChallenge.schema = { @@ -3706,6 +4202,11 @@ updateChallenge.schema = { status: Joi.string() .valid(..._.values(ChallengeStatusEnum)) .insensitive(), + approvalStatus: Joi.string() + .valid(...Object.values(CHALLENGE_APPROVAL_STATUS)) + .insensitive(), + approvalRejectionReason: Joi.string().allow(null, ""), + approvalApprovedBy: Joi.string().allow(null, ""), attachments: Joi.array().items( Joi.object().keys({ id: Joi.id(), @@ -4068,6 +4569,7 @@ function sanitizeChallenge(challenge) { "legacyId", "startDate", "status", + "approvalStatus", "task", "groups", "cancelReason", @@ -4108,7 +4610,11 @@ function sanitizeChallenge(challenge) { ]); } if (challenge.billing) { - sanitized.billing = _.pick(challenge.billing, ["billingAccountId", "markup"]); + sanitized.billing = _.pick(challenge.billing, [ + "billingAccountId", + "markup", + "clientBillingRate", + ]); } if (challenge.metadata) { sanitized.metadata = _.map(challenge.metadata, (meta) => _.pick(meta, ["name", "value"])); @@ -4365,6 +4871,7 @@ async function advancePhase(currentUser, challengeId, data) { if (_.isNil(challenge) || _.isNil(challenge.id)) { throw new errors.NotFoundError(`Challenge with id: ${challengeId} doesn't exist.`); } + await helper.ensureChallengeWhitelistAccess(currentUser, challenge.id); if (challenge.status !== ChallengeStatusEnum.ACTIVE) { throw new errors.BadRequestError(`Challenge with id: ${challengeId} is not in ACTIVE status.`); } @@ -4504,6 +5011,7 @@ async function closeMarathonMatch(currentUser, challengeId) { if (_.isNil(challenge) || _.isNil(challenge.id)) { throw new errors.NotFoundError(`Challenge with id: ${challengeId} doesn't exist.`); } + await helper.ensureChallengeWhitelistAccess(currentUser, challenge.id); if (!challenge.type || challenge.type.name !== "Marathon Match") { throw new errors.BadRequestError( diff --git a/test/unit/AttachmentService.test.js b/test/unit/AttachmentService.test.js index afcf0bd..c45247c 100644 --- a/test/unit/AttachmentService.test.js +++ b/test/unit/AttachmentService.test.js @@ -78,6 +78,40 @@ describe('attachment service unit tests', () => { should.equal(attachmentContent.compare(result.data), 0) }) + it('download attachment enforces challenge user whitelist for interactive users', async () => { + await prisma.challengeUserWhitelist.create({ + data: { + challengeId: data.challenge.id, + userId: 'allowed-user' + } + }) + + try { + try { + await service.downloadAttachment( + { roles: ['administrator'], userId: 'blocked-user' }, + data.challenge.id, + id + ) + } catch (e) { + should.equal(e.name, 'ForbiddenError') + + const result = await service.downloadAttachment( + { isMachine: true, userId: 'machine-user' }, + data.challenge.id, + id + ) + should.equal(result.fileName, 'attachment.txt') + return + } + throw new Error('should not reach here') + } finally { + await prisma.challengeUserWhitelist.deleteMany({ + where: { challengeId: data.challenge.id } + }) + } + }) + it('download attachment - forbidden', async () => { try { await service.downloadAttachment({ roles: ['user'], userId: 678678 }, data.taskChallenge.id, id2) diff --git a/test/unit/ChallengePhaseService.test.js b/test/unit/ChallengePhaseService.test.js index 33d4318..25ca132 100644 --- a/test/unit/ChallengePhaseService.test.js +++ b/test/unit/ChallengePhaseService.test.js @@ -6,6 +6,8 @@ if (!process.env.REVIEW_DB_URL && process.env.DATABASE_URL) { } require('../../app-bootstrap') +const _ = require('lodash') +const axios = require('axios') const chai = require('chai') const config = require('config') const { Prisma } = require('@prisma/client') @@ -13,6 +15,7 @@ const { v4: uuid } = require('uuid') const challengeService = require('../../src/services/ChallengeService') const { getReviewClient } = require('../../src/common/review-prisma') const prisma = require('../../src/common/prisma').getClient() +const m2mHelper = require('../../src/common/m2m-helper') const originalIndexChallengeAndPostToKafka = challengeService.indexChallengeAndPostToKafka challengeService.indexChallengeAndPostToKafka = async () => {} const service = require('../../src/services/ChallengePhaseService') @@ -23,7 +26,7 @@ const should = chai.should() describe('challenge phase service unit tests', () => { let data - const authUser = { userId: 'testuser' } + const authUser = { userId: 'testuser', roles: ['administrator'] } const reviewSchema = config.get('REVIEW_DB_SCHEMA') const reviewTable = Prisma.raw(`"${reviewSchema}"."review"`) const submissionTable = Prisma.raw(`"${reviewSchema}"."submission"`) @@ -31,6 +34,8 @@ describe('challenge phase service unit tests', () => { const reviewItemCommentTable = Prisma.raw(`"${reviewSchema}"."reviewItemComment"`) const appealTable = Prisma.raw(`"${reviewSchema}"."appeal"`) let reviewClient + let originalAxiosGet + let originalGetM2MToken const shortId = () => uuid().replace(/-/g, '').slice(0, 14) const resetPrimaryChallengePhases = async () => { await prisma.challengePhaseConstraint.update({ @@ -94,6 +99,22 @@ describe('challenge phase service unit tests', () => { await reviewClient.$executeRawUnsafe(`TRUNCATE TABLE "${reviewSchema}"."submission"`) } before(async () => { + originalAxiosGet = axios.get + originalGetM2MToken = m2mHelper.getM2MToken + m2mHelper.getM2MToken = async () => 'test-token' + axios.get = async (url, options) => { + const requestUrl = _.toString(url) + if ( + requestUrl === config.RESOURCE_ROLES_API_URL || + requestUrl.startsWith(config.RESOURCES_API_URL) || + requestUrl.startsWith(`${config.PROJECTS_API_URL}/`) || + requestUrl.includes('/memberGroups/') + ) { + return { data: [], status: 200, headers: {} } + } + return originalAxiosGet(url, options) + } + await testHelper.createData() data = testHelper.getData() reviewClient = getReviewClient() @@ -155,6 +176,8 @@ describe('challenge phase service unit tests', () => { after(async () => { challengeService.indexChallengeAndPostToKafka = originalIndexChallengeAndPostToKafka + axios.get = originalAxiosGet + m2mHelper.getM2MToken = originalGetM2MToken if (reviewClient) { await reviewClient.$executeRawUnsafe(`TRUNCATE TABLE "${reviewSchema}"."appealResponse"`) @@ -188,10 +211,71 @@ describe('challenge phase service unit tests', () => { it('get all challenge phases successfully 2', async () => { const challengeId = data.taskChallenge.id - const result = await service.getAllChallengePhases(challengeId) + const result = await service.getAllChallengePhases(challengeId, { isMachine: true }) should.equal(result.length, 0) }) + it('get challenge phases enforces challenge user whitelist for interactive users', async () => { + await prisma.challengeUserWhitelist.create({ + data: { + challengeId: data.challenge.id, + userId: 'allowed-user' + } + }) + + try { + try { + await service.getAllChallengePhases(data.challenge.id, { + roles: ['administrator'], + userId: 'blocked-user' + }) + } catch (e) { + should.equal(e.name, 'ForbiddenError') + + const allowedPhases = await service.getAllChallengePhases(data.challenge.id, { + roles: ['administrator'], + userId: 'allowed-user' + }) + should.equal(allowedPhases.length, 2) + + const machinePhases = await service.getAllChallengePhases(data.challenge.id, { + isMachine: true, + userId: 'machine-user' + }) + should.equal(machinePhases.length, 2) + return + } + throw new Error('should not reach here') + } finally { + await prisma.challengeUserWhitelist.deleteMany({ + where: { challengeId: data.challenge.id } + }) + } + }) + + it('get all challenge phases enforces challenge group view rules', async () => { + await prisma.challenge.update({ + where: { id: data.challenge.id }, + data: { groups: [uuid()] } + }) + + try { + await service.getAllChallengePhases(data.challenge.id, { + roles: ['Topcoder User'], + userId: 'blocked-group-user' + }) + } catch (e) { + should.equal(e.name, 'ForbiddenError') + return + } finally { + await prisma.challenge.update({ + where: { id: data.challenge.id }, + data: { groups: [] } + }) + } + throw new Error('should not reach here') + }) + it('get all challenge phases - invalid challengeId', async () => { try { await service.getAllChallengePhases('invalid id') @@ -216,7 +300,9 @@ describe('challenge phase service unit tests', () => { it('get challenge phase - not found', async () => { try { - await service.getChallengePhase(data.taskChallenge.id, data.challengePhase2Id) + await service.getChallengePhase(data.taskChallenge.id, data.challengePhase2Id, { + isMachine: true + }) } catch (e) { should.equal( e.message, @@ -227,6 +313,20 @@ describe('challenge phase service unit tests', () => { throw new Error('should not reach here') }) + it('get challenge phase enforces task view rules before loading phase data', async () => { + try { + await service.getChallengePhase(data.taskChallenge.id, data.challengePhase1Id, { + roles: ['Topcoder User'], + userId: 'blocked-task-user' + }) + } catch (e) { + should.equal(e.name, 'ForbiddenError') + should.equal(e.message, "You don't have access to view this challenge") + return + } + throw new Error('should not reach here') + }) + it('get challenge phase - invalid challenge id', async () => { try { await service.getChallengePhase('invalid', data.phase.id) @@ -918,6 +1018,25 @@ describe('challenge phase service unit tests', () => { throw new Error('should not reach here') }) + it('partially update challenge phase blocks editor without challenge modify access', async () => { + try { + await service.partiallyUpdateChallengePhase( + { handle: 'blocked-editor', roles: ['Connect Manager'], userId: 'blocked-editor' }, + data.challenge.id, + data.challengePhase1Id, + { name: 'blocked update' } + ) + } catch (e) { + should.equal(e.name, 'ForbiddenError') + const challengePhase = await prisma.challengePhase.findUnique({ + where: { id: data.challengePhase1Id } + }) + should.equal(challengePhase.name, 'Registration') + return + } + throw new Error('should not reach here') + }) + it('partially update challenge phase - phaseId does not exist', async () => { try { await service.partiallyUpdateChallengePhase( @@ -1594,6 +1713,54 @@ describe('challenge phase service unit tests', () => { throw new Error('should not reach here') }) + it('partially update challenge phase - opens marathon match review phase without reviewer resource', async () => { + const reviewPhase = await prisma.phase.create({ + data: { + id: uuid(), + name: 'Review', + description: 'desc', + isOpen: false, + duration: 86400, + createdBy: 'admin', + updatedBy: 'admin' + } + }) + const reviewChallengePhaseId = uuid() + await prisma.challengePhase.create({ + data: { + id: reviewChallengePhaseId, + challengeId: data.marathonMatchChallenge.id, + phaseId: reviewPhase.id, + name: 'Review', + isOpen: false, + createdBy: 'admin', + updatedBy: 'admin' + } + }) + + const originalGetChallengeResources = helper.getChallengeResources + const originalGetResourceRoles = helper.getResourceRoles + helper.getChallengeResources = async () => [{ roleId: 'some-other-role-id' }] + helper.getResourceRoles = async () => { + throw new Error('resource role lookup should not be required for Marathon Match Review') + } + + try { + const challengePhase = await service.partiallyUpdateChallengePhase( + authUser, + data.marathonMatchChallenge.id, + reviewChallengePhaseId, + { isOpen: true } + ) + should.equal(challengePhase.isOpen, true) + } finally { + helper.getChallengeResources = originalGetChallengeResources + helper.getResourceRoles = originalGetResourceRoles + await prisma.challengePhase.delete({ where: { id: reviewChallengePhaseId } }) + await prisma.phase.delete({ where: { id: reviewPhase.id } }) + } + }) + it('partially update challenge phase - opens review phase when reviewer resource exists', async () => { const reviewPhase = await prisma.phase.create({ data: { @@ -1647,7 +1814,29 @@ describe('challenge phase service unit tests', () => { }) describe('delete challenge phase tests', () => { + it('delete challenge phase blocks editor without challenge modify access', async () => { + await resetPrimaryChallengePhases() + + try { + await service.deleteChallengePhase( + { handle: 'blocked-editor', roles: ['Connect Manager'], userId: 'blocked-editor' }, + data.challenge.id, + data.challengePhase1Id + ) + } catch (e) { + should.equal(e.name, 'ForbiddenError') + const challengePhase = await prisma.challengePhase.findUnique({ + where: { id: data.challengePhase1Id } + }) + should.exist(challengePhase) + return + } + throw new Error('should not reach here') + }) + it('delete challenge phase successfully', async () => { + await resetPrimaryChallengePhases() + const phases = await service.getAllChallengePhases(data.challenge.id) await service.deleteChallengePhase(authUser, data.challenge.id, data.challengePhase1Id) const remainingPhases = await service.getAllChallengePhases(data.challenge.id) diff --git a/test/unit/ChallengeService.test.js b/test/unit/ChallengeService.test.js index 6908fbc..87a2a89 100644 --- a/test/unit/ChallengeService.test.js +++ b/test/unit/ChallengeService.test.js @@ -8,12 +8,14 @@ if (!process.env.REVIEW_DB_URL && process.env.DATABASE_URL) { require("../../app-bootstrap"); const _ = require("lodash"); +const axios = require("axios"); const config = require("config"); const { v4: uuid } = require("uuid"); const chai = require("chai"); const constants = require("../../app-constants"); const service = require("../../src/services/ChallengeService"); const helper = require("../../src/common/helper"); +const m2mHelper = require("../../src/common/m2m-helper"); const challengeHelper = require("../../src/common/challenge-helper"); const projectHelper = require("../../src/common/project-helper"); const testHelper = require("../testHelper"); @@ -46,6 +48,9 @@ describe("challenge service unit tests", () => { let data; let testChallengeData; let createdChallengeData; + let billingLockRequests; + let originalLockChallengeBillingAccountAmount; + let originalRerateChallengeSubmitterRatings; const notFoundId = uuid(); const authUser = { userId: "testuser", @@ -156,6 +161,22 @@ describe("challenge service unit tests", () => { }; }); + beforeEach(() => { + billingLockRequests = []; + originalLockChallengeBillingAccountAmount = projectHelper.lockChallengeBillingAccountAmount; + projectHelper.lockChallengeBillingAccountAmount = async (request) => { + billingLockRequests.push(_.cloneDeep(request)); + return { locked: true }; + }; + originalRerateChallengeSubmitterRatings = helper.rerateChallengeSubmitterRatings; + helper.rerateChallengeSubmitterRatings = async () => true; + }); + + afterEach(() => { + projectHelper.lockChallengeBillingAccountAmount = originalLockChallengeBillingAccountAmount; + helper.rerateChallengeSubmitterRatings = originalRerateChallengeSubmitterRatings; + }); + after(async () => { const idsToDelete = _.compact([id, id2]); if (idsToDelete.length > 0) { @@ -241,6 +262,79 @@ describe("challenge service unit tests", () => { should.equal(result.numOfRegistrants, 0); }); + it("locks draft challenge budget when the challenge is saved", async () => { + const challengeData = _.cloneDeep(testChallengeData); + challengeData.status = ChallengeStatusEnum.DRAFT; + challengeData.prizeSets = [ + { + type: PrizeSetTypeEnum.PLACEMENT, + description: "placement prizes", + prizes: [ + { + description: "placement 1", + type: constants.prizeTypes.USD, + value: 35, + }, + { + description: "placement 2", + type: constants.prizeTypes.USD, + value: 12, + }, + ], + }, + { + type: PrizeSetTypeEnum.COPILOT, + description: "copilot payment", + prizes: [ + { + description: "copilot", + type: constants.prizeTypes.USD, + value: 10, + }, + ], + }, + ]; + challengeData.reviewers = [ + { + scorecardId: "scorecard-id", + isMemberReview: true, + memberReviewerCount: 1, + phaseId: data.phase.id, + fixedAmount: 16.1, + baseCoefficient: 0, + incrementalCoefficient: 0, + }, + ]; + const originalGetProjectBillingInformation = projectHelper.getProjectBillingInformation; + + projectHelper.getProjectBillingInformation = async () => ({ + billingAccountId: "80001012", + markup: 0.1, + }); + + let result; + try { + result = await service.createChallenge( + { isMachine: true, sub: "sub", userId: "testuser" }, + challengeData, + config.M2M_FULL_ACCESS_TOKEN, + ); + + should.equal(billingLockRequests.length, 1); + billingLockRequests[0].should.deep.equal({ + billingAccountId: "80001012", + challengeId: result.id, + markup: 0.1, + memberPaymentAmount: 73.1, + }); + } finally { + projectHelper.getProjectBillingInformation = originalGetProjectBillingInformation; + if (result && result.id) { + await prisma.challenge.deleteMany({ where: { id: result.id } }); + } + } + }); + it("create challenge successfully when project directProjectId is a numeric string", async () => { const challengeData = _.cloneDeep(testChallengeData); const originalGetProject = projectHelper.getProject; @@ -544,6 +638,27 @@ describe("challenge service unit tests", () => { } }); + it("get challenge hides billing markup for copilot-only project write users", async () => { + const originalUserHasProjectWriteAccess = helper.userHasProjectWriteAccess; + + helper.userHasProjectWriteAccess = async () => true; + + try { + const result = await service.getChallenge( + { handle: "writer", roles: ["copilot"], userId: "testuser" }, + createdChallengeData.id, + ); + + should.equal( + result.billing.billingAccountId, + createdChallengeData.billing.billingAccountId, + ); + should.equal(_.isUndefined(result.billing.markup), true); + } finally { + helper.userHasProjectWriteAccess = originalUserHasProjectWriteAccess; + } + }); + it("get challenge hides billing for users without project write access", async () => { const originalUserHasProjectWriteAccess = helper.userHasProjectWriteAccess; const originalListResourcesByMemberAndChallenge = helper.listResourcesByMemberAndChallenge; @@ -564,6 +679,158 @@ describe("challenge service unit tests", () => { } }); + it("get challenge enforces challenge user whitelist for interactive users", async () => { + await prisma.challengeUserWhitelist.create({ + data: { + challengeId: createdChallengeData.id, + userId: "allowed-user", + }, + }); + + try { + const allowed = await service.getChallenge( + { handle: "allowed", roles: ["administrator"], userId: "allowed-user" }, + createdChallengeData.id, + ); + should.equal(allowed.id, createdChallengeData.id); + + const machine = await service.getChallenge( + { isMachine: true, userId: "machine-user" }, + createdChallengeData.id, + ); + should.equal(machine.id, createdChallengeData.id); + + try { + await service.getChallenge( + { handle: "blocked", roles: ["administrator"], userId: "blocked-user" }, + createdChallengeData.id, + ); + } catch (e) { + should.equal(e.name, "ForbiddenError"); + return; + } + throw new Error("should not reach here"); + } finally { + await prisma.challengeUserWhitelist.deleteMany({ + where: { challengeId: createdChallengeData.id }, + }); + } + }); + + it("get challenge statistics enforces challenge user whitelist before loading submissions", async () => { + const originalGetChallengeSubmissions = helper.getChallengeSubmissions; + let loadedSubmissions = false; + + helper.getChallengeSubmissions = async () => { + loadedSubmissions = true; + return []; + }; + + await prisma.challengeUserWhitelist.create({ + data: { + challengeId: data.challenge.id, + userId: "allowed-user", + }, + }); + + try { + try { + await service.getChallengeStatistics( + { handle: "blocked", roles: ["administrator"], userId: "blocked-user" }, + data.challenge.id, + ); + } catch (e) { + should.equal(e.name, "ForbiddenError"); + should.equal(loadedSubmissions, false); + + const allowed = await service.getChallengeStatistics( + { handle: "allowed", roles: ["administrator"], userId: "allowed-user" }, + data.challenge.id, + ); + should.deepEqual(allowed, []); + + const machine = await service.getChallengeStatistics( + { isMachine: true, userId: "machine-user" }, + data.challenge.id, + ); + should.deepEqual(machine, []); + return; + } + throw new Error("should not reach here"); + } finally { + helper.getChallengeSubmissions = originalGetChallengeSubmissions; + await prisma.challengeUserWhitelist.deleteMany({ + where: { challengeId: data.challenge.id }, + }); + } + }); + + it("get challenge statistics returns not found before loading submissions", async () => { + const originalGetChallengeSubmissions = helper.getChallengeSubmissions; + let loadedSubmissions = false; + + helper.getChallengeSubmissions = async () => { + loadedSubmissions = true; + return []; + }; + + try { + await service.getChallengeStatistics({ isMachine: true }, notFoundId); + } catch (e) { + should.equal(e.name, "NotFoundError"); + should.equal(e.message, `Challenge of id ${notFoundId} is not found.`); + should.equal(loadedSubmissions, false); + return; + } finally { + helper.getChallengeSubmissions = originalGetChallengeSubmissions; + } + throw new Error("should not reach here"); + }); + + it("get challenge statistics enforces challenge group view rules before loading submissions", async () => { + const originalGetChallengeSubmissions = helper.getChallengeSubmissions; + const originalAxiosGet = axios.get; + const originalGetM2MToken = m2mHelper.getM2MToken; + let loadedSubmissions = false; + + helper.getChallengeSubmissions = async () => { + loadedSubmissions = true; + return []; + }; + m2mHelper.getM2MToken = async () => "test-token"; + axios.get = async (url, options) => { + if (_.toString(url).includes("/memberGroups/")) { + return { data: [], status: 200, headers: {} }; + } + return originalAxiosGet(url, options); + }; + + await prisma.challenge.update({ + where: { id: data.challenge.id }, + data: { groups: [uuid()] }, + }); + + try { + await service.getChallengeStatistics( + { handle: "blocked", roles: ["Topcoder User"], userId: "blocked-user" }, + data.challenge.id, + ); + } catch (e) { + should.equal(e.name, "ForbiddenError"); + should.equal(loadedSubmissions, false); + return; + } finally { + helper.getChallengeSubmissions = originalGetChallengeSubmissions; + axios.get = originalAxiosGet; + m2mHelper.getM2MToken = originalGetM2MToken; + await prisma.challenge.update({ + where: { id: data.challenge.id }, + data: { groups: [] }, + }); + } + throw new Error("should not reach here"); + }); + it("get challenge - not found", async () => { try { await service.getChallenge({ isMachine: true }, notFoundId); @@ -855,6 +1122,42 @@ describe("challenge service unit tests", () => { should.equal(result.numOfRegistrants, 0); }); + it("search challenges hides whitelisted challenges from blocked interactive users", async () => { + await prisma.challengeUserWhitelist.create({ + data: { + challengeId: data.challenge.id, + userId: "allowed-user", + }, + }); + + try { + const blocked = await service.searchChallenges( + { handle: "blocked", roles: ["administrator"], userId: "blocked-user" }, + { id: data.challenge.id }, + ); + should.equal(blocked.total, 0); + should.equal(blocked.result.length, 0); + + const allowed = await service.searchChallenges( + { handle: "allowed", roles: ["administrator"], userId: "allowed-user" }, + { id: data.challenge.id }, + ); + should.equal(allowed.total, 1); + should.equal(allowed.result[0].id, data.challenge.id); + + const machine = await service.searchChallenges( + { isMachine: true, userId: "machine-user" }, + { id: data.challenge.id }, + ); + should.equal(machine.total, 1); + should.equal(machine.result[0].id, data.challenge.id); + } finally { + await prisma.challengeUserWhitelist.deleteMany({ + where: { challengeId: data.challenge.id }, + }); + } + }); + it("search challenges successfully 2", async () => { const result = await service.searchChallenges({ isMachine: true }, { name: "aaa bbb ccc" }); should.equal(result.total, 0); @@ -1278,6 +1581,43 @@ describe("challenge service unit tests", () => { }, ]; + it("update challenge enforces challenge user whitelist before downstream validation", async () => { + const originalGetChallengeResources = helper.getChallengeResources; + let loadedResources = false; + + helper.getChallengeResources = async () => { + loadedResources = true; + return []; + }; + + await prisma.challengeUserWhitelist.create({ + data: { + challengeId: data.challenge.id, + userId: "allowed-user", + }, + }); + + try { + try { + await service.updateChallenge( + { handle: "blocked", roles: ["administrator"], userId: "blocked-user" }, + data.challenge.id, + { description: "blocked update" }, + ); + } catch (e) { + should.equal(e.name, "ForbiddenError"); + should.equal(loadedResources, false); + return; + } + throw new Error("should not reach here"); + } finally { + helper.getChallengeResources = originalGetChallengeResources; + await prisma.challengeUserWhitelist.deleteMany({ + where: { challengeId: data.challenge.id }, + }); + } + }); + it("update challenge successfully 1", async () => { const challengeData = testChallengeData; const result = await service.updateChallenge( @@ -1360,6 +1700,118 @@ describe("challenge service unit tests", () => { should.equal(testHelper.getDatesDiff(result.startDate, testChallengeData.startDate), 0); }); + it("backfills missing billing and locks draft budget including copilot prizes", async () => { + const challengeData = _.cloneDeep(testChallengeData); + challengeData.name = `${challengeData.name} Billing Lock ${Date.now()}`; + challengeData.legacyId = Math.floor(Math.random() * 1000000); + challengeData.status = ChallengeStatusEnum.NEW; + challengeData.prizeSets = [ + { + type: PrizeSetTypeEnum.PLACEMENT, + description: "placement prizes", + prizes: [ + { + description: "placement 1", + type: constants.prizeTypes.USD, + value: 1000, + }, + ], + }, + { + type: PrizeSetTypeEnum.COPILOT, + description: "copilot payment", + prizes: [ + { + description: "copilot", + type: constants.prizeTypes.USD, + value: 150, + }, + ], + }, + ]; + + const originalGetProject = projectHelper.getProject; + const originalGetProjectBillingInformation = projectHelper.getProjectBillingInformation; + let billingLookupCount = 0; + let createdChallengeId; + + projectHelper.getProject = async () => ({ directProjectId: "33541" }); + projectHelper.getProjectBillingInformation = async () => { + billingLookupCount += 1; + + if (billingLookupCount === 1) { + return { + billingAccountId: null, + markup: null, + }; + } + + return { + billingAccountId: "80001012", + markup: 0.1, + }; + }; + + try { + const created = await service.createChallenge( + { isMachine: true, sub: "sub-billing-lock-create", userId: "testuser" }, + challengeData, + config.M2M_FULL_ACCESS_TOKEN, + ); + createdChallengeId = created.id; + should.equal(billingLockRequests.length, 0); + + const draft = await service.updateChallenge( + { isMachine: true, sub: "sub-billing-lock-update", userId: 22838965 }, + created.id, + { + status: ChallengeStatusEnum.DRAFT, + }, + ); + + should.equal(draft.billing.billingAccountId, "80001012"); + should.equal(billingLockRequests.length, 1); + billingLockRequests[0].should.deep.equal({ + billingAccountId: "80001012", + challengeId: created.id, + markup: 0.1, + memberPaymentAmount: 1150, + }); + + const updatedPrizeSets = _.cloneDeep(draft.prizeSets); + const copilotPrizeSet = _.find( + updatedPrizeSets, + (prizeSet) => _.toString(prizeSet.type).toUpperCase() === PrizeSetTypeEnum.COPILOT, + ); + should.exist(copilotPrizeSet); + copilotPrizeSet.prizes[0].value = 225; + billingLockRequests = []; + + await service.updateChallenge( + { isMachine: true, sub: "sub-billing-lock-prize-update", userId: 22838965 }, + created.id, + { + prizeSets: updatedPrizeSets, + }, + ); + + should.equal(billingLockRequests.length, 1); + billingLockRequests[0].should.deep.equal({ + billingAccountId: "80001012", + challengeId: created.id, + markup: 0.1, + memberPaymentAmount: 1225, + }); + } finally { + projectHelper.getProject = originalGetProject; + projectHelper.getProjectBillingInformation = originalGetProjectBillingInformation; + + if (createdChallengeId) { + await prisma.challenge.deleteMany({ where: { id: createdChallengeId } }); + } + } + }).timeout(10000); + it("preserves existing terms when update payload omits the terms field", async () => { const challengeData = _.cloneDeep(testChallengeData); challengeData.name = `${challengeData.name} Terms ${Date.now()}`; @@ -1458,6 +1910,71 @@ describe("challenge service unit tests", () => { } }).timeout(5000); + it("replaces existing skills when update payload includes skills", async () => { + const challengeData = _.cloneDeep(testChallengeData); + challengeData.name = `${challengeData.name} Skills ${Date.now()}`; + challengeData.legacyId = Math.floor(Math.random() * 1000000); + const originalGetStandSkills = helper.getStandSkills; + const skillId1 = uuid(); + const skillId2 = uuid(); + let challengeWithSkills; + + helper.getStandSkills = async (ids) => + ids.map((skillId) => ({ + id: skillId, + name: `Skill ${skillId}`, + })); + + try { + challengeWithSkills = await service.createChallenge( + { isMachine: true, sub: "sub-skills-create", userId: 22838965 }, + challengeData, + config.M2M_FULL_ACCESS_TOKEN, + ); + + await prisma.challengeSkill.createMany({ + data: [ + { + challengeId: challengeWithSkills.id, + skillId: skillId1, + createdBy: "unit-test", + updatedBy: "unit-test", + }, + { + challengeId: challengeWithSkills.id, + skillId: skillId2, + createdBy: "unit-test", + updatedBy: "unit-test", + }, + ], + }); + + const updated = await service.updateChallenge( + { isMachine: true, sub: "sub-skills-update", userId: 22838965 }, + challengeWithSkills.id, + { + skills: [{ id: skillId2 }], + }, + ); + + should.exist(updated.skills); + should.equal(updated.skills.length, 1); + should.equal(updated.skills[0].id, skillId2); + should.equal(updated.skills[0].name, `Skill ${skillId2}`); + + const persistedSkills = await prisma.challengeSkill.findMany({ + where: { challengeId: challengeWithSkills.id }, + }); + should.equal(persistedSkills.length, 1); + should.equal(persistedSkills[0].skillId, skillId2); + } finally { + helper.getStandSkills = originalGetStandSkills; + if (challengeWithSkills && challengeWithSkills.id) { + await prisma.challenge.delete({ where: { id: challengeWithSkills.id } }); + } + } + }).timeout(5000); + it("update challenge successfully with winners", async () => { const result = await service.updateChallenge( { isMachine: true, sub: "sub3", userId: 22838965 }, @@ -1555,6 +2072,37 @@ describe("challenge service unit tests", () => { } }); + it("update challenge - triggers payments when a challenge is cancelled", async () => { + const originalGetChallengeResources = helper.getChallengeResources; + const originalGenerateChallengePayments = helper.generateChallengePayments; + let generatedPaymentsChallengeId; + const cancelledChallenge = await createActivationChallenge(ChallengeStatusEnum.ACTIVE); + + helper.getChallengeResources = async () => []; + helper.generateChallengePayments = async (challengeId) => { + generatedPaymentsChallengeId = challengeId; + return true; + }; + + try { + const result = await service.updateChallenge( + { isMachine: true, sub: "sub-cancel", userId: 22838965 }, + cancelledChallenge.id, + { + status: ChallengeStatusEnum.CANCELLED_CLIENT_REQUEST, + cancelReason: "QA cancellation coverage", + }, + ); + + should.equal(result.status, ChallengeStatusEnum.CANCELLED_CLIENT_REQUEST); + should.equal(generatedPaymentsChallengeId, cancelledChallenge.id); + } finally { + helper.getChallengeResources = originalGetChallengeResources; + helper.generateChallengePayments = originalGenerateChallengePayments; + await prisma.challenge.deleteMany({ where: { id: cancelledChallenge.id } }); + } + }); + describe("reviewer scorecard changes", () => { const originalScorecardId = "sc-original"; const newScorecardId = "sc-updated"; diff --git a/test/unit/phase-management/PhaseAdvancer.test.js b/test/unit/phase-management/PhaseAdvancer.test.js index 884c8e0..b0065a0 100644 --- a/test/unit/phase-management/PhaseAdvancer.test.js +++ b/test/unit/phase-management/PhaseAdvancer.test.js @@ -2,6 +2,7 @@ const { expect } = require("chai"); const PhaseAdvancer = require("../../../src/phase-management/PhaseAdvancer"); const { getClient } = require("../../../src/common/prisma"); +const reviewPrisma = require("../../../src/common/review-prisma"); const buildIterativeReviewPhase = () => ({ id: "phase-iterative-review", @@ -91,3 +92,80 @@ describe("PhaseAdvancer Iterative Review gating", () => { expect(phases[0].isOpen).to.be.true; }); }); + +describe("PhaseAdvancer review completion queries", () => { + const prisma = getClient(); + const originalFindUnique = prisma.challenge.findUnique; + const originalGetReviewClient = reviewPrisma.getReviewClient; + const phaseAdvancerPath = require.resolve("../../../src/phase-management/PhaseAdvancer"); + + afterEach(() => { + prisma.challenge.findUnique = originalFindUnique; + reviewPrisma.getReviewClient = originalGetReviewClient; + delete require.cache[phaseAdvancerPath]; + }); + + it("casts review status to text before comparing completed reviews", async () => { + const capturedQueries = []; + + reviewPrisma.getReviewClient = () => ({ + $queryRaw: async (query) => { + capturedQueries.push(query); + return [{ count: 2 }]; + }, + }); + + delete require.cache[phaseAdvancerPath]; + const PhaseAdvancerWithMockedReviewClient = require("../../../src/phase-management/PhaseAdvancer"); + const phaseAdvancer = new PhaseAdvancerWithMockedReviewClient({ + async getPhaseFacts() { + return {}; + }, + }); + + prisma.challenge.findUnique = async () => ({ + numOfSubmissions: 1, + reviewers: [{ isMemberReview: true, memberReviewerCount: 2 }], + }); + + const phases = [ + { + id: "phase-review", + phaseId: "phase-review", + name: "Review", + description: "Review phase", + duration: 86400, + isOpen: true, + predecessor: null, + scheduledStartDate: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(), + scheduledEndDate: new Date(Date.now() - 60 * 60 * 1000).toISOString(), + actualStartDate: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(), + actualEndDate: null, + constraints: [], + }, + ]; + + const result = await phaseAdvancer.advancePhase( + "challenge-123", + null, + phases, + "close", + "Review" + ); + const [reviewCompletionQuery] = capturedQueries; + const queryText = [ + reviewCompletionQuery.sql, + reviewCompletionQuery.text, + reviewCompletionQuery.statement, + Array.isArray(reviewCompletionQuery.strings) + ? reviewCompletionQuery.strings.join("?") + : "", + ] + .filter(Boolean) + .join("\n"); + + expect(result.success).to.be.true; + expect(queryText).to.contain('r."status"::text ='); + expect(reviewCompletionQuery.values).to.include("COMPLETED"); + }); +}); diff --git a/test/unit/project-helper.test.js b/test/unit/project-helper.test.js index 285c8b4..7be1a10 100644 --- a/test/unit/project-helper.test.js +++ b/test/unit/project-helper.test.js @@ -8,15 +8,18 @@ chai.should() describe('project helper unit tests', () => { let originalAxiosGet + let originalAxiosPatch let originalGetM2MToken beforeEach(() => { originalAxiosGet = axios.get + originalAxiosPatch = axios.patch originalGetM2MToken = m2mHelper.getM2MToken }) afterEach(() => { axios.get = originalAxiosGet + axios.patch = originalAxiosPatch m2mHelper.getM2MToken = originalGetM2MToken }) @@ -55,4 +58,44 @@ describe('project helper unit tests', () => { markup: 0.58 }) }) + + it('locks challenge billing account budget with markup applied', async () => { + let patchUrl + let patchBody + let patchHeaders + + m2mHelper.getM2MToken = async () => 'test-token' + axios.patch = async (url, body, options) => { + patchUrl = url + patchBody = body + patchHeaders = options.headers + + return { + data: { + externalId: body.externalId, + amount: body.amount + } + } + } + + const result = await projectHelper.lockChallengeBillingAccountAmount({ + billingAccountId: '80001012', + challengeId: 'challenge-id', + memberPaymentAmount: 1000, + markup: 0.1 + }) + + patchUrl.should.equal('http://localhost:4000/v6/billing-accounts/80001012/lock-amount') + patchBody.should.deep.equal({ + amount: 1100, + challengeId: 'challenge-id', + externalId: 'challenge-id', + externalType: 'CHALLENGE' + }) + patchHeaders.should.deep.equal({ Authorization: 'Bearer test-token' }) + result.should.deep.equal({ + externalId: 'challenge-id', + amount: 1100 + }) + }) })