@flusys/nestjs-shared 1.1.0-beta → 1.2.0-rc.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 (198) hide show
  1. package/README.md +146 -1330
  2. package/cjs/classes/api-controller.class.js +325 -49
  3. package/cjs/classes/api-service.class.js +271 -149
  4. package/cjs/classes/handle-custome-db.js +37 -0
  5. package/cjs/classes/index.js +2 -2
  6. package/cjs/classes/winston.logger.class.js +103 -70
  7. package/cjs/constants/index.js +15 -4
  8. package/cjs/constants/message-keys.js +68 -0
  9. package/cjs/constants/permissions.js +287 -0
  10. package/cjs/decorators/api-response.decorator.js +2 -3
  11. package/cjs/decorators/index.js +1 -0
  12. package/cjs/decorators/log-action.decorator.js +149 -0
  13. package/cjs/decorators/require-permission.decorator.js +5 -5
  14. package/cjs/dtos/delete.dto.js +10 -0
  15. package/cjs/dtos/filter-and-pagination.dto.js +24 -34
  16. package/cjs/dtos/get-by-ids.dto.js +65 -0
  17. package/cjs/dtos/identity-response.dto.js +4 -8
  18. package/cjs/dtos/index.js +1 -0
  19. package/cjs/dtos/pagination.dto.js +4 -8
  20. package/cjs/dtos/response-payload.dto.js +68 -112
  21. package/cjs/entities/identity.js +12 -6
  22. package/cjs/entities/index.js +1 -0
  23. package/cjs/entities/raw-type.js +4 -0
  24. package/cjs/entities/user-root.js +15 -15
  25. package/cjs/enums/index.js +20 -0
  26. package/cjs/enums/notification-type.enum.js +17 -0
  27. package/cjs/enums/participant-status.enum.js +17 -0
  28. package/cjs/enums/recurrence-type.enum.js +18 -0
  29. package/cjs/exceptions/base-app.exception.js +151 -0
  30. package/cjs/exceptions/index.js +1 -0
  31. package/cjs/exceptions/permission.exception.js +13 -9
  32. package/cjs/filters/global-exception.filter.js +279 -0
  33. package/cjs/filters/index.js +18 -0
  34. package/cjs/guards/jwt-auth.guard.js +4 -1
  35. package/cjs/guards/permission.guard.js +88 -148
  36. package/cjs/index.js +2 -0
  37. package/cjs/interceptors/idempotency.interceptor.js +1 -1
  38. package/cjs/interceptors/index.js +1 -4
  39. package/cjs/interceptors/set-user-field-on-body.interceptor.js +60 -0
  40. package/cjs/interceptors/slug.interceptor.js +30 -9
  41. package/cjs/interfaces/datasource.interface.js +4 -0
  42. package/cjs/interfaces/event-manager-adapter.interface.js +11 -0
  43. package/cjs/interfaces/index.js +4 -2
  44. package/cjs/interfaces/module-config.interface.js +4 -0
  45. package/cjs/interfaces/notification-adapter.interface.js +11 -0
  46. package/cjs/interfaces/permission.interface.js +1 -1
  47. package/cjs/middlewares/logger.middleware.js +133 -115
  48. package/cjs/modules/cache/cache.module.js +3 -3
  49. package/cjs/modules/datasource/index.js +0 -1
  50. package/cjs/modules/datasource/multi-tenant-datasource.service.js +60 -183
  51. package/cjs/modules/utils/utils.service.js +27 -206
  52. package/cjs/utils/date-time.util.js +94 -0
  53. package/cjs/utils/html-sanitizer.util.js +64 -0
  54. package/cjs/utils/index.js +5 -1
  55. package/cjs/utils/query-helpers.util.js +60 -0
  56. package/cjs/utils/request.util.js +96 -0
  57. package/cjs/utils/string.util.js +63 -0
  58. package/classes/api-controller.class.d.ts +16 -8
  59. package/classes/api-service.class.d.ts +30 -25
  60. package/classes/handle-custome-db.d.ts +3 -0
  61. package/classes/index.d.ts +2 -2
  62. package/classes/winston.logger.class.d.ts +1 -0
  63. package/constants/index.d.ts +2 -1
  64. package/constants/message-keys.d.ts +45 -0
  65. package/constants/permissions.d.ts +306 -0
  66. package/decorators/api-response.decorator.d.ts +1 -1
  67. package/decorators/current-user.decorator.d.ts +1 -1
  68. package/decorators/index.d.ts +1 -0
  69. package/decorators/log-action.decorator.d.ts +8 -0
  70. package/decorators/require-permission.decorator.d.ts +2 -2
  71. package/dtos/delete.dto.d.ts +1 -0
  72. package/dtos/filter-and-pagination.dto.d.ts +0 -2
  73. package/dtos/get-by-ids.dto.d.ts +4 -0
  74. package/dtos/index.d.ts +1 -0
  75. package/dtos/response-payload.dto.d.ts +8 -20
  76. package/entities/index.d.ts +1 -0
  77. package/entities/raw-type.d.ts +1 -0
  78. package/enums/index.d.ts +3 -0
  79. package/enums/notification-type.enum.d.ts +6 -0
  80. package/enums/participant-status.enum.d.ts +6 -0
  81. package/enums/recurrence-type.enum.d.ts +7 -0
  82. package/exceptions/base-app.exception.d.ts +41 -0
  83. package/exceptions/index.d.ts +1 -0
  84. package/exceptions/permission.exception.d.ts +2 -2
  85. package/fesm/classes/api-controller.class.js +326 -50
  86. package/fesm/classes/api-service.class.js +274 -152
  87. package/fesm/classes/handle-custome-db.js +19 -0
  88. package/fesm/classes/index.js +3 -2
  89. package/fesm/classes/winston.logger.class.js +100 -68
  90. package/fesm/constants/index.js +4 -1
  91. package/fesm/constants/message-keys.js +49 -0
  92. package/fesm/constants/permissions.js +200 -0
  93. package/fesm/decorators/api-response.decorator.js +3 -21
  94. package/fesm/decorators/index.js +1 -0
  95. package/fesm/decorators/log-action.decorator.js +139 -0
  96. package/fesm/decorators/require-permission.decorator.js +17 -65
  97. package/fesm/dtos/delete.dto.js +12 -2
  98. package/fesm/dtos/filter-and-pagination.dto.js +26 -47
  99. package/fesm/dtos/get-by-ids.dto.js +55 -0
  100. package/fesm/dtos/identity-response.dto.js +4 -8
  101. package/fesm/dtos/index.js +1 -0
  102. package/fesm/dtos/pagination.dto.js +4 -8
  103. package/fesm/dtos/response-payload.dto.js +68 -103
  104. package/fesm/entities/identity.js +12 -6
  105. package/fesm/entities/index.js +1 -0
  106. package/fesm/entities/raw-type.js +1 -0
  107. package/fesm/entities/user-root.js +15 -15
  108. package/fesm/enums/index.js +3 -0
  109. package/fesm/enums/notification-type.enum.js +7 -0
  110. package/fesm/enums/participant-status.enum.js +7 -0
  111. package/fesm/enums/recurrence-type.enum.js +8 -0
  112. package/fesm/exceptions/base-app.exception.js +115 -0
  113. package/fesm/exceptions/index.js +1 -0
  114. package/fesm/exceptions/permission.exception.js +16 -18
  115. package/fesm/filters/global-exception.filter.js +269 -0
  116. package/fesm/filters/index.js +1 -0
  117. package/fesm/guards/jwt-auth.guard.js +5 -2
  118. package/fesm/guards/permission.guard.js +90 -150
  119. package/fesm/index.js +2 -0
  120. package/fesm/interceptors/idempotency.interceptor.js +2 -2
  121. package/fesm/interceptors/index.js +1 -4
  122. package/fesm/interceptors/set-user-field-on-body.interceptor.js +39 -0
  123. package/fesm/interceptors/slug.interceptor.js +31 -10
  124. package/fesm/interfaces/datasource.interface.js +1 -0
  125. package/fesm/interfaces/event-manager-adapter.interface.js +1 -0
  126. package/fesm/interfaces/index.js +4 -2
  127. package/fesm/interfaces/module-config.interface.js +5 -0
  128. package/fesm/interfaces/notification-adapter.interface.js +1 -0
  129. package/fesm/interfaces/permission.interface.js +1 -3
  130. package/fesm/middlewares/logger.middleware.js +133 -109
  131. package/fesm/modules/cache/cache.module.js +2 -2
  132. package/fesm/modules/datasource/index.js +0 -1
  133. package/fesm/modules/datasource/multi-tenant-datasource.service.js +61 -184
  134. package/fesm/modules/utils/utils.service.js +27 -206
  135. package/fesm/utils/date-time.util.js +70 -0
  136. package/fesm/utils/html-sanitizer.util.js +69 -0
  137. package/fesm/utils/index.js +5 -1
  138. package/fesm/utils/query-helpers.util.js +85 -0
  139. package/fesm/utils/request.util.js +81 -0
  140. package/fesm/utils/string.util.js +71 -0
  141. package/filters/global-exception.filter.d.ts +9 -0
  142. package/filters/index.d.ts +1 -0
  143. package/guards/permission.guard.d.ts +4 -6
  144. package/index.d.ts +2 -0
  145. package/interceptors/idempotency.interceptor.d.ts +1 -1
  146. package/interceptors/index.d.ts +1 -4
  147. package/interceptors/set-user-field-on-body.interceptor.d.ts +5 -0
  148. package/interceptors/slug.interceptor.d.ts +2 -1
  149. package/interfaces/api.interface.d.ts +4 -2
  150. package/interfaces/datasource.interface.d.ts +5 -0
  151. package/interfaces/event-manager-adapter.interface.d.ts +43 -0
  152. package/interfaces/identity.interface.d.ts +4 -4
  153. package/interfaces/index.d.ts +4 -2
  154. package/interfaces/logged-user-info.interface.d.ts +0 -2
  155. package/interfaces/module-config.interface.d.ts +6 -0
  156. package/interfaces/notification-adapter.interface.d.ts +21 -0
  157. package/interfaces/permission.interface.d.ts +13 -9
  158. package/middlewares/logger.middleware.d.ts +2 -2
  159. package/modules/datasource/index.d.ts +0 -1
  160. package/modules/datasource/multi-tenant-datasource.service.d.ts +5 -16
  161. package/modules/utils/utils.service.d.ts +3 -14
  162. package/package.json +21 -14
  163. package/utils/date-time.util.d.ts +8 -0
  164. package/utils/html-sanitizer.util.d.ts +2 -0
  165. package/utils/index.d.ts +5 -1
  166. package/utils/query-helpers.util.d.ts +16 -0
  167. package/utils/request.util.d.ts +6 -0
  168. package/utils/string.util.d.ts +2 -0
  169. package/cjs/classes/request-scoped-api.service.js +0 -61
  170. package/cjs/classes/winston-logger-adapter.class.js +0 -121
  171. package/cjs/interceptors/query-performance.interceptor.js +0 -66
  172. package/cjs/interceptors/set-create-by-on-body.interceptor.js +0 -40
  173. package/cjs/interceptors/set-delete-by-on-body.interceptor.js +0 -40
  174. package/cjs/interceptors/set-update-by-on-body.interceptor.js +0 -40
  175. package/cjs/interfaces/base-query.interface.js +0 -6
  176. package/cjs/interfaces/logger.interface.js +0 -7
  177. package/cjs/modules/datasource/datasource.module.js +0 -120
  178. package/cjs/utils/error-handler.util.js +0 -67
  179. package/classes/request-scoped-api.service.d.ts +0 -13
  180. package/classes/winston-logger-adapter.class.d.ts +0 -20
  181. package/fesm/classes/request-scoped-api.service.js +0 -51
  182. package/fesm/classes/winston-logger-adapter.class.js +0 -124
  183. package/fesm/interceptors/query-performance.interceptor.js +0 -56
  184. package/fesm/interceptors/set-create-by-on-body.interceptor.js +0 -30
  185. package/fesm/interceptors/set-delete-by-on-body.interceptor.js +0 -30
  186. package/fesm/interceptors/set-update-by-on-body.interceptor.js +0 -30
  187. package/fesm/interfaces/base-query.interface.js +0 -3
  188. package/fesm/interfaces/logger.interface.js +0 -4
  189. package/fesm/modules/datasource/datasource.module.js +0 -110
  190. package/fesm/utils/error-handler.util.js +0 -59
  191. package/interceptors/query-performance.interceptor.d.ts +0 -8
  192. package/interceptors/set-create-by-on-body.interceptor.d.ts +0 -5
  193. package/interceptors/set-delete-by-on-body.interceptor.d.ts +0 -5
  194. package/interceptors/set-update-by-on-body.interceptor.d.ts +0 -5
  195. package/interfaces/base-query.interface.d.ts +0 -7
  196. package/interfaces/logger.interface.d.ts +0 -7
  197. package/modules/datasource/datasource.module.d.ts +0 -18
  198. package/utils/error-handler.util.d.ts +0 -24
