diff --git a/package.json b/package.json index f917eec4..99c8acbf 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@charmverse/core", - "version": "0.126.1", + "version": "0.126.2-rc-feat-partner-re.5", "description": "Core API for Charmverse", "type": "commonjs", "types": "./dist/cjs/index.d.ts", diff --git a/src/prisma/migrations/20250625170301_scout_partner/migration.sql b/src/prisma/migrations/20250625170301_scout_partner/migration.sql new file mode 100644 index 00000000..8d39fbcc --- /dev/null +++ b/src/prisma/migrations/20250625170301_scout_partner/migration.sql @@ -0,0 +1,57 @@ +-- CreateEnum +CREATE TYPE "ScoutPartnerStatus" AS ENUM ('active', 'paused', 'completed'); + +-- AlterTable +ALTER TABLE "BuilderEvent" ADD COLUMN "scoutPartnerId" TEXT; + +-- AlterTable +ALTER TABLE "GithubRepo" ADD COLUMN "scoutPartnerId" TEXT; + +-- AlterTable +ALTER TABLE "PartnerRewardEvent" ADD COLUMN "scoutPartnerId" TEXT; + +-- AlterTable +ALTER TABLE "PartnerRewardPayoutContract" ADD COLUMN "scoutPartnerId" TEXT; + +-- CreateTable +CREATE TABLE "ScoutPartner" ( + "id" TEXT NOT NULL, + "icon" TEXT NOT NULL, + "bannerImage" TEXT NOT NULL, + "infoPageImage" TEXT NOT NULL, + "name" TEXT NOT NULL, + "status" "ScoutPartnerStatus" NOT NULL DEFAULT 'active', + "tokenAmountPerPullRequest" INTEGER, + "tokenAddress" TEXT, + "tokenChain" INTEGER, + "tokenSymbol" TEXT, + "tokenDecimals" INTEGER, + "tokenImage" TEXT, + "issueTagTokenAmounts" JSONB DEFAULT '{}', + + CONSTRAINT "ScoutPartner_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE INDEX "BuilderEvent_scoutPartnerId_idx" ON "BuilderEvent"("scoutPartnerId"); + +-- CreateIndex +CREATE INDEX "GithubRepo_scoutPartnerId_idx" ON "GithubRepo"("scoutPartnerId"); + +-- CreateIndex +CREATE INDEX "PartnerRewardEvent_scoutPartnerId_idx" ON "PartnerRewardEvent"("scoutPartnerId"); + +-- CreateIndex +CREATE INDEX "PartnerRewardPayoutContract_scoutPartnerId_idx" ON "PartnerRewardPayoutContract"("scoutPartnerId"); + +-- AddForeignKey +ALTER TABLE "BuilderEvent" ADD CONSTRAINT "BuilderEvent_scoutPartnerId_fkey" FOREIGN KEY ("scoutPartnerId") REFERENCES "ScoutPartner"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "GithubRepo" ADD CONSTRAINT "GithubRepo_scoutPartnerId_fkey" FOREIGN KEY ("scoutPartnerId") REFERENCES "ScoutPartner"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PartnerRewardEvent" ADD CONSTRAINT "PartnerRewardEvent_scoutPartnerId_fkey" FOREIGN KEY ("scoutPartnerId") REFERENCES "ScoutPartner"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PartnerRewardPayoutContract" ADD CONSTRAINT "PartnerRewardPayoutContract_scoutPartnerId_fkey" FOREIGN KEY ("scoutPartnerId") REFERENCES "ScoutPartner"("id") ON DELETE SET NULL ON UPDATE CASCADE; diff --git a/src/prisma/schema.prisma b/src/prisma/schema.prisma index f67b9237..00930fc1 100644 --- a/src/prisma/schema.prisma +++ b/src/prisma/schema.prisma @@ -3116,6 +3116,8 @@ model BuilderEvent { createdAt DateTime @default(now()) description String? // for misc_event type bonusPartner String? + scoutPartnerId String? + scoutPartner ScoutPartner? @relation(fields: [scoutPartnerId], references: [id], onDelete: SetNull) githubEventId String? @unique @db.Uuid githubEvent GithubEvent? @relation(fields: [githubEventId], references: [id], onDelete: SetNull) gemsPayoutEventId String? @unique @db.Uuid @@ -3149,6 +3151,7 @@ model BuilderEvent { @@index([weeklyClaimId]) @@index([week, season]) @@index([createdAt]) + @@index([scoutPartnerId]) } model GithubUser { @@ -3170,23 +3173,26 @@ enum GithubRepoOwnerType { } model GithubRepo { - id Int @id - owner String - ownerType GithubRepoOwnerType - handPicked Boolean @default(false) - fork Boolean @default(false) - name String - avatar String? - defaultBranch String - events GithubEvent[] - createdAt DateTime @default(now()) - deletedAt DateTime? - bonusPartner String? - issues GithubIssue[] + id Int @id + owner String + ownerType GithubRepoOwnerType + handPicked Boolean @default(false) + fork Boolean @default(false) + name String + avatar String? + defaultBranch String + events GithubEvent[] + createdAt DateTime @default(now()) + deletedAt DateTime? + bonusPartner String? + scoutPartnerId String? + scoutPartner ScoutPartner? @relation(fields: [scoutPartnerId], references: [id], onDelete: SetNull) + issues GithubIssue[] @@unique([owner, name]) @@index([id]) @@index([bonusPartner]) + @@index([scoutPartnerId]) } enum GithubEventType { @@ -3632,16 +3638,19 @@ model TalentProfile { } model PartnerRewardEvent { - createdAt DateTime @default(now()) - week String - season String - userId String @db.Uuid - user Scout @relation(fields: [userId], references: [id], onDelete: Cascade) - partner String - reward Json + createdAt DateTime @default(now()) + week String + season String + userId String @db.Uuid + user Scout @relation(fields: [userId], references: [id], onDelete: Cascade) + partner String + reward Json + scoutPartnerId String? + scoutPartner ScoutPartner? @relation(fields: [scoutPartnerId], references: [id], onDelete: SetNull) @@unique([userId, partner, week, season]) @@index([userId]) + @@index([scoutPartnerId]) } enum MessageSender { @@ -3874,12 +3883,16 @@ model PartnerRewardPayoutContract { tokenDecimals Int tokenSymbol String partner String + scoutPartnerId String? + scoutPartner ScoutPartner? @relation(fields: [scoutPartnerId], references: [id], onDelete: SetNull) deployTxHash String ipfsCid String merkleTreeJson Json provider PartnerRewardPayoutContractProvider blockNumber BigInt @default(0) rewardPayouts PartnerRewardPayout[] + + @@index([scoutPartnerId]) } // the raw data, not intended to be used in production processes @@ -4183,3 +4196,29 @@ model GithubIssue { @@index([repoId]) @@index([githubEventId]) } + +enum ScoutPartnerStatus { + active + paused + completed +} + +model ScoutPartner { + id String @id + icon String + bannerImage String + infoPageImage String + name String + status ScoutPartnerStatus @default(active) + tokenAmountPerPullRequest Int? + tokenAddress String? + tokenChain Int? + tokenSymbol String? + tokenDecimals Int? + tokenImage String? + issueTagTokenAmounts Json? @default("{}") // Stores mapping of issue tags to token amounts + builderEvents BuilderEvent[] + repos GithubRepo[] + payoutContracts PartnerRewardPayoutContract[] + rewardEvents PartnerRewardEvent[] +}