package app import ( "strings" "unicode/utf8" "github.com/geo-platform/tenant-api/internal/shared/response" ) const ( kolDisplayNameMaxLen = 40 kolBioMaxLen = 500 kolAvatarURLPrefix = "/api/public/assets/" ) func validateKolDisplayName(raw string) (string, error) { v := strings.TrimSpace(raw) if v == "" { return "", response.ErrBadRequest(40001, "kol_profile_invalid_display_name", "display_name is required") } if utf8.RuneCountInString(v) > kolDisplayNameMaxLen { return "", response.ErrBadRequest(40001, "kol_profile_invalid_display_name", "display_name must be at most 40 characters") } return v, nil } func validateKolBio(raw *string) (*string, error) { if raw == nil { return nil, nil } v := strings.TrimSpace(*raw) if v == "" { return nil, nil } if utf8.RuneCountInString(v) > kolBioMaxLen { return nil, response.ErrBadRequest(40002, "kol_profile_invalid_bio", "bio must be at most 500 characters") } return &v, nil } func validateKolAvatarURL(raw *string) (*string, error) { if raw == nil { return nil, nil } v := strings.TrimSpace(*raw) if v == "" { return nil, nil } if !strings.HasPrefix(v, kolAvatarURLPrefix) { return nil, response.ErrBadRequest(40003, "kol_profile_invalid_avatar_url", "avatar_url must be an asset path served by this service") } return &v, nil }