58 lines
2.1 KiB
SQL
58 lines
2.1 KiB
SQL
-- AlterEnum
|
|
ALTER TYPE "BookingStatus" ADD VALUE 'PARTIALLY_REFUNDED';
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RefundReason" AS ENUM ('USER_CANCELLATION', 'ORGANIZER_CANCELLED', 'TRIP_ISSUE', 'ADMIN_ADJUSTMENT', 'DISPUTE_RESOLVED', 'OTHER');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RefundStatus" AS ENUM ('PENDING', 'APPROVED', 'REJECTED', 'PROCESSING', 'SUCCEEDED', 'FAILED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RefundInitiator" AS ENUM ('USER', 'ORGANIZER', 'SYSTEM', 'ADMIN');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "RefundReporter" AS ENUM ('PARTICIPANT', 'ORGANIZER');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Refund" (
|
|
"id" TEXT NOT NULL,
|
|
"bookingId" TEXT NOT NULL,
|
|
"paymentId" TEXT,
|
|
"amount" INTEGER NOT NULL,
|
|
"currency" TEXT NOT NULL DEFAULT 'IDR',
|
|
"reason" "RefundReason" NOT NULL,
|
|
"reportedBy" "RefundReporter" NOT NULL,
|
|
"reportNote" TEXT NOT NULL,
|
|
"initiatedBy" "RefundInitiator" NOT NULL DEFAULT 'ADMIN',
|
|
"status" "RefundStatus" NOT NULL DEFAULT 'PENDING',
|
|
"idempotencyKey" TEXT NOT NULL,
|
|
"adminNote" TEXT,
|
|
"reviewedById" TEXT,
|
|
"reviewedAt" TIMESTAMP(3),
|
|
"succeededAt" TIMESTAMP(3),
|
|
"failedAt" TIMESTAMP(3),
|
|
"externalRefundId" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Refund_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Refund_idempotencyKey_key" ON "Refund"("idempotencyKey");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Refund_bookingId_status_idx" ON "Refund"("bookingId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Refund_status_createdAt_idx" ON "Refund"("status", "createdAt");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Refund" ADD CONSTRAINT "Refund_bookingId_fkey" FOREIGN KEY ("bookingId") REFERENCES "Booking"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Refund" ADD CONSTRAINT "Refund_paymentId_fkey" FOREIGN KEY ("paymentId") REFERENCES "Payment"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Refund" ADD CONSTRAINT "Refund_reviewedById_fkey" FOREIGN KEY ("reviewedById") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|