Add client referral bonus links

This commit is contained in:
Ruslan Bakiev
2026-04-04 14:59:02 +07:00
parent 1bec782edd
commit 6c5b9ef98e
4 changed files with 280 additions and 22 deletions

View File

@@ -0,0 +1,34 @@
ALTER TABLE "ReferralLink"
ADD COLUMN "createdById" TEXT;
ALTER TABLE "ReferralLink"
ADD COLUMN "bonusPercent" DECIMAL(5,2);
UPDATE "ReferralLink"
SET
"createdById" = "referrerId",
"bonusPercent" = 0;
ALTER TABLE "ReferralLink"
ALTER COLUMN "createdById" SET NOT NULL;
ALTER TABLE "ReferralLink"
ALTER COLUMN "bonusPercent" SET NOT NULL;
ALTER TABLE "ReferralLink"
ADD CONSTRAINT "ReferralLink_createdById_fkey"
FOREIGN KEY ("createdById") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
CREATE INDEX "ReferralLink_referrerId_idx" ON "ReferralLink"("referrerId");
CREATE INDEX "ReferralLink_refereeId_idx" ON "ReferralLink"("refereeId");
ALTER TABLE "BonusTransaction"
ADD COLUMN "referralLinkId" TEXT;
ALTER TABLE "BonusTransaction"
ADD CONSTRAINT "BonusTransaction_referralLinkId_fkey"
FOREIGN KEY ("referralLinkId") REFERENCES "ReferralLink"("id") ON DELETE SET NULL ON UPDATE CASCADE;
CREATE UNIQUE INDEX "BonusTransaction_orderId_referralLinkId_key"
ON "BonusTransaction"("orderId", "referralLinkId");

View File

@@ -77,6 +77,7 @@ model User {
orderStatusEvents OrderStatusEvent[]
referralAsReferrer ReferralLink[] @relation("ReferralReferrer")
referralAsReferee ReferralLink[] @relation("ReferralReferee")
createdReferralLinks ReferralLink[] @relation("ReferralCreator")
bonusTransactions BonusTransaction[]
withdrawalRequests RewardWithdrawalRequest[] @relation("WithdrawalRequester")
reviewedWithdrawals RewardWithdrawalRequest[] @relation("WithdrawalReviewer")
@@ -289,24 +290,34 @@ model OrderStatusEvent {
}
model ReferralLink {
id String @id @default(cuid())
referrerId String
referrer User @relation("ReferralReferrer", fields: [referrerId], references: [id])
refereeId String
referee User @relation("ReferralReferee", fields: [refereeId], references: [id])
createdAt DateTime @default(now())
id String @id @default(cuid())
referrerId String
referrer User @relation("ReferralReferrer", fields: [referrerId], references: [id])
refereeId String
referee User @relation("ReferralReferee", fields: [refereeId], references: [id])
createdById String
createdBy User @relation("ReferralCreator", fields: [createdById], references: [id])
bonusPercent Decimal @db.Decimal(5, 2)
bonusTransactions BonusTransaction[]
createdAt DateTime @default(now())
@@unique([referrerId, refereeId])
@@index([referrerId])
@@index([refereeId])
}
model BonusTransaction {
id String @id @default(cuid())
userId String
user User @relation(fields: [userId], references: [id])
amount Decimal @db.Decimal(14, 2)
reason String
orderId String?
createdAt DateTime @default(now())
id String @id @default(cuid())
userId String
user User @relation(fields: [userId], references: [id])
amount Decimal @db.Decimal(14, 2)
reason String
orderId String?
referralLinkId String?
referralLink ReferralLink? @relation(fields: [referralLinkId], references: [id], onDelete: SetNull)
createdAt DateTime @default(now())
@@unique([orderId, referralLinkId])
}
model RewardWithdrawalRequest {