# Kiến trúc & Quản lý Tài nguyên (Media Library)

Media Library được thiết kế để trở thành kho lưu trữ tập trung và xử lý tài nguyên hình ảnh/video dựa trên source code thực tế tại `backend/common/media/image_processor.py`.

## Cấu trúc Lưu trữ

Thay vì dựa vào Database truyền thống, Media Library sử dụng cấu trúc lưu trữ dựa trên file system tốc độ cao:
- **Thư mục chính:** `data/media/`
- **Thumbnails:** `data/media/thumbs/`
- **Metadata Index:** `data/media/index.json` (đóng vai trò như một In-memory & File-backed Database với bộ nhớ đệm cache lên tới 1000 bản ghi mới nhất).

## Phân loại Tài nguyên

Hệ thống hỗ trợ 2 nhóm tài nguyên chính (với giới hạn kích thước tải lên là **50MB**):

1. **Hình ảnh (Images):**
   - Hỗ trợ các định dạng MIME: `image/jpeg`, `image/jpg`, `image/png`, `image/webp`, `image/gif`.
   - Khi lưu, hệ thống tự động trích xuất các thông số chiều rộng, chiều cao và color mode (thông qua thư viện **Pillow**).

2. **Video (Videos):**
   - Hỗ trợ các định dạng MIME: `video/mp4`, `video/quicktime`, `video/webm`.
   - Trích xuất metadata (codec, độ phân giải, thời lượng) thông qua **ffprobe** và xuất ảnh đại diện thumbnail nhanh qua **ffmpeg**.

## Cấu trúc Asset Metadata

Mỗi tài nguyên khi được tải lên sẽ được sinh một UUID duy nhất và được theo dõi trong `index.json` với cấu trúc JSON chi tiết:

```json
{
  "id": "a1b2c3d4e5f6...",
  "filename": "original_name.jpg",
  "stored_name": "a1b2c3d4e5f6.jpg",
  "content_type": "image/jpeg",
  "size_bytes": 102400,
  "path": "/data/media/a1b2c3d4e5f6.jpg",
  "thumb_path": "/data/media/thumbs/a1b2c3d4e5f6.jpg",
  "url": "/api/media/{id}",
  "thumb_url": "/api/media/{id}/thumb",
  "uploaded_by": "user",
  "tags": ["social", "campaign2024"],
  "metadata": {
    "width": 1920,
    "height": 1080,
    "mode": "RGB"
  },
  "created_at": "2024-10-10T12:00:00.000Z"
}
```