@@ -0,0 +1,149 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "LogAction", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return LogAction;
9
+ }
10
+ });
11
+ const _common = require("@nestjs/common");
12
+ const _winstonloggerclass = require("../classes/winston.logger.class");
13
+ const _loggermiddleware = require("../middlewares/logger.middleware");
14
+ function createLoggerAdapter(className, moduleName) {
15
+ if (moduleName) {
16
+ const winstonLogger = (0, _winstonloggerclass.createModuleLogger)(moduleName);
17
+ return {
18
+ log: (level, message, meta)=>{
19
+ winstonLogger.log(level, message, {
20
+ context: className,
21
+ ...meta
22
+ });
23
+ },
24
+ error: (message, stack, meta)=>{
25
+ winstonLogger.error(message, {
26
+ context: className,
27
+ stack,
28
+ ...meta
29
+ });
30
+ }
31
+ };
32
+ }
33
+ const nestLogger = new _common.Logger(className);
34
+ return {
35
+ log: (level, message, meta)=>{
36
+ nestLogger[level](message, meta);
37
+ },
38
+ error: (message, stack, meta)=>{
39
+ nestLogger.error(message, stack, meta);
40
+ }
41
+ };
42
+ }
43
+ function LogAction(options = {}) {
44
+ return function(target, propertyKey, descriptor) {
45
+ const originalMethod = descriptor.value;
46
+ const className = target.constructor.name;
47
+ const methodName = String(propertyKey);
48
+ descriptor.value = async function(...args) {
49
+ const startTime = Date.now();
50
+ // Resolve module: decorator option > instance property > undefined
51
+ const moduleName = options.module || this.moduleName;
52
+ const logger = createLoggerAdapter(className, moduleName);
53
+ const action = options.action || `${this.entityName || className}.${methodName}`;
54
+ const logLevel = options.logLevel || 'debug';
55
+ const context = {
56
+ requestId: (0, _loggermiddleware.getRequestId)(),
57
+ userId: (0, _loggermiddleware.getUserId)(),
58
+ tenantId: (0, _loggermiddleware.getTenantId)(),
59
+ companyId: (0, _loggermiddleware.getCompanyId)(),
60
+ method: methodName,
61
+ module: moduleName
62
+ };
63
+ const startMessage = `Executing action method "${action}"`;
64
+ const startContext = options.includeParams ? {
65
+ ...context,
66
+ params: sanitizeParams(args)
67
+ } : context;
68
+ logger.log(logLevel, startMessage, startContext);
69
+ try {
70
+ const result = await originalMethod.apply(this, args);
71
+ const duration = Date.now() - startTime;
72
+ const resultType = getResultType(result);
73
+ const successMessage = `Executed action method "${action}", returned result "${resultType}" in ${duration.toFixed(2)}ms.`;
74
+ const successContext = options.includeResult && result ? {
75
+ ...context,
76
+ duration: `${duration}ms`,
77
+ resultType,
78
+ resultPreview: getResultPreview(result)
79
+ } : {
80
+ ...context,
81
+ duration: `${duration}ms`,
82
+ resultType
83
+ };
84
+ logger.log(logLevel, successMessage, successContext);
85
+ return result;
86
+ } catch (error) {
87
+ const duration = Date.now() - startTime;
88
+ const errorMessage = error instanceof Error ? error.message : 'Unknown error';
89
+ logger.error(`Failed action method "${action}" after ${duration.toFixed(2)}ms: ${errorMessage}`, error instanceof Error ? error.stack : undefined, {
90
+ ...context,
91
+ duration: `${duration}ms`,
92
+ error: errorMessage
93
+ });
94
+ throw error;
95
+ }
96
+ };
97
+ return descriptor;
98
+ };
99
+ }
100
+ function sanitizeParams(args) {
101
+ return args.map((arg)=>{
102
+ if (arg === null || arg === undefined) return arg;
103
+ if (typeof arg === 'object') {
104
+ const sanitized = {
105
+ ...arg
106
+ };
107
+ const sensitiveKeys = [
108
+ 'password',
109
+ 'secret',
110
+ 'token',
111
+ 'apiKey',
112
+ 'authorization'
113
+ ];
114
+ for (const key of Object.keys(sanitized)){
115
+ if (sensitiveKeys.some((sk)=>key.toLowerCase().includes(sk))) {
116
+ sanitized[key] = '[REDACTED]';
117
+ }
118
+ }
119
+ return sanitized;
120
+ }
121
+ return arg;
122
+ });
123
+ }
124
+ function getResultType(result) {
125
+ if (result === null) return 'null';
126
+ if (result === undefined) return 'undefined';
127
+ if (Array.isArray(result)) return `Array<${result.length} items>`;
128
+ if (typeof result === 'object') {
129
+ const name = result.constructor?.name;
130
+ return name && name !== 'Object' ? name : 'Object';
131
+ }
132
+ return typeof result;
133
+ }
134
+ function getResultPreview(result) {
135
+ if (Array.isArray(result)) {
136
+ return {
137
+ count: result.length,
138
+ sample: result.slice(0, 2)
139
+ };
140
+ }
141
+ if (typeof result === 'object' && result !== null) {
142
+ const keys = Object.keys(result).slice(0, 5);
143
+ return {
144
+ keys,
145
+ hasMore: Object.keys(result).length > 5
146
+ };
147
+ }
148
+ return result;
149
+ }
@@ -15,18 +15,18 @@ _export(exports, {
15
15
  get RequirePermission () {
16
16
  return RequirePermission;
17
17
  },
18
- get RequirePermissionCondition () {
19
- return RequirePermissionCondition;
18
+ get RequirePermissionLogic () {
19
+ return RequirePermissionLogic;
20
20
  }
21
21
  });
22
22
  const _common = require("@nestjs/common");
23
23
  const _constants = require("../constants");
24
24
  const RequirePermission = (...permissions)=>(0, _common.SetMetadata)(_constants.PERMISSIONS_KEY, {
25
25
  permissions,
26
- operator: 'and'
26
+ operator: 'AND'
27
27
  });
28
28
  const RequireAnyPermission = (...permissions)=>(0, _common.SetMetadata)(_constants.PERMISSIONS_KEY, {
29
29
  permissions,
30
- operator: 'or'
30
+ operator: 'OR'
31
31
  });
32
- const RequirePermissionCondition = (condition)=>(0, _common.SetMetadata)(_constants.PERMISSIONS_KEY, condition);
32
+ const RequirePermissionLogic = (logic)=>(0, _common.SetMetadata)(_constants.PERMISSIONS_KEY, logic);
@@ -36,6 +36,7 @@ let DeleteDto = class DeleteDto {
36
36
  constructor(){
37
37
  _define_property(this, "id", void 0);
38
38
  _define_property(this, "type", void 0);
39
+ _define_property(this, "deletedById", void 0);
39
40
  }
40
41
  };
41
42
  _ts_decorate([
@@ -80,3 +81,12 @@ _ts_decorate([
80
81
  ]),
81
82
  _ts_metadata("design:type", String)
82
83
  ], DeleteDto.prototype, "type", void 0);
84
+ _ts_decorate([
85
+ (0, _swagger.ApiPropertyOptional)({
86
+ description: 'User ID who initiated the deletion (auto-set by interceptor)',
87
+ example: 'f2e9c8d0-7a2a-11eb-9439-0242ac130002'
88
+ }),
89
+ (0, _classvalidator.IsOptional)(),
90
+ (0, _classvalidator.IsUUID)(),
91
+ _ts_metadata("design:type", String)
92
+ ], DeleteDto.prototype, "deletedById", void 0);
@@ -49,7 +49,6 @@ let FilterAndPaginationDto = class FilterAndPaginationDto {
49
49
  _define_property(this, "sort", void 0);
50
50
  _define_property(this, "select", void 0);
51
51
  _define_property(this, "withDeleted", void 0);
52
- _define_property(this, "extraKey", void 0);
53
52
  }
54
53
  };
