Prepare BizOne portal production wallet and UI
This commit is contained in:
58
prisma/migrations/0015_wallet/migration.sql
Normal file
58
prisma/migrations/0015_wallet/migration.sql
Normal file
@ -0,0 +1,58 @@
|
||||
CREATE TABLE "wallets" (
|
||||
"id" TEXT NOT NULL,
|
||||
"owner_key" TEXT NOT NULL,
|
||||
"currency" TEXT NOT NULL DEFAULT 'IDR',
|
||||
"balance_minor" INTEGER NOT NULL DEFAULT 0,
|
||||
"held_minor" INTEGER NOT NULL DEFAULT 0,
|
||||
"status" TEXT NOT NULL DEFAULT 'active',
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "wallets_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "wallet_transactions" (
|
||||
"id" TEXT NOT NULL,
|
||||
"wallet_id" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"direction" TEXT NOT NULL,
|
||||
"amount_minor" INTEGER NOT NULL,
|
||||
"balance_before_minor" INTEGER NOT NULL,
|
||||
"balance_after_minor" INTEGER NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'posted',
|
||||
"reference_type" TEXT,
|
||||
"reference_id" TEXT,
|
||||
"description" TEXT,
|
||||
"metadata_json" JSONB,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "wallet_transactions_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "payment_orders" (
|
||||
"id" TEXT NOT NULL,
|
||||
"wallet_id" TEXT NOT NULL,
|
||||
"provider" TEXT NOT NULL DEFAULT 'midtrans',
|
||||
"provider_order_id" TEXT NOT NULL,
|
||||
"amount_minor" INTEGER NOT NULL,
|
||||
"currency" TEXT NOT NULL DEFAULT 'IDR',
|
||||
"status" TEXT NOT NULL DEFAULT 'pending',
|
||||
"snap_token" TEXT,
|
||||
"redirect_url" TEXT,
|
||||
"paid_at" TIMESTAMP(3),
|
||||
"expired_at" TIMESTAMP(3),
|
||||
"metadata_json" JSONB,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "payment_orders_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "wallets_owner_key_key" ON "wallets"("owner_key");
|
||||
CREATE INDEX "wallet_transactions_wallet_id_created_at_idx" ON "wallet_transactions"("wallet_id", "created_at");
|
||||
CREATE INDEX "wallet_transactions_reference_type_reference_id_idx" ON "wallet_transactions"("reference_type", "reference_id");
|
||||
CREATE UNIQUE INDEX "payment_orders_provider_order_id_key" ON "payment_orders"("provider_order_id");
|
||||
CREATE INDEX "payment_orders_wallet_id_status_idx" ON "payment_orders"("wallet_id", "status");
|
||||
|
||||
ALTER TABLE "wallet_transactions" ADD CONSTRAINT "wallet_transactions_wallet_id_fkey" FOREIGN KEY ("wallet_id") REFERENCES "wallets"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
ALTER TABLE "payment_orders" ADD CONSTRAINT "payment_orders_wallet_id_fkey" FOREIGN KEY ("wallet_id") REFERENCES "wallets"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
@ -231,3 +231,60 @@ model CampaignRecipient {
|
||||
@@index([campaignId, sentAt])
|
||||
@@map("campaign_recipients")
|
||||
}
|
||||
|
||||
model Wallet {
|
||||
id String @id @default(uuid())
|
||||
ownerKey String @unique @map("owner_key")
|
||||
currency String @default("IDR")
|
||||
balanceMinor Int @default(0) @map("balance_minor")
|
||||
heldMinor Int @default(0) @map("held_minor")
|
||||
status String @default("active")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
transactions WalletTransaction[]
|
||||
paymentOrders PaymentOrder[]
|
||||
|
||||
@@map("wallets")
|
||||
}
|
||||
|
||||
model WalletTransaction {
|
||||
id String @id @default(uuid())
|
||||
walletId String @map("wallet_id")
|
||||
type String
|
||||
direction String
|
||||
amountMinor Int @map("amount_minor")
|
||||
balanceBeforeMinor Int @map("balance_before_minor")
|
||||
balanceAfterMinor Int @map("balance_after_minor")
|
||||
status String @default("posted")
|
||||
referenceType String? @map("reference_type")
|
||||
referenceId String? @map("reference_id")
|
||||
description String?
|
||||
metadataJson Json? @map("metadata_json")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([walletId, createdAt])
|
||||
@@index([referenceType, referenceId])
|
||||
@@map("wallet_transactions")
|
||||
}
|
||||
|
||||
model PaymentOrder {
|
||||
id String @id @default(uuid())
|
||||
walletId String @map("wallet_id")
|
||||
provider String @default("midtrans")
|
||||
providerOrderId String @unique @map("provider_order_id")
|
||||
amountMinor Int @map("amount_minor")
|
||||
currency String @default("IDR")
|
||||
status String @default("pending")
|
||||
snapToken String? @map("snap_token")
|
||||
redirectUrl String? @map("redirect_url")
|
||||
paidAt DateTime? @map("paid_at")
|
||||
expiredAt DateTime? @map("expired_at")
|
||||
metadataJson Json? @map("metadata_json")
|
||||
createdAt DateTime @default(now()) @map("created_at")
|
||||
updatedAt DateTime @updatedAt @map("updated_at")
|
||||
wallet Wallet @relation(fields: [walletId], references: [id], onDelete: Cascade)
|
||||
|
||||
@@index([walletId, status])
|
||||
@@map("payment_orders")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user