Thiết kế Kỹ thuật

Module Dịch vụ SMS
SMS
Phiên bản1.0
Hệ thốngHệ thống Xác thực
ModuleSMS - Dịch vụ SMS
Ngày tạo2026-08-05
Tác giảNam Nguyen
Trạng tháiNháp
SRS liên quanSRS Dịch vụ SMS

Mục lục

1. Tổng quan

1.1 Mục đích

Tài liệu này mô tả các quyết định thiết kế kỹ thuật cho module Dịch vụ SMS.

1.2 Yêu cầu được giải quyết

Danh mụcMã Yêu cầuPhần Thiết kế
Chức năngFR-001 - FR-004Phần 3, 5
Phi chức năngNFR-001 - NFR-004Phần 5

2. Kiến trúc

2.1 Kiểu Kiến trúc

Khía cạnhQuyết địnhGiải quyết
MẫuNestJS Worker (Driving bởi Sự kiện)NFR-001
Nhà cung cấp SMSTwilioFR-001
Hàng đợi Tin nhắnRabbitMQNFR-002
Cơ sở dữ liệuPostgreSQL (sms_db)NFR-004

2.2 Quyết định Thiết kế Chính

#Quyết địnhLý doGiải quyết
1Twilio cho SMS Nhà cung cấp đáng tin cậy, API tốt, hỗ trợ số Việt Nam FR-001, NFR-002
2RabbitMQ cho bất đồng bộ Tách việc gửi SMS khỏi API, thử lại khi thất bại NFR-001, NFR-002
3Cơ sở dữ liệu riêng sms_db Tách log kiểm toán khỏi dữ liệu xác thực NFR-004

3. Thiết kế Thành phần

3.1 Sơ đồ Thành phần

Sơ đồ Thành phần SMS
Hình 1: Các Thành phần Module SMS

3.2 Cấu trúc Module

src/
  sms/
    sms.module.ts
    sms.controller.ts      # Webhook receiver từ Twilio
    sms.service.ts         # Business logic
    sms.consumer.ts        # RabbitMQ consumer
    sms-producer.ts        # RabbitMQ producer
    dto/
  external/
    twilio.service.ts      # Twilio API wrapper

3.3 Ánh xạ Thành phần đến Yêu cầu

Thành phầnTrách nhiệmGiải quyết
SmsServiceGửi SMS, xác minh OTP, ghi log giao dịchFR-001, FR-002, FR-003
SmsControllerNhận webhook giao dịch từ TwilioFR-003
SmsConsumerXử lý tin nhắn từ hàng đợi RabbitMQNFR-001
TwilioServiceTích hợp API TwilioFR-001

4. Kiến trúc Dữ liệu

4.1 Cơ sở dữ liệu

Cơ sở dữ liệu: sms_db (PostgreSQL)

Xem thêm: Thiết kế Cơ sở dữ liệu

4.2 Giải quyết Yêu cầu Dữ liệu

Yêu cầu SRSGiải pháp Thiết kếBảng CSDL
FR-001 Gửi SMS OTPChèn log SMS, gửi đến RabbitMQsms_logs
FR-003 Ghi log Giao dịchCập nhật log SMS với trạng thái giaosms_logs

5. Luồng Tích hợp

5.1 Luồng Giao SMS

Sơ đồ Sequence Giao SMS
Hình 1: Sơ đồ Sequence Giao SMS

5.2 Sự kiện Webhook

Sự kiệnHướngGiao thứcMô tả
verification.requestedĐầu vào (từ AUTH)RabbitMQNhận yêu cầu gửi SMS từ module AUTH
verification.deliveredĐầu ra (đến AUTH)Webhook HTTPThông báo trạng thái giao SMS cho AUTH

5.3 Dịch vụ Bên ngoài

Dịch vụGiao thứcMục đích
TwilioREST APIGửi tin nhắn SMS
TwilioWebhookNhận callback trạng thái giao dịch

6. Tóm tắt Truy suất

Mã YC SRSYêu cầuPhần TDSQuyết định Thiết kế
FR-001Gửi SMS OTP2.2, 3.2Twilio + RabbitMQ bất đồng bộ
FR-002Xác minh OTP3.2SmsService.verifyOtp()
FR-003Ghi log Giao dịch SMS3.2, 5.1Bảng sms_logs + Twilio webhook
FR-004Truy vấn Trạng thái SMS3.2SmsService.getStatus()
NFR-001SMS < 3s2.1Bất đồng bộ qua RabbitMQ
NFR-00299% giao thành công2.2Twilio + cơ chế thử lại
NFR-003OTP hết hạn 5 phút3.2Trường expires_at trong sms_logs
NFR-004Lưu trữ 90 ngày4.1Chính sách lưu trữ trong sms_db