From d5562007f4d37a6ad7dceee872fba0a0713a6001 Mon Sep 17 00:00:00 2001 From: Angel Penchev Date: Tue, 9 Feb 2021 00:21:29 +0200 Subject: [PATCH] [Feat] Send auth SMS code usecase Created a usecase for sending verification SMS. References #61. --- .../usecases/send-authentication-sms-code.ts | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 server/services/user-service/src/usecases/send-authentication-sms-code.ts diff --git a/server/services/user-service/src/usecases/send-authentication-sms-code.ts b/server/services/user-service/src/usecases/send-authentication-sms-code.ts new file mode 100644 index 0000000..ae8bcfd --- /dev/null +++ b/server/services/user-service/src/usecases/send-authentication-sms-code.ts @@ -0,0 +1,61 @@ +import { + SharedQueue, + SMSApi, + SMSVerificationInstance, +} from '../../../core/@types/global'; +import config from '../../../core/config'; + + +/** + * Sends a authentication SMS code. + * + * @export + * @param {{ + * smsApi: SMSApi, + * sharedQueue: SharedQueue, + * }} { + * smsApi, + * sharedQueue, + * } - dependency injection + * @return {Function} + */ +export default function buildSendAuthenticationSmsCode({ + smsApi, + sharedQueue, +}: { + smsApi: SMSApi; + sharedQueue: SharedQueue; +}): Function { + return async function sendAuthenticationSmsCode(phoneNumber: string) { + // Internal parameter + let verificationInstance: SMSVerificationInstance; + + // Emitting an 'USER_INVALID_NUMBER' event in shared queue on invalid number + try { + // Sending verification code + verificationInstance = await smsApi.sendCode( + phoneNumber, + 'sms', + ); + } catch (e) { + sharedQueue.emit([ + config.inboundLoggerServiceQueue, + ], { + subject: 'USER_INVALID_NUMBER', + body: {phoneNumber: phoneNumber, error: e.message}, + }); + return; + } + + // Emitting an 'USER_SMS_SEND' event in shared queue on valid number + sharedQueue.emit([ + config.inboundDeliveryServiceQueue, + config.inboundLoggerServiceQueue, + ], { + subject: 'USER_SMS_SEND', + body: {phoneNumber: phoneNumber}, + }); + + return verificationInstance; + }; +}