@comasoft/nestjs 0.1.3 → 0.1.8

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 (171) hide show
  1. package/README.md +2 -0
  2. package/dist/aws/aws-s3.service.js +1 -158
  3. package/dist/aws/aws.module.js +1 -25
  4. package/dist/aws/aws.service.js +1 -21
  5. package/dist/aws/constants/storage.constant.js +1 -25
  6. package/dist/aws/dto/create-s3-presigned.dto.js +1 -78
  7. package/dist/aws/dto/index.js +1 -18
  8. package/dist/aws/dto/response-s3-presigned.dto.js +1 -110
  9. package/dist/aws/index.js +1 -20
  10. package/dist/aws/types/s3.interface.js +1 -2
  11. package/dist/aws/types/storage.interface.js +1 -2
  12. package/dist/category/category.module.js +1 -23
  13. package/dist/category/category.service.d.ts +31 -8
  14. package/dist/category/category.service.js +1 -124
  15. package/dist/category/dto/create-category.dto.js +1 -34
  16. package/dist/category/dto/delete-category.dto.js +1 -6
  17. package/dist/category/dto/index.js +1 -21
  18. package/dist/category/dto/response-categories.dto.js +1 -52
  19. package/dist/category/dto/update-category-sort.dto.js +1 -33
  20. package/dist/category/dto/update-category.dto.js +1 -9
  21. package/dist/category/index.js +1 -19
  22. package/dist/comment/comment.module.js +1 -23
  23. package/dist/comment/comment.service.d.ts +12 -3
  24. package/dist/comment/comment.service.js +1 -240
  25. package/dist/comment/dto/create-comment.dto.d.ts +1 -0
  26. package/dist/comment/dto/create-comment.dto.js +1 -41
  27. package/dist/comment/dto/index.js +1 -19
  28. package/dist/comment/dto/response-comment.dto.d.ts +5 -2
  29. package/dist/comment/dto/response-comment.dto.js +1 -97
  30. package/dist/comment/dto/update-comment.dto.js +1 -22
  31. package/dist/comment/index.js +1 -19
  32. package/dist/database/entities/category.entity.js +1 -70
  33. package/dist/database/entities/comment.entity.d.ts +2 -0
  34. package/dist/database/entities/comment.entity.js +1 -77
  35. package/dist/database/entities/config.entity.js +1 -44
  36. package/dist/database/entities/file.entity.js +1 -91
  37. package/dist/database/entities/index.js +1 -26
  38. package/dist/database/entities/like.entity.d.ts +1 -0
  39. package/dist/database/entities/like.entity.js +1 -49
  40. package/dist/database/entities/logs-audit.entity.d.ts +3 -0
  41. package/dist/database/entities/logs-audit.entity.js +1 -72
  42. package/dist/database/entities/logs-event.entity.d.ts +2 -0
  43. package/dist/database/entities/logs-event.entity.js +1 -72
  44. package/dist/database/entities/notification-recipient.entity.d.ts +4 -0
  45. package/dist/database/entities/notification-recipient.entity.js +1 -74
  46. package/dist/database/entities/notification.entity.d.ts +4 -0
  47. package/dist/database/entities/notification.entity.js +1 -69
  48. package/dist/database/entities/role.entity.js +1 -54
  49. package/dist/decorators/api-custom-params.decorator.js +1 -35
  50. package/dist/decorators/auth.decorator.factory.js +1 -33
  51. package/dist/decorators/cookies.decorator.js +1 -9
  52. package/dist/decorators/custom-params.decorator.js +1 -16
  53. package/dist/decorators/index.d.ts +0 -2
  54. package/dist/decorators/index.js +1 -24
  55. package/dist/decorators/patch-body.decorator.js +1 -38
  56. package/dist/decorators/soft-delete.decorator.js +1 -10
  57. package/dist/decorators/timestamps.decorator.js +1 -23
  58. package/dist/decorators/user.decorator.js +1 -8
  59. package/dist/dto/auth-user-local.dto.js +1 -26
  60. package/dist/dto/auth-user-sso.dto.js +1 -21
  61. package/dist/dto/custom-params.dto.js +1 -46
  62. package/dist/dto/file.dto.js +1 -70
  63. package/dist/dto/index.js +1 -26
  64. package/dist/dto/jwt-user.dto.js +1 -6
  65. package/dist/dto/pagination.dto.js +1 -36
  66. package/dist/dto/remove-ids.dto.js +1 -23
  67. package/dist/dto/response-access-token.dto.js +1 -24
  68. package/dist/dto/response-id.dto.js +1 -35
  69. package/dist/dto/response-uid.dto.js +1 -35
  70. package/dist/dto/update-ids.dto.js +1 -45
  71. package/dist/dto/update-sort.dto.js +1 -50
  72. package/dist/enums.common.d.ts +2 -1
  73. package/dist/enums.common.js +1 -62
  74. package/dist/events/event-bus.module.js +1 -44
  75. package/dist/events/index.js +1 -20
  76. package/dist/events/listeners/audit-event.listener.js +1 -58
  77. package/dist/events/listeners/index.d.ts +1 -0
  78. package/dist/events/listeners/index.js +1 -17
  79. package/dist/events/listeners/notification-event.listener.d.ts +7 -0
  80. package/dist/events/listeners/notification-event.listener.js +1 -0
  81. package/dist/events/listeners/system-event.listener.js +1 -58
  82. package/dist/events/services/event-logger.service.js +1 -34
  83. package/dist/events/services/event-notification.service.js +1 -104
  84. package/dist/events/services/event-storage.service.js +1 -79
  85. package/dist/events/services/index.js +1 -20
  86. package/dist/events/services/token.service.d.ts +2 -4
  87. package/dist/events/services/token.service.js +1 -88
  88. package/dist/events/types/audit-events.type.d.ts +4 -1
  89. package/dist/events/types/audit-events.type.js +1 -2
  90. package/dist/events/types/index.js +1 -17
  91. package/dist/filters/http-exception.filter.d.ts +2 -2
  92. package/dist/filters/http-exception.filter.js +1 -78
  93. package/dist/filters/index.js +1 -17
  94. package/dist/guards/auth.guard.js +1 -60
  95. package/dist/guards/index.d.ts +3 -0
  96. package/dist/guards/index.js +1 -0
  97. package/dist/guards/jwt.guard.js +1 -17
  98. package/dist/guards/permission.guard.d.ts +10 -0
  99. package/dist/guards/permission.guard.js +1 -0
  100. package/dist/guards/role.guard.d.ts +8 -0
  101. package/dist/guards/role.guard.js +1 -0
  102. package/dist/index.d.ts +1 -0
  103. package/dist/index.js +1 -36
  104. package/dist/interceptors/error.interceptor.js +1 -26
  105. package/dist/interceptors/index.js +1 -18
  106. package/dist/interceptors/success.interceptor.d.ts +1 -1
  107. package/dist/interceptors/success.interceptor.js +1 -30
  108. package/dist/library.module.js +1 -20
  109. package/dist/like/dto/create-like.dto.js +1 -47
  110. package/dist/like/dto/index.js +1 -18
  111. package/dist/like/dto/response-like.dto.js +1 -79
  112. package/dist/like/index.js +1 -19
  113. package/dist/like/like.module.js +1 -23
  114. package/dist/like/like.service.d.ts +2 -2
  115. package/dist/like/like.service.js +1 -155
  116. package/dist/logger/index.js +1 -18
  117. package/dist/logger/pino-options.js +1 -77
  118. package/dist/logger/pino-pretty-transport.js +1 -155
  119. package/dist/notifications/index.d.ts +27 -4
  120. package/dist/notifications/index.js +1 -18
  121. package/dist/notifications/notification.module.js +1 -32
  122. package/dist/notifications/services/email.service.d.ts +5 -4
  123. package/dist/notifications/services/email.service.js +1 -69
  124. package/dist/notifications/services/index.d.ts +1 -0
  125. package/dist/notifications/services/index.js +1 -23
  126. package/dist/notifications/services/kakao.service.d.ts +17 -17
  127. package/dist/notifications/services/kakao.service.js +1 -94
  128. package/dist/notifications/services/message-template.service.d.ts +6 -2
  129. package/dist/notifications/services/message-template.service.js +1 -74
  130. package/dist/notifications/services/notification-send.service.d.ts +8 -12
  131. package/dist/notifications/services/notification-send.service.js +1 -146
  132. package/dist/notifications/services/notification.service.d.ts +3 -1
  133. package/dist/notifications/services/notification.service.js +1 -125
  134. package/dist/notifications/services/slack.service.d.ts +6 -1
  135. package/dist/notifications/services/slack.service.js +1 -53
  136. package/dist/notifications/services/sms.service.js +1 -62
  137. package/dist/notifications/services/web.service.d.ts +15 -0
  138. package/dist/notifications/services/web.service.js +1 -0
  139. package/dist/passport/google.strategy.js +1 -43
  140. package/dist/passport/index.js +1 -20
  141. package/dist/passport/jwt.strategy.js +1 -55
  142. package/dist/passport/kakao.strategy.js +1 -43
  143. package/dist/passport/local.strategy.js +1 -41
  144. package/dist/redis/index.js +1 -18
  145. package/dist/redis/redis-constraint.js +1 -4
  146. package/dist/redis/redis.module.js +1 -62
  147. package/dist/redis/redis.service.js +1 -76
  148. package/dist/role/dto/create-role.dto.js +1 -41
  149. package/dist/role/dto/index.js +1 -19
  150. package/dist/role/dto/response-roles.dto.js +1 -62
  151. package/dist/role/dto/update-role.dto.js +1 -9
  152. package/dist/role/index.js +1 -19
  153. package/dist/role/role.module.js +1 -23
  154. package/dist/role/role.service.d.ts +20 -6
  155. package/dist/role/role.service.js +1 -144
  156. package/dist/services/file.service.d.ts +4 -4
  157. package/dist/services/file.service.js +1 -82
  158. package/dist/services/index.js +1 -18
  159. package/dist/services/permission-checker.service.js +1 -65
  160. package/dist/setup-swagger.js +1 -32
  161. package/dist/shared/error-codes.js +1 -9
  162. package/dist/utils/common.utils.js +1 -42
  163. package/dist/utils/enum.utils.js +1 -8
  164. package/dist/utils/file.utils.d.ts +6 -0
  165. package/dist/utils/file.utils.js +1 -0
  166. package/dist/utils/index.d.ts +1 -0
  167. package/dist/utils/index.js +1 -21
  168. package/dist/utils/object-diff.js +1 -33
  169. package/dist/utils/pagination-qb.utils.js +1 -154
  170. package/dist/utils/pagination.utils.js +1 -32
  171. package/package.json +2 -2
