:::info Phạm vi Thời gian: 60 ngày | Nền tảng: Web Application Xây dựng nền tảng web hoàn chỉnh cho quản trị viên và người dùng trên máy tính. :::

Tổng quan các bảng

#Tên bảngMô tả
1t_huca_usersNgười dùng trung tâm (CSV, Admin, Sinh viên)
2t_huca_user_rolesPhân vai trò người dùng
3t_huca_account_linksLiên kết tài khoản (Link lớp + Mã cá nhân)
4t_huca_liaison_committeesBan Liên lạc
5t_huca_committee_termsNhiệm kỳ Ban Liên lạc
6t_huca_committee_membersThành viên Ban Liên lạc
7t_huca_groupsNhóm thảo luận
8t_huca_group_membersThành viên nhóm
9t_huca_postsBài viết
10t_huca_commentsBình luận
11t_huca_reactionsTương tác (Like/React)
12t_huca_mediaTệp đính kèm / Media
13t_huca_article_categoriesDanh mục tin tức
14t_huca_articlesBài viết tin tức
15t_huca_eventsSự kiện
16t_huca_event_registrationsĐăng ký tham dự sự kiện
17t_huca_fundraising_campaignsChiến dịch gây quỹ
18t_huca_donationsKhoản đóng góp
19t_huca_paymentsThanh toán
20t_huca_conversationsCuộc hội thoại
21t_huca_conversation_membersThành viên hội thoại
22t_huca_messagesTin nhắn
23t_huca_notificationsThông báo
24t_huca_email_templatesMẫu email
25t_huca_email_logsLịch sử gửi email

1. Quản lý CSDL CSV & Hồ sơ số

t_huca_users

Bảng trung tâm của toàn hệ thống, lưu trữ tất cả người dùng.
CREATE TABLE t_huca_users (
    Id              BIGINT IDENTITY(1,1) PRIMARY KEY,
    -- Thông tin đăng ký bắt buộc (**)
    FullName        NVARCHAR(150) NOT NULL,     -- **Bắt buộc hiển thị công khai
    Email           NVARCHAR(255) NOT NULL,
    PhoneNumber     VARCHAR(20) NOT NULL,
    PasswordHash    NVARCHAR(500),
    -- Phân loại học vấn
    DegreeLevel     NVARCHAR(50),               -- DaiHoc, SauDaiHoc
    FacultyId       INT,                        -- FK -> t_huca_faculties
    AcademicYearId  INT,                        -- FK -> t_huca_academic_years
    ClassId         INT,                        -- FK -> t_huca_classes
    -- Thông tin cá nhân
    DateOfBirth     DATE,
    Gender          NVARCHAR(10),
    AvatarUrl       NVARCHAR(500),
    -- Nơi làm việc (*)
    Company         NVARCHAR(200),              -- *Bắt buộc nhập
    JobTitle        NVARCHAR(200),
    WorkField       NVARCHAR(200),
    -- Địa chỉ liên lạc (*)
    ProvinceId      INT,
    Address         NVARCHAR(500),
    -- Định danh số
    QrCode          NVARCHAR(500),              -- Mã QR = "Thẻ CSV số"
    IsVerified      BIT NOT NULL DEFAULT 0,
    IsApproved      BIT NOT NULL DEFAULT 0,
    IsEmailVerified BIT NOT NULL DEFAULT 0,
    IsPhoneVerified BIT NOT NULL DEFAULT 0,
    -- OAuth / SSO
    GoogleId        NVARCHAR(200),
    FacebookId      NVARCHAR(200),
    SsoId           NVARCHAR(200),              -- HUCE SSO
    -- Cài đặt hiển thị riêng tư
    ShowEmail       BIT NOT NULL DEFAULT 0,
    ShowPhone       BIT NOT NULL DEFAULT 0,
    ShowCompany     BIT NOT NULL DEFAULT 1,
    ShowAddress     BIT NOT NULL DEFAULT 0,
    ...
);
Luồng đăng ký:
Đăng ký (Email/Google/Facebook)
    → Xác thực Email/SĐT
    → Admin phê duyệt (IsApproved = 1)
    → Kích hoạt tài khoản
    → Cấp mã QR định danh (IsVerified = 1)
Chú thích trường bắt buộc (theo nghiệp vụ):
  • (**) — Bắt buộc nhập VÀ bắt buộc hiển thị công khai: FullName, ClassId
  • (*) — Bắt buộc nhập, có thể ẩn: PhoneNumber, Email, Company

Giải pháp số hóa danh sách lớp cũ sang hệ thống mới.
Admin tải Excel lên

Hệ thống sinh LinkToken + PersonalCode cho mỗi dòng

Ban cán sự gửi Link + Mã qua Zalo/Email

