@comasoft/nestjs 0.0.97 → 0.1.2

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 (211) hide show
  1. package/README.md +31 -0
  2. package/dist/aws/aws-s3.service.d.ts +17 -0
  3. package/dist/aws/aws-s3.service.js +158 -0
  4. package/dist/aws/aws.module.d.ts +2 -0
  5. package/dist/aws/aws.module.js +25 -0
  6. package/dist/aws/aws.service.d.ts +3 -0
  7. package/dist/aws/aws.service.js +21 -0
  8. package/dist/aws/constants/storage.constant.d.ts +4 -0
  9. package/dist/aws/constants/storage.constant.js +25 -0
  10. package/dist/aws/dto/create-s3-presigned.dto.d.ts +12 -0
  11. package/dist/aws/dto/create-s3-presigned.dto.js +78 -0
  12. package/dist/aws/dto/index.d.ts +2 -0
  13. package/dist/aws/dto/index.js +18 -0
  14. package/dist/aws/dto/response-s3-presigned.dto.d.ts +30 -0
  15. package/dist/aws/dto/response-s3-presigned.dto.js +110 -0
  16. package/dist/aws/index.d.ts +4 -0
  17. package/dist/aws/index.js +20 -0
  18. package/dist/aws/types/s3.interface.d.ts +14 -0
  19. package/dist/aws/types/s3.interface.js +2 -0
  20. package/dist/aws/types/storage.interface.d.ts +19 -0
  21. package/dist/aws/types/storage.interface.js +2 -0
  22. package/dist/category/category.module.d.ts +2 -0
  23. package/dist/category/category.module.js +23 -0
  24. package/dist/category/category.service.d.ts +13 -0
  25. package/dist/category/category.service.js +124 -0
  26. package/dist/category/dto/create-category.dto.d.ts +7 -0
  27. package/dist/category/dto/create-category.dto.js +34 -0
  28. package/dist/category/dto/delete-category.dto.d.ts +3 -0
  29. package/dist/category/dto/delete-category.dto.js +6 -0
  30. package/dist/category/dto/index.d.ts +5 -0
  31. package/dist/category/dto/index.js +21 -0
  32. package/dist/category/dto/response-categories.dto.d.ts +12 -0
  33. package/dist/category/dto/response-categories.dto.js +52 -0
  34. package/dist/category/dto/update-category-sort.dto.d.ts +9 -0
  35. package/dist/category/dto/update-category-sort.dto.js +33 -0
  36. package/dist/category/dto/update-category.dto.d.ts +6 -0
  37. package/dist/category/dto/update-category.dto.js +9 -0
  38. package/dist/category/index.d.ts +3 -0
  39. package/dist/category/index.js +19 -0
  40. package/dist/comment/comment.module.d.ts +2 -0
  41. package/dist/comment/comment.module.js +23 -0
  42. package/dist/comment/comment.service.d.ts +33 -0
  43. package/dist/comment/comment.service.js +240 -0
  44. package/dist/comment/dto/create-comment.dto.d.ts +7 -0
  45. package/dist/comment/dto/create-comment.dto.js +41 -0
  46. package/dist/comment/dto/index.d.ts +3 -0
  47. package/dist/comment/dto/index.js +19 -0
  48. package/dist/comment/dto/response-comment.dto.d.ts +26 -0
  49. package/dist/comment/dto/response-comment.dto.js +97 -0
  50. package/dist/comment/dto/update-comment.dto.d.ts +4 -0
  51. package/dist/comment/dto/update-comment.dto.js +22 -0
  52. package/dist/comment/index.d.ts +3 -0
  53. package/dist/comment/index.js +19 -0
  54. package/dist/database/entities/category.entity.d.ts +14 -0
  55. package/dist/database/entities/category.entity.js +70 -0
  56. package/dist/database/entities/comment.entity.d.ts +16 -0
  57. package/dist/database/entities/comment.entity.js +77 -0
  58. package/dist/database/entities/config.entity.d.ts +8 -0
  59. package/dist/database/entities/config.entity.js +44 -0
  60. package/dist/database/entities/file.entity.d.ts +20 -0
  61. package/dist/database/entities/file.entity.js +91 -0
  62. package/dist/database/entities/index.d.ts +10 -0
  63. package/dist/database/entities/index.js +26 -0
  64. package/dist/database/entities/like.entity.d.ts +10 -0
  65. package/dist/database/entities/like.entity.js +49 -0
  66. package/dist/database/entities/logs-audit.entity.d.ts +16 -0
  67. package/dist/database/entities/logs-audit.entity.js +72 -0
  68. package/dist/database/entities/logs-event.entity.d.ts +16 -0
  69. package/dist/database/entities/logs-event.entity.js +72 -0
  70. package/dist/database/entities/notification-recipient.entity.d.ts +19 -0
  71. package/dist/database/entities/notification-recipient.entity.js +74 -0
  72. package/dist/database/entities/notification.entity.d.ts +18 -0
  73. package/dist/database/entities/notification.entity.js +69 -0
  74. package/dist/database/entities/role.entity.d.ts +13 -0
  75. package/dist/database/entities/role.entity.js +54 -0
  76. package/dist/database/entities/roles.entity.d.ts +12 -0
  77. package/dist/database/entities/roles.entity.js +1 -0
  78. package/dist/decorators/auth.decorator.factory.d.ts +1 -1
  79. package/dist/decorators/auth.decorator.factory.js +23 -2
  80. package/dist/decorators/delete-columns.decorator.js +1 -33
  81. package/dist/decorators/patch-body.decorator.js +20 -12
  82. package/dist/decorators/soft-delete.decorator.js +1 -15
  83. package/dist/decorators/timestamps.decorator.js +5 -13
  84. package/dist/dto/file.dto.d.ts +18 -0
  85. package/dist/dto/file.dto.js +70 -0
  86. package/dist/dto/index.d.ts +2 -0
  87. package/dist/dto/index.js +2 -0
  88. package/dist/dto/response-uid.dto.d.ts +2 -0
  89. package/dist/dto/response-uid.dto.js +8 -0
  90. package/dist/dto/update-ids.dto.d.ts +6 -1
  91. package/dist/dto/update-ids.dto.js +24 -10
  92. package/dist/dto/update-sort.dto.d.ts +9 -0
  93. package/dist/dto/update-sort.dto.js +50 -0
  94. package/dist/enums.common.d.ts +23 -0
  95. package/dist/enums.common.js +28 -1
  96. package/dist/events/event-bus.module.d.ts +2 -0
  97. package/dist/events/event-bus.module.js +44 -0
  98. package/dist/events/index.d.ts +4 -0
  99. package/dist/events/index.js +20 -0
  100. package/dist/events/listeners/audit-event.listener.d.ts +9 -0
  101. package/dist/events/listeners/audit-event.listener.js +58 -0
  102. package/dist/events/listeners/index.d.ts +1 -0
  103. package/dist/events/listeners/index.js +17 -0
  104. package/dist/events/listeners/system-event.listener.d.ts +9 -0
  105. package/dist/events/listeners/system-event.listener.js +58 -0
  106. package/dist/events/services/event-logger.service.d.ts +5 -0
  107. package/dist/events/services/event-logger.service.js +34 -0
  108. package/dist/events/services/event-notification.service.d.ts +7 -0
  109. package/dist/events/services/event-notification.service.js +104 -0
  110. package/dist/events/services/event-storage.service.d.ts +11 -0
  111. package/dist/events/services/event-storage.service.js +79 -0
  112. package/dist/events/services/index.d.ts +4 -0
  113. package/dist/events/services/index.js +20 -0
  114. package/dist/events/services/token.service.d.ts +23 -0
  115. package/dist/events/services/token.service.js +88 -0
  116. package/dist/events/types/audit-events.type.d.ts +12 -0
  117. package/dist/events/types/audit-events.type.js +2 -0
  118. package/dist/events/types/index.d.ts +18 -0
  119. package/dist/events/types/index.js +17 -0
  120. package/dist/filters/http-exception.filter.d.ts +4 -0
  121. package/dist/filters/http-exception.filter.js +26 -4
  122. package/dist/guards/auth.guard.d.ts +3 -1
  123. package/dist/guards/auth.guard.js +33 -11
  124. package/dist/index.d.ts +20 -8
  125. package/dist/index.js +12 -0
  126. package/dist/library.module.d.ts +2 -0
  127. package/dist/library.module.js +20 -0
  128. package/dist/like/dto/create-like.dto.d.ts +7 -0
  129. package/dist/like/dto/create-like.dto.js +47 -0
  130. package/dist/like/dto/index.d.ts +2 -0
  131. package/dist/like/dto/index.js +18 -0
  132. package/dist/like/dto/response-like.dto.d.ts +19 -0
  133. package/dist/like/dto/response-like.dto.js +79 -0
  134. package/dist/like/index.d.ts +3 -0
  135. package/dist/like/index.js +19 -0
  136. package/dist/like/like.module.d.ts +2 -0
  137. package/dist/like/like.module.js +23 -0
  138. package/dist/like/like.service.d.ts +13 -0
  139. package/dist/like/like.service.js +155 -0
  140. package/dist/logger/index.d.ts +2 -0
  141. package/dist/logger/index.js +18 -0
  142. package/dist/logger/pino-options.d.ts +31 -0
  143. package/dist/logger/pino-options.js +77 -0
  144. package/dist/logger/pino-pretty-transport.d.ts +1 -0
  145. package/dist/logger/pino-pretty-transport.js +164 -0
  146. package/dist/modules/index.d.ts +1 -0
  147. package/dist/modules/index.js +1 -0
  148. package/dist/modules/redis.module.d.ts +9 -0
  149. package/dist/modules/redis.module.js +1 -0
  150. package/dist/notifications/index.d.ts +70 -0
  151. package/dist/notifications/index.js +18 -0
  152. package/dist/notifications/notification.module.d.ts +2 -0
  153. package/dist/notifications/notification.module.js +32 -0
  154. package/dist/notifications/services/email.service.d.ts +31 -0
  155. package/dist/notifications/services/email.service.js +69 -0
  156. package/dist/notifications/services/index.d.ts +7 -0
  157. package/dist/notifications/services/index.js +23 -0
  158. package/dist/notifications/services/kakao.service.d.ts +41 -0
  159. package/dist/notifications/services/kakao.service.js +94 -0
  160. package/dist/notifications/services/message-template.service.d.ts +15 -0
  161. package/dist/notifications/services/message-template.service.js +74 -0
  162. package/dist/notifications/services/notification-send.service.d.ts +30 -0
  163. package/dist/notifications/services/notification-send.service.js +146 -0
  164. package/dist/notifications/services/notification.service.d.ts +37 -0
  165. package/dist/notifications/services/notification.service.js +125 -0
  166. package/dist/notifications/services/slack.service.d.ts +11 -0
  167. package/dist/notifications/services/slack.service.js +53 -0
  168. package/dist/notifications/services/sms.service.d.ts +19 -0
  169. package/dist/notifications/services/sms.service.js +62 -0
  170. package/dist/redis/index.d.ts +2 -0
  171. package/dist/redis/index.js +18 -0
  172. package/dist/redis/redis-constraint.d.ts +1 -0
  173. package/dist/redis/redis-constraint.js +4 -0
  174. package/dist/redis/redis.module.d.ts +8 -0
  175. package/dist/redis/redis.module.js +62 -0
  176. package/dist/redis/redis.service.d.ts +12 -0
  177. package/dist/redis/redis.service.js +76 -0
  178. package/dist/role/dto/create-role.dto.d.ts +5 -0
  179. package/dist/role/dto/create-role.dto.js +41 -0
  180. package/dist/role/dto/index.d.ts +3 -0
  181. package/dist/role/dto/index.js +19 -0
  182. package/dist/role/dto/response-roles.dto.d.ts +15 -0
  183. package/dist/role/dto/response-roles.dto.js +62 -0
  184. package/dist/role/dto/update-role.dto.d.ts +6 -0
  185. package/dist/role/dto/update-role.dto.js +9 -0
  186. package/dist/role/index.d.ts +3 -0
  187. package/dist/role/index.js +19 -0
  188. package/dist/role/role.module.d.ts +2 -0
  189. package/dist/role/role.module.js +23 -0
  190. package/dist/role/role.service.d.ts +17 -0
  191. package/dist/role/role.service.js +144 -0
  192. package/dist/services/file.service.d.ts +55 -0
  193. package/dist/services/file.service.js +82 -0
  194. package/dist/services/index.d.ts +2 -0
  195. package/dist/services/index.js +18 -0
  196. package/dist/services/message-template.service.d.ts +15 -0
  197. package/dist/services/message-template.service.js +1 -0
  198. package/dist/services/permission-checker.service.d.ts +38 -0
  199. package/dist/services/permission-checker.service.js +65 -0
  200. package/dist/shared/error-codes.d.ts +5 -0
  201. package/dist/shared/error-codes.js +9 -0
  202. package/dist/utils/common.utils.d.ts +2 -0
  203. package/dist/utils/common.utils.js +11 -1
  204. package/dist/utils/index.d.ts +1 -0
  205. package/dist/utils/index.js +1 -0
  206. package/dist/utils/object-diff.d.ts +1 -0
  207. package/dist/utils/object-diff.js +33 -0
  208. package/package.json +61 -16
  209. package/eslint.config.js +0 -31
  210. package/tsconfig.build.json +0 -19
  211. package/tsconfig.json +0 -18
