@gelabs/ovr 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,142 @@
1
+ -- CreateEnum
2
+ CREATE TYPE "ViolationCategory" AS ENUM ('TRAFFIC', 'ORDINANCE');
3
+
4
+ -- CreateEnum
5
+ CREATE TYPE "PaymentMethod" AS ENUM ('GCASH', 'MAYA', 'LANDBANK', 'OVER_THE_COUNTER');
6
+
7
+ -- CreateEnum
8
+ CREATE TYPE "PaymentStatus" AS ENUM ('UNPAID', 'PAID', 'CONTESTED');
9
+
10
+ -- CreateEnum
11
+ CREATE TYPE "UserRole" AS ENUM ('ENFORCER', 'ADMIN');
12
+
13
+ -- CreateTable
14
+ CREATE TABLE "Officer" (
15
+ "id" TEXT NOT NULL,
16
+ "name" TEXT NOT NULL,
17
+ "badgeNo" TEXT,
18
+ "office" TEXT NOT NULL,
19
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
20
+ "updatedAt" TIMESTAMP(3) NOT NULL,
21
+
22
+ CONSTRAINT "Officer_pkey" PRIMARY KEY ("id")
23
+ );
24
+
25
+ -- CreateTable
26
+ CREATE TABLE "ViolationCatalog" (
27
+ "code" TEXT NOT NULL,
28
+ "title" TEXT NOT NULL,
29
+ "category" "ViolationCategory" NOT NULL,
30
+ "basicFine" DECIMAL(12,2) NOT NULL,
31
+ "legalText" TEXT,
32
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
33
+
34
+ CONSTRAINT "ViolationCatalog_pkey" PRIMARY KEY ("code")
35
+ );
36
+
37
+ -- CreateTable
38
+ CREATE TABLE "Ticket" (
39
+ "ovrTicketNo" TEXT NOT NULL,
40
+ "orderOfPaymentNo" TEXT NOT NULL,
41
+ "billNo" TEXT NOT NULL,
42
+ "violatorFirstName" TEXT NOT NULL,
43
+ "violatorMiddleName" TEXT,
44
+ "violatorLastName" TEXT NOT NULL,
45
+ "violatorAddress" TEXT NOT NULL,
46
+ "violatorLicenseNumber" TEXT NOT NULL,
47
+ "violatorPlateNumber" TEXT,
48
+ "violatorContactNo" TEXT,
49
+ "apprehendedAt" TIMESTAMP(3) NOT NULL,
50
+ "placeOfViolation" TEXT,
51
+ "remarks" TEXT,
52
+ "officerId" TEXT NOT NULL,
53
+ "assessedAt" TIMESTAMP(3) NOT NULL,
54
+ "dueDate" TIMESTAMP(3) NOT NULL,
55
+ "basicFinesTotal" DECIMAL(12,2) NOT NULL,
56
+ "paymentStatus" "PaymentStatus" NOT NULL DEFAULT 'UNPAID',
57
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
58
+
59
+ CONSTRAINT "Ticket_pkey" PRIMARY KEY ("ovrTicketNo")
60
+ );
61
+
62
+ -- CreateTable
63
+ CREATE TABLE "TicketViolation" (
64
+ "id" TEXT NOT NULL,
65
+ "ticketOvrNo" TEXT NOT NULL,
66
+ "catalogCode" TEXT NOT NULL,
67
+ "title" TEXT NOT NULL,
68
+ "basicFine" DECIMAL(12,2) NOT NULL,
69
+ "details" TEXT,
70
+
71
+ CONSTRAINT "TicketViolation_pkey" PRIMARY KEY ("id")
72
+ );
73
+
74
+ -- CreateTable
75
+ CREATE TABLE "Payment" (
76
+ "id" TEXT NOT NULL,
77
+ "ticketOvrNo" TEXT NOT NULL,
78
+ "method" "PaymentMethod" NOT NULL,
79
+ "amount" DECIMAL(12,2) NOT NULL,
80
+ "referenceNo" TEXT NOT NULL,
81
+ "paidAt" TIMESTAMP(3) NOT NULL,
82
+
83
+ CONSTRAINT "Payment_pkey" PRIMARY KEY ("id")
84
+ );
85
+
86
+ -- CreateTable
87
+ CREATE TABLE "User" (
88
+ "id" TEXT NOT NULL,
89
+ "username" TEXT NOT NULL,
90
+ "passwordHash" TEXT NOT NULL,
91
+ "role" "UserRole" NOT NULL DEFAULT 'ENFORCER',
92
+ "active" BOOLEAN NOT NULL DEFAULT true,
93
+ "officerId" TEXT,
94
+ "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
95
+
96
+ CONSTRAINT "User_pkey" PRIMARY KEY ("id")
97
+ );
98
+
99
+ -- CreateIndex
100
+ CREATE UNIQUE INDEX "Ticket_orderOfPaymentNo_key" ON "Ticket"("orderOfPaymentNo");
101
+
102
+ -- CreateIndex
103
+ CREATE UNIQUE INDEX "Ticket_billNo_key" ON "Ticket"("billNo");
104
+
105
+ -- CreateIndex
106
+ CREATE INDEX "Ticket_violatorLastName_idx" ON "Ticket"("violatorLastName");
107
+
108
+ -- CreateIndex
109
+ CREATE INDEX "Ticket_violatorPlateNumber_idx" ON "Ticket"("violatorPlateNumber");
110
+
111
+ -- CreateIndex
112
+ CREATE INDEX "Ticket_paymentStatus_idx" ON "Ticket"("paymentStatus");
113
+
114
+ -- CreateIndex
115
+ CREATE INDEX "Ticket_createdAt_idx" ON "Ticket"("createdAt");
116
+
117
+ -- CreateIndex
118
+ CREATE INDEX "TicketViolation_ticketOvrNo_idx" ON "TicketViolation"("ticketOvrNo");
119
+
120
+ -- CreateIndex
121
+ CREATE UNIQUE INDEX "Payment_ticketOvrNo_key" ON "Payment"("ticketOvrNo");
122
+
123
+ -- CreateIndex
124
+ CREATE UNIQUE INDEX "Payment_referenceNo_key" ON "Payment"("referenceNo");
125
+
126
+ -- CreateIndex
127
+ CREATE UNIQUE INDEX "User_username_key" ON "User"("username");
128
+
129
+ -- CreateIndex
130
+ CREATE UNIQUE INDEX "User_officerId_key" ON "User"("officerId");
131
+
132
+ -- AddForeignKey
133
+ ALTER TABLE "Ticket" ADD CONSTRAINT "Ticket_officerId_fkey" FOREIGN KEY ("officerId") REFERENCES "Officer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
134
+
135
+ -- AddForeignKey
136
+ ALTER TABLE "TicketViolation" ADD CONSTRAINT "TicketViolation_ticketOvrNo_fkey" FOREIGN KEY ("ticketOvrNo") REFERENCES "Ticket"("ovrTicketNo") ON DELETE CASCADE ON UPDATE CASCADE;
137
+
138
+ -- AddForeignKey
139
+ ALTER TABLE "Payment" ADD CONSTRAINT "Payment_ticketOvrNo_fkey" FOREIGN KEY ("ticketOvrNo") REFERENCES "Ticket"("ovrTicketNo") ON DELETE CASCADE ON UPDATE CASCADE;
140
+
141
+ -- AddForeignKey
142
+ ALTER TABLE "User" ADD CONSTRAINT "User_officerId_fkey" FOREIGN KEY ("officerId") REFERENCES "Officer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
@@ -0,0 +1,4 @@
1
+ -- Global ticket sequence used by createTicket (SELECT nextval('ovr_ticket_seq')
2
+ -- inside the insert transaction — atomic and collision-free under concurrency).
3
+ -- Starts at 4 because the three seed tickets occupy sequence values 1-3.
4
+ CREATE SEQUENCE IF NOT EXISTS ovr_ticket_seq START WITH 4 INCREMENT BY 1;
@@ -0,0 +1,26 @@
1
+ -- Split the single `violatorAddress` column into PH-standard address parts:
2
+ -- street (address line), barangay, city/municipality, province.
3
+
4
+ -- 1. Add the new columns as nullable so existing rows can be backfilled.
5
+ ALTER TABLE "Ticket" ADD COLUMN "violatorStreet" TEXT;
6
+ ALTER TABLE "Ticket" ADD COLUMN "violatorBarangay" TEXT;
7
+ ALTER TABLE "Ticket" ADD COLUMN "violatorCityMunicipality" TEXT;
8
+ ALTER TABLE "Ticket" ADD COLUMN "violatorProvince" TEXT;
9
+
10
+ -- 2. Backfill from the old comma-separated address
11
+ -- ("street, barangay, city, province"). Fall back to the LGU defaults so
12
+ -- sparsely-formatted legacy values still satisfy the NOT NULL constraints.
13
+ UPDATE "Ticket" SET
14
+ "violatorStreet" = COALESCE(NULLIF(TRIM(SPLIT_PART("violatorAddress", ',', 1)), ''), "violatorAddress"),
15
+ "violatorBarangay" = COALESCE(NULLIF(TRIM(SPLIT_PART("violatorAddress", ',', 2)), ''), '—'),
16
+ "violatorCityMunicipality" = COALESCE(NULLIF(TRIM(SPLIT_PART("violatorAddress", ',', 3)), ''), 'Iba'),
17
+ "violatorProvince" = COALESCE(NULLIF(TRIM(SPLIT_PART("violatorAddress", ',', 4)), ''), 'Zambales');
18
+
19
+ -- 3. Enforce NOT NULL now that every row has values.
20
+ ALTER TABLE "Ticket" ALTER COLUMN "violatorStreet" SET NOT NULL;
21
+ ALTER TABLE "Ticket" ALTER COLUMN "violatorBarangay" SET NOT NULL;
22
+ ALTER TABLE "Ticket" ALTER COLUMN "violatorCityMunicipality" SET NOT NULL;
23
+ ALTER TABLE "Ticket" ALTER COLUMN "violatorProvince" SET NOT NULL;
24
+
25
+ -- 4. Drop the old single column.
26
+ ALTER TABLE "Ticket" DROP COLUMN "violatorAddress";
@@ -0,0 +1,2 @@
1
+ -- Make Barangay optional: drop the NOT NULL constraint on violatorBarangay.
2
+ ALTER TABLE "Ticket" ALTER COLUMN "violatorBarangay" DROP NOT NULL;
@@ -0,0 +1,2 @@
1
+ -- Optional "Issued by" name shown on the receipt (enforcer-entered).
2
+ ALTER TABLE "Ticket" ADD COLUMN "issuedBy" TEXT;
@@ -0,0 +1,3 @@
1
+ # Please do not edit this file manually
2
+ # It should be added in your version-control system (e.g., Git)
3
+ provider = "postgresql"
@@ -92,6 +92,7 @@ model Ticket {
92
92
  apprehendedAt DateTime
93
93
  placeOfViolation String?
94
94
  remarks String?
95
+ issuedBy String?
95
96
 
96
97
  officerId String
97
98
  officer Officer @relation(fields: [officerId], references: [id])