55
54
  _ts_decorate([
@@ -97,7 +96,7 @@ _ts_decorate([
97
96
  type: [
98
97
  String
99
98
  ],
100
- description: 'Fields to return. If empty, returns all fields.',
99
+ description: 'Fields to return. Must be valid field names (alphanumeric, underscores only). If empty, returns all fields.',
101
100
  example: [
102
101
  'id',
103
102
  'name',
@@ -107,6 +106,17 @@ _ts_decorate([
107
106
  }),
108
107
  (0, _classvalidator.IsOptional)(),
109
108
  (0, _classvalidator.IsArray)(),
109
+ (0, _classvalidator.IsString)({
110
+ each: true
111
+ }),
112
+ (0, _classvalidator.Matches)(/^[a-zA-Z_][a-zA-Z0-9_]*$/, {
113
+ each: true,
114
+ message: 'Select fields must be valid identifiers (alphanumeric and underscores only)'
115
+ }),
116
+ (0, _classvalidator.MaxLength)(64, {
117
+ each: true,
118
+ message: 'Field names must be 64 characters or less'
119
+ }),
110
120
  _ts_metadata("design:type", Array)
111
121
  ], FilterAndPaginationDto.prototype, "select", void 0);
112
122
  _ts_decorate([
@@ -119,25 +129,9 @@ _ts_decorate([
119
129
  (0, _classvalidator.IsBoolean)(),
120
130
  _ts_metadata("design:type", Boolean)
121
131
  ], FilterAndPaginationDto.prototype, "withDeleted", void 0);
122
- _ts_decorate([
123
- (0, _swagger.ApiPropertyOptional)({
124
- type: [
125
- String
126
- ],
127
- description: 'Additional relation keys to include',
128
- example: [
129
- 'category',
130
- 'createdBy'
131
- ]
132
- }),
133
- (0, _classvalidator.IsOptional)(),
134
- (0, _classvalidator.IsArray)(),
135
- _ts_metadata("design:type", Array)
136
- ], FilterAndPaginationDto.prototype, "extraKey", void 0);
137
132
  let GetByIdBodyDto = class GetByIdBodyDto {
138
133
  constructor(){
139
134
  _define_property(this, "select", void 0);
140
- _define_property(this, "extraKey", void 0);
141
135
  }
142
136
  };
143
137
  _ts_decorate([
@@ -145,7 +139,7 @@ _ts_decorate([
145
139
  type: [
146
140
  String
147
141
  ],
148
- description: 'Fields to return. If empty, returns all fields.',
142
+ description: 'Fields to return. Must be valid field names (alphanumeric, underscores only). If empty, returns all fields.',
149
143
  example: [
150
144
  'id',
151
145
  'name',
@@ -155,20 +149,16 @@ _ts_decorate([
155
149
  }),
156
150
  (0, _classvalidator.IsOptional)(),
157
151
  (0, _classvalidator.IsArray)(),
158
- _ts_metadata("design:type", Array)
159
- ], GetByIdBodyDto.prototype, "select", void 0);
160
- _ts_decorate([
161
- (0, _swagger.ApiPropertyOptional)({
162
- type: [
163
- String
164
- ],
165
- description: 'Additional relation keys to include',
166
- example: [
167
- 'category',
168
- 'createdBy'
169
- ]
152
+ (0, _classvalidator.IsString)({
153
+ each: true
154
+ }),
155
+ (0, _classvalidator.Matches)(/^[a-zA-Z_][a-zA-Z0-9_]*$/, {
156
+ each: true,
157
+ message: 'Select fields must be valid identifiers (alphanumeric and underscores only)'
158
+ }),
159
+ (0, _classvalidator.MaxLength)(64, {
160
+ each: true,
161
+ message: 'Field names must be 64 characters or less'
170
162
  }),
171
- (0, _classvalidator.IsOptional)(),
172
- (0, _classvalidator.IsArray)(),
173
163
  _ts_metadata("design:type", Array)
174
- ], GetByIdBodyDto.prototype, "extraKey", void 0);
164
+ ], GetByIdBodyDto.prototype, "select", void 0);
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "GetByIdsDto", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return GetByIdsDto;
9
+ }
10
+ });
11
+ const _swagger = require("@nestjs/swagger");
12
+ const _classvalidator = require("class-validator");
13
+ function _define_property(obj, key, value) {
14
+ if (key in obj) {
15
+ Object.defineProperty(obj, key, {
16
+ value: value,
17
+ enumerable: true,
18
+ configurable: true,
19
+ writable: true
20
+ });
21
+ } else {
22
+ obj[key] = value;
23
+ }
24
+ return obj;
25
+ }
26
+ function _ts_decorate(decorators, target, key, desc) {
27
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
28
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
29
+ 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;
30
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
31
+ }
32
+ function _ts_metadata(k, v) {
33
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
34
+ }
35
+ let GetByIdsDto = class GetByIdsDto {
36
+ constructor(){
37
+ _define_property(this, "ids", void 0);
38
+ _define_property(this, "select", void 0);
39
+ }
40
+ };
41
+ _ts_decorate([
42
+ (0, _swagger.ApiProperty)({
43
+ description: 'Array of IDs to retrieve',
44
+ type: [
45
+ String
46
+ ],
47
+ example: [
48
+ 'uuid-1',
49
+ 'uuid-2'
50
+ ]
51
+ }),
52
+ (0, _classvalidator.IsNotEmpty)(),
53
+ (0, _classvalidator.IsArray)(),
54
+ (0, _classvalidator.IsUUID)('all', {
55
+ each: true
56
+ }),
57
+ _ts_metadata("design:type", Array)
58
+ ], GetByIdsDto.prototype, "ids", void 0);
59
+ _ts_decorate([
60
+ (0, _swagger.ApiPropertyOptional)({
61
+ description: 'Select specific fields to return (comma-separated or array)'
62
+ }),
63
+ (0, _classvalidator.IsOptional)(),
64
+ _ts_metadata("design:type", Object)
65
+ ], GetByIdsDto.prototype, "select", void 0);
@@ -8,8 +8,8 @@ Object.defineProperty(exports, "IdentityResponseDto", {
8
8
  return IdentityResponseDto;
9
9
  }
10
10
  });
11
- const _classtransformer = require("class-transformer");
12
11
  const _swagger = require("@nestjs/swagger");
12
+ const _classtransformer = require("class-transformer");
13
13
  function _define_property(obj, key, value) {
14
14
  if (key in obj) {
15
15
  Object.defineProperty(obj, key, {
@@ -44,28 +44,28 @@ let IdentityResponseDto = class IdentityResponseDto {
44
44
  }
45
45
  };
46
46
  _ts_decorate([
47
+ (0, _classtransformer.Expose)(),
47
48
  (0, _swagger.ApiProperty)({
48
49
  type: String,
49
50
  format: 'uuid'
50
51
  }),
51
- (0, _classtransformer.Expose)(),
52
52
  _ts_metadata("design:type", String)
53
53
  ], IdentityResponseDto.prototype, "id", void 0);
54
54
  _ts_decorate([
55
+ (0, _classtransformer.Expose)(),
55
56
  (0, _swagger.ApiProperty)({
56
57
  type: String,
57
58
  format: 'date-time'
58
59
  }),
59
- (0, _classtransformer.Expose)(),
60
60
  (0, _classtransformer.Type)(()=>Date),
61
61
  _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
62
62
  ], IdentityResponseDto.prototype, "createdAt", void 0);
63
63
  _ts_decorate([
64
+ (0, _classtransformer.Expose)(),
64
65
  (0, _swagger.ApiProperty)({
65
66
  type: String,
66
67
  format: 'date-time'
67
68
  }),
68
- (0, _classtransformer.Expose)(),
69
69
  (0, _classtransformer.Type)(()=>Date),
70
70
  _ts_metadata("design:type", typeof Date === "undefined" ? Object : Date)
71
71
  ], IdentityResponseDto.prototype, "updatedAt", void 0);
@@ -76,7 +76,6 @@ _ts_decorate([
76
76
  nullable: true,
77
77
  required: false
78
78
  }),
79
- (0, _classtransformer.Expose)(),
80
79
  (0, _classtransformer.Type)(()=>Date),
81
80
  _ts_metadata("design:type", Object)
82
81
  ], IdentityResponseDto.prototype, "deletedAt", void 0);
@@ -87,7 +86,6 @@ _ts_decorate([
87
86
  nullable: true,
88
87
  required: false
89
88
  }),
90
- (0, _classtransformer.Expose)(),
91
89
  _ts_metadata("design:type", Object)
92
90
  ], IdentityResponseDto.prototype, "createdById", void 0);
93
91
  _ts_decorate([
@@ -97,7 +95,6 @@ _ts_decorate([
97
95
  nullable: true,
98
96
  required: false
99
97
  }),
100
- (0, _classtransformer.Expose)(),
101
98
  _ts_metadata("design:type", Object)
102
99
  ], IdentityResponseDto.prototype, "updatedById", void 0);
103
100
  _ts_decorate([
@@ -107,6 +104,5 @@ _ts_decorate([
107
104
  nullable: true,
108
105
  required: false
109
106
  }),
110
- (0, _classtransformer.Expose)(),
111
107
  _ts_metadata("design:type", Object)
112
108
  ], IdentityResponseDto.prototype, "deletedById", void 0);
package/cjs/dtos/index.js CHANGED
@@ -4,6 +4,7 @@ Object.defineProperty(exports, "__esModule", {
4
4
  });
5
5
  _export_star(require("./delete.dto"), exports);
6
6
  _export_star(require("./filter-and-pagination.dto"), exports);
7
+ _export_star(require("./get-by-ids.dto"), exports);
7
8
  _export_star(require("./identity-response.dto"), exports);
8
9
  _export_star(require("./pagination.dto"), exports);
9
10
  _export_star(require("./response-payload.dto"), exports);
@@ -35,17 +35,13 @@ function _ts_metadata(k, v) {
35
35
  }
36
36
  let PaginationDto = class PaginationDto {
37
37
  constructor(){
38
- /**
39
- * Number of items per page. Defaults to 10 when not provided or invalid.
40
- */ _define_property(this, "pageSize", 10);
41
- /**
42
- * Zero-based page index. Defaults to 0 when not provided or invalid.
43
- */ _define_property(this, "currentPage", 0);
38
+ _define_property(this, "pageSize", 10);
39
+ _define_property(this, "currentPage", 0);
44
40
  }
45
41
  };
46
42
  _ts_decorate([
47
43
  (0, _swagger.ApiPropertyOptional)({
48
- description: 'Number of items per page. Defaults to 10 when not provided or invalid.',
44
+ description: 'Number of items per page (default: 10)',
49
45
  example: 10
50
46
  }),
51
47
  (0, _classvalidator.IsOptional)(),
@@ -58,7 +54,7 @@ _ts_decorate([
58
54
  ], PaginationDto.prototype, "pageSize", void 0);
59
55
  _ts_decorate([
60
56
  (0, _swagger.ApiPropertyOptional)({
61
- description: 'Zero-based page index. Defaults to 0 when not provided or invalid.',
57
+ description: 'Zero-based page index (default: 0)',
62
58
  example: 0
63
59
  }),
64
60
  (0, _classvalidator.IsOptional)(),