@ecopex/ecopex-framework 1.0.0 → 1.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/index.js +6 -0
- package/libraries/fastify.js +126 -0
- package/package.json +6 -2
- package/.env +0 -73
- package/database/migrations/20240000135243_timezones.js +0 -22
- package/database/migrations/20240000135244_countries.js +0 -23
- package/database/migrations/20240000135244_create_admins_table.js +0 -66
- package/database/migrations/20240000135244_currencies.js +0 -21
- package/database/migrations/20240000135244_languages.js +0 -21
- package/database/migrations/20240000135244_taxes.js +0 -10
- package/database/migrations/20240000135245_sites.js +0 -37
- package/database/migrations/20240000135246_payment_methods.js +0 -33
- package/database/migrations/20251016113547_devices.js +0 -37
- package/database/migrations/20251019192600_users.js +0 -62
- package/database/migrations/20251019213551_language_lines.js +0 -35
- package/database/migrations/20251222214131_category_groups.js +0 -18
- package/database/migrations/20251222214619_categories.js +0 -27
- package/database/migrations/20251222214848_brands.js +0 -23
- package/database/migrations/20251222214946_products.js +0 -30
- package/database/migrations/20251222215428_product_images.js +0 -18
- package/database/migrations/20251222215553_options.js +0 -30
- package/database/migrations/20251222215806_variants.js +0 -23
- package/database/migrations/20251222215940_attributes.js +0 -25
- package/database/migrations/20251222220135_discounts.js +0 -15
- package/database/migrations/20251222220253_reviews.js +0 -22
- package/database/migrations/20251222220341_favorites.js +0 -10
- package/database/migrations/20251222220422_search_logs.js +0 -17
- package/database/migrations/20251222220636_orders.js +0 -16
- package/database/migrations/20251222220806_order_items.js +0 -19
- package/database/migrations/20251222221317_order_statuses.js +0 -10
- package/database/migrations/20251222221446_order_payments.js +0 -13
- package/database/migrations/20251222221654_order_addresses.js +0 -23
- package/database/migrations/20251222221807_order_status_logs.js +0 -13
- package/database/seeds/admins.js +0 -37
- package/database/seeds/countries.js +0 -203
- package/database/seeds/currencies.js +0 -165
- package/database/seeds/languages.js +0 -113
- package/database/seeds/timezones.js +0 -149
- package/ecosystem.config.js +0 -26
- package/routes/admin/auto/admins.json +0 -63
- package/routes/admin/auto/devices.json +0 -37
- package/routes/admin/auto/migrations.json +0 -21
- package/routes/admin/auto/users.json +0 -61
- package/routes/admin/middlewares/index.js +0 -87
- package/routes/admin/spec/auth.js +0 -626
- package/routes/admin/spec/users.js +0 -3
- package/routes/auto/handler.js +0 -635
- package/routes/common/auto/countries.json +0 -28
- package/routes/common/auto/currencies.json +0 -26
- package/routes/common/auto/languages.json +0 -26
- package/routes/common/auto/taxes.json +0 -46
- package/routes/common/auto/timezones.json +0 -29
- package/workers/admin.js +0 -124
- package/workers/api.js +0 -106
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"table": "languages",
|
|
3
|
-
"primary_key": "language_id",
|
|
4
|
-
"store": "languages",
|
|
5
|
-
"schema": {
|
|
6
|
-
"language_id": { "type": "integer", "example": 1 },
|
|
7
|
-
"code": { "type": "string", "default": "", "example": "en" },
|
|
8
|
-
"flag": { "type": "string", "default": "", "example": "🇬🇧" },
|
|
9
|
-
"name": { "type": "string", "default": "", "example": "English" }
|
|
10
|
-
},
|
|
11
|
-
"routes": [
|
|
12
|
-
{
|
|
13
|
-
"action": "list",
|
|
14
|
-
"method": "GET",
|
|
15
|
-
"path": "/languages",
|
|
16
|
-
"searchable_fields": ["code", "name", "flag"],
|
|
17
|
-
"pagination": true,
|
|
18
|
-
"additionalProperties": false
|
|
19
|
-
},
|
|
20
|
-
{
|
|
21
|
-
"action": "get",
|
|
22
|
-
"method": "GET",
|
|
23
|
-
"path": "/languages/:language_id"
|
|
24
|
-
}
|
|
25
|
-
]
|
|
26
|
-
}
|
|
@@ -1,46 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"table": "taxes",
|
|
3
|
-
"primary_key": "tax_id",
|
|
4
|
-
"schema": {
|
|
5
|
-
"tax_id": { "type": "integer", "example": 1 },
|
|
6
|
-
"name": { "type": "string", "search_type": "like", "creatable": true, "create_required": true, "updatable": true, "example": "VAT" },
|
|
7
|
-
"rate": { "type": "number", "minimum": 0, "maximum": 1, "creatable": true, "create_required": true, "updatable": true, "example": 0.18 }
|
|
8
|
-
},
|
|
9
|
-
"store": "taxes",
|
|
10
|
-
"routes": [
|
|
11
|
-
{
|
|
12
|
-
"action": "list",
|
|
13
|
-
"method": "GET",
|
|
14
|
-
"path": "/taxes",
|
|
15
|
-
"searchable_fields": ["name", "rate"],
|
|
16
|
-
"pagination": true,
|
|
17
|
-
"additionalProperties": false
|
|
18
|
-
},
|
|
19
|
-
{
|
|
20
|
-
"action": "get",
|
|
21
|
-
"method": "GET",
|
|
22
|
-
"path": "/taxes/:tax_id"
|
|
23
|
-
},
|
|
24
|
-
{
|
|
25
|
-
"action": "create",
|
|
26
|
-
"method": "POST",
|
|
27
|
-
"path": "/taxes",
|
|
28
|
-
"security": "auth",
|
|
29
|
-
"additionalProperties": false
|
|
30
|
-
},
|
|
31
|
-
{
|
|
32
|
-
"action": "update",
|
|
33
|
-
"method": "PUT",
|
|
34
|
-
"path": "/taxes/:tax_id",
|
|
35
|
-
"security": "auth",
|
|
36
|
-
"additionalProperties": false
|
|
37
|
-
},
|
|
38
|
-
{
|
|
39
|
-
"action": "delete",
|
|
40
|
-
"method": "DELETE",
|
|
41
|
-
"path": "/taxes/:tax_id",
|
|
42
|
-
"security": "auth",
|
|
43
|
-
"additionalProperties": false
|
|
44
|
-
}
|
|
45
|
-
]
|
|
46
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"table": "timezones",
|
|
3
|
-
"primary_key": "timezone_id",
|
|
4
|
-
"store": "timezones",
|
|
5
|
-
"schema": {
|
|
6
|
-
"timezone_id": { "type": "integer", "search_type": "equal", "example": 1 },
|
|
7
|
-
"name": { "type": "string", "default": "", "search_type": "like", "example": "UTC" },
|
|
8
|
-
"code": { "type": "string", "default": "", "search_type": "like", "example": "UTC+00:00" },
|
|
9
|
-
"offset": { "type": "string", "default": "", "search_type": "like", "example": "+00:00" },
|
|
10
|
-
"gmt": { "type": "string", "default": "", "search_type": "like", "example": "UTC" }
|
|
11
|
-
},
|
|
12
|
-
"routes": [
|
|
13
|
-
{
|
|
14
|
-
"action": "list",
|
|
15
|
-
"method": "GET",
|
|
16
|
-
"path": "/timezones",
|
|
17
|
-
"searchable_fields": ["name", "code", "offset", "gmt"],
|
|
18
|
-
"pagination": true,
|
|
19
|
-
"additionalProperties": false
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"action": "get",
|
|
23
|
-
"method": "GET",
|
|
24
|
-
"path": "/timezones/:timezone_id",
|
|
25
|
-
"security": "auth",
|
|
26
|
-
"additionalProperties": false
|
|
27
|
-
}
|
|
28
|
-
]
|
|
29
|
-
}
|
package/workers/admin.js
DELETED
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
require('module-alias/register')
|
|
2
|
-
require('dotenv').config();
|
|
3
|
-
|
|
4
|
-
const Store = require('@root/libraries/stores');
|
|
5
|
-
|
|
6
|
-
const fastify = require('fastify')({
|
|
7
|
-
logger: {
|
|
8
|
-
level: process.env.LOG_LEVEL || 'info'
|
|
9
|
-
}
|
|
10
|
-
});
|
|
11
|
-
|
|
12
|
-
const { loadRoutes } = require('@root/utils/routeLoader');
|
|
13
|
-
const Middleware = require('@root/utils/middleware');
|
|
14
|
-
|
|
15
|
-
// Register plugins
|
|
16
|
-
async function registerPlugins() {
|
|
17
|
-
// Set error handler first, before any plugins
|
|
18
|
-
fastify.setErrorHandler(Middleware.errorHandler);
|
|
19
|
-
fastify.setNotFoundHandler(Middleware.errorNotFoundHandler);
|
|
20
|
-
|
|
21
|
-
// CORS plugin
|
|
22
|
-
await fastify.register(require('@fastify/cors'), {
|
|
23
|
-
origin: process.env.CORS_ORIGIN || '*',
|
|
24
|
-
credentials: true
|
|
25
|
-
});
|
|
26
|
-
|
|
27
|
-
// Swagger documentation
|
|
28
|
-
const swaggerConfig = require('@root/config/swagger/admin');
|
|
29
|
-
|
|
30
|
-
await fastify.register(require('@fastify/swagger'), swaggerConfig.swagger);
|
|
31
|
-
|
|
32
|
-
// Swagger UI
|
|
33
|
-
await fastify.register(require('@fastify/swagger-ui'), swaggerConfig.swaggerUi);
|
|
34
|
-
|
|
35
|
-
// Fastify Multipart plugin
|
|
36
|
-
fastify.register(require('@fastify/multipart'), {
|
|
37
|
-
attachFieldsToBody: true, // Optional: attaches fields to the body object
|
|
38
|
-
throwFileSizeLimit: true, // Optional: throws an error if the file size limit is exceeded
|
|
39
|
-
limits: {
|
|
40
|
-
fieldNameSize: 100, // Max field name size in bytes
|
|
41
|
-
fieldSize: 100, // Max field value size in bytes
|
|
42
|
-
fields: 10, // Max number of non-file fields
|
|
43
|
-
fileSize: 1000000, // For multipart forms, the max file size in bytes
|
|
44
|
-
files: 1, // Max number of file fields
|
|
45
|
-
headerPairs: 2000, // Max number of header key=>value pairs
|
|
46
|
-
parts: 1000 // For multipart forms, the max number of parts (fields + files)
|
|
47
|
-
}
|
|
48
|
-
});
|
|
49
|
-
|
|
50
|
-
// Register other middleware
|
|
51
|
-
fastify.addHook('preHandler', Middleware.languageDetection());
|
|
52
|
-
fastify.addHook('preHandler', Middleware.responseFormatter());
|
|
53
|
-
|
|
54
|
-
// Health check endpoint
|
|
55
|
-
fastify.get('/health', async (request, reply) => {
|
|
56
|
-
return {
|
|
57
|
-
status: 'ok',
|
|
58
|
-
service: 'admin',
|
|
59
|
-
timestamp: new Date().toISOString(),
|
|
60
|
-
uptime: process.uptime(),
|
|
61
|
-
pid: process.pid
|
|
62
|
-
};
|
|
63
|
-
});
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// Load admin routes, common routes, and auto routes
|
|
67
|
-
async function loadAdminRoutes() {
|
|
68
|
-
try {
|
|
69
|
-
// Load admin routes
|
|
70
|
-
await loadRoutes(fastify, __dirname + '/../routes/admin', true, 'admin');
|
|
71
|
-
} catch (error) {
|
|
72
|
-
console.error('Error loading admin routes:', error);
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Start admin service
|
|
78
|
-
async function start() {
|
|
79
|
-
try {
|
|
80
|
-
|
|
81
|
-
// Initialize Store
|
|
82
|
-
await Store.init();
|
|
83
|
-
|
|
84
|
-
// Register plugins
|
|
85
|
-
await registerPlugins();
|
|
86
|
-
|
|
87
|
-
// Load admin routes
|
|
88
|
-
await loadAdminRoutes();
|
|
89
|
-
|
|
90
|
-
// Start server
|
|
91
|
-
const port = process.env.ADMIN_PORT || 3001;
|
|
92
|
-
const host = process.env.HOST || '0.0.0.0';
|
|
93
|
-
|
|
94
|
-
fastify.listen({ port, host });
|
|
95
|
-
|
|
96
|
-
} catch (error) {
|
|
97
|
-
console.error('Error starting admin service:', error);
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
|
-
|
|
102
|
-
// Graceful shutdown
|
|
103
|
-
process.on('SIGINT', async () => {
|
|
104
|
-
try {
|
|
105
|
-
await fastify.close();
|
|
106
|
-
process.exit(0);
|
|
107
|
-
} catch (error) {
|
|
108
|
-
console.error('Error during admin service shutdown:', error);
|
|
109
|
-
process.exit(1);
|
|
110
|
-
}
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
process.on('SIGTERM', async () => {
|
|
114
|
-
try {
|
|
115
|
-
await fastify.close();
|
|
116
|
-
process.exit(0);
|
|
117
|
-
} catch (error) {
|
|
118
|
-
console.error('Error during admin service shutdown:', error);
|
|
119
|
-
process.exit(1);
|
|
120
|
-
}
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
// Start the admin service
|
|
124
|
-
start();
|
package/workers/api.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
require('module-alias/register')
|
|
2
|
-
require('dotenv').config();
|
|
3
|
-
|
|
4
|
-
const fastify = require('fastify')({
|
|
5
|
-
logger: {
|
|
6
|
-
level: process.env.LOG_LEVEL || 'info'
|
|
7
|
-
}
|
|
8
|
-
});
|
|
9
|
-
|
|
10
|
-
const { loadRoutes } = require('@root/utils/routeLoader');
|
|
11
|
-
const Middleware = require('@root/utils/middleware');
|
|
12
|
-
|
|
13
|
-
// Register plugins
|
|
14
|
-
async function registerPlugins() {
|
|
15
|
-
// Set error handler first, before any plugins
|
|
16
|
-
fastify.setErrorHandler(Middleware.errorHandler);
|
|
17
|
-
fastify.setNotFoundHandler(Middleware.errorNotFoundHandler);
|
|
18
|
-
|
|
19
|
-
// CORS plugin
|
|
20
|
-
await fastify.register(require('@fastify/cors'), {
|
|
21
|
-
origin: process.env.CORS_ORIGIN || '*',
|
|
22
|
-
credentials: true
|
|
23
|
-
});
|
|
24
|
-
|
|
25
|
-
// Swagger documentation
|
|
26
|
-
const swaggerConfig = require('@root/config/swagger/api');
|
|
27
|
-
await fastify.register(require('@fastify/swagger'), swaggerConfig.swagger);
|
|
28
|
-
|
|
29
|
-
// Swagger UI
|
|
30
|
-
await fastify.register(require('@fastify/swagger-ui'), swaggerConfig.swaggerUi);
|
|
31
|
-
|
|
32
|
-
// Register other middleware
|
|
33
|
-
fastify.addHook('preHandler', Middleware.languageDetection());
|
|
34
|
-
fastify.addHook('preHandler', Middleware.responseFormatter());
|
|
35
|
-
|
|
36
|
-
// Health check endpoint
|
|
37
|
-
fastify.get('/health', async (request, reply) => {
|
|
38
|
-
return {
|
|
39
|
-
status: 'ok',
|
|
40
|
-
service: 'api',
|
|
41
|
-
timestamp: new Date().toISOString(),
|
|
42
|
-
uptime: process.uptime(),
|
|
43
|
-
pid: process.pid
|
|
44
|
-
};
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Load API routes, common routes, and auto routes
|
|
49
|
-
async function loadApiRoutes() {
|
|
50
|
-
try {
|
|
51
|
-
// Load API routes
|
|
52
|
-
await loadRoutes(fastify, __dirname + '/../routes/api', true, 'api');
|
|
53
|
-
fastify.log.info('API routes loaded successfully');
|
|
54
|
-
} catch (error) {
|
|
55
|
-
console.error('Error loading API routes:', error);
|
|
56
|
-
process.exit(1);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
// Start API service
|
|
61
|
-
async function start() {
|
|
62
|
-
try {
|
|
63
|
-
|
|
64
|
-
// Register plugins
|
|
65
|
-
await registerPlugins();
|
|
66
|
-
|
|
67
|
-
// Load API routes
|
|
68
|
-
await loadApiRoutes();
|
|
69
|
-
|
|
70
|
-
// Start server
|
|
71
|
-
const port = process.env.API_PORT || 3000;
|
|
72
|
-
const host = process.env.HOST || '0.0.0.0';
|
|
73
|
-
|
|
74
|
-
fastify.listen({ port, host });
|
|
75
|
-
|
|
76
|
-
} catch (error) {
|
|
77
|
-
console.error(error);
|
|
78
|
-
process.exit(1);
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
// Graceful shutdown
|
|
83
|
-
process.on('SIGINT', async () => {
|
|
84
|
-
fastify.log.info('API service received SIGINT, shutting down gracefully...');
|
|
85
|
-
try {
|
|
86
|
-
await fastify.close();
|
|
87
|
-
process.exit(0);
|
|
88
|
-
} catch (error) {
|
|
89
|
-
console.error('Error during API service shutdown:', error);
|
|
90
|
-
process.exit(1);
|
|
91
|
-
}
|
|
92
|
-
});
|
|
93
|
-
|
|
94
|
-
process.on('SIGTERM', async () => {
|
|
95
|
-
fastify.log.info('API service received SIGTERM, shutting down gracefully...');
|
|
96
|
-
try {
|
|
97
|
-
await fastify.close();
|
|
98
|
-
process.exit(0);
|
|
99
|
-
} catch (error) {
|
|
100
|
-
console.error('Error during API service shutdown:', error);
|
|
101
|
-
process.exit(1);
|
|
102
|
-
}
|
|
103
|
-
});
|
|
104
|
-
|
|
105
|
-
// Start the API service
|
|
106
|
-
start();
|