package utils import ( "fmt" "net/url" ) type Handler struct { domain string volume string } func NewHandler(domain, volume string) *Handler { return &Handler{ domain: domain, volume: volume, } } // MerchImageVolumePath // Returns a string like volume/merchImages/userUuid/merchUuid/filename.jpg func (h *Handler) MerchImageVolumePath(u, m string) string { return fmt.Sprintf("%s/merchImages/%s/%s", h.volume, u, m) } func (h *Handler) FilenameFromType(imgType string) string { switch imgType { case "thumbnail": return "thumbnail.jpg" case "full": return "full.jpg" default: return "unknown" } } func (h *Handler) MerchImageURL(u, m, t string) string { base, err := url.Parse(h.domain) if err != nil { panic(fmt.Errorf("invalid domain in MerchImageURL: %w", err)) } base.Path = fmt.Sprintf("/merchImages/%s/%s", url.PathEscape(u), url.PathEscape(m)) params := url.Values{} params.Set("type", t) base.RawQuery = params.Encode() return base.String() }