@triproject/nestjs-core 1.0.5

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 (91) hide show
  1. package/LICENSE +15 -0
  2. package/README.md +140 -0
  3. package/dist/bootstrap.d.ts +2 -0
  4. package/dist/bootstrap.js +43 -0
  5. package/dist/config.d.ts +46 -0
  6. package/dist/config.js +50 -0
  7. package/dist/controllers/controller.d.ts +8 -0
  8. package/dist/controllers/controller.js +56 -0
  9. package/dist/drivers/cache/cache.d.ts +18 -0
  10. package/dist/drivers/cache/cache.driver.d.ts +2 -0
  11. package/dist/drivers/cache/cache.driver.js +22 -0
  12. package/dist/drivers/cache/cache.js +92 -0
  13. package/dist/drivers/cache/index.d.ts +3 -0
  14. package/dist/drivers/cache/index.js +19 -0
  15. package/dist/drivers/cache/redis.d.ts +10 -0
  16. package/dist/drivers/cache/redis.js +52 -0
  17. package/dist/drivers/db/db.helper.d.ts +55 -0
  18. package/dist/drivers/db/db.helper.js +217 -0
  19. package/dist/drivers/db/db.module.d.ts +2 -0
  20. package/dist/drivers/db/db.module.js +44 -0
  21. package/dist/drivers/db/db.service.d.ts +10 -0
  22. package/dist/drivers/db/db.service.js +49 -0
  23. package/dist/drivers/db/index.d.ts +5 -0
  24. package/dist/drivers/db/index.js +21 -0
  25. package/dist/drivers/db/migration.d.ts +42 -0
  26. package/dist/drivers/db/migration.js +81 -0
  27. package/dist/drivers/db/repository.d.ts +41 -0
  28. package/dist/drivers/db/repository.js +255 -0
  29. package/dist/drivers/encryptions/encryption.d.ts +8 -0
  30. package/dist/drivers/encryptions/encryption.js +50 -0
  31. package/dist/drivers/encryptions/encryption.module.d.ts +2 -0
  32. package/dist/drivers/encryptions/encryption.module.js +24 -0
  33. package/dist/drivers/encryptions/index.d.ts +3 -0
  34. package/dist/drivers/encryptions/index.js +19 -0
  35. package/dist/drivers/encryptions/jwt.d.ts +6 -0
  36. package/dist/drivers/encryptions/jwt.js +46 -0
  37. package/dist/drivers/encryptions/password-hash.d.ts +11 -0
  38. package/dist/drivers/encryptions/password-hash.js +38 -0
  39. package/dist/drivers/encryptions/snap.signature.d.ts +32 -0
  40. package/dist/drivers/encryptions/snap.signature.js +110 -0
  41. package/dist/drivers/logger/app.logger.d.ts +23 -0
  42. package/dist/drivers/logger/app.logger.js +183 -0
  43. package/dist/drivers/logger/index.d.ts +2 -0
  44. package/dist/drivers/logger/index.js +18 -0
  45. package/dist/drivers/logger/slack.logger.d.ts +4 -0
  46. package/dist/drivers/logger/slack.logger.js +24 -0
  47. package/dist/drivers/mail/index.d.ts +6 -0
  48. package/dist/drivers/mail/index.js +22 -0
  49. package/dist/drivers/mail/mail-template.d.ts +8 -0
  50. package/dist/drivers/mail/mail-template.js +74 -0
  51. package/dist/drivers/mail/mail.config.d.ts +18 -0
  52. package/dist/drivers/mail/mail.config.js +4 -0
  53. package/dist/drivers/mail/mail.d.ts +23 -0
  54. package/dist/drivers/mail/mail.js +98 -0
  55. package/dist/drivers/mail/mail.module.d.ts +2 -0
  56. package/dist/drivers/mail/mail.module.js +26 -0
  57. package/dist/drivers/mail/mail.queue.d.ts +9 -0
  58. package/dist/drivers/mail/mail.queue.js +37 -0
  59. package/dist/drivers/mail/mailer.d.ts +13 -0
  60. package/dist/drivers/mail/mailer.js +62 -0
  61. package/dist/drivers/notifications/index.d.ts +5 -0
  62. package/dist/drivers/notifications/index.js +21 -0
  63. package/dist/drivers/notifications/notification.config.d.ts +8 -0
  64. package/dist/drivers/notifications/notification.config.js +4 -0
  65. package/dist/drivers/notifications/notification.module.d.ts +2 -0
  66. package/dist/drivers/notifications/notification.module.js +25 -0
  67. package/dist/drivers/notifications/notification.queue.d.ts +9 -0
  68. package/dist/drivers/notifications/notification.queue.js +37 -0
  69. package/dist/drivers/notifications/push-notification.d.ts +10 -0
  70. package/dist/drivers/notifications/push-notification.js +75 -0
  71. package/dist/drivers/notifications/slack.d.ts +15 -0
  72. package/dist/drivers/notifications/slack.js +95 -0
  73. package/dist/drivers/queues/app.queue.d.ts +11 -0
  74. package/dist/drivers/queues/app.queue.js +66 -0
  75. package/dist/drivers/queues/index.d.ts +2 -0
  76. package/dist/drivers/queues/index.js +18 -0
  77. package/dist/drivers/queues/queue.module.d.ts +2 -0
  78. package/dist/drivers/queues/queue.module.js +41 -0
  79. package/dist/helpers/exception.helper.d.ts +35 -0
  80. package/dist/helpers/exception.helper.js +71 -0
  81. package/dist/helpers/http.helper.d.ts +23 -0
  82. package/dist/helpers/http.helper.js +134 -0
  83. package/dist/helpers/swagger.helper.d.ts +20 -0
  84. package/dist/helpers/swagger.helper.js +287 -0
  85. package/dist/helpers/totp.helper.d.ts +16 -0
  86. package/dist/helpers/totp.helper.js +30 -0
  87. package/dist/index.d.ts +8 -0
  88. package/dist/index.js +24 -0
  89. package/dist/middlewares/log.middleware.d.ts +9 -0
  90. package/dist/middlewares/log.middleware.js +59 -0
  91. package/package.json +145 -0
