@delpa/mt-prisma 0.0.1

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.
package/README.md ADDED
@@ -0,0 +1,30 @@
1
+ # @delpa/mt-prisma
2
+
3
+ Prisma ORM package for Moving Truck microservices with Supabase PostgreSQL.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ pnpm add @delpa/mt-prisma
9
+ ```
10
+
11
+ ## Setup
12
+
13
+ 1. Copy `.env.example` to `.env` and configure your Supabase credentials
14
+ 2. Generate Prisma client: `pnpm db:generate`
15
+ 3. Push schema to database: `pnpm db:push`
16
+
17
+ ## Usage
18
+
19
+ ```typescript
20
+ import { prisma, PrismaService } from '@delpa/mt-prisma';
21
+
22
+ const routes = await prisma.route.findMany();
23
+ ```
24
+
25
+ ## Commands
26
+
27
+ - `pnpm db:generate` - Generate Prisma client
28
+ - `pnpm db:push` - Push schema to database
29
+ - `pnpm db:migrate` - Run migrations
30
+ - `pnpm db:studio` - Open Prisma Studio
@@ -0,0 +1,2 @@
1
+ export { PrismaService, prisma } from './prisma.service';
2
+ export * from '@prisma/client';
package/dist/index.js ADDED
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ exports.prisma = exports.PrismaService = void 0;
18
+ var prisma_service_1 = require("./prisma.service");
19
+ Object.defineProperty(exports, "PrismaService", { enumerable: true, get: function () { return prisma_service_1.PrismaService; } });
20
+ Object.defineProperty(exports, "prisma", { enumerable: true, get: function () { return prisma_service_1.prisma; } });
21
+ __exportStar(require("@prisma/client"), exports);
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxtREFBeUQ7QUFBaEQsK0dBQUEsYUFBYSxPQUFBO0FBQUUsd0dBQUEsTUFBTSxPQUFBO0FBQzlCLGlEQUErQiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCB7IFByaXNtYVNlcnZpY2UsIHByaXNtYSB9IGZyb20gJy4vcHJpc21hLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnQHByaXNtYS9jbGllbnQnO1xuIl19
@@ -0,0 +1,9 @@
1
+ import { PrismaClient } from '@prisma/client';
2
+ export declare class PrismaService extends PrismaClient {
3
+ private static instance;
4
+ private constructor();
5
+ static getInstance(): PrismaService;
6
+ onModuleInit(): Promise<void>;
7
+ onModuleDestroy(): Promise<void>;
8
+ }
9
+ export declare const prisma: PrismaService;
@@ -0,0 +1,33 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.prisma = exports.PrismaService = void 0;
4
+ const client_1 = require("@prisma/client");
5
+ const pg_1 = require("pg");
6
+ const adapter_pg_1 = require("@prisma/adapter-pg");
7
+ const pool = new pg_1.Pool({
8
+ connectionString: process.env.DATABASE_URL,
9
+ });
10
+ const adapter = new adapter_pg_1.PrismaPg(pool);
11
+ class PrismaService extends client_1.PrismaClient {
12
+ constructor() {
13
+ super({
14
+ adapter,
15
+ log: process.env.NODE_ENV === 'development' ? ['query', 'info', 'warn', 'error'] : ['error'],
16
+ });
17
+ }
18
+ static getInstance() {
19
+ if (!PrismaService.instance) {
20
+ PrismaService.instance = new PrismaService();
21
+ }
22
+ return PrismaService.instance;
23
+ }
24
+ async onModuleInit() {
25
+ await this.$connect();
26
+ }
27
+ async onModuleDestroy() {
28
+ await this.$disconnect();
29
+ }
30
+ }
31
+ exports.PrismaService = PrismaService;
32
+ exports.prisma = PrismaService.getInstance();
33
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpc21hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvcHJpc21hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsMkNBQThDO0FBQzlDLDJCQUEwQjtBQUMxQixtREFBOEM7QUFFOUMsTUFBTSxJQUFJLEdBQUcsSUFBSSxTQUFJLENBQUM7SUFDcEIsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZO0NBQzNDLENBQUMsQ0FBQztBQUVILE1BQU0sT0FBTyxHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUVuQyxNQUFhLGFBQWMsU0FBUSxxQkFBWTtJQUc3QztRQUNFLEtBQUssQ0FBQztZQUNKLE9BQU87WUFDUCxHQUFHLEVBQUUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxRQUFRLEtBQUssYUFBYSxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxFQUFFLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQztTQUM3RixDQUFDLENBQUM7SUFDTCxDQUFDO0lBRU0sTUFBTSxDQUFDLFdBQVc7UUFDdkIsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLEVBQUUsQ0FBQztZQUM1QixhQUFhLENBQUMsUUFBUSxHQUFHLElBQUksYUFBYSxFQUFFLENBQUM7UUFDL0MsQ0FBQztRQUNELE9BQU8sYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUNoQyxDQUFDO0lBRUQsS0FBSyxDQUFDLFlBQVk7UUFDaEIsTUFBTSxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FBQyxlQUFlO1FBQ25CLE1BQU0sSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzNCLENBQUM7Q0FDRjtBQXhCRCxzQ0F3QkM7QUFFWSxRQUFBLE1BQU0sR0FBRyxhQUFhLENBQUMsV0FBVyxFQUFFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQcmlzbWFDbGllbnQgfSBmcm9tICdAcHJpc21hL2NsaWVudCc7XG5pbXBvcnQgeyBQb29sIH0gZnJvbSAncGcnO1xuaW1wb3J0IHsgUHJpc21hUGcgfSBmcm9tICdAcHJpc21hL2FkYXB0ZXItcGcnO1xuXG5jb25zdCBwb29sID0gbmV3IFBvb2woe1xuICBjb25uZWN0aW9uU3RyaW5nOiBwcm9jZXNzLmVudi5EQVRBQkFTRV9VUkwsXG59KTtcblxuY29uc3QgYWRhcHRlciA9IG5ldyBQcmlzbWFQZyhwb29sKTtcblxuZXhwb3J0IGNsYXNzIFByaXNtYVNlcnZpY2UgZXh0ZW5kcyBQcmlzbWFDbGllbnQge1xuICBwcml2YXRlIHN0YXRpYyBpbnN0YW5jZTogUHJpc21hU2VydmljZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge1xuICAgIHN1cGVyKHtcbiAgICAgIGFkYXB0ZXIsXG4gICAgICBsb2c6IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnID8gWydxdWVyeScsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXSA6IFsnZXJyb3InXSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SW5zdGFuY2UoKTogUHJpc21hU2VydmljZSB7XG4gICAgaWYgKCFQcmlzbWFTZXJ2aWNlLmluc3RhbmNlKSB7XG4gICAgICBQcmlzbWFTZXJ2aWNlLmluc3RhbmNlID0gbmV3IFByaXNtYVNlcnZpY2UoKTtcbiAgICB9XG4gICAgcmV0dXJuIFByaXNtYVNlcnZpY2UuaW5zdGFuY2U7XG4gIH1cblxuICBhc3luYyBvbk1vZHVsZUluaXQoKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgYXdhaXQgdGhpcy4kY29ubmVjdCgpO1xuICB9XG5cbiAgYXN5bmMgb25Nb2R1bGVEZXN0cm95KCk6IFByb21pc2U8dm9pZD4ge1xuICAgIGF3YWl0IHRoaXMuJGRpc2Nvbm5lY3QoKTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgcHJpc21hID0gUHJpc21hU2VydmljZS5nZXRJbnN0YW5jZSgpO1xuIl19
package/package.json ADDED
@@ -0,0 +1,33 @@
1
+ {
2
+ "name": "@delpa/mt-prisma",
3
+ "version": "0.0.1",
4
+ "description": "Prisma ORM package for Moving Truck microservices",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "files": [
8
+ "dist",
9
+ "prisma"
10
+ ],
11
+ "dependencies": {
12
+ "@prisma/adapter-pg": "^7.2.0",
13
+ "@prisma/client": "^7.2.0",
14
+ "dotenv": "^17.2.3",
15
+ "pg": "^8.13.0"
16
+ },
17
+ "devDependencies": {
18
+ "@types/pg": "^8.11.0",
19
+ "prisma": "^7.2.0",
20
+ "tsx": "^4.21.0",
21
+ "typescript": "^5.1.3"
22
+ },
23
+ "publishConfig": {
24
+ "access": "public"
25
+ },
26
+ "scripts": {
27
+ "build": "tsc",
28
+ "db:generate": "prisma generate",
29
+ "db:push": "prisma db push",
30
+ "db:migrate": "prisma migrate dev",
31
+ "db:studio": "prisma studio"
32
+ }
33
+ }
@@ -0,0 +1,266 @@
1
+ -- CreateEnum
2
+ CREATE TYPE "RouteStatus" AS ENUM ('IN_TRANSIT', 'DELIVERED', 'PENDING', 'CANCELLED', 'INCIDENT');
3
+
4
+ -- CreateEnum
5
+ CREATE TYPE "WeightUnits" AS ENUM ('KG', 'LB');
6
+
7
+ -- CreateEnum
8
+ CREATE TYPE "DimensionUnits" AS ENUM ('CM', 'IN', 'MT', 'FT');
9
+
10
+ -- CreateEnum
11
+ CREATE TYPE "Roles" AS ENUM ('ADMIN', 'OPERATOR', 'DRIVER', 'GUEST');
12
+
13
+ -- CreateEnum
14
+ CREATE TYPE "VehicleSize" AS ENUM ('SMALL', 'MEDIUM', 'LARGE', 'EXTRA_LARGE');
15
+
16
+ -- CreateEnum
17
+ CREATE TYPE "TypeOfRoutes" AS ENUM ('PICKING', 'DELIVERY', 'RETURN');
18
+
19
+ -- CreateEnum
20
+ CREATE TYPE "AddressType" AS ENUM ('PICKUP', 'DELIVERY', 'WAREHOUSE', 'OTHER');
21
+
22
+ -- CreateTable
23
+ CREATE TABLE "orders" (
24
+ "id" UUID NOT NULL,
25
+ "reference" TEXT,
26
+ "shipper" TEXT NOT NULL,
27
+ "attachments" JSONB DEFAULT '[]',
28
+ "status" "RouteStatus" NOT NULL DEFAULT 'PENDING',
29
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
30
+ "updated_at" TIMESTAMP(3) NOT NULL,
31
+
32
+ CONSTRAINT "orders_pkey" PRIMARY KEY ("id")
33
+ );
34
+
35
+ -- CreateTable
36
+ CREATE TABLE "companies" (
37
+ "id" UUID NOT NULL,
38
+ "tax_id" TEXT,
39
+ "name" TEXT NOT NULL,
40
+ "address" JSONB DEFAULT '{}',
41
+ "contact_info" JSONB DEFAULT '{}',
42
+ "country_code" TEXT,
43
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
44
+ "updated_at" TIMESTAMP(3) NOT NULL,
45
+
46
+ CONSTRAINT "companies_pkey" PRIMARY KEY ("id")
47
+ );
48
+
49
+ -- CreateTable
50
+ CREATE TABLE "handling_units" (
51
+ "id" UUID NOT NULL,
52
+ "order_id" UUID NOT NULL,
53
+ "description" TEXT NOT NULL,
54
+ "quantity" INTEGER NOT NULL DEFAULT 1,
55
+ "weight" DOUBLE PRECISION,
56
+ "weight_unit" "WeightUnits" NOT NULL DEFAULT 'KG',
57
+ "length" DOUBLE PRECISION,
58
+ "width" DOUBLE PRECISION,
59
+ "height" DOUBLE PRECISION,
60
+ "volume" DOUBLE PRECISION,
61
+ "dimension_unit" "DimensionUnits" NOT NULL DEFAULT 'CM',
62
+ "total_volume" DOUBLE PRECISION,
63
+ "total_weight" DOUBLE PRECISION,
64
+ "commodity" TEXT,
65
+ "delivery_contact" JSONB DEFAULT '{}',
66
+ "pickup_contact" JSONB DEFAULT '{}',
67
+ "delivery_address" JSONB DEFAULT '{}',
68
+ "pickup_address" JSONB DEFAULT '{}',
69
+ "delivery_instructions" TEXT,
70
+ "pickup_instructions" TEXT,
71
+ "consignee" UUID,
72
+ "contact_notify" JSONB DEFAULT '{}',
73
+ "eta" TIMESTAMP(3),
74
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
75
+ "updated_at" TIMESTAMP(3) NOT NULL,
76
+
77
+ CONSTRAINT "handling_units_pkey" PRIMARY KEY ("id")
78
+ );
79
+
80
+ -- CreateTable
81
+ CREATE TABLE "users" (
82
+ "id" UUID NOT NULL,
83
+ "email" TEXT NOT NULL,
84
+ "name" TEXT NOT NULL,
85
+ "password" TEXT NOT NULL,
86
+ "role" "Roles" NOT NULL DEFAULT 'GUEST',
87
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
88
+ "updated_at" TIMESTAMP(3) NOT NULL,
89
+
90
+ CONSTRAINT "users_pkey" PRIMARY KEY ("id")
91
+ );
92
+
93
+ -- CreateTable
94
+ CREATE TABLE "vehicles" (
95
+ "id" UUID NOT NULL,
96
+ "license_plate" TEXT NOT NULL,
97
+ "model" TEXT NOT NULL,
98
+ "capacity" DOUBLE PRECISION,
99
+ "mark" TEXT,
100
+ "year" INTEGER,
101
+ "fuel_type" TEXT,
102
+ "color" TEXT,
103
+ "chassis_number" TEXT,
104
+ "size" "VehicleSize" DEFAULT 'MEDIUM',
105
+ "gps_enabled" BOOLEAN NOT NULL DEFAULT false,
106
+ "image_url" JSONB DEFAULT '[]',
107
+ "company_id" UUID,
108
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
109
+ "updated_at" TIMESTAMP(3) NOT NULL,
110
+
111
+ CONSTRAINT "vehicles_pkey" PRIMARY KEY ("id")
112
+ );
113
+
114
+ -- CreateTable
115
+ CREATE TABLE "routes" (
116
+ "id" UUID NOT NULL,
117
+ "driver_id" UUID,
118
+ "vehicle_id" UUID,
119
+ "status" "RouteStatus" NOT NULL DEFAULT 'PENDING',
120
+ "started_at" TIMESTAMP(3),
121
+ "completed_at" TIMESTAMP(3),
122
+ "type_of_route" "TypeOfRoutes",
123
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
124
+ "updated_at" TIMESTAMP(3) NOT NULL,
125
+
126
+ CONSTRAINT "routes_pkey" PRIMARY KEY ("id")
127
+ );
128
+
129
+ -- CreateTable
130
+ CREATE TABLE "route_handling_units" (
131
+ "id" UUID NOT NULL,
132
+ "route_id" UUID NOT NULL,
133
+ "handling_unit_id" UUID NOT NULL,
134
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
135
+ "updated_at" TIMESTAMP(3) NOT NULL,
136
+
137
+ CONSTRAINT "route_handling_units_pkey" PRIMARY KEY ("id")
138
+ );
139
+
140
+ -- CreateTable
141
+ CREATE TABLE "route_orders" (
142
+ "id" UUID NOT NULL,
143
+ "route_id" UUID NOT NULL,
144
+ "order_id" UUID NOT NULL,
145
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
146
+ "updated_at" TIMESTAMP(3) NOT NULL,
147
+
148
+ CONSTRAINT "route_orders_pkey" PRIMARY KEY ("id")
149
+ );
150
+
151
+ -- CreateTable
152
+ CREATE TABLE "addresses" (
153
+ "id" UUID NOT NULL,
154
+ "address_type" "AddressType" NOT NULL DEFAULT 'OTHER',
155
+ "title" TEXT,
156
+ "address_line1" TEXT NOT NULL,
157
+ "address_line2" TEXT,
158
+ "apartment" TEXT,
159
+ "city" TEXT,
160
+ "state" TEXT,
161
+ "postal_code" TEXT,
162
+ "country" TEXT NOT NULL,
163
+ "latitude" DOUBLE PRECISION,
164
+ "longitude" DOUBLE PRECISION,
165
+ "google_address" JSONB DEFAULT '{}',
166
+ "route_id" UUID,
167
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
168
+ "updated_at" TIMESTAMP(3) NOT NULL,
169
+
170
+ CONSTRAINT "addresses_pkey" PRIMARY KEY ("id")
171
+ );
172
+
173
+ -- CreateTable
174
+ CREATE TABLE "address_handling_units" (
175
+ "id" UUID NOT NULL,
176
+ "address_id" UUID NOT NULL,
177
+ "handling_unit_id" UUID NOT NULL,
178
+ "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
179
+ "updated_at" TIMESTAMP(3) NOT NULL,
180
+
181
+ CONSTRAINT "address_handling_units_pkey" PRIMARY KEY ("id")
182
+ );
183
+
184
+ -- CreateIndex
185
+ CREATE UNIQUE INDEX "companies_tax_id_key" ON "companies"("tax_id");
186
+
187
+ -- CreateIndex
188
+ CREATE INDEX "handling_units_order_id_idx" ON "handling_units"("order_id");
189
+
190
+ -- CreateIndex
191
+ CREATE INDEX "handling_units_consignee_idx" ON "handling_units"("consignee");
192
+
193
+ -- CreateIndex
194
+ CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
195
+
196
+ -- CreateIndex
197
+ CREATE UNIQUE INDEX "vehicles_license_plate_key" ON "vehicles"("license_plate");
198
+
199
+ -- CreateIndex
200
+ CREATE UNIQUE INDEX "vehicles_chassis_number_key" ON "vehicles"("chassis_number");
201
+
202
+ -- CreateIndex
203
+ CREATE INDEX "vehicles_company_id_idx" ON "vehicles"("company_id");
204
+
205
+ -- CreateIndex
206
+ CREATE INDEX "routes_driver_id_idx" ON "routes"("driver_id");
207
+
208
+ -- CreateIndex
209
+ CREATE INDEX "routes_vehicle_id_idx" ON "routes"("vehicle_id");
210
+
211
+ -- CreateIndex
212
+ CREATE INDEX "route_handling_units_route_id_idx" ON "route_handling_units"("route_id");
213
+
214
+ -- CreateIndex
215
+ CREATE INDEX "route_handling_units_handling_unit_id_idx" ON "route_handling_units"("handling_unit_id");
216
+
217
+ -- CreateIndex
218
+ CREATE INDEX "route_orders_route_id_idx" ON "route_orders"("route_id");
219
+
220
+ -- CreateIndex
221
+ CREATE INDEX "route_orders_order_id_idx" ON "route_orders"("order_id");
222
+
223
+ -- CreateIndex
224
+ CREATE INDEX "addresses_route_id_idx" ON "addresses"("route_id");
225
+
226
+ -- CreateIndex
227
+ CREATE INDEX "address_handling_units_address_id_idx" ON "address_handling_units"("address_id");
228
+
229
+ -- CreateIndex
230
+ CREATE INDEX "address_handling_units_handling_unit_id_idx" ON "address_handling_units"("handling_unit_id");
231
+
232
+ -- AddForeignKey
233
+ ALTER TABLE "handling_units" ADD CONSTRAINT "handling_units_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "orders"("id") ON DELETE CASCADE ON UPDATE CASCADE;
234
+
235
+ -- AddForeignKey
236
+ ALTER TABLE "handling_units" ADD CONSTRAINT "handling_units_consignee_fkey" FOREIGN KEY ("consignee") REFERENCES "companies"("id") ON DELETE SET NULL ON UPDATE CASCADE;
237
+
238
+ -- AddForeignKey
239
+ ALTER TABLE "vehicles" ADD CONSTRAINT "vehicles_company_id_fkey" FOREIGN KEY ("company_id") REFERENCES "companies"("id") ON DELETE CASCADE ON UPDATE CASCADE;
240
+
241
+ -- AddForeignKey
242
+ ALTER TABLE "routes" ADD CONSTRAINT "routes_driver_id_fkey" FOREIGN KEY ("driver_id") REFERENCES "users"("id") ON DELETE SET NULL ON UPDATE CASCADE;
243
+
244
+ -- AddForeignKey
245
+ ALTER TABLE "routes" ADD CONSTRAINT "routes_vehicle_id_fkey" FOREIGN KEY ("vehicle_id") REFERENCES "vehicles"("id") ON DELETE SET NULL ON UPDATE CASCADE;
246
+
247
+ -- AddForeignKey
248
+ ALTER TABLE "route_handling_units" ADD CONSTRAINT "route_handling_units_route_id_fkey" FOREIGN KEY ("route_id") REFERENCES "routes"("id") ON DELETE CASCADE ON UPDATE CASCADE;
249
+
250
+ -- AddForeignKey
251
+ ALTER TABLE "route_handling_units" ADD CONSTRAINT "route_handling_units_handling_unit_id_fkey" FOREIGN KEY ("handling_unit_id") REFERENCES "handling_units"("id") ON DELETE CASCADE ON UPDATE CASCADE;
252
+
253
+ -- AddForeignKey
254
+ ALTER TABLE "route_orders" ADD CONSTRAINT "route_orders_route_id_fkey" FOREIGN KEY ("route_id") REFERENCES "routes"("id") ON DELETE CASCADE ON UPDATE CASCADE;
255
+
256
+ -- AddForeignKey
257
+ ALTER TABLE "route_orders" ADD CONSTRAINT "route_orders_order_id_fkey" FOREIGN KEY ("order_id") REFERENCES "orders"("id") ON DELETE CASCADE ON UPDATE CASCADE;
258
+
259
+ -- AddForeignKey
260
+ ALTER TABLE "addresses" ADD CONSTRAINT "addresses_route_id_fkey" FOREIGN KEY ("route_id") REFERENCES "routes"("id") ON DELETE CASCADE ON UPDATE CASCADE;
261
+
262
+ -- AddForeignKey
263
+ ALTER TABLE "address_handling_units" ADD CONSTRAINT "address_handling_units_address_id_fkey" FOREIGN KEY ("address_id") REFERENCES "addresses"("id") ON DELETE CASCADE ON UPDATE CASCADE;
264
+
265
+ -- AddForeignKey
266
+ ALTER TABLE "address_handling_units" ADD CONSTRAINT "address_handling_units_handling_unit_id_fkey" FOREIGN KEY ("handling_unit_id") REFERENCES "handling_units"("id") ON DELETE CASCADE ON UPDATE CASCADE;
@@ -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"
@@ -0,0 +1,262 @@
1
+ generator client {
2
+ provider = "prisma-client-js"
3
+ }
4
+
5
+ datasource db {
6
+ provider = "postgresql"
7
+ }
8
+
9
+ enum RouteStatus {
10
+ IN_TRANSIT
11
+ DELIVERED
12
+ PENDING
13
+ CANCELLED
14
+ INCIDENT
15
+ }
16
+
17
+ enum WeightUnits {
18
+ KG
19
+ LB
20
+ }
21
+
22
+ enum DimensionUnits {
23
+ CM
24
+ IN
25
+ MT
26
+ FT
27
+ }
28
+
29
+ enum Roles {
30
+ ADMIN
31
+ OPERATOR
32
+ DRIVER
33
+ GUEST
34
+ }
35
+
36
+ enum VehicleSize {
37
+ SMALL
38
+ MEDIUM
39
+ LARGE
40
+ EXTRA_LARGE
41
+ }
42
+
43
+ enum TypeOfRoutes {
44
+ PICKING
45
+ DELIVERY
46
+ RETURN
47
+ }
48
+
49
+ enum AddressType {
50
+ PICKUP
51
+ DELIVERY
52
+ WAREHOUSE
53
+ OTHER
54
+ }
55
+
56
+ model Order {
57
+ id String @id @default(uuid()) @db.Uuid
58
+ reference String?
59
+ shipper String
60
+ attachments Json? @default("[]")
61
+ status RouteStatus @default(PENDING)
62
+ created_at DateTime @default(now())
63
+ updated_at DateTime @updatedAt
64
+
65
+ handling_units HandlingUnit[]
66
+ route_orders RouteOrders[]
67
+
68
+ @@map("orders")
69
+ }
70
+
71
+ model companies {
72
+ id String @id @default(uuid()) @db.Uuid
73
+ tax_id String? @unique
74
+ name String
75
+ address Json? @default("{}")
76
+ contact_info Json? @default("{}")
77
+ country_code String?
78
+ created_at DateTime @default(now())
79
+ updated_at DateTime @updatedAt
80
+
81
+ handling_units HandlingUnit[]
82
+ vehicles Vehicle[]
83
+
84
+ @@map("companies")
85
+ }
86
+
87
+ model HandlingUnit {
88
+ id String @id @default(uuid()) @db.Uuid
89
+ order_id String @db.Uuid
90
+ description String
91
+ quantity Int @default(1)
92
+ weight Float?
93
+ weight_unit WeightUnits @default(KG)
94
+ length Float?
95
+ width Float?
96
+ height Float?
97
+ volume Float?
98
+ dimension_unit DimensionUnits @default(CM)
99
+ total_volume Float?
100
+ total_weight Float?
101
+ commodity String?
102
+ delivery_contact Json? @default("{}")
103
+ pickup_contact Json? @default("{}")
104
+ delivery_address Json? @default("{}")
105
+ pickup_address Json? @default("{}")
106
+ delivery_instructions String?
107
+ pickup_instructions String?
108
+ consignee String? @db.Uuid
109
+ contact_notify Json? @default("{}")
110
+ eta DateTime?
111
+ created_at DateTime @default(now())
112
+ updated_at DateTime @updatedAt
113
+
114
+ order Order @relation(fields: [order_id], references: [id], onDelete: Cascade)
115
+ company companies? @relation(fields: [consignee], references: [id], onDelete: SetNull)
116
+ route_handling_units RouteHandlingUnit[]
117
+ address_handling_units AddressHandlingUnit[]
118
+
119
+ @@index([order_id])
120
+ @@index([consignee])
121
+
122
+ @@map("handling_units")
123
+ }
124
+
125
+ model User {
126
+ id String @id @default(uuid()) @db.Uuid
127
+ email String @unique
128
+ name String
129
+ password String
130
+ role Roles @default(GUEST)
131
+ created_at DateTime @default(now())
132
+ updated_at DateTime @updatedAt
133
+
134
+ routes Route[]
135
+
136
+ @@map("users")
137
+ }
138
+
139
+
140
+ model Vehicle {
141
+ id String @id @default(uuid()) @db.Uuid
142
+ license_plate String @unique
143
+ model String
144
+ capacity Float?
145
+ mark String?
146
+ year Int?
147
+ fuel_type String?
148
+ color String?
149
+ chassis_number String? @unique
150
+ size VehicleSize? @default(MEDIUM)
151
+ gps_enabled Boolean @default(false)
152
+ image_url Json? @default("[]")
153
+ company_id String? @db.Uuid
154
+ created_at DateTime @default(now())
155
+ updated_at DateTime @updatedAt
156
+
157
+ company companies? @relation(fields: [company_id], references: [id], onDelete: Cascade)
158
+ routes Route[]
159
+
160
+ @@index([company_id])
161
+
162
+ @@map("vehicles")
163
+ }
164
+
165
+
166
+ model Route {
167
+ id String @id @default(uuid()) @db.Uuid
168
+ driver_id String? @db.Uuid
169
+ vehicle_id String? @db.Uuid
170
+ status RouteStatus @default(PENDING)
171
+ started_at DateTime?
172
+ completed_at DateTime?
173
+ type_of_route TypeOfRoutes?
174
+ created_at DateTime @default(now())
175
+ updated_at DateTime @updatedAt
176
+
177
+ driver User? @relation(fields: [driver_id], references: [id], onDelete: SetNull)
178
+ vehicle Vehicle? @relation(fields: [vehicle_id], references: [id], onDelete: SetNull)
179
+
180
+ route_handling_units RouteHandlingUnit[]
181
+ route_orders RouteOrders[]
182
+ addresses Address[]
183
+
184
+
185
+ @@index([driver_id])
186
+ @@index([vehicle_id])
187
+ @@map("routes")
188
+ }
189
+
190
+ model RouteHandlingUnit {
191
+ id String @id @default(uuid()) @db.Uuid
192
+ route_id String @db.Uuid
193
+ handling_unit_id String @db.Uuid
194
+ created_at DateTime @default(now())
195
+ updated_at DateTime @updatedAt
196
+
197
+ route Route @relation(fields: [route_id], references: [id], onDelete: Cascade)
198
+ handling_unit HandlingUnit @relation(fields: [handling_unit_id], references: [id], onDelete: Cascade)
199
+
200
+ @@index([route_id])
201
+ @@index([handling_unit_id])
202
+
203
+ @@map("route_handling_units")
204
+ }
205
+
206
+ model RouteOrders {
207
+ id String @id @default(uuid()) @db.Uuid
208
+ route_id String @db.Uuid
209
+ order_id String @db.Uuid
210
+ created_at DateTime @default(now())
211
+ updated_at DateTime @updatedAt
212
+
213
+ route Route @relation(fields: [route_id], references: [id], onDelete: Cascade)
214
+ order Order @relation(fields: [order_id], references: [id], onDelete: Cascade)
215
+
216
+ @@index([route_id])
217
+ @@index([order_id])
218
+
219
+ @@map("route_orders")
220
+ }
221
+
222
+
223
+ model Address {
224
+ id String @id @default(uuid()) @db.Uuid
225
+ address_type AddressType @default(OTHER)
226
+ title String?
227
+ address_line1 String
228
+ address_line2 String?
229
+ apartment String?
230
+ city String?
231
+ state String?
232
+ postal_code String?
233
+ country String
234
+ latitude Float?
235
+ longitude Float?
236
+ google_address Json? @default("{}")
237
+ route_id String? @db.Uuid
238
+ created_at DateTime @default(now())
239
+ updated_at DateTime @updatedAt
240
+
241
+ route Route? @relation(fields: [route_id], references: [id], onDelete: Cascade)
242
+ address_handling_units AddressHandlingUnit[]
243
+
244
+ @@index([route_id])
245
+ @@map("addresses")
246
+ }
247
+
248
+ model AddressHandlingUnit {
249
+ id String @id @default(uuid()) @db.Uuid
250
+ address_id String @db.Uuid
251
+ handling_unit_id String @db.Uuid
252
+ created_at DateTime @default(now())
253
+ updated_at DateTime @updatedAt
254
+
255
+ address Address @relation(fields: [address_id], references: [id], onDelete: Cascade)
256
+ handling_unit HandlingUnit @relation(fields: [handling_unit_id], references: [id], onDelete: Cascade)
257
+
258
+ @@index([address_id])
259
+ @@index([handling_unit_id])
260
+
261
+ @@map("address_handling_units")
262
+ }