@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.
Files changed (54) hide show
  1. package/index.js +6 -0
  2. package/libraries/fastify.js +126 -0
  3. package/package.json +6 -2
  4. package/.env +0 -73
  5. package/database/migrations/20240000135243_timezones.js +0 -22
  6. package/database/migrations/20240000135244_countries.js +0 -23
  7. package/database/migrations/20240000135244_create_admins_table.js +0 -66
  8. package/database/migrations/20240000135244_currencies.js +0 -21
  9. package/database/migrations/20240000135244_languages.js +0 -21
  10. package/database/migrations/20240000135244_taxes.js +0 -10
  11. package/database/migrations/20240000135245_sites.js +0 -37
  12. package/database/migrations/20240000135246_payment_methods.js +0 -33
  13. package/database/migrations/20251016113547_devices.js +0 -37
  14. package/database/migrations/20251019192600_users.js +0 -62
  15. package/database/migrations/20251019213551_language_lines.js +0 -35
  16. package/database/migrations/20251222214131_category_groups.js +0 -18
  17. package/database/migrations/20251222214619_categories.js +0 -27
  18. package/database/migrations/20251222214848_brands.js +0 -23
  19. package/database/migrations/20251222214946_products.js +0 -30
  20. package/database/migrations/20251222215428_product_images.js +0 -18
  21. package/database/migrations/20251222215553_options.js +0 -30
  22. package/database/migrations/20251222215806_variants.js +0 -23
  23. package/database/migrations/20251222215940_attributes.js +0 -25
  24. package/database/migrations/20251222220135_discounts.js +0 -15
  25. package/database/migrations/20251222220253_reviews.js +0 -22
  26. package/database/migrations/20251222220341_favorites.js +0 -10
  27. package/database/migrations/20251222220422_search_logs.js +0 -17
  28. package/database/migrations/20251222220636_orders.js +0 -16
  29. package/database/migrations/20251222220806_order_items.js +0 -19
  30. package/database/migrations/20251222221317_order_statuses.js +0 -10
  31. package/database/migrations/20251222221446_order_payments.js +0 -13
  32. package/database/migrations/20251222221654_order_addresses.js +0 -23
  33. package/database/migrations/20251222221807_order_status_logs.js +0 -13
  34. package/database/seeds/admins.js +0 -37
  35. package/database/seeds/countries.js +0 -203
  36. package/database/seeds/currencies.js +0 -165
  37. package/database/seeds/languages.js +0 -113
  38. package/database/seeds/timezones.js +0 -149
  39. package/ecosystem.config.js +0 -26
  40. package/routes/admin/auto/admins.json +0 -63
  41. package/routes/admin/auto/devices.json +0 -37
  42. package/routes/admin/auto/migrations.json +0 -21
  43. package/routes/admin/auto/users.json +0 -61
  44. package/routes/admin/middlewares/index.js +0 -87
  45. package/routes/admin/spec/auth.js +0 -626
  46. package/routes/admin/spec/users.js +0 -3
  47. package/routes/auto/handler.js +0 -635
  48. package/routes/common/auto/countries.json +0 -28
  49. package/routes/common/auto/currencies.json +0 -26
  50. package/routes/common/auto/languages.json +0 -26
  51. package/routes/common/auto/taxes.json +0 -46
  52. package/routes/common/auto/timezones.json +0 -29
  53. package/workers/admin.js +0 -124
  54. 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();