admin roadmap trips ops and payment ops

This commit is contained in:
2026-05-18 19:25:32 +07:00
parent e1966b69f1
commit 4bcb93e283
22 changed files with 1586 additions and 188 deletions
@@ -0,0 +1,11 @@
-- AlterTable: tambah jejak admin yang membatalkan trip (Phase 2 admin trip ops).
-- `cancelledByAdminId` nullable — diisi hanya saat actor cancel = ADMIN
-- (organizer cancel tidak mengisi field ini).
ALTER TABLE "Trip" ADD COLUMN "cancelledByAdminId" TEXT;
ALTER TABLE "Trip" ADD COLUMN "cancelledReason" TEXT;
-- AddForeignKey: organizer/admin cancel terjaga referensinya kalau admin
-- nantinya dihapus, set NULL supaya history Trip tidak rusak.
ALTER TABLE "Trip" ADD CONSTRAINT "Trip_cancelledByAdminId_fkey"
FOREIGN KEY ("cancelledByAdminId") REFERENCES "User"("id")
ON DELETE SET NULL ON UPDATE CASCADE;
+9
View File
@@ -39,6 +39,9 @@ model User {
/// Payout yang ditandai admin sebagai PAID/CANCELLED oleh user ini.
processedPayouts Payout[] @relation("PayoutProcessor")
/// Trip yang dibatalkan admin ini lewat panel admin (intervensi).
adminCancelledTrips Trip[] @relation("TripCancelledByAdmin")
profile UserProfile?
}
@@ -157,6 +160,12 @@ model Trip {
/// Ritme/energi trip — dipakai untuk matching dengan vibe user.
vibe Vibe?
status TripStatus @default(OPEN)
/// Admin yang membatalkan trip via panel admin (intervensi). NULL kalau
/// organizer yang cancel sendiri atau trip tidak dibatalkan.
cancelledByAdminId String?
cancelledByAdmin User? @relation("TripCancelledByAdmin", fields: [cancelledByAdminId], references: [id], onDelete: SetNull)
/// Alasan admin membatalkan trip — wajib diisi saat admin cancel.
cancelledReason String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt