WP-MEDIA-URL-01 — Stable media URL + re-sign on read
Domain: D-MEDIA · D-SOCIAL · D-USER Surfaces: API + CON Status: IMP (2026-08-10) Symptom fixed: Ảnh social/avatar cần reload / clear cache mới hiện (signed URL hết hạn + FE không render
mediaUrls).
Root cause
- Upload private MinIO trả signed GET ~15 phút trong
publicUrl. - FE/BE lưu chữ ký đó vào
User.avatarUrl/SocialPost.mediaUrls→ hết hạn. SocialFeedScreen/SocialProfileScreenkhông rendermediaUrls(Reels thì có).
Fix
| Layer | Change |
|---|---|
MediaService.toResponse |
Thêm stableUrl (= buildPublicUrl); publicUrl vẫn signed khi private |
resolveDisplayUrl / resolveDisplayUrls |
Strip query · lookup MediaObject · presignGet |
toStableStorageUrl |
Chuẩn hoá trước khi ghi DB |
| Users avatar/cover | Lưu stable · profile trả URL fresh |
| Social create/feed/profile/search/comments | Strip khi create · re-sign khi serialize |
| CON | Feed + profile grid Image; CreatePost ưu tiên stableUrl |
Verify (local)
# API restart sau change
curl -s http://127.0.0.1:3000/api/v1/health
# Upload → response có stableUrl + publicUrl
# POST social post với stableUrl → GET feed mediaUrls còn mở được sau >15 phút
Note môi trường
Phone không resolve localhost / hostname Docker minio. Cần S3_PUBLIC_URL / endpoint reachable từ LAN (đã ghi trong OWNER env docs). WP này không đổi host — chỉ hết hạn chữ ký + render UI.