@@ -0,0 +1,217 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.RelationEntity = exports.Entity = exports.PaginateRequest = exports.PaginateResponse = void 0;
13
+ exports.PrimaryUuidCol = PrimaryUuidCol;
14
+ exports.PrimaryCodeCol = PrimaryCodeCol;
15
+ exports.PrimaryNumberCol = PrimaryNumberCol;
16
+ exports.CreatedAtCol = CreatedAtCol;
17
+ exports.UpdatedAtCol = UpdatedAtCol;
18
+ exports.ForeignUuidCol = ForeignUuidCol;
19
+ exports.NumberCol = NumberCol;
20
+ exports.BooleanCol = BooleanCol;
21
+ exports.NameCol = NameCol;
22
+ exports.EnumCol = EnumCol;
23
+ exports.SchedulerCol = SchedulerCol;
24
+ const swagger_1 = require("@nestjs/swagger");
25
+ const helpers_1 = require("@triproject/helpers");
26
+ const class_validator_1 = require("class-validator");
27
+ const sequelize_typescript_1 = require("sequelize-typescript");
28
+ class PaginateResponse {
29
+ data;
30
+ timestamp;
31
+ meta;
32
+ }
33
+ exports.PaginateResponse = PaginateResponse;
34
+ __decorate([
35
+ (0, swagger_1.ApiProperty)({ example: '2025-06-01T12:00:00Z', description: 'Timestamp of the response' }),
36
+ __metadata("design:type", String)
37
+ ], PaginateResponse.prototype, "timestamp", void 0);
38
+ __decorate([
39
+ (0, swagger_1.ApiProperty)({
40
+ example: {
41
+ total: 100,
42
+ totalPage: 10,
43
+ perPage: 10,
44
+ prevPage: null,
45
+ page: 1,
46
+ nextPage: 2,
47
+ },
48
+ }),
49
+ __metadata("design:type", Object)
50
+ ], PaginateResponse.prototype, "meta", void 0);
51
+ class PaginateRequest {
52
+ perPage;
53
+ page;
54
+ q;
55
+ orderBy;
56
+ sort;
57
+ searchKey;
58
+ order;
59
+ include;
60
+ where;
61
+ orWhere;
62
+ andWhere;
63
+ attributes;
64
+ groupBy;
65
+ }
66
+ exports.PaginateRequest = PaginateRequest;
67
+ __decorate([
68
+ (0, swagger_1.ApiProperty)({ example: 10, description: 'Number of items per page' }),
69
+ (0, class_validator_1.IsOptional)(),
70
+ (0, class_validator_1.IsNumber)(),
71
+ __metadata("design:type", Number)
72
+ ], PaginateRequest.prototype, "perPage", void 0);
73
+ __decorate([
74
+ (0, swagger_1.ApiProperty)({ example: 1, description: 'Current page number' }),
75
+ (0, class_validator_1.IsOptional)(),
76
+ (0, class_validator_1.IsNumber)(),
77
+ __metadata("design:type", Number)
78
+ ], PaginateRequest.prototype, "page", void 0);
79
+ __decorate([
80
+ (0, swagger_1.ApiProperty)({ example: 'search query', description: 'Search query' }),
81
+ (0, class_validator_1.IsOptional)(),
82
+ (0, class_validator_1.IsString)(),
83
+ __metadata("design:type", String)
84
+ ], PaginateRequest.prototype, "q", void 0);
85
+ __decorate([
86
+ (0, swagger_1.ApiProperty)({ example: 'createdAt', description: 'Order by field' }),
87
+ (0, class_validator_1.IsString)(),
88
+ (0, class_validator_1.IsOptional)(),
89
+ __metadata("design:type", Object)
90
+ ], PaginateRequest.prototype, "orderBy", void 0);
91
+ __decorate([
92
+ (0, swagger_1.ApiProperty)({ example: 'ASC', enum: ['ASC', 'DESC'], description: 'Sort order' }),
93
+ (0, class_validator_1.IsEnum)(['ASC', 'DESC']),
94
+ __metadata("design:type", String)
95
+ ], PaginateRequest.prototype, "sort", void 0);
96
+ function PrimaryUuidCol() {
97
+ return (0, sequelize_typescript_1.Column)({
98
+ type: sequelize_typescript_1.DataType.UUID,
99
+ allowNull: false,
100
+ primaryKey: true,
101
+ defaultValue: () => (0, helpers_1.generateId)(),
102
+ });
103
+ }
104
+ function PrimaryCodeCol() {
105
+ return (0, sequelize_typescript_1.Column)({
106
+ allowNull: false,
107
+ primaryKey: true,
108
+ type: sequelize_typescript_1.DataType.STRING(100),
109
+ defaultValue: () => (0, helpers_1.generateCode)(),
110
+ });
111
+ }
112
+ function PrimaryNumberCol() {
113
+ return (0, sequelize_typescript_1.Column)({
114
+ type: sequelize_typescript_1.DataType.BIGINT,
115
+ allowNull: false,
116
+ primaryKey: true,
117
+ autoIncrement: true,
118
+ get() {
119
+ return +this.getDataValue('id');
120
+ },
121
+ });
122
+ }
123
+ function CreatedAtCol() {
124
+ return (0, sequelize_typescript_1.Column)({
125
+ type: sequelize_typescript_1.DataType.DATE,
126
+ defaultValue: () => (0, helpers_1.dateUtil)().utc().getTime(),
127
+ });
128
+ }
129
+ function UpdatedAtCol() {
130
+ return (0, sequelize_typescript_1.Column)({
131
+ type: sequelize_typescript_1.DataType.DATE,
132
+ defaultValue: () => (0, helpers_1.dateUtil)().utc().getTime(),
133
+ onUpdate: 'UPDATE CURRENT_TIMESTAMP',
134
+ });
135
+ }
136
+ function ForeignUuidCol(params) {
137
+ return (0, sequelize_typescript_1.Column)({ type: sequelize_typescript_1.DataType.UUID, allowNull: params?.allowNull ?? false });
138
+ }
139
+ function NumberCol(precision = 5, scale = 2, options = {}) {
140
+ let type = sequelize_typescript_1.DataType.DECIMAL(precision, scale);
141
+ if (scale === 0) {
142
+ type = sequelize_typescript_1.DataType.INTEGER;
143
+ if (precision <= 5)
144
+ type = sequelize_typescript_1.DataType.MEDIUMINT;
145
+ }
146
+ return (0, sequelize_typescript_1.Column)({
147
+ ...options,
148
+ type,
149
+ defaultValue: 0,
150
+ });
151
+ }
152
+ function BooleanCol(defaultValue = true) {
153
+ return (0, sequelize_typescript_1.Column)({
154
+ type: sequelize_typescript_1.DataType.BOOLEAN,
155
+ defaultValue,
156
+ });
157
+ }
158
+ function NameCol() {
159
+ return (0, sequelize_typescript_1.Column)({
160
+ type: sequelize_typescript_1.DataType.STRING(100),
161
+ allowNull: false,
162
+ });
163
+ }
164
+ function EnumCol(data) {
165
+ return (0, sequelize_typescript_1.Column)({
166
+ type: sequelize_typescript_1.DataType.ENUM(...data.enum),
167
+ allowNull: false,
168
+ });
169
+ }
170
+ function SchedulerCol() {
171
+ return (_target, _propertyKey) => {
172
+ (0, sequelize_typescript_1.Column)({
173
+ type: sequelize_typescript_1.DataType.STRING(512),
174
+ get() {
175
+ try {
176
+ const rawValue = this.getDataValue(_propertyKey) ?? '[]';
177
+ const parsed = JSON.parse(rawValue);
178
+ return parsed.map(([start, end]) => ({ start: (0, helpers_1.dateUtil)(start), end: (0, helpers_1.dateUtil)(end) }));
179
+ }
180
+ catch (error) {
181
+ return [];
182
+ }
183
+ },
184
+ set(value) {
185
+ this.setDataValue(_propertyKey, JSON.stringify(value.map(({ start, end }) => [(0, helpers_1.dateUtil)(start).toISOString(), (0, helpers_1.dateUtil)(end).toISOString()])));
186
+ },
187
+ });
188
+ };
189
+ }
190
+ let Entity = class Entity extends sequelize_typescript_1.Model {
191
+ };
192
+ exports.Entity = Entity;
193
+ __decorate([
194
+ PrimaryUuidCol(),
195
+ __metadata("design:type", String)
196
+ ], Entity.prototype, "id", void 0);
197
+ __decorate([
198
+ CreatedAtCol(),
199
+ __metadata("design:type", Date)
200
+ ], Entity.prototype, "createdAt", void 0);
201
+ __decorate([
202
+ UpdatedAtCol(),
203
+ __metadata("design:type", Date)
204
+ ], Entity.prototype, "updatedAt", void 0);
205
+ exports.Entity = Entity = __decorate([
206
+ (0, sequelize_typescript_1.Table)({ underscored: false, timestamps: true })
207
+ ], Entity);
208
+ let RelationEntity = class RelationEntity extends sequelize_typescript_1.Model {
209
+ };
210
+ exports.RelationEntity = RelationEntity;
211
+ __decorate([
212
+ PrimaryNumberCol(),
213
+ __metadata("design:type", Number)
214
+ ], RelationEntity.prototype, "id", void 0);
215
+ exports.RelationEntity = RelationEntity = __decorate([
216
+ (0, sequelize_typescript_1.Table)({ underscored: false, timestamps: false })
217
+ ], RelationEntity);
@@ -0,0 +1,2 @@
1
+ export declare class DBModule {
2
+ }
@@ -0,0 +1,44 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.DBModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const sequelize_1 = require("@nestjs/sequelize");
12
+ const path_1 = require("path");
13
+ const config_1 = require("../../config");
14
+ const db_service_1 = require("./db.service");
15
+ let DBModule = class DBModule {
16
+ };
17
+ exports.DBModule = DBModule;
18
+ exports.DBModule = DBModule = __decorate([
19
+ (0, common_1.Global)(),
20
+ (0, common_1.Module)({
21
+ imports: [
22
+ sequelize_1.SequelizeModule.forRootAsync({
23
+ useFactory: async () => {
24
+ return {
25
+ host: config_1.DB_HOST,
26
+ port: config_1.DB_PORT,
27
+ username: config_1.DB_USER,
28
+ password: config_1.DB_PASSWORD,
29
+ database: config_1.DB_NAME,
30
+ dialect: config_1.DB_DIALECT,
31
+ pool: { min: 2, max: config_1.DB_MAX_POOL_SIZE },
32
+ models: [(0, path_1.resolve)(config_1.DB_ENTITIES_PATH)],
33
+ define: { charset: 'utf8', underscored: false },
34
+ synchronize: false,
35
+ logging: false,
36
+ dialectOptions: config_1.DB_SSL ? { ssl: { require: true, rejectUnauthorized: false } } : {},
37
+ };
38
+ },
39
+ }),
40
+ ],
41
+ providers: [sequelize_1.SequelizeModule, db_service_1.DbService],
42
+ exports: [sequelize_1.SequelizeModule, db_service_1.DbService],
43
+ })
44
+ ], DBModule);
@@ -0,0 +1,10 @@
1
+ import { OnModuleInit } from '@nestjs/common';
2
+ import { Sequelize } from 'sequelize-typescript';
3
+ export declare class DbService implements OnModuleInit {
4
+ private db;
5
+ private logger;
6
+ constructor(db: Sequelize);
7
+ onModuleInit(): Promise<void>;
8
+ authenticate(): Promise<void>;
9
+ checkConnection(): Promise<boolean>;
10
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var DbService_1;
12
+ Object.defineProperty(exports, "__esModule", { value: true });
13
+ exports.DbService = void 0;
14
+ const common_1 = require("@nestjs/common");
15
+ const sequelize_typescript_1 = require("sequelize-typescript");
16
+ const app_logger_1 = require("../../drivers/logger/app.logger");
17
+ let DbService = DbService_1 = class DbService {
18
+ db;
19
+ logger = new app_logger_1.AppLogger(DbService_1.name);
20
+ constructor(db) {
21
+ this.db = db;
22
+ }
23
+ async onModuleInit() {
24
+ await this.authenticate();
25
+ }
26
+ async authenticate() {
27
+ await this.db
28
+ .authenticate({ retry: { max: 1 } })
29
+ .then(() => this.logger.log('Database connection has been established successfully.'))
30
+ .catch((err) => {
31
+ this.logger.error('Unable to connect to the database:', err);
32
+ throw err;
33
+ });
34
+ }
35
+ async checkConnection() {
36
+ return await this.db
37
+ .authenticate({ retry: { max: 1 } })
38
+ .then(() => true)
39
+ .catch((err) => {
40
+ this.logger.error('Database connection failed', err);
41
+ return false;
42
+ });
43
+ }
44
+ };
45
+ exports.DbService = DbService;
46
+ exports.DbService = DbService = DbService_1 = __decorate([
47
+ (0, common_1.Injectable)(),
48
+ __metadata("design:paramtypes", [sequelize_typescript_1.Sequelize])
49
+ ], DbService);
@@ -0,0 +1,5 @@
1
+ export * from './db.helper';
2
+ export * from './db.module';
3
+ export * from './db.service';
4
+ export * from './migration';
5
+ export * from './repository';
@@ -0,0 +1,21 @@
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
+ __exportStar(require("./db.helper"), exports);
18
+ __exportStar(require("./db.module"), exports);
19
+ __exportStar(require("./db.service"), exports);
20
+ __exportStar(require("./migration"), exports);
21
+ __exportStar(require("./repository"), exports);
@@ -0,0 +1,42 @@
1
+ import { QueryInterface, QueryInterfaceIndexOptions, StringDataType } from 'sequelize';
2
+ import { SequelizeOptions } from 'sequelize-typescript';
3
+ type Index = {
4
+ queryInterface: QueryInterface;
5
+ tableName: string;
6
+ columns: string[];
7
+ options?: QueryInterfaceIndexOptions;
8
+ };
9
+ export declare const defaultCols: () => {
10
+ id: {
11
+ type: StringDataType;
12
+ primaryKey: boolean;
13
+ autoIncrement: boolean;
14
+ defaultValue: () => string;
15
+ };
16
+ createdAt: {
17
+ type: import("sequelize").DateDataTypeConstructor;
18
+ defaultValue: import("sequelize/types/utils").Fn;
19
+ };
20
+ updatedAt: {
21
+ type: import("sequelize").DateDataTypeConstructor;
22
+ defaultValue: import("sequelize/types/utils").Fn;
23
+ };
24
+ };
25
+ export declare const relationCols: (...args: string[]) => {
26
+ id: {
27
+ type: import("sequelize").BigIntDataTypeConstructor;
28
+ primaryKey: boolean;
29
+ autoIncrement: boolean;
30
+ };
31
+ };
32
+ export declare const addIndexes: (params: Index) => Promise<void>;
33
+ export declare const deleteIndexes: (params: Index) => Promise<void>;
34
+ export declare const addUniqueIndexes: (params: Index) => Promise<void>;
35
+ export declare const deleteUniqueIndexes: (params: Index) => Promise<void>;
36
+ export declare const migrationConfig: {
37
+ development: SequelizeOptions;
38
+ staging: SequelizeOptions;
39
+ test: {};
40
+ production: SequelizeOptions;
41
+ };
42
+ export {};
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.migrationConfig = exports.deleteUniqueIndexes = exports.addUniqueIndexes = exports.deleteIndexes = exports.addIndexes = exports.relationCols = exports.defaultCols = void 0;
4
+ const helpers_1 = require("@triproject/helpers");
5
+ const sequelize_1 = require("sequelize");
6
+ const config_1 = require("../../config");
7
+ const defaultCols = () => ({
8
+ id: { type: (0, sequelize_1.STRING)(32), primaryKey: true, autoIncrement: false, defaultValue: () => (0, helpers_1.generateId)() },
9
+ createdAt: { type: sequelize_1.DATE, defaultValue: (0, sequelize_1.fn)('now') },
10
+ updatedAt: { type: sequelize_1.DATE, defaultValue: (0, sequelize_1.fn)('now') },
11
+ });
12
+ exports.defaultCols = defaultCols;
13
+ const relationCols = (...args) => ({
14
+ id: { type: sequelize_1.BIGINT, primaryKey: true, autoIncrement: true },
15
+ ...args.reduce((acc, curr) => {
16
+ acc[curr] = { type: (0, sequelize_1.STRING)(32), allowNull: false };
17
+ return acc;
18
+ }, {}),
19
+ });
20
+ exports.relationCols = relationCols;
21
+ const index = (tableName, column) => {
22
+ return [tableName, (0, helpers_1.md5)(Array.isArray(column) ? column.sort().join('_') : column).substring(0, 8), 'idx'].join('_');
23
+ };
24
+ const addIndexes = async (params) => {
25
+ const { tableName, columns, options = {}, queryInterface } = params;
26
+ for (const col of columns) {
27
+ await queryInterface.addIndex(tableName, [col], { name: index(tableName, col), ...options });
28
+ }
29
+ };
30
+ exports.addIndexes = addIndexes;
31
+ const deleteIndexes = async (params) => {
32
+ const { tableName, columns, queryInterface } = params;
33
+ for (const col of columns) {
34
+ await queryInterface.removeIndex(tableName, index(tableName, col));
35
+ }
36
+ };
37
+ exports.deleteIndexes = deleteIndexes;
38
+ const addUniqueIndexes = async (params) => {
39
+ const { tableName, columns, options = {}, queryInterface } = params;
40
+ queryInterface.addIndex(tableName, columns, {
41
+ unique: true,
42
+ name: index(tableName, columns),
43
+ ...options,
44
+ });
45
+ };
46
+ exports.addUniqueIndexes = addUniqueIndexes;
47
+ const deleteUniqueIndexes = async (params) => {
48
+ const { tableName, columns, queryInterface } = params;
49
+ await queryInterface.removeIndex(tableName, index(tableName, columns));
50
+ };
51
+ exports.deleteUniqueIndexes = deleteUniqueIndexes;
52
+ const dialect = config_1.DB_DIALECT ?? 'postgres';
53
+ const common = {
54
+ host: config_1.DB_HOST ?? '127.0.0.1',
55
+ port: +(config_1.DB_PORT ?? 5432),
56
+ username: config_1.DB_USER ?? 'postgres',
57
+ database: config_1.DB_NAME ?? 'app_db',
58
+ password: config_1.DB_PASSWORD ?? '',
59
+ dialect,
60
+ logging: false,
61
+ pool: {
62
+ max: config_1.DB_MAX_POOL_SIZE ?? 10,
63
+ min: config_1.DB_POOL_MIN ?? 0,
64
+ acquire: config_1.DB_POOL_ACQUIRE ?? 30000,
65
+ idle: config_1.DB_POOL_IDLE ?? 10000,
66
+ },
67
+ dialectOptions: config_1.DB_SSL
68
+ ? {
69
+ ssl: {
70
+ require: true,
71
+ rejectUnauthorized: true,
72
+ },
73
+ }
74
+ : {},
75
+ };
76
+ exports.migrationConfig = {
77
+ development: common,
78
+ staging: common,
79
+ test: {},
80
+ production: common,
81
+ };
@@ -0,0 +1,41 @@
1
+ import { AggregateOptions, Attributes, BulkCreateOptions, CreateOptions, CreationAttributes, DestroyOptions, FindAndCountOptions, FindOptions, ModelStatic, UpdateOptions, UpsertOptions, WhereOptions } from 'sequelize';
2
+ import { Model, Sequelize } from 'sequelize-typescript';
3
+ import { AppLogger } from '../logger';
4
+ import { PaginateRequest, PaginateResponse } from './db.helper';
5
+ export declare class Repository<M extends Model<M, Partial<M>>> {
6
+ protected logger: AppLogger;
7
+ protected Model: ModelStatic<M>;
8
+ protected db: Sequelize;
9
+ private excludeParamsFromFilter;
10
+ private get attributes();
11
+ private get attributesTypes();
12
+ private getTrueKey;
13
+ private parsedBetweenData;
14
+ private mapFilter;
15
+ private _getOptions;
16
+ protected findForPublic<P extends {
17
+ label: string;
18
+ value: string | number;
19
+ }>(params: PaginateRequest<M>, mapInto: (data: M) => P): Promise<P[]>;
20
+ protected paginate<P>(params: PaginateRequest<M>, mapInto?: (data: M) => P): Promise<PaginateResponse<P | M>>;
21
+ protected export(params: PaginateRequest<M>): Promise<M[]>;
22
+ protected export(params: PaginateRequest<M>, mapInto?: (data: M) => string[]): Promise<string[][]>;
23
+ protected updateOrCreate(values: CreationAttributes<M>, whereOptions: WhereOptions<M>, options?: CreateOptions<M> | UpdateOptions<M>): Promise<M>;
24
+ protected findAll(options?: FindOptions<M>): Promise<M[]>;
25
+ protected findAndCountAll(options: FindAndCountOptions<M>): Promise<{
26
+ rows: M[];
27
+ count: number;
28
+ }>;
29
+ protected findOne(options: FindOptions<M>): Promise<M | null>;
30
+ protected create(values: CreationAttributes<M>, options?: CreateOptions<M>): Promise<M>;
31
+ protected update(entity: M | string, values: Partial<M>, options?: Partial<UpdateOptions<M>>): Promise<M>;
32
+ protected upsert(values: CreationAttributes<M>, options?: Partial<UpsertOptions<Attributes<M>>>): Promise<[M, boolean | null]>;
33
+ protected bulkUpdate(values: Partial<M>, options: UpdateOptions<M>): Promise<[number]>;
34
+ protected bulkCreate(values: ReadonlyArray<CreationAttributes<M>>, options?: BulkCreateOptions<M>): Promise<M[]>;
35
+ protected destroy(options: DestroyOptions<M>): Promise<number>;
36
+ protected sum(field: keyof Attributes<M>, options?: AggregateOptions<M>): Promise<number>;
37
+ protected sumField(params: PaginateRequest<M>, field: keyof Attributes<M>): Promise<number>;
38
+ protected sumCol(params: PaginateRequest<M>, fieldToSum: string, expectedField: string): Promise<number>;
39
+ protected count(options: FindOptions<M>): Promise<number>;
40
+ protected filteredFindAll(params: PaginateRequest<M>): Promise<M[]>;
41
+ }