<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 Instructor Cv Presign Upload Command

Complete Instructor Cv Upload Command

Delete Instructor Cv Command

Request Instructor Certificate Presign Upload Command

Complete Instructor Certificate Upload Command

Delete Instructor Certificate Command

Get Instructor Cv Query

List Instructor Certificates Query