package/README.md ADDED
@@ -0,0 +1,31 @@
1
+ # comasoft-nestjs
2
+
3
+ - decorators
4
+ - dto
5
+ - guards
6
+ - passport
7
+ - utils
8
+ - common enums
9
+ - integrate swagger
10
+
11
+ ## build
12
+
13
+ `pnpm build`
14
+
15
+ # Usage
16
+
17
+ `pnpm add @comasoft/nestjs`
18
+
19
+ # TODO
20
+
21
+ - fix peer dependency
22
+
23
+ ````└─┬ @comasoft/nestjs 0.0.97
24
+ ├── ✕ unmet peer @nestjs/common@10.4.15: found 10.4.17
25
+ ├── ✕ unmet peer @nestjs/core@10.4.15: found 10.4.17
26
+ ├── ✕ unmet peer @nestjs/swagger@8.1.0: found 8.1.1
27
+ └── ✕ unmet peer class-validator@0.14.1: found 0.14.2```
28
+
29
+ ````
30
+
31
+ terser `find ./dist -name "*.js" -exec pnpm terser {} --compress --mangle --keep-fnames --module -o {} \;`
@@ -0,0 +1,17 @@
1
+ import { ConfigService } from '@nestjs/config';
2
+ import { CreateS3PresignedBaseDto, ResponseS3PresignedDto } from './dto';
3
+ import { PresignedPostResult } from './types/s3.interface';
4
+ import { FileService } from '../services';
5
+ import { File } from '../database/entities';
6
+ export declare class S3Service {
7
+ private configService;
8
+ private fileService;
9
+ private readonly s3;
10
+ private readonly config;
11
+ constructor(configService: ConfigService, fileService: FileService);
12
+ private generateFileKey;
13
+ getPresigned(user_id: number, body: CreateS3PresignedBaseDto): Promise<ResponseS3PresignedDto>;
14
+ presignedPost(fileKey: string, fileType: string): Promise<PresignedPostResult>;
15
+ deleteObjectsByKeys(fileKeys: string[]): Promise<void>;
16
+ getFileKey(file: File): string;
17
+ }
@@ -0,0 +1,158 @@
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 __param = (this && this.__param) || function (paramIndex, decorator) {
12
+ return function (target, key) { decorator(target, key, paramIndex); }
13
+ };
14
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
15
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
16
+ return new (P || (P = Promise))(function (resolve, reject) {
17
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
18
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
19
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
20
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
21
+ });
22
+ };
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.S3Service = void 0;
25
+ const client_s3_1 = require("@aws-sdk/client-s3");
26
+ const s3_presigned_post_1 = require("@aws-sdk/s3-presigned-post");
27
+ const common_1 = require("@nestjs/common");
28
+ const config_1 = require("@nestjs/config");
29
+ const class_transformer_1 = require("class-transformer");
30
+ const nanoid_1 = require("nanoid");
31
+ const storage_constant_1 = require("./constants/storage.constant");
32
+ const dto_1 = require("./dto");
33
+ const services_1 = require("../services");
34
+ let S3Service = class S3Service {
35
+ constructor(configService, fileService) {
36
+ this.configService = configService;
37
+ this.fileService = fileService;
38
+ this.config = {
39
+ region: this.configService.get('AWS_REGION'),
40
+ credentials: {
41
+ accessKeyId: this.configService.get('AWS_ACCESS_KEY_ID'),
42
+ secretAccessKey: this.configService.get('AWS_SECRET_ACCESS_KEY'),
43
+ },
44
+ bucket: this.configService.get('AWS_BUCKET_NAME'),
45
+ cdnUrl: this.configService.get('CDN_URL'),
46
+ };
47
+ this.s3 = new client_s3_1.S3({
48
+ region: this.config.region,
49
+ credentials: this.config.credentials,
50
+ });
51
+ }
52
+ generateFileKey(category, ext) {
53
+ const today = new Date();
54
+ const year = today.getFullYear().toString().slice(-2);
55
+ const month = String(today.getMonth() + 1).padStart(2, '0');
56
+ const day = String(today.getDate()).padStart(2, '0');
57
+ const fileName = `${(0, nanoid_1.nanoid)(8)}.${ext}`;
58
+ const path = `${year}${month}${day}`;
59
+ return {
60
+ category,
61
+ fileName,
62
+ path,
63
+ };
64
+ }
65
+ getPresigned(user_id, body) {
66
+ return __awaiter(this, void 0, void 0, function* () {
67
+ const { target, files, group_number } = body;
68
+ const presignedData = yield Promise.all(files.map((file) => __awaiter(this, void 0, void 0, function* () {
69
+ let ext;
70
+ if (file.mime_type.startsWith('image/')) {
71
+ ext = file.mime_type.split('/')[1];
72
+ if (ext === 'jpeg')
73
+ ext = 'jpg';
74
+ }
75
+ else {
76
+ ext = file.original_name.split('.').pop();
77
+ }
78
+ const { fileName, path } = this.generateFileKey(target, ext);
79
+ const fileKey = `uploads/${target}/${path}/${fileName}`;
80
+ const presigned = yield this.presignedPost(fileKey, file.mime_type);
81
+ return {
82
+ original_name: file.original_name,
83
+ file_name: fileName,
84
+ path,
85
+ mime_type: file.mime_type,
86
+ size: file.size,
87
+ meta: file.meta,
88
+ sort: file.sort,
89
+ presigned,
90
+ };
91
+ })));
92
+ const createdFiles = yield this.fileService.createPending({
93
+ target,
94
+ group_number,
95
+ user_id,
96
+ files: presignedData,
97
+ });
98
+ return (0, class_transformer_1.plainToClass)(dto_1.ResponseS3PresignedDto, {
99
+ target,
100
+ items: presignedData.map((file) => {
101
+ var _a;
102
+ return (Object.assign(Object.assign({}, file), { id: (_a = createdFiles.find((f) => f.file_name === file.file_name)) === null || _a === void 0 ? void 0 : _a.id }));
103
+ }),
104
+ });
105
+ });
106
+ }
107
+ presignedPost(fileKey, fileType) {
108
+ return __awaiter(this, void 0, void 0, function* () {
109
+ try {
110
+ const { url, fields } = yield (0, s3_presigned_post_1.createPresignedPost)(this.s3, {
111
+ Bucket: this.config.bucket,
112
+ Key: fileKey,
113
+ Conditions: [
114
+ ['content-length-range', 0, storage_constant_1.MAX_FILE_SIZE],
115
+ ['eq', '$Content-Type', fileType],
116
+ ],
117
+ Fields: {
118
+ 'Content-Type': fileType,
119
+ },
120
+ Expires: 600,
121
+ });
122
+ return {
123
+ url,
124
+ fields,
125
+ key: fileKey,
126
+ };
127
+ }
128
+ catch (error) {
129
+ throw new common_1.InternalServerErrorException(error.message);
130
+ }
131
+ });
132
+ }
133
+ deleteObjectsByKeys(fileKeys) {
134
+ return __awaiter(this, void 0, void 0, function* () {
135
+ try {
136
+ const command = yield this.s3.deleteObjects({
137
+ Bucket: this.config.bucket,
138
+ Delete: {
139
+ Objects: fileKeys.map((key) => ({ Key: key })),
140
+ Quiet: false,
141
+ },
142
+ });
143
+ }
144
+ catch (error) {
145
+ }
146
+ });
147
+ }
148
+ getFileKey(file) {
149
+ return `uploads/${file.target}/${file.path}/${file.file_name}`;
150
+ }
151
+ };
152
+ exports.S3Service = S3Service;
153
+ exports.S3Service = S3Service = __decorate([
154
+ (0, common_1.Injectable)(),
155
+ __param(1, (0, common_1.Inject)((0, common_1.forwardRef)(() => services_1.FileService))),
156
+ __metadata("design:paramtypes", [config_1.ConfigService,
157
+ services_1.FileService])
158
+ ], S3Service);
@@ -0,0 +1,2 @@
1
+ export declare class AwsModule {
2
+ }
@@ -0,0 +1,25 @@
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.AwsModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const config_1 = require("@nestjs/config");
12
+ const services_1 = require("../services");
13
+ const aws_s3_service_1 = require("./aws-s3.service");
14
+ const aws_service_1 = require("./aws.service");
15
+ let AwsModule = class AwsModule {
16
+ };
17
+ exports.AwsModule = AwsModule;
18
+ exports.AwsModule = AwsModule = __decorate([
19
+ (0, common_1.Global)(),
20
+ (0, common_1.Module)({
21
+ imports: [config_1.ConfigModule],
22
+ providers: [aws_service_1.AwsService, aws_s3_service_1.S3Service, services_1.FileService],
23
+ exports: [aws_service_1.AwsService, aws_s3_service_1.S3Service, services_1.FileService],
24
+ })
25
+ ], AwsModule);
@@ -0,0 +1,3 @@
1
+ export declare class AwsService {
2
+ constructor();
3
+ }
@@ -0,0 +1,21 @@
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.AwsService = void 0;
13
+ const common_1 = require("@nestjs/common");
14
+ let AwsService = class AwsService {
15
+ constructor() { }
16
+ };
17
+ exports.AwsService = AwsService;
18
+ exports.AwsService = AwsService = __decorate([
19
+ (0, common_1.Injectable)(),
20
+ __metadata("design:paramtypes", [])
21
+ ], AwsService);
@@ -0,0 +1,4 @@
1
+ import { ImageProcessorConfig } from '../types/storage.interface';
2
+ export declare const IMAGE_PROCESSOR_CONFIG: ImageProcessorConfig;
3
+ export declare const ALLOWED_MIME_TYPES: string[];
4
+ export declare const MAX_FILE_SIZE: number;
@@ -0,0 +1,25 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.MAX_FILE_SIZE = exports.ALLOWED_MIME_TYPES = exports.IMAGE_PROCESSOR_CONFIG = void 0;
4
+ exports.IMAGE_PROCESSOR_CONFIG = {
5
+ sizes: {
6
+ small: {
7
+ width: 150,
8
+ height: 150,
9
+ quality: 80,
10
+ },
11
+ medium: {
12
+ width: 300,
13
+ height: 300,
14
+ quality: 85,
15
+ },
16
+ large: {
17
+ width: 800,
18
+ height: 800,
19
+ quality: 90,
20
+ },
21
+ },
22
+ outputFormat: 'webp',
23
+ };
24
+ exports.ALLOWED_MIME_TYPES = ['image/jpeg', 'image/png', 'image/webp'];
25
+ exports.MAX_FILE_SIZE = 10 * 1024 * 1024;
@@ -0,0 +1,12 @@
1
+ export declare class CreateS3PresignedFileDto {
2
+ original_name: string;
3
+ mime_type: string;
4
+ size: number;
5
+ meta?: Record<string, any>;
6
+ sort: number;
7
+ }
8
+ export declare class CreateS3PresignedBaseDto<T = string> {
9
+ target: T;
10
+ group_number: number;
11
+ files?: CreateS3PresignedFileDto[];
12
+ }
@@ -0,0 +1,78 @@
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.CreateS3PresignedBaseDto = exports.CreateS3PresignedFileDto = void 0;
13
+ const swagger_1 = require("@nestjs/swagger");
14
+ const class_transformer_1 = require("class-transformer");
15
+ const class_validator_1 = require("class-validator");
16
+ class CreateS3PresignedFileDto {
17
+ }
18
+ exports.CreateS3PresignedFileDto = CreateS3PresignedFileDto;
19
+ __decorate([
20
+ (0, swagger_1.ApiProperty)({ example: 'profile.jpg' }),
21
+ (0, class_validator_1.IsString)(),
22
+ __metadata("design:type", String)
23
+ ], CreateS3PresignedFileDto.prototype, "original_name", void 0);
24
+ __decorate([
25
+ (0, swagger_1.ApiProperty)({ example: 'image/jpeg' }),
26
+ (0, class_validator_1.IsString)(),
27
+ __metadata("design:type", String)
28
+ ], CreateS3PresignedFileDto.prototype, "mime_type", void 0);
29
+ __decorate([
30
+ (0, swagger_1.ApiProperty)({ example: 100 }),
31
+ (0, class_validator_1.IsNumber)(),
32
+ __metadata("design:type", Number)
33
+ ], CreateS3PresignedFileDto.prototype, "size", void 0);
34
+ __decorate([
35
+ (0, swagger_1.ApiProperty)({
36
+ example: {
37
+ width: 100,
38
+ height: 100,
39
+ },
40
+ }),
41
+ (0, class_validator_1.IsOptional)(),
42
+ (0, class_validator_1.IsObject)(),
43
+ __metadata("design:type", Object)
44
+ ], CreateS3PresignedFileDto.prototype, "meta", void 0);
45
+ __decorate([
46
+ (0, swagger_1.ApiProperty)({ example: 1 }),
47
+ (0, class_validator_1.IsNumber)(),
48
+ __metadata("design:type", Number)
49
+ ], CreateS3PresignedFileDto.prototype, "sort", void 0);
50
+ class CreateS3PresignedBaseDto {
51
+ }
52
+ exports.CreateS3PresignedBaseDto = CreateS3PresignedBaseDto;
53
+ __decorate([
54
+ (0, swagger_1.ApiProperty)({ example: 0 }),
55
+ (0, class_validator_1.IsNumber)(),
56
+ __metadata("design:type", Number)
57
+ ], CreateS3PresignedBaseDto.prototype, "group_number", void 0);
58
+ __decorate([
59
+ (0, swagger_1.ApiProperty)({
60
+ example: [
61
+ {
62
+ original_name: 'profile.jpg',
63
+ mime_type: 'image/jpeg',
64
+ size: 100,
65
+ meta: {
66
+ width: 100,
67
+ height: 100,
68
+ },
69
+ sort: 1,
70
+ },
71
+ ],
72
+ description: 'Files',
73
+ }),
74
+ (0, class_validator_1.IsArray)(),
75
+ (0, class_validator_1.ValidateNested)({ each: true }),
76
+ (0, class_transformer_1.Type)(() => CreateS3PresignedFileDto),
77
+ __metadata("design:type", Array)
78
+ ], CreateS3PresignedBaseDto.prototype, "files", void 0);
@@ -0,0 +1,2 @@
1
+ export * from './create-s3-presigned.dto';
2
+ export * from './response-s3-presigned.dto';
@@ -0,0 +1,18 @@
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("./create-s3-presigned.dto"), exports);
18
+ __exportStar(require("./response-s3-presigned.dto"), exports);
@@ -0,0 +1,30 @@
1
+ declare class S3PresignedFieldsDto {
2
+ acl: string;
3
+ 'Content-Type': string;
4
+ bucket: string;
5
+ 'X-Amz-Algorithm': string;
6
+ 'X-Amz-Credential': string;
7
+ 'X-Amz-Date': string;
8
+ key: string;
9
+ Policy: string;
10
+ 'X-Amz-Signature': string;
11
+ }
12
+ declare class S3PresignedDataDto {
13
+ url: string;
14
+ fields: S3PresignedFieldsDto;
15
+ }
16
+ export declare class S3PresignedDto {
17
+ id: number;
18
+ original_name: string;
19
+ file_name: string;
20
+ path: string;
21
+ mime_type: string;
22
+ size: number;
23
+ presigned: S3PresignedDataDto;
24
+ }
25
+ export declare class ResponseS3PresignedDto {
26
+ target: string;
27
+ group_number: number;
28
+ items: S3PresignedDto[];
29
+ }
30
+ export {};
@@ -0,0 +1,110 @@
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.ResponseS3PresignedDto = exports.S3PresignedDto = void 0;
13
+ const class_transformer_1 = require("class-transformer");
14
+ class S3PresignedFieldsDto {
15
+ }
16
+ __decorate([
17
+ (0, class_transformer_1.Expose)(),
18
+ __metadata("design:type", String)
19
+ ], S3PresignedFieldsDto.prototype, "acl", void 0);
20
+ __decorate([
21
+ (0, class_transformer_1.Expose)(),
22
+ __metadata("design:type", String)
23
+ ], S3PresignedFieldsDto.prototype, "Content-Type", void 0);
24
+ __decorate([
25
+ (0, class_transformer_1.Expose)(),
26
+ __metadata("design:type", String)
27
+ ], S3PresignedFieldsDto.prototype, "bucket", void 0);
28
+ __decorate([
29
+ (0, class_transformer_1.Expose)(),
30
+ __metadata("design:type", String)
31
+ ], S3PresignedFieldsDto.prototype, "X-Amz-Algorithm", void 0);
32
+ __decorate([
33
+ (0, class_transformer_1.Expose)(),
34
+ __metadata("design:type", String)
35
+ ], S3PresignedFieldsDto.prototype, "X-Amz-Credential", void 0);
36
+ __decorate([
37
+ (0, class_transformer_1.Expose)(),
38
+ __metadata("design:type", String)
39
+ ], S3PresignedFieldsDto.prototype, "X-Amz-Date", void 0);
40
+ __decorate([
41
+ (0, class_transformer_1.Expose)(),
42
+ __metadata("design:type", String)
43
+ ], S3PresignedFieldsDto.prototype, "key", void 0);
44
+ __decorate([
45
+ (0, class_transformer_1.Expose)(),
46
+ __metadata("design:type", String)
47
+ ], S3PresignedFieldsDto.prototype, "Policy", void 0);
48
+ __decorate([
49
+ (0, class_transformer_1.Expose)(),
50
+ __metadata("design:type", String)
51
+ ], S3PresignedFieldsDto.prototype, "X-Amz-Signature", void 0);
52
+ class S3PresignedDataDto {
53
+ }
54
+ __decorate([
55
+ (0, class_transformer_1.Expose)(),
56
+ __metadata("design:type", String)
57
+ ], S3PresignedDataDto.prototype, "url", void 0);
58
+ __decorate([
59
+ (0, class_transformer_1.Expose)(),
60
+ (0, class_transformer_1.Type)(() => S3PresignedFieldsDto),
61
+ __metadata("design:type", S3PresignedFieldsDto)
62
+ ], S3PresignedDataDto.prototype, "fields", void 0);
63
+ class S3PresignedDto {
64
+ }
65
+ exports.S3PresignedDto = S3PresignedDto;
66
+ __decorate([
67
+ (0, class_transformer_1.Expose)(),
68
+ __metadata("design:type", Number)
69
+ ], S3PresignedDto.prototype, "id", void 0);
70
+ __decorate([
71
+ (0, class_transformer_1.Expose)(),
72
+ __metadata("design:type", String)
73
+ ], S3PresignedDto.prototype, "original_name", void 0);
74
+ __decorate([
75
+ (0, class_transformer_1.Expose)(),
76
+ __metadata("design:type", String)
77
+ ], S3PresignedDto.prototype, "file_name", void 0);
78
+ __decorate([
79
+ (0, class_transformer_1.Expose)(),
80
+ __metadata("design:type", String)
81
+ ], S3PresignedDto.prototype, "path", void 0);
82
+ __decorate([
83
+ (0, class_transformer_1.Expose)(),
84
+ __metadata("design:type", String)
85
+ ], S3PresignedDto.prototype, "mime_type", void 0);
86
+ __decorate([
87
+ (0, class_transformer_1.Expose)(),
88
+ __metadata("design:type", Number)
89
+ ], S3PresignedDto.prototype, "size", void 0);
90
+ __decorate([
91
+ (0, class_transformer_1.Expose)(),
92
+ (0, class_transformer_1.Type)(() => S3PresignedDataDto),
93
+ __metadata("design:type", S3PresignedDataDto)
94
+ ], S3PresignedDto.prototype, "presigned", void 0);
95
+ class ResponseS3PresignedDto {
96
+ }
97
+ exports.ResponseS3PresignedDto = ResponseS3PresignedDto;
98
+ __decorate([
99
+ (0, class_transformer_1.Expose)(),
100
+ __metadata("design:type", String)
101
+ ], ResponseS3PresignedDto.prototype, "target", void 0);
102
+ __decorate([
103
+ (0, class_transformer_1.Expose)(),
104
+ __metadata("design:type", Number)
105
+ ], ResponseS3PresignedDto.prototype, "group_number", void 0);
106
+ __decorate([
107
+ (0, class_transformer_1.Expose)(),
108
+ (0, class_transformer_1.Type)(() => S3PresignedDto),
109
+ __metadata("design:type", Array)
110
+ ], ResponseS3PresignedDto.prototype, "items", void 0);
@@ -0,0 +1,4 @@
1
+ export * from './aws.module';
2
+ export * from './aws.service';
3
+ export * from './aws-s3.service';
4
+ export * from './dto';
@@ -0,0 +1,20 @@
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("./aws.module"), exports);
18
+ __exportStar(require("./aws.service"), exports);
19
+ __exportStar(require("./aws-s3.service"), exports);
20
+ __exportStar(require("./dto"), exports);
@@ -0,0 +1,14 @@
1
+ export interface PresignedPostResult {
2
+ url: string;
3
+ fields: Record<string, string>;
4
+ key: string;
5
+ }
6
+ export interface S3Config {
7
+ region: string;
8
+ credentials: {
9
+ accessKeyId: string;
10
+ secretAccessKey: string;
11
+ };
12
+ bucket: string;
13
+ cdnUrl: string;
14
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,19 @@
1
+ export type ImageSize = 'small' | 'medium' | 'large';
2
+ export interface ImageProcessorConfig {
3
+ sizes: {
4
+ [key in ImageSize]: {
5
+ width: number;
6
+ height: number;
7
+ quality: number;
8
+ };
9
+ };
10
+ outputFormat: 'webp';
11
+ }
12
+ export interface ProcessedImageResult {
13
+ key: string;
14
+ size: ImageSize;
15
+ width: number;
16
+ height: number;
17
+ format: string;
18
+ url: string;
19
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,2 @@
1
+ export declare class CategoryModule {
2
+ }
@@ -0,0 +1,23 @@
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.CategoryModule = void 0;
10
+ const common_1 = require("@nestjs/common");
11
+ const typeorm_1 = require("@nestjs/typeorm");
12
+ const entities_1 = require("../database/entities");
13
+ const category_service_1 = require("./category.service");
14
+ let CategoryModule = class CategoryModule {
15
+ };
16
+ exports.CategoryModule = CategoryModule;
17
+ exports.CategoryModule = CategoryModule = __decorate([
18
+ (0, common_1.Module)({
19
+ imports: [typeorm_1.TypeOrmModule.forFeature([entities_1.Category])],
20
+ providers: [category_service_1.CategoryService],
21
+ exports: [category_service_1.CategoryService],
22
+ })
23
+ ], CategoryModule);