package photos import ( "strings" "github.com/ultisuite/ulti-backend/internal/api/apivalidate" ) const maxJSONRequestBody = 32 << 10 type createAlbumRequest struct { Name string `json:"name"` Description string `json:"description"` AssetIDs []string `json:"asset_ids"` } type updateAlbumRequest struct { Name *string `json:"name"` Description *string `json:"description"` } type albumAssetsRequest struct { AssetIDs []string `json:"asset_ids"` } func validateAssetID(assetID string) *apivalidate.ValidationError { if strings.TrimSpace(assetID) == "" { return apivalidate.NewValidationError(apivalidate.FieldDetail{ Field: "asset_id", Message: "required", }) } return nil } func validateAlbumID(albumID string) *apivalidate.ValidationError { if strings.TrimSpace(albumID) == "" { return apivalidate.NewValidationError(apivalidate.FieldDetail{ Field: "album_id", Message: "required", }) } return nil } func validateAlbumName(field, name string, required bool) *apivalidate.FieldDetail { name = strings.TrimSpace(name) if name == "" { if required { return &apivalidate.FieldDetail{Field: field, Message: "required"} } return nil } if strings.Contains(name, "\n") || strings.Contains(name, "\r") { return &apivalidate.FieldDetail{Field: field, Message: "invalid"} } return nil } func validateAssetIDs(field string, assetIDs []string, required bool) []apivalidate.FieldDetail { if len(assetIDs) == 0 { if required { return []apivalidate.FieldDetail{{Field: field, Message: "required"}} } return nil } var details []apivalidate.FieldDetail for i, id := range assetIDs { if strings.TrimSpace(id) == "" { details = append(details, apivalidate.FieldDetail{ Field: field, Message: "invalid", }) if i == 0 { break } } } return details } func validateCreateAlbum(req *createAlbumRequest) *apivalidate.ValidationError { var details []apivalidate.FieldDetail if d := validateAlbumName("name", req.Name, true); d != nil { details = append(details, *d) } if d := validateAlbumName("description", req.Description, false); d != nil { details = append(details, *d) } details = append(details, validateAssetIDs("asset_ids", req.AssetIDs, false)...) if len(details) == 0 { return nil } return apivalidate.NewValidationError(details...) } func validateUpdateAlbum(req *updateAlbumRequest) *apivalidate.ValidationError { if req.Name == nil && req.Description == nil { return apivalidate.NewValidationError(apivalidate.FieldDetail{ Field: "body", Message: "required", }) } var details []apivalidate.FieldDetail if req.Name != nil { if d := validateAlbumName("name", *req.Name, true); d != nil { details = append(details, *d) } } if req.Description != nil { if d := validateAlbumName("description", *req.Description, false); d != nil { details = append(details, *d) } } if len(details) == 0 { return nil } return apivalidate.NewValidationError(details...) } func validateAlbumAssetsRequest(req *albumAssetsRequest) *apivalidate.ValidationError { details := validateAssetIDs("asset_ids", req.AssetIDs, true) if len(details) == 0 { return nil } return apivalidate.NewValidationError(details...) }