db-model-router 1.0.6 → 1.0.7
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 +150 -11
- package/TODO.md +0 -15
- package/db-manager/.dbmanager.sqlite +0 -0
- package/db-manager/README.md +223 -0
- package/db-manager/adapter-proxy.js +361 -0
- package/db-manager/demo/cockroachdb.env +6 -0
- package/db-manager/demo/demo.sqlite +0 -0
- package/db-manager/demo/dynamodb.env +7 -0
- package/db-manager/demo/mongodb.env +4 -0
- package/db-manager/demo/mssql.env +6 -0
- package/db-manager/demo/mysql.env +6 -0
- package/db-manager/demo/oracle.env +6 -0
- package/db-manager/demo/postgres.env +6 -0
- package/db-manager/demo/redis.env +4 -0
- package/db-manager/demo/seeds/cockroachdb.sql +32 -0
- package/db-manager/demo/seeds/mssql.sql +32 -0
- package/db-manager/demo/seeds/mysql.sql +32 -0
- package/db-manager/demo/seeds/oracle.sql +43 -0
- package/db-manager/demo/seeds/postgres.sql +32 -0
- package/db-manager/demo/seeds/sqlite3.sql +32 -0
- package/db-manager/demo/sqlite3.env +2 -0
- package/db-manager/metadata-db.js +170 -0
- package/db-manager/public/.gitkeep +1 -0
- package/db-manager/public/css/style.css +1413 -0
- package/db-manager/public/js/app.js +1370 -0
- package/db-manager/routes/api.js +388 -0
- package/db-manager/routes/views.js +61 -0
- package/db-manager/server.js +39 -0
- package/db-manager/utils/build-filter-config.js +18 -0
- package/db-manager/utils/csv-export.js +59 -0
- package/db-manager/utils/export-filename.js +39 -0
- package/db-manager/utils/filter-tables.js +20 -0
- package/db-manager/utils/parse-filters.js +93 -0
- package/db-manager/utils/sort-state.js +35 -0
- package/db-manager/views/.gitkeep +1 -0
- package/db-manager/views/dashboard.ejs +53 -0
- package/db-manager/views/history.ejs +52 -0
- package/db-manager/views/index.ejs +35 -0
- package/db-manager/views/layout.ejs +31 -0
- package/db-manager/views/partials/data-panel.ejs +74 -0
- package/db-manager/views/partials/header.ejs +36 -0
- package/db-manager/views/partials/sidebar.ejs +30 -0
- package/db-manager/views/query.ejs +58 -0
- package/dbmr.schema.json +22 -44
- package/demo/.dockerignore +7 -0
- package/demo/.env.example +14 -0
- package/demo/Dockerfile +20 -0
- package/demo/app.js +39 -0
- package/demo/commons/add_migration.js +43 -0
- package/demo/commons/db.js +28 -0
- package/demo/commons/migrate.js +68 -0
- package/demo/commons/modules.js +18 -0
- package/demo/commons/password.js +36 -0
- package/demo/commons/security.js +30 -0
- package/demo/commons/session.js +13 -0
- package/demo/commons/webhook.js +81 -0
- package/demo/dbmr.schema.json +338 -0
- package/demo/middleware/authenticate.js +14 -0
- package/demo/middleware/hasPermission.js +30 -0
- package/demo/middleware/logger.js +67 -0
- package/demo/middleware/tenantIsolation.js +17 -0
- package/demo/migrations/20260509170349_create_migrations_table.sql +6 -0
- package/demo/migrations/20260509170349_create_saas_tables.sql +69 -0
- package/demo/migrations/20260509170349_create_tables.sql +193 -0
- package/demo/models/addresses.js +24 -0
- package/demo/models/cart_items.js +20 -0
- package/demo/models/carts.js +18 -0
- package/demo/models/categories.js +22 -0
- package/demo/models/coupons.js +25 -0
- package/demo/models/index.js +43 -0
- package/demo/models/order_items.js +23 -0
- package/demo/models/orders.js +27 -0
- package/demo/models/payments.js +23 -0
- package/demo/models/product_images.js +20 -0
- package/demo/models/product_reviews.js +22 -0
- package/demo/models/product_variants.js +22 -0
- package/demo/models/products.js +32 -0
- package/demo/models/role_permissions.js +17 -0
- package/demo/models/roles.js +17 -0
- package/demo/models/shipments.js +21 -0
- package/demo/models/tenants.js +18 -0
- package/demo/models/users.js +23 -0
- package/demo/models/webhook_logs.js +22 -0
- package/demo/models/webhooks.js +19 -0
- package/demo/models/wishlists.js +17 -0
- package/demo/openapi.json +7000 -0
- package/demo/package-lock.json +2810 -0
- package/demo/package.json +43 -0
- package/demo/routes/addresses/index.js +6 -0
- package/demo/routes/auth/index.js +55 -0
- package/demo/routes/carts/cart_items/index.js +7 -0
- package/demo/routes/carts/index.js +6 -0
- package/demo/routes/categories/index.js +6 -0
- package/demo/routes/coupons/index.js +6 -0
- package/demo/routes/docs.js +18 -0
- package/demo/routes/health.js +35 -0
- package/demo/routes/index.js +54 -0
- package/demo/routes/orders/index.js +6 -0
- package/demo/routes/orders/order_items/index.js +7 -0
- package/demo/routes/orders/payments/index.js +7 -0
- package/demo/routes/orders/shipments/index.js +7 -0
- package/demo/routes/products/index.js +6 -0
- package/demo/routes/products/product_images/index.js +7 -0
- package/demo/routes/products/product_reviews/index.js +7 -0
- package/demo/routes/products/product_variants/index.js +7 -0
- package/demo/routes/roles/index.js +75 -0
- package/demo/routes/roles/permissions/index.js +47 -0
- package/demo/routes/tenants/index.js +45 -0
- package/demo/routes/users/index.js +45 -0
- package/demo/routes/wishlists/index.js +6 -0
- package/demo/seeds/saas-seed.js +329 -0
- package/docker-compose.yml +61 -0
- package/package.json +120 -113
- package/scripts/demo-create.js +1 -1
- package/skill/SKILL.md +119 -3
- package/src/cli/commands/db-manager.js +134 -0
- package/src/cli/commands/generate.js +106 -60
- package/src/cli/commands/help.js +0 -1
- package/src/cli/generate-route.js +60 -21
- package/src/cli/generate-saas-structure.js +122 -0
- package/src/cli/init/generators.js +6 -0
- package/src/cli/init.js +8 -0
- package/src/cli/main.js +8 -1
- package/src/cli/saas/generate-saas-middleware.js +108 -0
- package/src/cli/saas/generate-saas-migrations.js +480 -0
- package/src/cli/saas/generate-saas-models.js +211 -0
- package/src/cli/saas/generate-saas-openapi.js +419 -0
- package/src/cli/saas/generate-saas-routes.js +435 -0
- package/src/cli/saas/generate-saas-seeds.js +243 -0
- package/src/cli/saas/generate-saas-utils.js +176 -0
- package/src/commons/kafka.js +139 -0
- package/src/commons/model.js +29 -9
- package/src/index.js +2 -0
- package/src/mssql/db.js +41 -3
- package/src/mysql/db.js +3 -0
- package/src/postgres/db.js +6 -0
- package/src/cli/generate-db-manager.js +0 -1573
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
CREATE TABLE IF NOT EXISTS addresses (
|
|
2
|
+
address_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
3
|
+
user_id INTEGER NOT NULL,
|
|
4
|
+
label VARCHAR(255),
|
|
5
|
+
line1 VARCHAR(255) NOT NULL,
|
|
6
|
+
line2 VARCHAR(255),
|
|
7
|
+
city VARCHAR(255) NOT NULL,
|
|
8
|
+
state VARCHAR(255) NOT NULL,
|
|
9
|
+
postal_code VARCHAR(255) NOT NULL,
|
|
10
|
+
country VARCHAR(255) NOT NULL,
|
|
11
|
+
is_default BOOLEAN,
|
|
12
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
13
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
CREATE TABLE IF NOT EXISTS cart_items (
|
|
17
|
+
cart_item_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
18
|
+
cart_id INTEGER NOT NULL,
|
|
19
|
+
product_id INTEGER NOT NULL,
|
|
20
|
+
variant_id INTEGER,
|
|
21
|
+
quantity INTEGER NOT NULL,
|
|
22
|
+
unit_price DECIMAL(12,2) NOT NULL,
|
|
23
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
24
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
CREATE TABLE IF NOT EXISTS carts (
|
|
28
|
+
cart_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
29
|
+
user_id INTEGER,
|
|
30
|
+
session_id VARCHAR(255),
|
|
31
|
+
currency VARCHAR(255) NOT NULL,
|
|
32
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
33
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
34
|
+
);
|
|
35
|
+
|
|
36
|
+
CREATE TABLE IF NOT EXISTS categories (
|
|
37
|
+
category_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
38
|
+
name VARCHAR(255) NOT NULL,
|
|
39
|
+
slug VARCHAR(255) NOT NULL,
|
|
40
|
+
description VARCHAR(255),
|
|
41
|
+
parent_category_id INTEGER,
|
|
42
|
+
image_url VARCHAR(255),
|
|
43
|
+
sort_order INTEGER,
|
|
44
|
+
is_active BOOLEAN,
|
|
45
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
46
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
47
|
+
UNIQUE (slug)
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
CREATE TABLE IF NOT EXISTS coupons (
|
|
51
|
+
coupon_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
52
|
+
code VARCHAR(255) NOT NULL,
|
|
53
|
+
description VARCHAR(255),
|
|
54
|
+
discount_type VARCHAR(255) NOT NULL,
|
|
55
|
+
discount_value DECIMAL(12,2) NOT NULL,
|
|
56
|
+
min_order_amount DECIMAL(12,2),
|
|
57
|
+
max_uses INTEGER,
|
|
58
|
+
used_count INTEGER,
|
|
59
|
+
starts_at TIMESTAMP,
|
|
60
|
+
expires_at TIMESTAMP,
|
|
61
|
+
is_active BOOLEAN,
|
|
62
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
63
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
64
|
+
UNIQUE (code)
|
|
65
|
+
);
|
|
66
|
+
|
|
67
|
+
CREATE TABLE IF NOT EXISTS order_items (
|
|
68
|
+
order_item_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
69
|
+
order_id INTEGER NOT NULL,
|
|
70
|
+
product_id INTEGER NOT NULL,
|
|
71
|
+
variant_id INTEGER,
|
|
72
|
+
product_name VARCHAR(255) NOT NULL,
|
|
73
|
+
sku VARCHAR(255) NOT NULL,
|
|
74
|
+
quantity INTEGER NOT NULL,
|
|
75
|
+
unit_price DECIMAL(12,2) NOT NULL,
|
|
76
|
+
total_price DECIMAL(12,2) NOT NULL,
|
|
77
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
CREATE TABLE IF NOT EXISTS orders (
|
|
81
|
+
order_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
82
|
+
user_id INTEGER NOT NULL,
|
|
83
|
+
order_number VARCHAR(255) NOT NULL,
|
|
84
|
+
status VARCHAR(255) NOT NULL,
|
|
85
|
+
subtotal DECIMAL(12,2) NOT NULL,
|
|
86
|
+
tax_amount DECIMAL(12,2) NOT NULL,
|
|
87
|
+
shipping_amount DECIMAL(12,2) NOT NULL,
|
|
88
|
+
discount_amount DECIMAL(12,2),
|
|
89
|
+
total DECIMAL(12,2) NOT NULL,
|
|
90
|
+
currency VARCHAR(255) NOT NULL,
|
|
91
|
+
shipping_address_id INTEGER,
|
|
92
|
+
billing_address_id INTEGER,
|
|
93
|
+
notes VARCHAR(255),
|
|
94
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
95
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
96
|
+
UNIQUE (order_number)
|
|
97
|
+
);
|
|
98
|
+
|
|
99
|
+
CREATE TABLE IF NOT EXISTS payments (
|
|
100
|
+
payment_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
101
|
+
order_id INTEGER NOT NULL,
|
|
102
|
+
method VARCHAR(255) NOT NULL,
|
|
103
|
+
provider VARCHAR(255),
|
|
104
|
+
provider_transaction_id VARCHAR(255),
|
|
105
|
+
amount DECIMAL(12,2) NOT NULL,
|
|
106
|
+
currency VARCHAR(255) NOT NULL,
|
|
107
|
+
status VARCHAR(255) NOT NULL,
|
|
108
|
+
paid_at TIMESTAMP,
|
|
109
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
110
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
111
|
+
);
|
|
112
|
+
|
|
113
|
+
CREATE TABLE IF NOT EXISTS product_images (
|
|
114
|
+
product_image_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
115
|
+
product_id INTEGER NOT NULL,
|
|
116
|
+
url VARCHAR(255) NOT NULL,
|
|
117
|
+
alt_text VARCHAR(255),
|
|
118
|
+
sort_order INTEGER,
|
|
119
|
+
is_primary BOOLEAN,
|
|
120
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
121
|
+
);
|
|
122
|
+
|
|
123
|
+
CREATE TABLE IF NOT EXISTS product_reviews (
|
|
124
|
+
review_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
125
|
+
product_id INTEGER NOT NULL,
|
|
126
|
+
user_id INTEGER NOT NULL,
|
|
127
|
+
rating INTEGER NOT NULL,
|
|
128
|
+
title VARCHAR(255),
|
|
129
|
+
body VARCHAR(255),
|
|
130
|
+
is_verified BOOLEAN,
|
|
131
|
+
is_approved BOOLEAN,
|
|
132
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
133
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
134
|
+
);
|
|
135
|
+
|
|
136
|
+
CREATE TABLE IF NOT EXISTS product_variants (
|
|
137
|
+
variant_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
138
|
+
product_id INTEGER NOT NULL,
|
|
139
|
+
name VARCHAR(255) NOT NULL,
|
|
140
|
+
sku VARCHAR(255) NOT NULL,
|
|
141
|
+
price DECIMAL(12,2) NOT NULL,
|
|
142
|
+
stock_quantity INTEGER NOT NULL,
|
|
143
|
+
attributes TEXT,
|
|
144
|
+
is_active BOOLEAN,
|
|
145
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
146
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
147
|
+
UNIQUE (sku)
|
|
148
|
+
);
|
|
149
|
+
|
|
150
|
+
CREATE TABLE IF NOT EXISTS products (
|
|
151
|
+
product_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
152
|
+
category_id INTEGER NOT NULL,
|
|
153
|
+
name VARCHAR(255) NOT NULL,
|
|
154
|
+
slug VARCHAR(255) NOT NULL,
|
|
155
|
+
description VARCHAR(255),
|
|
156
|
+
short_description VARCHAR(255),
|
|
157
|
+
sku VARCHAR(255) NOT NULL,
|
|
158
|
+
price DECIMAL(12,2) NOT NULL,
|
|
159
|
+
compare_at_price DECIMAL(12,2),
|
|
160
|
+
cost_price DECIMAL(12,2),
|
|
161
|
+
currency VARCHAR(255) NOT NULL,
|
|
162
|
+
stock_quantity INTEGER NOT NULL,
|
|
163
|
+
low_stock_threshold INTEGER,
|
|
164
|
+
weight DECIMAL(12,2),
|
|
165
|
+
weight_unit VARCHAR(255),
|
|
166
|
+
is_active BOOLEAN,
|
|
167
|
+
is_featured BOOLEAN,
|
|
168
|
+
is_deleted BOOLEAN DEFAULT FALSE,
|
|
169
|
+
meta TEXT,
|
|
170
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
171
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
172
|
+
UNIQUE (sku),
|
|
173
|
+
UNIQUE (slug)
|
|
174
|
+
);
|
|
175
|
+
|
|
176
|
+
CREATE TABLE IF NOT EXISTS shipments (
|
|
177
|
+
shipment_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
178
|
+
order_id INTEGER NOT NULL,
|
|
179
|
+
carrier VARCHAR(255) NOT NULL,
|
|
180
|
+
tracking_number VARCHAR(255),
|
|
181
|
+
status VARCHAR(255) NOT NULL,
|
|
182
|
+
shipped_at TIMESTAMP,
|
|
183
|
+
delivered_at TIMESTAMP,
|
|
184
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|
185
|
+
modified_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
186
|
+
);
|
|
187
|
+
|
|
188
|
+
CREATE TABLE IF NOT EXISTS wishlists (
|
|
189
|
+
wishlist_id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
190
|
+
user_id INTEGER NOT NULL,
|
|
191
|
+
product_id INTEGER NOT NULL,
|
|
192
|
+
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
|
193
|
+
);
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const addresses = model(
|
|
6
|
+
db,
|
|
7
|
+
"addresses",
|
|
8
|
+
{
|
|
9
|
+
"user_id": "required|integer",
|
|
10
|
+
"label": "string",
|
|
11
|
+
"line1": "required|string",
|
|
12
|
+
"line2": "string",
|
|
13
|
+
"city": "required|string",
|
|
14
|
+
"state": "required|string",
|
|
15
|
+
"postal_code": "required|string",
|
|
16
|
+
"country": "required|string",
|
|
17
|
+
"is_default": "boolean"
|
|
18
|
+
},
|
|
19
|
+
"address_id",
|
|
20
|
+
["address_id"],
|
|
21
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
22
|
+
);
|
|
23
|
+
|
|
24
|
+
export default addresses;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const cart_items = model(
|
|
6
|
+
db,
|
|
7
|
+
"cart_items",
|
|
8
|
+
{
|
|
9
|
+
"cart_id": "required|integer",
|
|
10
|
+
"product_id": "required|integer",
|
|
11
|
+
"variant_id": "integer",
|
|
12
|
+
"quantity": "required|integer",
|
|
13
|
+
"unit_price": "required|numeric"
|
|
14
|
+
},
|
|
15
|
+
"cart_item_id",
|
|
16
|
+
["cart_item_id"],
|
|
17
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default cart_items;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const carts = model(
|
|
6
|
+
db,
|
|
7
|
+
"carts",
|
|
8
|
+
{
|
|
9
|
+
"user_id": "integer",
|
|
10
|
+
"session_id": "string",
|
|
11
|
+
"currency": "required|string"
|
|
12
|
+
},
|
|
13
|
+
"cart_id",
|
|
14
|
+
["cart_id"],
|
|
15
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
export default carts;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const categories = model(
|
|
6
|
+
db,
|
|
7
|
+
"categories",
|
|
8
|
+
{
|
|
9
|
+
"name": "required|string",
|
|
10
|
+
"slug": "required|string",
|
|
11
|
+
"description": "string",
|
|
12
|
+
"parent_category_id": "integer",
|
|
13
|
+
"image_url": "string",
|
|
14
|
+
"sort_order": "integer",
|
|
15
|
+
"is_active": "boolean"
|
|
16
|
+
},
|
|
17
|
+
"category_id",
|
|
18
|
+
["slug"],
|
|
19
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
export default categories;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const coupons = model(
|
|
6
|
+
db,
|
|
7
|
+
"coupons",
|
|
8
|
+
{
|
|
9
|
+
"code": "required|string",
|
|
10
|
+
"description": "string",
|
|
11
|
+
"discount_type": "required|string",
|
|
12
|
+
"discount_value": "required|numeric",
|
|
13
|
+
"min_order_amount": "numeric",
|
|
14
|
+
"max_uses": "integer",
|
|
15
|
+
"used_count": "integer",
|
|
16
|
+
"starts_at": "datetime",
|
|
17
|
+
"expires_at": "datetime",
|
|
18
|
+
"is_active": "boolean"
|
|
19
|
+
},
|
|
20
|
+
"coupon_id",
|
|
21
|
+
["code"],
|
|
22
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
export default coupons;
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import tenants from "./tenants.js";
|
|
2
|
+
import roles from "./roles.js";
|
|
3
|
+
import users from "./users.js";
|
|
4
|
+
import role_permissions from "./role_permissions.js";
|
|
5
|
+
import webhooks from "./webhooks.js";
|
|
6
|
+
import webhook_logs from "./webhook_logs.js";
|
|
7
|
+
import addresses from "./addresses.js";
|
|
8
|
+
import cart_items from "./cart_items.js";
|
|
9
|
+
import carts from "./carts.js";
|
|
10
|
+
import categories from "./categories.js";
|
|
11
|
+
import coupons from "./coupons.js";
|
|
12
|
+
import order_items from "./order_items.js";
|
|
13
|
+
import orders from "./orders.js";
|
|
14
|
+
import payments from "./payments.js";
|
|
15
|
+
import product_images from "./product_images.js";
|
|
16
|
+
import product_reviews from "./product_reviews.js";
|
|
17
|
+
import product_variants from "./product_variants.js";
|
|
18
|
+
import products from "./products.js";
|
|
19
|
+
import shipments from "./shipments.js";
|
|
20
|
+
import wishlists from "./wishlists.js";
|
|
21
|
+
|
|
22
|
+
export {
|
|
23
|
+
tenants,
|
|
24
|
+
roles,
|
|
25
|
+
users,
|
|
26
|
+
role_permissions,
|
|
27
|
+
webhooks,
|
|
28
|
+
webhook_logs,
|
|
29
|
+
addresses,
|
|
30
|
+
cart_items,
|
|
31
|
+
carts,
|
|
32
|
+
categories,
|
|
33
|
+
coupons,
|
|
34
|
+
order_items,
|
|
35
|
+
orders,
|
|
36
|
+
payments,
|
|
37
|
+
product_images,
|
|
38
|
+
product_reviews,
|
|
39
|
+
product_variants,
|
|
40
|
+
products,
|
|
41
|
+
shipments,
|
|
42
|
+
wishlists,
|
|
43
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const order_items = model(
|
|
6
|
+
db,
|
|
7
|
+
"order_items",
|
|
8
|
+
{
|
|
9
|
+
"order_id": "required|integer",
|
|
10
|
+
"product_id": "required|integer",
|
|
11
|
+
"variant_id": "integer",
|
|
12
|
+
"product_name": "required|string",
|
|
13
|
+
"sku": "required|string",
|
|
14
|
+
"quantity": "required|integer",
|
|
15
|
+
"unit_price": "required|numeric",
|
|
16
|
+
"total_price": "required|numeric"
|
|
17
|
+
},
|
|
18
|
+
"order_item_id",
|
|
19
|
+
["order_item_id"],
|
|
20
|
+
{ created_at: "created_at" },
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export default order_items;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const orders = model(
|
|
6
|
+
db,
|
|
7
|
+
"orders",
|
|
8
|
+
{
|
|
9
|
+
"user_id": "required|integer",
|
|
10
|
+
"order_number": "required|string",
|
|
11
|
+
"status": "required|string",
|
|
12
|
+
"subtotal": "required|numeric",
|
|
13
|
+
"tax_amount": "required|numeric",
|
|
14
|
+
"shipping_amount": "required|numeric",
|
|
15
|
+
"discount_amount": "numeric",
|
|
16
|
+
"total": "required|numeric",
|
|
17
|
+
"currency": "required|string",
|
|
18
|
+
"shipping_address_id": "integer",
|
|
19
|
+
"billing_address_id": "integer",
|
|
20
|
+
"notes": "string"
|
|
21
|
+
},
|
|
22
|
+
"order_id",
|
|
23
|
+
["order_number"],
|
|
24
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
25
|
+
);
|
|
26
|
+
|
|
27
|
+
export default orders;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const payments = model(
|
|
6
|
+
db,
|
|
7
|
+
"payments",
|
|
8
|
+
{
|
|
9
|
+
"order_id": "required|integer",
|
|
10
|
+
"method": "required|string",
|
|
11
|
+
"provider": "string",
|
|
12
|
+
"provider_transaction_id": "string",
|
|
13
|
+
"amount": "required|numeric",
|
|
14
|
+
"currency": "required|string",
|
|
15
|
+
"status": "required|string",
|
|
16
|
+
"paid_at": "datetime"
|
|
17
|
+
},
|
|
18
|
+
"payment_id",
|
|
19
|
+
["payment_id"],
|
|
20
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export default payments;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const product_images = model(
|
|
6
|
+
db,
|
|
7
|
+
"product_images",
|
|
8
|
+
{
|
|
9
|
+
"product_id": "required|integer",
|
|
10
|
+
"url": "required|string",
|
|
11
|
+
"alt_text": "string",
|
|
12
|
+
"sort_order": "integer",
|
|
13
|
+
"is_primary": "boolean"
|
|
14
|
+
},
|
|
15
|
+
"product_image_id",
|
|
16
|
+
["product_image_id"],
|
|
17
|
+
{ created_at: "created_at" },
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
export default product_images;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const product_reviews = model(
|
|
6
|
+
db,
|
|
7
|
+
"product_reviews",
|
|
8
|
+
{
|
|
9
|
+
"product_id": "required|integer",
|
|
10
|
+
"user_id": "required|integer",
|
|
11
|
+
"rating": "required|integer",
|
|
12
|
+
"title": "string",
|
|
13
|
+
"body": "string",
|
|
14
|
+
"is_verified": "boolean",
|
|
15
|
+
"is_approved": "boolean"
|
|
16
|
+
},
|
|
17
|
+
"review_id",
|
|
18
|
+
["review_id"],
|
|
19
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
export default product_reviews;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const product_variants = model(
|
|
6
|
+
db,
|
|
7
|
+
"product_variants",
|
|
8
|
+
{
|
|
9
|
+
"product_id": "required|integer",
|
|
10
|
+
"name": "required|string",
|
|
11
|
+
"sku": "required|string",
|
|
12
|
+
"price": "required|numeric",
|
|
13
|
+
"stock_quantity": "required|integer",
|
|
14
|
+
"attributes": "object",
|
|
15
|
+
"is_active": "boolean"
|
|
16
|
+
},
|
|
17
|
+
"variant_id",
|
|
18
|
+
["sku"],
|
|
19
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
export default product_variants;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const products = model(
|
|
6
|
+
db,
|
|
7
|
+
"products",
|
|
8
|
+
{
|
|
9
|
+
"category_id": "required|integer",
|
|
10
|
+
"name": "required|string",
|
|
11
|
+
"slug": "required|string",
|
|
12
|
+
"description": "string",
|
|
13
|
+
"short_description": "string",
|
|
14
|
+
"sku": "required|string",
|
|
15
|
+
"price": "required|numeric",
|
|
16
|
+
"compare_at_price": "numeric",
|
|
17
|
+
"cost_price": "numeric",
|
|
18
|
+
"currency": "required|string",
|
|
19
|
+
"stock_quantity": "required|integer",
|
|
20
|
+
"low_stock_threshold": "integer",
|
|
21
|
+
"weight": "numeric",
|
|
22
|
+
"weight_unit": "string",
|
|
23
|
+
"is_active": "boolean",
|
|
24
|
+
"is_featured": "boolean",
|
|
25
|
+
"meta": "object"
|
|
26
|
+
},
|
|
27
|
+
"product_id",
|
|
28
|
+
["sku","slug"],
|
|
29
|
+
{ safeDelete: "is_deleted", created_at: "created_at", modified_at: "modified_at" },
|
|
30
|
+
);
|
|
31
|
+
|
|
32
|
+
export default products;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const role_permissions = model(
|
|
6
|
+
db,
|
|
7
|
+
"role_permissions",
|
|
8
|
+
{
|
|
9
|
+
"role_id": "required|integer",
|
|
10
|
+
"permission": "required|object"
|
|
11
|
+
},
|
|
12
|
+
"role_permission_id",
|
|
13
|
+
["role_permission_id"],
|
|
14
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export default role_permissions;
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const roles = model(
|
|
6
|
+
db,
|
|
7
|
+
"roles",
|
|
8
|
+
{
|
|
9
|
+
"tenant_id": "integer",
|
|
10
|
+
"name": "required|string"
|
|
11
|
+
},
|
|
12
|
+
"role_id",
|
|
13
|
+
["tenant_id","name"],
|
|
14
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
15
|
+
);
|
|
16
|
+
|
|
17
|
+
export default roles;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const shipments = model(
|
|
6
|
+
db,
|
|
7
|
+
"shipments",
|
|
8
|
+
{
|
|
9
|
+
"order_id": "required|integer",
|
|
10
|
+
"carrier": "required|string",
|
|
11
|
+
"tracking_number": "string",
|
|
12
|
+
"status": "required|string",
|
|
13
|
+
"shipped_at": "datetime",
|
|
14
|
+
"delivered_at": "datetime"
|
|
15
|
+
},
|
|
16
|
+
"shipment_id",
|
|
17
|
+
["shipment_id"],
|
|
18
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
19
|
+
);
|
|
20
|
+
|
|
21
|
+
export default shipments;
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const tenants = model(
|
|
6
|
+
db,
|
|
7
|
+
"tenants",
|
|
8
|
+
{
|
|
9
|
+
"name": "required|string",
|
|
10
|
+
"slug": "required|string",
|
|
11
|
+
"attributes": "object"
|
|
12
|
+
},
|
|
13
|
+
"tenant_id",
|
|
14
|
+
["slug"],
|
|
15
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
16
|
+
);
|
|
17
|
+
|
|
18
|
+
export default tenants;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const users = model(
|
|
6
|
+
db,
|
|
7
|
+
"users",
|
|
8
|
+
{
|
|
9
|
+
"email": "required|string",
|
|
10
|
+
"phone": "string",
|
|
11
|
+
"password_hash": "required|string",
|
|
12
|
+
"name": "required|string",
|
|
13
|
+
"unique_attribute": "required|string",
|
|
14
|
+
"tenant_id": "integer",
|
|
15
|
+
"role_id": "required|integer",
|
|
16
|
+
"attributes": "object"
|
|
17
|
+
},
|
|
18
|
+
"user_id",
|
|
19
|
+
["tenant_id","unique_attribute"],
|
|
20
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
21
|
+
);
|
|
22
|
+
|
|
23
|
+
export default users;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const webhook_logs = model(
|
|
6
|
+
db,
|
|
7
|
+
"webhook_logs",
|
|
8
|
+
{
|
|
9
|
+
"webhook_id": "required|integer",
|
|
10
|
+
"tenant_id": "required|integer",
|
|
11
|
+
"event_type": "required|string",
|
|
12
|
+
"payload": "required|object",
|
|
13
|
+
"status": "required|string",
|
|
14
|
+
"response_body": "string",
|
|
15
|
+
"response_status_code": "integer"
|
|
16
|
+
},
|
|
17
|
+
"webhook_log_id",
|
|
18
|
+
["webhook_log_id"],
|
|
19
|
+
{ created_at: "created_at" },
|
|
20
|
+
);
|
|
21
|
+
|
|
22
|
+
export default webhook_logs;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import dbModelRouter from "db-model-router";
|
|
2
|
+
|
|
3
|
+
const { db, model } = dbModelRouter;
|
|
4
|
+
|
|
5
|
+
const webhooks = model(
|
|
6
|
+
db,
|
|
7
|
+
"webhooks",
|
|
8
|
+
{
|
|
9
|
+
"tenant_id": "required|integer",
|
|
10
|
+
"url": "required|string",
|
|
11
|
+
"key": "required|string",
|
|
12
|
+
"secret": "required|string"
|
|
13
|
+
},
|
|
14
|
+
"webhook_id",
|
|
15
|
+
["webhook_id"],
|
|
16
|
+
{ created_at: "created_at", modified_at: "modified_at" },
|
|
17
|
+
);
|
|
18
|
+
|
|
19
|
+
export default webhooks;
|