@@ -1,18 +1 @@
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("./notification.module"), exports);
18
- __exportStar(require("./services"), exports);
1
+ var e=this&&this.__createBinding||(Object.create?function(e,t,r,i){void 0===i&&(i=r);var o=Object.getOwnPropertyDescriptor(t,r);o&&!("get"in o?!t.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return t[r]}}),Object.defineProperty(e,i,o)}:function(e,t,r,i){void 0===i&&(i=r),e[i]=t[r]}),t=this&&this.__exportStar||function(t,r){for(var i in t)"default"===i||Object.prototype.hasOwnProperty.call(r,i)||e(r,t,i)};Object.defineProperty(exports,"__esModule",{value:!0}),t(require("./notification.module"),exports),t(require("./services"),exports);
@@ -1,32 +1 @@
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.NotificationModule = 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 services_1 = require("./services");
14
- let NotificationModule = class NotificationModule {
15
- };
16
- exports.NotificationModule = NotificationModule;
17
- exports.NotificationModule = NotificationModule = __decorate([
18
- (0, common_1.Global)(),
19
- (0, common_1.Module)({
20
- imports: [typeorm_1.TypeOrmModule.forFeature([entities_1.Config, entities_1.Notification, entities_1.NotificationRecipient])],
21
- providers: [
22
- services_1.NotificationService,
23
- services_1.NotificationSendService,
24
- services_1.MessageTemplateService,
25
- services_1.EmailService,
26
- services_1.KakaoService,
27
- services_1.SmsService,
28
- services_1.SlackService,
29
- ],
30
- exports: [services_1.NotificationSendService, services_1.NotificationService],
31
- })
32
- ], NotificationModule);
1
+ var e=this&&this.__decorate||function(e,i,t,o){var r,c=arguments.length,n=c<3?i:null===o?o=Object.getOwnPropertyDescriptor(i,t):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)n=Reflect.decorate(e,i,t,o);else for(var a=e.length-1;a>=0;a--)(r=e[a])&&(n=(c<3?r(n):c>3?r(i,t,n):r(i,t))||n);return c>3&&n&&Object.defineProperty(i,t,n),n};Object.defineProperty(exports,"__esModule",{value:!0}),exports.NotificationModule=void 0;const i=require("@nestjs/common"),t=require("@nestjs/typeorm"),o=require("../database/entities"),r=require("./services");let c=class NotificationModule{};exports.NotificationModule=c,exports.NotificationModule=c=e([(0,i.Global)(),(0,i.Module)({imports:[t.TypeOrmModule.forFeature([o.Config,o.Notification,o.NotificationRecipient])],providers:[r.NotificationService,r.NotificationSendService,r.MessageTemplateService,r.EmailService,r.KakaoService,r.SmsService,r.SlackService,r.WebNotificationService],exports:[r.NotificationSendService,r.NotificationService]})],c);
@@ -1,6 +1,7 @@
1
1
  import { ConfigService } from '@nestjs/config';
