Thiết kế Kỹ thuật

Module Thông báo Email
EMAIL
Phiên bản1.0
Hệ thốngHệ thống Xác thực
ModuleEMAIL - Thông báo Email
Cơ sở dữ liệuemail_db
Ngày tạo2026-08-05
Tác giảNam Nguyen
Trạng tháiNháp
SRS liên quanSRS Thông báo Email

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 Thông báo Email.

1.2 Tham chiếu SRS

Tài liệuPhiên bảnMô tả
SRS1.0SRS Thông báo Email
Đặc tả API1.0Đặc tả API Thông báo Email
Thiết kế CSDL1.0Thiết kế CSDL Thông báo Email

1.3 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-005Phần 3, 5
Phi chức năngNFR-001 - NFR-004Phần 6, 8

2. Kiến trúc

2.1 Tổng quan Kiến trúc

Tổng quan Kiến trúc
Hình 1: Sơ đồ Thành phần Thông báo Email

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

#Quyết địnhLý doGiải quyết
1Sử dụng RabbitMQ cho xử lý email bất đồng bộ Tách việc gửi email khỏi xử lý yêu cầu, cải thiện độ tin cậy NFR-001, NFR-002
2Sử dụng SendGrid/SMTP làm nhà cung cấp email Giao email đáng tin cậy với khả năng theo dõi NFR-004
3PostgreSQL cho email_logs Đảm bảo ACID cho lưu vết kiểm toán, nhất quán với các module khác DR-001

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

3.1 Sơ đồ Thành phần

Sơ đồ Thành phần
Hình 2: Các Thành phần Thông báo Email

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

Thành phầnTrách nhiệmGiải quyết
Email ConsumerTiêu thụ từ RabbitMQ, kích hoạt gửi emailFR-001, FR-002
Email ServiceBusiness logic xử lý emailFR-001, FR-005
Email ControllerNhận callback giao dịch từ nhà cung cấpFR-003
Log ProducerGửi sự kiện email đến module LOGFR-004

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

4.1 Thiết kế CSDL

Xem thêm: Thiết kế CSDL Thông báo Email

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 Email Xác minhChèn bản ghi log khi gửiemail_logs
FR-003: Theo dõi Giao EmailCập nhật trạng thái khi nhận callbackemail_logs
FR-004: Ghi log Sự kiện EmailLưu vết kiểm toán đầy đủ trong email_logsemail_logs

5. Thiết kế API

5.1 Ánh xạ Endpoint đến Yêu cầu

Phương thứcĐường dẫnMô tảGiải quyết
POST/api/webhooks/email/deliveredNhận callback giao dịchFR-003

6. Thiết kế Bảo mật

Yêu cầu SRSGiải pháp Thiết kếTriển khai
NFR-002Xác thực chữ ký webhookValidate chữ ký HMAC-SHA256
NFR-004Thử lại với exponential backoffTối đa 3 lần thử với độ trễ 1 phút, 5 phút, 15 phút

7. Tích hợp

7.1 Sơ đồ Sequence

Sơ đồ Sequence
Hình 3: Luồng Tích hợp Giao Email

7.2 Sự kiện Webhook

Sự kiệnHướngGiao thứcHàng đợiMô tả
verification.email.requested AUTH → EMAIL RabbitMQ verification.email Kích hoạt khi người dùng yêu cầu xác minh email
verification.email.resent AUTH → EMAIL RabbitMQ verification.email Kích hoạt khi người dùng gửi lại xác minh email
application.submitted RECR → EMAIL RabbitMQ recruitment.email Gửi email xác nhận khi ứng viên gửi hồ sơ
interview.scheduled RECR → EMAIL RabbitMQ recruitment.email Gửi lời mời phỏng vấn kèm chi tiết lịch
offer.sent RECR → EMAIL RabbitMQ recruitment.email Gửi thư đề nghị kèm vị trí và lương
verification.email.delivered EMAIL → AUTH Webhook - Xác nhận trạng thái giao email cho AUTH
email.event.logged EMAIL → LOG RabbitMQ log.events Ghi log sự kiện giao email vào Logger

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

Dịch vụGiao thứcMục đích
SendGrid/SMTPHTTPS/SMTPNhà cung cấp giao email

8. Xử lý Lỗi

HTTP StatusMô tả
400EMAIL_001Địa chỉ email không hợp lệ
400EMAIL_002Không tìm thấy mẫu email
502EMAIL_003Lỗi nhà cung cấp - giao email thất bại
429EMAIL_004Vượt quá giới hạn tốc độ
401EMAIL_005Chữ ký webhook không hợp lệ

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

Mã YC SRSYêu cầuPhần TDSQuyết định Thiết kế
FR-001 Gửi Email Xác minh 3.2 Ánh xạ Thành phần RabbitMQ consumer xử lý hàng đợi email
FR-002 Gửi lại Email Xác minh 3.2 Ánh xạ Thành phần Cùng hàng đợi, giới hạn tốc độ bởi AUTH
FR-003 Theo dõi Giao Email 5.1 Ánh xạ Endpoint Callback HTTP từ nhà cung cấp email
FR-004 Ghi log Sự kiện Email 3.2 Ánh xạ Thành phần Log Producer gửi đến module LOG
FR-005 Thử lại Email Thất bại 8. Xử lý Lỗi Trường retry_count theo dõi số lần thử, exponential backoff