package handler import ( "net/http" "path/filepath" "github.com/gin-gonic/gin" "github.com/yuxingu/digital-psychology/apps/api/internal/avatar" ) // MediaHandler serves uploaded media files. type MediaHandler struct { AvatarDir string } // Register mounts public media routes. func (h *MediaHandler) Register(api *gin.RouterGroup) { api.GET("/media/avatars/:file", h.ServeAvatar) } // ServeAvatar streams a stored avatar image. func (h *MediaHandler) ServeAvatar(c *gin.Context) { dir := h.AvatarDir if dir == "" { dir = "data/avatars" } full, err := avatar.ResolveAbs(dir, c.Param("file")) if err != nil { c.Status(http.StatusNotFound) return } c.Header("Cache-Control", "public, max-age=86400") c.File(full) _ = filepath.Ext(full) }