WELIFE Docs Swagger Admin Web

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

  1. Upload private MinIO trả signed GET ~15 phút trong publicUrl.
  2. FE/BE lưu chữ ký đó vào User.avatarUrl / SocialPost.mediaUrls → hết hạn.
  3. SocialFeedScreen / SocialProfileScreen không render mediaUrls (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.