@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.
- package/README.md +2 -0
- package/dist/aws/aws-s3.service.js +1 -158
- package/dist/aws/aws.module.js +1 -25
- package/dist/aws/aws.service.js +1 -21
- package/dist/aws/constants/storage.constant.js +1 -25
- package/dist/aws/dto/create-s3-presigned.dto.js +1 -78
- package/dist/aws/dto/index.js +1 -18
- package/dist/aws/dto/response-s3-presigned.dto.js +1 -110
- package/dist/aws/index.js +1 -20
- package/dist/aws/types/s3.interface.js +1 -2
- package/dist/aws/types/storage.interface.js +1 -2
- package/dist/category/category.module.js +1 -23
- package/dist/category/category.service.d.ts +31 -8
- package/dist/category/category.service.js +1 -124
- package/dist/category/dto/create-category.dto.js +1 -34
- package/dist/category/dto/delete-category.dto.js +1 -6
- package/dist/category/dto/index.js +1 -21
- package/dist/category/dto/response-categories.dto.js +1 -52
- package/dist/category/dto/update-category-sort.dto.js +1 -33
- package/dist/category/dto/update-category.dto.js +1 -9
- package/dist/category/index.js +1 -19
- package/dist/comment/comment.module.js +1 -23
- package/dist/comment/comment.service.d.ts +12 -3
- package/dist/comment/comment.service.js +1 -240
- package/dist/comment/dto/create-comment.dto.d.ts +1 -0
- package/dist/comment/dto/create-comment.dto.js +1 -41
- package/dist/comment/dto/index.js +1 -19
- package/dist/comment/dto/response-comment.dto.d.ts +5 -2
- package/dist/comment/dto/response-comment.dto.js +1 -97
- package/dist/comment/dto/update-comment.dto.js +1 -22
- package/dist/comment/index.js +1 -19
- package/dist/database/entities/category.entity.js +1 -70
- package/dist/database/entities/comment.entity.d.ts +2 -0
- package/dist/database/entities/comment.entity.js +1 -77
- package/dist/database/entities/config.entity.js +1 -44
- package/dist/database/entities/file.entity.js +1 -91
- package/dist/database/entities/index.js +1 -26
- package/dist/database/entities/like.entity.d.ts +1 -0
- package/dist/database/entities/like.entity.js +1 -49
- package/dist/database/entities/logs-audit.entity.d.ts +3 -0
- package/dist/database/entities/logs-audit.entity.js +1 -72
- package/dist/database/entities/logs-event.entity.d.ts +2 -0
- package/dist/database/entities/logs-event.entity.js +1 -72
- package/dist/database/entities/notification-recipient.entity.d.ts +4 -0
- package/dist/database/entities/notification-recipient.entity.js +1 -74
- package/dist/database/entities/notification.entity.d.ts +4 -0
- package/dist/database/entities/notification.entity.js +1 -69
- package/dist/database/entities/role.entity.js +1 -54
- package/dist/decorators/api-custom-params.decorator.js +1 -35
- package/dist/decorators/auth.decorator.factory.js +1 -33
- package/dist/decorators/cookies.decorator.js +1 -9
- package/dist/decorators/custom-params.decorator.js +1 -16
- package/dist/decorators/index.d.ts +0 -2
- package/dist/decorators/index.js +1 -24
- package/dist/decorators/patch-body.decorator.js +1 -38
- package/dist/decorators/soft-delete.decorator.js +1 -10
- package/dist/decorators/timestamps.decorator.js +1 -23
- package/dist/decorators/user.decorator.js +1 -8
- package/dist/dto/auth-user-local.dto.js +1 -26
- package/dist/dto/auth-user-sso.dto.js +1 -21
- package/dist/dto/custom-params.dto.js +1 -46
- package/dist/dto/file.dto.js +1 -70
- package/dist/dto/index.js +1 -26
- package/dist/dto/jwt-user.dto.js +1 -6
- package/dist/dto/pagination.dto.js +1 -36
- package/dist/dto/remove-ids.dto.js +1 -23
- package/dist/dto/response-access-token.dto.js +1 -24
- package/dist/dto/response-id.dto.js +1 -35
- package/dist/dto/response-uid.dto.js +1 -35
- package/dist/dto/update-ids.dto.js +1 -45
- package/dist/dto/update-sort.dto.js +1 -50
- package/dist/enums.common.d.ts +2 -1
- package/dist/enums.common.js +1 -62
- package/dist/events/event-bus.module.js +1 -44
- package/dist/events/index.js +1 -20
- package/dist/events/listeners/audit-event.listener.js +1 -58
- package/dist/events/listeners/index.d.ts +1 -0
- package/dist/events/listeners/index.js +1 -17
- package/dist/events/listeners/notification-event.listener.d.ts +7 -0
- package/dist/events/listeners/notification-event.listener.js +1 -0
- package/dist/events/listeners/system-event.listener.js +1 -58
- package/dist/events/services/event-logger.service.js +1 -34
- package/dist/events/services/event-notification.service.js +1 -104
- package/dist/events/services/event-storage.service.js +1 -79
- package/dist/events/services/index.js +1 -20
- package/dist/events/services/token.service.d.ts +2 -4
- package/dist/events/services/token.service.js +1 -88
- package/dist/events/types/audit-events.type.d.ts +4 -1
- package/dist/events/types/audit-events.type.js +1 -2
- package/dist/events/types/index.js +1 -17
- package/dist/filters/http-exception.filter.d.ts +2 -2
- package/dist/filters/http-exception.filter.js +1 -78
- package/dist/filters/index.js +1 -17
- package/dist/guards/auth.guard.js +1 -60
- package/dist/guards/index.d.ts +3 -0
- package/dist/guards/index.js +1 -0
- package/dist/guards/jwt.guard.js +1 -17
- package/dist/guards/permission.guard.d.ts +10 -0
- package/dist/guards/permission.guard.js +1 -0
- package/dist/guards/role.guard.d.ts +8 -0
- package/dist/guards/role.guard.js +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -36
- package/dist/interceptors/error.interceptor.js +1 -26
- package/dist/interceptors/index.js +1 -18
- package/dist/interceptors/success.interceptor.d.ts +1 -1
- package/dist/interceptors/success.interceptor.js +1 -30
- package/dist/library.module.js +1 -20
- package/dist/like/dto/create-like.dto.js +1 -47
- package/dist/like/dto/index.js +1 -18
- package/dist/like/dto/response-like.dto.js +1 -79
- package/dist/like/index.js +1 -19
- package/dist/like/like.module.js +1 -23
- package/dist/like/like.service.d.ts +2 -2
- package/dist/like/like.service.js +1 -155
- package/dist/logger/index.js +1 -18
- package/dist/logger/pino-options.js +1 -77
- package/dist/logger/pino-pretty-transport.js +1 -155
- package/dist/notifications/index.d.ts +27 -4
- package/dist/notifications/index.js +1 -18
- package/dist/notifications/notification.module.js +1 -32
- package/dist/notifications/services/email.service.d.ts +5 -4
- package/dist/notifications/services/email.service.js +1 -69
- package/dist/notifications/services/index.d.ts +1 -0
- package/dist/notifications/services/index.js +1 -23
- package/dist/notifications/services/kakao.service.d.ts +17 -17
- package/dist/notifications/services/kakao.service.js +1 -94
- package/dist/notifications/services/message-template.service.d.ts +6 -2
- package/dist/notifications/services/message-template.service.js +1 -74
- package/dist/notifications/services/notification-send.service.d.ts +8 -12
- package/dist/notifications/services/notification-send.service.js +1 -146
- package/dist/notifications/services/notification.service.d.ts +3 -1
- package/dist/notifications/services/notification.service.js +1 -125
- package/dist/notifications/services/slack.service.d.ts +6 -1
- package/dist/notifications/services/slack.service.js +1 -53
- package/dist/notifications/services/sms.service.js +1 -62
- package/dist/notifications/services/web.service.d.ts +15 -0
- package/dist/notifications/services/web.service.js +1 -0
- package/dist/passport/google.strategy.js +1 -43
- package/dist/passport/index.js +1 -20
- package/dist/passport/jwt.strategy.js +1 -55
- package/dist/passport/kakao.strategy.js +1 -43
- package/dist/passport/local.strategy.js +1 -41
- package/dist/redis/index.js +1 -18
- package/dist/redis/redis-constraint.js +1 -4
- package/dist/redis/redis.module.js +1 -62
- package/dist/redis/redis.service.js +1 -76
- package/dist/role/dto/create-role.dto.js +1 -41
- package/dist/role/dto/index.js +1 -19
- package/dist/role/dto/response-roles.dto.js +1 -62
- package/dist/role/dto/update-role.dto.js +1 -9
- package/dist/role/index.js +1 -19
- package/dist/role/role.module.js +1 -23
- package/dist/role/role.service.d.ts +20 -6
- package/dist/role/role.service.js +1 -144
- package/dist/services/file.service.d.ts +4 -4
- package/dist/services/file.service.js +1 -82
- package/dist/services/index.js +1 -18
- package/dist/services/permission-checker.service.js +1 -65
- package/dist/setup-swagger.js +1 -32
- package/dist/shared/error-codes.js +1 -9
- package/dist/utils/common.utils.js +1 -42
- package/dist/utils/enum.utils.js +1 -8
- package/dist/utils/file.utils.d.ts +6 -0
- package/dist/utils/file.utils.js +1 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +1 -21
- package/dist/utils/object-diff.js +1 -33
- package/dist/utils/pagination-qb.utils.js +1 -154
- package/dist/utils/pagination.utils.js +1 -32
- package/package.json +2 -2
|
@@ -1,18 +1 @@
|
|
|
1
|
-
"
|
|
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
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
29
|
+
content: string;
|
|
29
30
|
status: string;
|
|
30
|
-
}[]>;
|
|
31
|
+
}[] | import("@aws-sdk/client-ses").SendEmailCommandOutput>;
|
|
31
32
|
}
|
|
@@ -1,69 +1 @@
|
|
|
1
|
-
"
|
|
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);
|
|
@@ -1,23 +1 @@
|
|
|
1
|
-
"
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
34
|
-
}
|
|
35
|
-
|
|
32
|
+
message: string;
|
|
33
|
+
}): Promise<any>;
|
|
34
|
+
sendPpurio(recipients: Array<{
|
|
36
35
|
recipient: string;
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
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
|
-
"
|
|
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>):
|
|
15
|
+
}, variables: Record<string, any>): {
|
|
16
|
+
title: string;
|
|
17
|
+
content: string;
|
|
18
|
+
};
|
|
15
19
|
}
|
|
@@ -1,74 +1 @@
|
|
|
1
|
-
"
|
|
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
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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
|
-
"
|
|
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);
|