Skip to content

Commit cb8f746

Browse files
committed
[FEAT]#52 SNES 연동, sms 모듈 개발
1 parent a259e0f commit cb8f746

File tree

6 files changed

+177
-7
lines changed

6 files changed

+177
-7
lines changed

package-lock.json

+123
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

+1
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@
6464
"reflect-metadata": "^0.1.13",
6565
"rimraf": "^3.0.2",
6666
"rxjs": "^7.8.0",
67+
"twilio": "^4.11.0",
6768
"ulid": "^2.3.0",
6869
"winston": "^3.8.2",
6970
"winston-daily-rotate-file": "^4.7.1"

src/app.module.ts

+3-7
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,12 @@
11
import { TyphoonModule } from '@app/typhoon/typhoon.module';
22
import { WeatherModule } from '@app/weather/weather.module';
33
import { LoggerMiddleware } from '@common/middleware/logger.middleware';
4-
import {
5-
CacheModule,
6-
Logger,
7-
MiddlewareConsumer,
8-
Module,
9-
NestModule,
10-
} from '@nestjs/common';
4+
import { Logger, MiddlewareConsumer, Module, NestModule } from '@nestjs/common';
115
import { ConfigModule } from '@nestjs/config';
126
import { EventEmitterModule } from '@nestjs/event-emitter';
137
import { AppController } from './app.controller';
148
import { AppService } from './app.service';
9+
import { SmsModule } from './app/sms/sms.module';
1510
import { configOption } from './common/option/config.option';
1611
import { PrismaModule } from './prisma/prisma.module';
1712
@Module({
@@ -24,6 +19,7 @@ import { PrismaModule } from './prisma/prisma.module';
2419
PrismaModule,
2520
TyphoonModule,
2621
WeatherModule,
22+
SmsModule,
2723
],
2824
controllers: [AppController],
2925
providers: [AppService, Logger],

src/app/sms/provider/sms.service.ts

+29
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Injectable } from '@nestjs/common';
2+
import axios from 'axios';
3+
4+
@Injectable()
5+
export class SmsService {
6+
private headers = {
7+
'Content-Type': 'application/json;charset=UTF-8',
8+
charset: 'utf-8',
9+
'X-NCP-auth-key': process.env.SNES_ACCESS_KEY,
10+
'X-NCP-service-secret': process.env.SNES_SECRET_KEY,
11+
};
12+
13+
async sendSms(to: string, message: string) {
14+
const request = {
15+
type: 'SMS',
16+
countryCode: '82',
17+
from: process.env.NAVER_PHONE_NUMBER,
18+
to: [to],
19+
content: message,
20+
};
21+
22+
const response = await axios.post(
23+
`https://sens.apigw.ntruss.com/sms/v2/services/${process.env.SNES_SERVICE_ID}/messages`,
24+
request,
25+
{ headers: this.headers },
26+
);
27+
return response.status === 200;
28+
}
29+
}

src/app/sms/sms.controller.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Body, Controller, Post } from '@nestjs/common';
2+
import { SmsService } from './provider/sms.service';
3+
4+
@Controller('sms')
5+
export class SmsController {
6+
constructor(private readonly SmsService: SmsService) {}
7+
8+
@Post()
9+
async sendSms(@Body() body: { to: string; message: string }) {
10+
return await this.SmsService.sendSms(body.to, body.message);
11+
}
12+
}

src/app/sms/sms.module.ts

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { Module } from '@nestjs/common';
2+
import { SmsService } from './provider/sms.service';
3+
import { SmsController } from './sms.controller';
4+
5+
@Module({
6+
providers: [SmsService],
7+
controllers: [SmsController],
8+
})
9+
export class SmsModule {}

0 commit comments

Comments
 (0)