Skip to content

Storage

1. Tổng quan

Thuộc tínhGiá trị
StatusStable
Ownerplatform
Phụ thuộcBunS3Helper (@venizia/ignis-helpers/bun-s3), APP_ENV_S3_*
ControllersAssetController (/assets), BanksVNController (/assets/banks-vn)

Object storage chỉ dùng S3/Minio qua một BunS3Helper duy nhất bind khi component init. Không có backend local-disk (ADR-0001).

2. Model Entity

Các thao tác storage tạo một bản ghi MetaLink cho mỗi object được upload (xem Domain Model). Bản thân các object nằm trong S3, key bằng bucketName + objectName.

3. Vòng đời

TừSự kiệnĐếnGuards
*uploadStoredfolderPath ≤2 segment, mỗi segment isValidName
Storedget/downloadstreamedisValidPath(name, maxDepth:2)
StoreddeleteRemovedisValidPath; bản ghi MetaLink được deleteAll (async)

Tên object là một crypto.randomUUID().slice(0,8) mới cho mỗi lần upload — i18n.json literal là tên duy nhất được giữ. Upload không idempotent.

4. Thao tác

HandlerMục đíchInputsOutput
AssetController UPLOADLưu file vào S3 + tạo MetaLinkmultipart body, query principalType/principalId/variant/folderPath[{ objectName, link, metaLink }]
AssetController GET_OBJECT_BY_NAMEStream object inlinepath objectNamebinary stream
AssetController DOWNLOAD_OBJECT_BY_NAMEStream dạng attachmentpath objectNamebinary + Content-Disposition
AssetController GET_I18N / DOWNLOAD_I18NStream i18n.json từ APP_ENV_S3_BUCKETbinary stream
AssetController DELETE_OBJECTXóa object S3 + MetaLinkpath objectName{ success: true }
AssetController LIST_OBJECTSList object trong bucketquery prefix/recursive/maxKeys[{ name, size, lastModified, etag, prefix }]
BanksVNController GET_BANKS_VN_REGISTRYJSON registry ngân hàng VN (URL logo được tuyệt-đối-hóa)JSON map (cache 1h)
BanksVNController GET_BANK_VN_LOGOStream một PNG ngân hàng từ đĩapath filename (^[A-Za-z0-9]+\.png$)image/png (cache 7d immutable)

5. REST Endpoints

Schema đầy đủ render trực tiếp từ /doc/openapi.json của host. Nguồn: controllers/asset/definition.ts, controllers/banks-vn/definition.ts.

VerbPathAuthHandler
POST/assets/uploadBASIC / JWTAssetController UPLOAD
GET/assets/objectsBASIC / JWTLIST_OBJECTS
GET/assets/objects/i18npublicGET_I18N
GET/assets/download/i18npublicDOWNLOAD_I18N
GET/assets/objects/{objectName}publicGET_OBJECT_BY_NAME
GET/assets/download/{objectName}publicDOWNLOAD_OBJECT_BY_NAME
DELETE/assets/objects/{objectName}BASIC / JWTDELETE_OBJECT
GET/assets/banks-vnpublicGET_BANKS_VN_REGISTRY
GET/assets/banks-vn/{filename}publicGET_BANK_VN_LOGO

Path hiển thị tương đối với asset controller; prefix thực tế là base path của host (vd /v1/api/commerce/assets/upload).

6. Events

Inbound / Outbound: không có. Storage là REST + S3 đồng bộ (xem API Events).

7. Trang liên quan

Proprietary and Confidential. Unauthorized copying, distribution, or use of this software is strictly prohibited.