@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 +30 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +22 -0
- package/dist/prisma.service.d.ts +9 -0
- package/dist/prisma.service.js +33 -0
- package/package.json +33 -0
- package/prisma/migrations/20260115201522_init/migration.sql +266 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +262 -0
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
|
package/dist/index.d.ts
ADDED
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,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
|
+
}
|