CSV nhập mã → liên kết với hồ sơ chuẩn (LinkedUserId)
TrườngMô tả
LinkTokenToken duy nhất cho link lớp
PersonalCodeMã cá nhân (gửi riêng từng người)
LinkedUserIdNULL = chưa liên kết, có giá trị = đã liên kết
ExpiresAtHạn sử dụng của link/mã

2. Ban Liên lạc

Cấu trúc phân cấp

t_huca_liaison_committees (BLL)
    ├── Type = "Khoa"    → FacultyId FK
    ├── Type = "Khóa"    → AcademicYearId FK
    └── Type = "KhuVuc"  → ProvinceId FK

t_huca_committee_terms (Nhiệm kỳ)

t_huca_committee_members (Thành viên)
    ├── Position = "TruongBan"
    ├── Position = "PhoBan"
    ├── Position = "ThuKy"
    └── Position = "UyVien"

t_huca_committee_members

Position    NVARCHAR(50) NOT NULL   -- TruongBan, PhoBan, ThuKy, UyVien
Ràng buộc UNIQUE(CommitteeId, TermId, UserId) đảm bảo mỗi người chỉ có 1 chức danh trong 1 nhiệm kỳ của 1 BLL.

3. Nhóm & Thảo luận

t_huca_groups

TrườngGiá trị hợp lệMô tả
TypeInterest, Professional, Faculty, ClassLoại nhóm
PrivacyPublic, PrivateChế độ nhóm
Quy tắc: Chỉ ADMIN hoặc BLL_LEADER được tạo nhóm (kiểm soát ở tầng API).

t_huca_posts

-- Bài viết có thể thuộc Nhóm HOẶC Ban Liên lạc
GroupId         INT,    -- NULL nếu không thuộc nhóm
CommitteeId     INT,    -- NULL nếu không thuộc BLL

t_huca_comments

Hỗ trợ bình luận lồng nhau (thread):
ParentId    BIGINT,     -- NULL = bình luận gốc, có giá trị = reply

t_huca_reactions

Mỗi người chỉ được react 1 lần cho 1 đối tượng:
CONSTRAINT UQ_reactions UNIQUE (UserId, TargetType, TargetId)
TargetType dùng kiểu polymorphic: Post hoặc Comment.

4. Sự kiện & Đăng ký

t_huca_events

TrườngMô tả
GeoFenceRadiusBán kính (mét) để kiểm tra điểm danh GPS (Giai đoạn 2)
EventQrCodeMã QR cho check-in tại sự kiện
Fee0 = miễn phí, > 0 = có phí
Vòng đời sự kiện:
Draft → Published → Ongoing → Completed
                 ↘ Cancelled

t_huca_event_registrations

Status  NVARCHAR(20):   Registered → Confirmed → Attended
                                   ↘ Cancelled
PaymentId là FK đến t_huca_payments, NULL nếu sự kiện miễn phí.

5. Gây quỹ & Thanh toán

t_huca_fundraising_campaigns

TargetAmount    DECIMAL(18,2) NOT NULL,     -- Mục tiêu
CurrentAmount   DECIMAL(18,2) DEFAULT 0,    -- Hiện tại (cập nhật khi có donation mới)
DonorCount      INT NOT NULL DEFAULT 0,     -- Số người đóng góp
CurrentAmountDonorCount được denormalize để hiển thị thanh tiến độ nhanh mà không cần SUM() mỗi lần.

t_huca_payments

Bảng thanh toán dùng chung cho nhiều loại giao dịch:
PaymentTypeReferenceTypeMô tả
EventFeeEventRegistrationPhí tham dự sự kiện
DonationDonationĐóng góp quỹ
CourseFeeProgramRegistrationHọc phí đào tạo
Cổng thanh toán hỗ trợ:
  • VNPay, ZaloPay, MoMo
  • Mã QR ngân hàng
  • Chuyển khoản thủ công

6. Nhắn tin & Thông báo

Cấu trúc nhắn tin

t_huca_conversations (Direct / Group)

t_huca_conversation_members (Thành viên + LastReadAt)

t_huca_messages (Text / Image / File)

t_huca_notifications

ChannelMô tả
InAppThông báo trong ứng dụng
EmailGửi email
PushPush notification (Giai đoạn 2)

t_huca_email_templates

Mẫu email với biến động (template variables):
<!-- Ví dụ template WELCOME -->
<h1>Xin chào {{FullName}}</h1>
<p>Chào mừng bạn đến với cộng đồng CSV HUCE!</p>

7. Tích hợp hệ thống HUCE

t_huca_admin_requests

Cổng một cửa cho các yêu cầu hành chính:
RequestTypeMô tả
TranscriptXin cấp bảng điểm
DegreeVerificationTra cứu/xác nhận văn bằng
IntroLetterXin giấy giới thiệu
Vòng đời yêu cầu:
Received → Processing → Completed
                      ↘ Rejected
Trường HuceReferenceId lưu mã tham chiếu từ hệ thống nội bộ HUCE để đối soát.