2
2
  export declare class EmailService {
3
3
  private readonly configService;
4
+ private sesClient;
4
5
  constructor(configService: ConfigService);
5
6
  send(recipients: Array<{
6
7
  recipient: string;
@@ -12,9 +13,9 @@ export declare class EmailService {
12
13
  user_id: number;
13
14
  recipient: string;
14
15
  success: boolean;
15
- messageId: string;
16
+ content: string;
16
17
  status: string;
17
- }[]>;
18
+ }[] | import("@aws-sdk/client-ses").SendEmailCommandOutput>;
18
19
  sendAws(recipients: Array<{
19
20
  recipient: string;
20
21
  user_id: number;
@@ -25,7 +26,7 @@ export declare class EmailService {
25
26
  user_id: number;
26
27
  recipient: string;
27
28
  success: boolean;
28
- messageId: string;
29
+ content: string;
29
30
  status: string;
30
- }[]>;
31
+ }[] | import("@aws-sdk/client-ses").SendEmailCommandOutput>;
31
32
  }
@@ -1,69 +1 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
- return new (P || (P = Promise))(function (resolve, reject) {
14
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
- step((generator = generator.apply(thisArg, _arguments || [])).next());
18
- });
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.EmailService = void 0;
22
- const common_1 = require("@nestjs/common");
23
- const config_1 = require("@nestjs/config");
24
- let EmailService = class EmailService {
25
- constructor(configService) {
26
- this.configService = configService;
27
- }
28
- send(recipients) {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- const provider = this.configService.get('EMAIL_PROVIDER');
31
- if (!provider || !this.configService.get('EMAIL_FROM')) {
32
- throw new Error('EMAIL_PROVIDER or EMAIL_FROM is not set');
33
- }
34
- if (provider === 'aws') {
35
- return this.sendAws(recipients);
36
- }
37
- return [];
38
- });
39
- }
40
- sendAws(recipients) {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- console.log('📧 [EMAIL] AWS SES 배열 발송:', {
43
- count: recipients.length,
44
- from: this.configService.get('EMAIL_FROM'),
45
- provider: this.configService.get('EMAIL_PROVIDER'),
46
- recipients: recipients.map(r => ({
47
- user_id: r.user_id,
48
- recipient: r.recipient,
49
- subject: r.subject,
50
- text: r.text.substring(0, 50) + (r.text.length > 50 ? '...' : ''),
51
- variables: r.variables
52
- })),
53
- timestamp: new Date().toISOString()
54
- });
55
- return recipients.map(r => ({
56
- user_id: r.user_id,
57
- recipient: r.recipient,
58
- success: true,
59
- messageId: `aws-${Date.now()}-${r.user_id}`,
60
- status: 'sent'
61
- }));
62
- });
63
- }
64
- };
65
- exports.EmailService = EmailService;
66
- exports.EmailService = EmailService = __decorate([
67
- (0, common_1.Injectable)(),
68
- __metadata("design:paramtypes", [config_1.ConfigService])
69
- ], EmailService);
1
+ var e=this&&this.__decorate||function(e,t,i,n){var s,r=arguments.length,c=r<3?t:null===n?n=Object.getOwnPropertyDescriptor(t,i):n;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)c=Reflect.decorate(e,t,i,n);else for(var o=e.length-1;o>=0;o--)(s=e[o])&&(c=(r<3?s(c):r>3?s(t,i,c):s(t,i))||c);return r>3&&c&&Object.defineProperty(t,i,c),c},t=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},i=this&&this.__awaiter||function(e,t,i,n){return new(i||(i=Promise))(function(s,r){function fulfilled(e){try{step(n.next(e))}catch(e){r(e)}}function rejected(e){try{step(n.throw(e))}catch(e){r(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}(e.value).then(fulfilled,rejected)}step((n=n.apply(e,t||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.EmailService=void 0;const n=require("@aws-sdk/client-ses"),s=require("@nestjs/common"),r=require("@nestjs/config");let c=class EmailService{constructor(e){this.configService=e,"aws"===this.configService.get("EMAIL_PROVIDER")&&(this.sesClient=new n.SESClient({region:this.configService.get("AWS_REGION"),credentials:{accessKeyId:this.configService.get("AWS_ACCESS_KEY_ID"),secretAccessKey:this.configService.get("AWS_SECRET_ACCESS_KEY")}}))}send(e){return i(this,void 0,void 0,function*(){const t=this.configService.get("EMAIL_PROVIDER");if(!t||!this.configService.get("EMAIL_FROM"))throw new Error("EMAIL_PROVIDER or EMAIL_FROM is not set");return"aws"===t?this.sendAws(e):[]})}sendAws(e){return i(this,void 0,void 0,function*(){if("production"!==process.env.NODE_ENV)return e.map(e=>({user_id:e.user_id,recipient:e.recipient,success:!0,content:e.text,status:"sent"}));for(const t of e){const e=new n.SendEmailCommand({Source:this.configService.get("EMAIL_NOREPLY_SOURCE"),Destination:{ToAddresses:[t.recipient]},Message:{Subject:{Data:t.subject,Charset:"UTF-8"},Body:{Html:{Data:t.text,Charset:"UTF-8"}}}});return yield this.sesClient.send(e)}})}};exports.EmailService=c,exports.EmailService=c=e([(0,s.Injectable)(),t("design:paramtypes",[r.ConfigService])],c);
@@ -5,3 +5,4 @@ export * from './email.service';
5
5
  export * from './kakao.service';
6
6
  export * from './sms.service';
7
7
  export * from './slack.service';
8
+ export * from './web.service';
@@ -1,23 +1 @@
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("./notification.service"), exports);
18
- __exportStar(require("./notification-send.service"), exports);
19
- __exportStar(require("./message-template.service"), exports);
20
- __exportStar(require("./email.service"), exports);
21
- __exportStar(require("./kakao.service"), exports);
22
- __exportStar(require("./sms.service"), exports);
23
- __exportStar(require("./slack.service"), exports);
1
+ var e=this&&this.__createBinding||(Object.create?function(e,r,t,i){void 0===i&&(i=t);var o=Object.getOwnPropertyDescriptor(r,t);o&&!("get"in o?!r.__esModule:o.writable||o.configurable)||(o={enumerable:!0,get:function(){return r[t]}}),Object.defineProperty(e,i,o)}:function(e,r,t,i){void 0===i&&(i=t),e[i]=r[t]}),r=this&&this.__exportStar||function(r,t){for(var i in r)"default"===i||Object.prototype.hasOwnProperty.call(t,i)||e(t,r,i)};Object.defineProperty(exports,"__esModule",{value:!0}),r(require("./notification.service"),exports),r(require("./notification-send.service"),exports),r(require("./message-template.service"),exports),r(require("./email.service"),exports),r(require("./kakao.service"),exports),r(require("./sms.service"),exports),r(require("./slack.service"),exports),r(require("./web.service"),exports);
@@ -1,19 +1,16 @@
1
1
  import { ConfigService } from '@nestjs/config';
2
+ import { RedisService } from '../../redis';
2
3
  export declare class KakaoService {
3
4
  private readonly configService;
4
- constructor(configService: ConfigService);
5
+ private readonly redis;
6
+ constructor(configService: ConfigService, redis: RedisService);
5
7
  send(recipients: Array<{
6
8
  recipient: string;
7
9
  user_id: number;
10
+ sender_key: string;
8
11
  template_code: string;
9
- variables?: Record<string, any>;
10
- }>): Promise<{
11
- user_id: number;
12
- recipient: string;
13
- success: boolean;
14
- messageId: string;
15
- status: string;
16
- }[]>;
12
+ message: string;
13
+ }>): Promise<any[]>;
17
14
  sendAligo(recipients: Array<{
18
15
  recipient: string;
19
16
  user_id: number;
@@ -26,16 +23,19 @@ export declare class KakaoService {
26
23
  messageId: string;
27
24
  status: string;
28
25
  }[]>;
29
- sendPpurio(recipients: Array<{
26
+ private getPpurioToken;
27
+ sendPpurioMessage(recipient: {
30
28
  recipient: string;
31
29
  user_id: number;
30
+ sender_key: string;
32
31
  template_code: string;
33
- variables?: Record<string, any>;
34
- }>): Promise<{
35
- user_id: number;
32
+ message: string;
33
+ }): Promise<any>;
34
+ sendPpurio(recipients: Array<{
36
35
  recipient: string;
37
- success: boolean;
38
- messageId: string;
39
- status: string;
40
- }[]>;
36
+ user_id: number;
37
+ sender_key: string;
38
+ template_code: string;
39
+ message: string;
40
+ }>): Promise<any[]>;
41
41
  }
@@ -1,94 +1 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
- return new (P || (P = Promise))(function (resolve, reject) {
14
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
- step((generator = generator.apply(thisArg, _arguments || [])).next());
18
- });
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.KakaoService = void 0;
22
- const common_1 = require("@nestjs/common");
23
- const config_1 = require("@nestjs/config");
24
- let KakaoService = class KakaoService {
25
- constructor(configService) {
26
- this.configService = configService;
27
- }
28
- send(recipients) {
29
- return __awaiter(this, void 0, void 0, function* () {
30
- const provider = this.configService.get('KAKAO_PROVIDER');
31
- if (!provider || !this.configService.get('KAKAO_FROM')) {
32
- throw new Error('KAKAO_PROVIDER or KAKAO_FROM is not set');
33
- }
34
- if (provider === 'aligo') {
35
- return this.sendAligo(recipients);
36
- }
37
- else if (provider === 'ppurio') {
38
- return this.sendPpurio(recipients);
39
- }
40
- return [];
41
- });
42
- }
43
- sendAligo(recipients) {
44
- return __awaiter(this, void 0, void 0, function* () {
45
- console.log('📱 [KAKAO] Aligo 배열 발송:', {
46
- count: recipients.length,
47
- from: this.configService.get('KAKAO_FROM'),
48
- provider: 'aligo',
49
- recipients: recipients.map(r => ({
50
- user_id: r.user_id,
51
- recipient: r.recipient,
52
- template_code: r.template_code,
53
- variables: r.variables
54
- })),
55
- timestamp: new Date().toISOString()
56
- });
57
- return recipients.map(r => ({
58
- user_id: r.user_id,
59
- recipient: r.recipient,
60
- success: true,
61
- messageId: `aligo-${Date.now()}-${r.user_id}`,
62
- status: 'sent'
63
- }));
64
- });
65
- }
66
- sendPpurio(recipients) {
67
- return __awaiter(this, void 0, void 0, function* () {
68
- console.log('📱 [KAKAO] Ppurio 배열 발송:', {
69
- count: recipients.length,
70
- from: this.configService.get('KAKAO_FROM'),
71
- provider: 'ppurio',
72
- recipients: recipients.map(r => ({
73
- user_id: r.user_id,
74
- recipient: r.recipient,
75
- template_code: r.template_code,
76
- variables: r.variables
77
- })),
78
- timestamp: new Date().toISOString()
79
- });
80
- return recipients.map(r => ({
81
- user_id: r.user_id,
82
- recipient: r.recipient,
83
- success: true,
84
- messageId: `ppurio-${Date.now()}-${r.user_id}`,
85
- status: 'sent'
86
- }));
87
- });
88
- }
89
- };
90
- exports.KakaoService = KakaoService;
91
- exports.KakaoService = KakaoService = __decorate([
92
- (0, common_1.Injectable)(),
93
- __metadata("design:paramtypes", [config_1.ConfigService])
94
- ], KakaoService);
1
+ var e=this&&this.__decorate||function(e,t,i,r){var o,n=arguments.length,s=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)s=Reflect.decorate(e,t,i,r);else for(var c=e.length-1;c>=0;c--)(o=e[c])&&(s=(n<3?o(s):n>3?o(t,i,s):o(t,i))||s);return n>3&&s&&Object.defineProperty(t,i,s),s},t=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},i=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))(function(o,n){function fulfilled(e){try{step(r.next(e))}catch(e){n(e)}}function rejected(e){try{step(r.throw(e))}catch(e){n(e)}}function step(e){e.done?o(e.value):function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.KakaoService=void 0;const r=require("@nestjs/common"),o=require("@nestjs/config"),n=require("../../redis");let s=class KakaoService{constructor(e,t){this.configService=e,this.redis=t}send(e){return i(this,void 0,void 0,function*(){const t=this.configService.get("KAKAO_PROVIDER");if(!t||!this.configService.get("KAKAO_FROM"))throw new Error("KAKAO_PROVIDER or KAKAO_FROM is not set");return"aligo"===t?this.sendAligo(e):"ppurio"===t?this.sendPpurio(e):[]})}sendAligo(e){return i(this,void 0,void 0,function*(){return console.log("📱 [KAKAO] Aligo 배열 발송:",{count:e.length,from:this.configService.get("KAKAO_FROM"),provider:"aligo",recipients:e.map(e=>({user_id:e.user_id,recipient:e.recipient,template_code:e.template_code,variables:e.variables})),timestamp:(new Date).toISOString()}),e.map(e=>({user_id:e.user_id,recipient:e.recipient,success:!0,messageId:`aligo-${Date.now()}-${e.user_id}`,status:"sent"}))})}getPpurioToken(){return i(this,void 0,void 0,function*(){if(yield this.redis.get("ppurio_token"))return yield this.redis.get("ppurio_token");const e=this.configService.get("PPURIO_ACCOUNT"),t=this.configService.get("PPURIO_PASSWORD"),i=btoa(`${e}:${t}`),r=yield fetch("https://api.bizppurio.com/v1/token",{method:"POST",headers:{"Content-Type":"application/json; charset=utf-8",Authorization:`Basic ${i}`},body:JSON.stringify({grant_type:"client_credentials"})}),o=yield r.json();if(o.accesstoken)return yield this.redis.set("ppurio_token",o.accesstoken,86e3),yield this.redis.get("ppurio_token");throw new Error(`cannot get ppurio access token: ${JSON.stringify(o)}`)})}sendPpurioMessage(e){return i(this,void 0,void 0,function*(){const t=e.recipient.trim().replace(/-/g,"");if(t.startsWith("0100")&&t.length<=10)return;const i=yield this.getPpurioToken(),r=yield fetch("https://api.bizppurio.com/v3/message",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${i}`},body:JSON.stringify({account:this.configService.get("PPURIO_ACCOUNT"),refkey:this.configService.get("PPURIO_PASSWORD"),type:"at",from:this.configService.get("SMS_FROM"),to:e.recipient,content:{at:{senderkey:e.sender_key,templatecode:e.template_code,message:e.message}}})});return yield r.json()})}sendPpurio(e){return i(this,void 0,void 0,function*(){if("production"!==process.env.NODE_ENV)return console.log("📱 [KAKAO] Ppurio 발송:",{count:e.length,from:this.configService.get("KAKAO_FROM"),provider:"ppurio",recipients:e.map(e=>({user_id:e.user_id,recipient:e.recipient,sender_key:e.sender_key,template_code:e.template_code,message:e.message})),timestamp:(new Date).toISOString()}),e.map(e=>({user_id:e.user_id,recipient:e.recipient,success:!0,messageId:`ppurio-${Date.now()}-${e.user_id}`,message:e.message,status:"sent"}));return yield Promise.all(e.map(e=>this.sendPpurioMessage(e)))})}};exports.KakaoService=s,exports.KakaoService=s=e([(0,r.Injectable)(),t("design:paramtypes",[o.ConfigService,n.RedisService])],s);
@@ -3,13 +3,17 @@ import { Config } from '../../database/entities';
3
3
  export declare class MessageTemplateService {
4
4
  private configRepository;
5
5
  constructor(configRepository: Repository<Config>);
6
- getTemplate(type: 'email' | 'sms' | 'slack' | 'kakao', templateKey: string): Promise<any>;
6
+ getTemplate(type: 'web' | 'email' | 'sms' | 'slack' | 'kakao', templateKey: string): Promise<any>;
7
7
  getTemplates(): Promise<Record<string, any>>;
8
8
  updateTemplates(templates: any): Promise<void>;
9
9
  renderTemplate(template: {
10
+ title: string;
10
11
  content: string;
11
12
  variables: string[];
12
13
  required_vars: string[];
13
14
  default_vars: Record<string, any>;
14
- }, variables: Record<string, any>): string;
15
+ }, variables: Record<string, any>): {
16
+ title: string;
17
+ content: string;
18
+ };
15
19
  }
@@ -1,74 +1 @@
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.MessageTemplateService = void 0;
25
- const common_1 = require("@nestjs/common");
26
- const typeorm_1 = require("@nestjs/typeorm");
27
- const typeorm_2 = require("typeorm");
28
- const entities_1 = require("../../database/entities");
29
- let MessageTemplateService = class MessageTemplateService {
30
- constructor(configRepository) {
31
- this.configRepository = configRepository;
32
- }
33
- getTemplate(type, templateKey) {
34
- return __awaiter(this, void 0, void 0, function* () {
35
- var _a;
36
- const templates = yield this.getTemplates();
37
- return (_a = templates[type]) === null || _a === void 0 ? void 0 : _a[templateKey];
38
- });
39
- }
40
- getTemplates() {
41
- return __awaiter(this, void 0, void 0, function* () {
42
- const config = yield this.configRepository.findOne({
43
- where: { key: 'message_templates', is_active: true },
44
- });
45
- return (config === null || config === void 0 ? void 0 : config.value) || {};
46
- return {};
47
- });
48
- }
49
- updateTemplates(templates) {
50
- return __awaiter(this, void 0, void 0, function* () {
51
- yield this.configRepository.update({ key: 'message_templates' }, { value: templates, updated_at: new Date() });
52
- });
53
- }
54
- renderTemplate(template, variables) {
55
- const missing = template.required_vars.filter((v) => { var _a; return variables[v] === undefined && ((_a = template.default_vars) === null || _a === void 0 ? void 0 : _a[v]) === undefined; });
56
- if (missing.length > 0) {
57
- throw new Error(`Missing required variables: ${missing.join(', ')}`);
58
- }
59
- return template.content.replace(/\{\{(\w+)\}\}/g, (match, key) => {
60
- var _a;
61
- if (variables[key] !== undefined)
62
- return variables[key];
63
- if (((_a = template.default_vars) === null || _a === void 0 ? void 0 : _a[key]) !== undefined)
64
- return template.default_vars[key];
65
- return '';
66
- });
67
- }
68
- };
69
- exports.MessageTemplateService = MessageTemplateService;
70
- exports.MessageTemplateService = MessageTemplateService = __decorate([
71
- (0, common_1.Injectable)(),
72
- __param(0, (0, typeorm_1.InjectRepository)(entities_1.Config)),
73
- __metadata("design:paramtypes", [typeorm_2.Repository])
74
- ], MessageTemplateService);
1
+ var e=this&&this.__decorate||function(e,t,r,i){var n,o=arguments.length,a=o<3?t:null===i?i=Object.getOwnPropertyDescriptor(t,r):i;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,r,i);else for(var s=e.length-1;s>=0;s--)(n=e[s])&&(a=(o<3?n(a):o>3?n(t,r,a):n(t,r))||a);return o>3&&a&&Object.defineProperty(t,r,a),a},t=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},r=this&&this.__param||function(e,t){return function(r,i){t(r,i,e)}},i=this&&this.__awaiter||function(e,t,r,i){return new(r||(r=Promise))(function(n,o){function fulfilled(e){try{step(i.next(e))}catch(e){o(e)}}function rejected(e){try{step(i.throw(e))}catch(e){o(e)}}function step(e){e.done?n(e.value):function adopt(e){return e instanceof r?e:new r(function(t){t(e)})}(e.value).then(fulfilled,rejected)}step((i=i.apply(e,t||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.MessageTemplateService=void 0;const n=require("@nestjs/common"),o=require("@nestjs/typeorm"),a=require("typeorm"),s=require("../../database/entities");let l=class MessageTemplateService{constructor(e){this.configRepository=e}getTemplate(e,t){return i(this,void 0,void 0,function*(){var r;return null===(r=(yield this.getTemplates())[e])||void 0===r?void 0:r[t]})}getTemplates(){return i(this,void 0,void 0,function*(){const e=yield this.configRepository.findOne({where:{key:"message_templates",is_active:!0}});return(null==e?void 0:e.value)||{}})}updateTemplates(e){return i(this,void 0,void 0,function*(){yield this.configRepository.update({key:"message_templates"},{value:e,updated_at:new Date})})}renderTemplate(e,t){var r;const i=e.required_vars.filter(r=>{var i;return void 0===t[r]&&void 0===(null===(i=e.default_vars)||void 0===i?void 0:i[r])});if(i.length>0)throw new Error(`Missing required variables: ${i.join(", ")}`);return{title:null===(r=e.title)||void 0===r?void 0:r.replace(/\{\{(\w+)\}\}/g,(r,i)=>{var n;return void 0!==t[i]?t[i]:void 0!==(null===(n=e.default_vars)||void 0===n?void 0:n[i])?e.default_vars[i]:""}),content:e.content.replace(/\{\{(\w+)\}\}/g,(r,i)=>{var n;return void 0!==t[i]?t[i]:void 0!==(null===(n=e.default_vars)||void 0===n?void 0:n[i])?e.default_vars[i]:""})}}};exports.MessageTemplateService=l,exports.MessageTemplateService=l=e([(0,n.Injectable)(),r(0,(0,o.InjectRepository)(s.Config)),t("design:paramtypes",[a.Repository])],l);
@@ -1,28 +1,24 @@
1
+ import { DataSource } from 'typeorm';
1
2
  import { NotificationPayload } from '..';
2
3
  import { EmailService } from './email.service';
3
4
  import { KakaoService } from './kakao.service';
4
5
  import { MessageTemplateService } from './message-template.service';
5
6
  import { SlackService } from './slack.service';
6
7
  import { SmsService } from './sms.service';
8
+ import { WebNotificationService } from './web.service';
7
9
  export declare class NotificationSendService {
8
10
  private readonly emailService;
9
11
  private readonly smsService;
10
12
  private readonly kakaoService;
11
13
  private readonly slackService;
14
+ private readonly webNotificationService;
12
15
  private readonly messageTemplateService;
13
- constructor(emailService: EmailService, smsService: SmsService, kakaoService: KakaoService, slackService: SlackService, messageTemplateService: MessageTemplateService);
14
- send(payload: NotificationPayload): Promise<{
15
- user_id: number;
16
- recipient: string;
16
+ private readonly dataSource;
17
+ constructor(emailService: EmailService, smsService: SmsService, kakaoService: KakaoService, slackService: SlackService, webNotificationService: WebNotificationService, messageTemplateService: MessageTemplateService, dataSource: DataSource);
18
+ send(payload: NotificationPayload): Promise<any[] | import("@aws-sdk/client-ses").SendEmailCommandOutput | {
17
19
  success: boolean;
18
- messageId: string;
19
- status: string;
20
- }[] | {
21
- channel: string;
22
- success: boolean;
23
- messageId: string;
24
- status: string;
25
- }[]>;
20
+ }>;
21
+ private sendWeb;
26
22
  private sendEmail;
27
23
  private sendSms;
28
24
  private sendKakao;
@@ -1,146 +1 @@
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 __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
12
- function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
13
- return new (P || (P = Promise))(function (resolve, reject) {
14
- function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
15
- function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
16
- function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
17
- step((generator = generator.apply(thisArg, _arguments || [])).next());
18
- });
19
- };
20
- Object.defineProperty(exports, "__esModule", { value: true });
21
- exports.NotificationSendService = void 0;
22
- const common_1 = require("@nestjs/common");
23
- const email_service_1 = require("./email.service");
24
- const kakao_service_1 = require("./kakao.service");
25
- const message_template_service_1 = require("./message-template.service");
26
- const slack_service_1 = require("./slack.service");
27
- const sms_service_1 = require("./sms.service");
28
- let NotificationSendService = class NotificationSendService {
29
- constructor(emailService, smsService, kakaoService, slackService, messageTemplateService) {
30
- this.emailService = emailService;
31
- this.smsService = smsService;
32
- this.kakaoService = kakaoService;
33
- this.slackService = slackService;
34
- this.messageTemplateService = messageTemplateService;
35
- }
36
- send(payload) {
37
- return __awaiter(this, void 0, void 0, function* () {
38
- switch (payload.type) {
39
- case 'email':
40
- return this.sendEmail(payload);
41
- case 'sms':
42
- return this.sendSms(payload);
43
- case 'kakao':
44
- return this.sendKakao(payload);
45
- case 'slack':
46
- return this.sendSlack(payload);
47
- }
48
- });
49
- }
50
- sendEmail(payload) {
51
- return __awaiter(this, void 0, void 0, function* () {
52
- const emailRecipients = [];
53
- for (const recipient of payload.recipients) {
54
- let content;
55
- let subject;
56
- if (payload.template_key) {
57
- const template = yield this.messageTemplateService.getTemplate('email', payload.template_key);
58
- if (!template)
59
- throw new Error('Template not found');
60
- const mergedVariables = Object.assign(Object.assign({}, payload.variables), recipient.variables);
61
- content = this.messageTemplateService.renderTemplate(template, mergedVariables);
62
- subject = template.subject;
63
- }
64
- else {
65
- if (!payload.subject || !payload.body)
66
- throw new Error('subject, body is required');
67
- content = payload.body;
68
- subject = payload.subject;
69
- }
70
- emailRecipients.push({
71
- recipient: recipient.recipient,
72
- user_id: recipient.user_id,
73
- subject,
74
- text: content,
75
- variables: recipient.variables
76
- });
77
- }
78
- return yield this.emailService.send(emailRecipients);
79
- });
80
- }
81
- sendSms(payload) {
82
- return __awaiter(this, void 0, void 0, function* () {
83
- const smsRecipients = [];
84
- for (const recipient of payload.recipients) {
85
- let content;
86
- if (payload.template_key) {
87
- const template = yield this.messageTemplateService.getTemplate('sms', payload.template_key);
88
- if (!template)
89
- throw new Error('Template not found');
90
- const mergedVariables = Object.assign(Object.assign({}, payload.variables), recipient.variables);
91
- content = this.messageTemplateService.renderTemplate(template, mergedVariables);
92
- }
93
- else {
94
- if (!payload.message)
95
- throw new Error('message is required');
96
- content = payload.message;
97
- }
98
- smsRecipients.push({
99
- recipient: recipient.recipient,
100
- user_id: recipient.user_id,
101
- message: content,
102
- variables: recipient.variables
103
- });
104
- }
105
- return yield this.smsService.send(smsRecipients);
106
- });
107
- }
108
- sendKakao(payload) {
109
- return __awaiter(this, void 0, void 0, function* () {
110
- const kakaoRecipients = payload.recipients.map(recipient => ({
111
- recipient: recipient.recipient,
112
- user_id: recipient.user_id,
113
- template_code: payload.template_key,
114
- variables: Object.assign(Object.assign({}, payload.variables), recipient.variables)
115
- }));
116
- return yield this.kakaoService.send(kakaoRecipients);
117
- });
118
- }
119
- sendSlack(payload) {
120
- return __awaiter(this, void 0, void 0, function* () {
121
- let content;
122
- if (payload.template_key) {
123
- const template = yield this.messageTemplateService.getTemplate('slack', payload.template_key);
124
- if (!template)
125
- throw new Error('Template not found');
126
- content = this.messageTemplateService.renderTemplate(template, payload.variables || {});
127
- }
128
- else {
129
- if (!payload.message)
130
- throw new Error('message is required');
131
- content = payload.message;
132
- }
133
- const result = yield this.slackService.send(payload.channel, content);
134
- return [result];
135
- });
136
- }
137
- };
138
- exports.NotificationSendService = NotificationSendService;
139
- exports.NotificationSendService = NotificationSendService = __decorate([
140
- (0, common_1.Injectable)(),
141
- __metadata("design:paramtypes", [email_service_1.EmailService,
142
- sms_service_1.SmsService,
143
- kakao_service_1.KakaoService,
144
- slack_service_1.SlackService,
145
- message_template_service_1.MessageTemplateService])
146
- ], NotificationSendService);
1
+ var e=this&&this.__decorate||function(e,t,i,r){var s,n=arguments.length,a=n<3?t:null===r?r=Object.getOwnPropertyDescriptor(t,i):r;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)a=Reflect.decorate(e,t,i,r);else for(var c=e.length-1;c>=0;c--)(s=e[c])&&(a=(n<3?s(a):n>3?s(t,i,a):s(t,i))||a);return n>3&&a&&Object.defineProperty(t,i,a),a},t=this&&this.__metadata||function(e,t){if("object"==typeof Reflect&&"function"==typeof Reflect.metadata)return Reflect.metadata(e,t)},i=this&&this.__awaiter||function(e,t,i,r){return new(i||(i=Promise))(function(s,n){function fulfilled(e){try{step(r.next(e))}catch(e){n(e)}}function rejected(e){try{step(r.throw(e))}catch(e){n(e)}}function step(e){e.done?s(e.value):function adopt(e){return e instanceof i?e:new i(function(t){t(e)})}(e.value).then(fulfilled,rejected)}step((r=r.apply(e,t||[])).next())})};Object.defineProperty(exports,"__esModule",{value:!0}),exports.NotificationSendService=void 0;const r=require("@nestjs/common"),s=require("typeorm"),n=require("./email.service"),a=require("./kakao.service"),c=require("./message-template.service"),o=require("./slack.service"),l=require("./sms.service"),d=require("./web.service");let m=class NotificationSendService{constructor(e,t,i,r,s,n,a){this.emailService=e,this.smsService=t,this.kakaoService=i,this.slackService=r,this.webNotificationService=s,this.messageTemplateService=n,this.dataSource=a}send(e){return i(this,void 0,void 0,function*(){switch(e.type){case"web":return this.sendWeb(e);case"email":return this.sendEmail(e);case"sms":return this.sendSms(e);case"kakao":return this.sendKakao(e);case"slack":return this.sendSlack(e)}})}sendWeb(e){return i(this,void 0,void 0,function*(){const t=[];for(const i of e.recipients){let r,s;if(e.template_key){const t=yield this.messageTemplateService.getTemplate("web",e.template_key);if(!t)throw new Error("Template not found "+e.template_key);const n=Object.assign(Object.assign({},e.variables),i.variables);r=this.messageTemplateService.renderTemplate(t,n).title||e.title||"",s=this.messageTemplateService.renderTemplate(t,n).content}else{if(!e.title||!e.content)throw new Error("title, content is required");r=e.title,s=e.content}t.push({recipient:i.recipient,user_id:i.user_id,title:r,content:s,variables:i.variables,meta:e.meta})}return yield this.webNotificationService.send(Object.assign(Object.assign({},e),{recipients:t}))})}sendEmail(e){return i(this,void 0,void 0,function*(){const t=[];for(const i of e.recipients){let r,s;if(e.template_key){const t=yield this.messageTemplateService.getTemplate("email",e.template_key);if(!t)throw new Error("Template not found "+e.template_key);const n=Object.assign(Object.assign({},e.variables),i.variables);r=this.messageTemplateService.renderTemplate(t,n).content,s=t.subject}else{if(!e.subject||!e.body)throw new Error("subject, body is required");r=e.body,s=e.subject}t.push({recipient:i.recipient,user_id:i.user_id,subject:s,text:r,variables:i.variables})}return yield this.emailService.send(t)})}sendSms(e){return i(this,void 0,void 0,function*(){const t=[];for(const i of e.recipients){let r;if(e.template_key){const t=yield this.messageTemplateService.getTemplate("sms",e.template_key);if(!t)throw new Error("Template not found "+e.template_key);const s=Object.assign(Object.assign({},e.variables),i.variables);r=this.messageTemplateService.renderTemplate(t,s).content}else{if(!e.content)throw new Error("content is required");r=e.content}t.push({recipient:i.recipient,user_id:i.user_id,content:r,variables:i.variables})}return yield this.smsService.send(t)})}sendKakao(e){return i(this,void 0,void 0,function*(){const t=[];for(const i of e.recipients){let r;if(!e.template_key)throw new Error("template_key is required");const s=yield this.messageTemplateService.getTemplate("kakao",e.template_key);if(!s)throw new Error("Template not found "+e.template_key);const n=Object.assign(Object.assign({},e.variables),i.variables);r=this.messageTemplateService.renderTemplate(s,n).content,t.push({recipient:i.recipient,user_id:i.user_id,sender_key:s.sender_key,template_code:s.template_code,message:r})}return yield this.kakaoService.send(t)})}sendSlack(e){return i(this,void 0,void 0,function*(){let t;if(e.template_key){const i=yield this.messageTemplateService.getTemplate("slack",e.template_key);if(!i)throw new Error("Template not found "+e.template_key);t=this.messageTemplateService.renderTemplate(i,e.variables||{}).content}else{if(!e.content)throw new Error("content is required");t=e.content}return[yield this.slackService.send(e.channel,t)]})}};exports.NotificationSendService=m,exports.NotificationSendService=m=e([(0,r.Injectable)(),t("design:paramtypes",[n.EmailService,l.SmsService,a.KakaoService,o.SlackService,d.WebNotificationService,c.MessageTemplateService,s.DataSource])],m);