<aside>

</aside>

Persistence

<aside>

Bảng files


Cột Kiểu Mô tả
id UUID PK Khóa chính
original_name VARCHAR Tên gốc file (vd: avatar.png)
key VARCHAR S3 key (vd: uploads/2025/06/18/uuid.png)
mime_type VARCHAR Loại MIME
size INT Kích thước (bytes), cập nhật khi upload hoàn tất
status ENUM pending/completed/failed
uploaded_by UUID (FK) ID người upload (nếu có xác thực)
created_at TIMESTAMP Khởi tạo
updated_at TIMESTAMP Cập nhật lần cuối
</aside>

<aside>

Bảng file_usages


Cột Kiểu Mô tả
id UUID PK Khóa chính
file_id UUID FK Tham chiếu tới files.id
target_id UUID ID đối tượng được gắn (userId, instructorId, courseId, paymentId…)
usage_type ENUM Mục đích upload:
created_at TIMESTAMP Thời điểm gắn usage
TYPE usage_type AS ENUM (
  'avatar',
  'instructor_cv',
  'instructor_certificate',
  'course_thumbnail',
  'course_video',
  'course_banner',
  'course_material',
  'payment_receipt',
  'invoice'
);

</aside>

Request Manual Payment Proof Presign Upload Command

Complete Manual Payment Proof Upload Command

Delete Manual Payment Proof Command

List Manual Payment Proofs By Payment Query

Get Manual Payment Proof Query

Request Payment Receipt Presign Upload Command

Complete Payment Receipt Upload Command

Delete Payment Receipt Command

Request Invoice Presign Upload Command

Complete Invoice Upload Command

Delete Invoice Command

List Payment Receipts By Payment Query

List Invoices By Payment Query