From 988177024ceebe73750ce48c40ea0a9ca6db75d6 Mon Sep 17 00:00:00 2001 From: "Julien Tant (aider)" Date: Tue, 25 Feb 2025 10:52:47 -0700 Subject: [PATCH] refactor: Move validateCustomProfileAttributesField to Validate method on CPAField struct --- .../channels/app/custom_profile_attributes.go | 38 ++++--------------- .../public/model/custom_profile_attributes.go | 32 ++++++++++++++++ 2 files changed, 39 insertions(+), 31 deletions(-) diff --git a/server/channels/app/custom_profile_attributes.go b/server/channels/app/custom_profile_attributes.go index 5138c88694a..01bf923cdf2 100644 --- a/server/channels/app/custom_profile_attributes.go +++ b/server/channels/app/custom_profile_attributes.go @@ -92,11 +92,16 @@ func (a *App) CreateCPAField(field *model.CPAField) (*model.PropertyField, *mode return nil, model.NewAppError("CreateCPAField", "app.custom_profile_attributes.limit_reached.app_error", nil, "", http.StatusUnprocessableEntity).Wrap(err) } - if appErr := validateCustomProfileAttributesField(field); appErr != nil { + if appErr := field.Validate(); appErr != nil { return nil, appErr } field.GroupID = groupID + + if appErr := field.Validate(); appErr != nil { + return nil, appErr + } + newField, err := a.Srv().propertyService.CreatePropertyField(field.ToPropertyField()) if err != nil { var appErr *model.AppError @@ -131,7 +136,7 @@ func (a *App) PatchCPAField(fieldID string, patch *model.PropertyFieldPatch) (*m return nil, model.NewAppError("UpdateCPAField", "app.custom_profile_attributes.property_field_conversion.app_error", nil, "", http.StatusInternalServerError).Wrap(err) } - if appErr := validateCustomProfileAttributesField(cpaField); appErr != nil { + if appErr := cpaField.Validate(); appErr != nil { return nil, appErr } @@ -274,32 +279,3 @@ func (a *App) PatchCPAValues(userID string, fieldValueMap map[string]json.RawMes return updatedValues, nil } -func validateCustomProfileAttributesField(field *model.CPAField) *model.AppError { - switch field.Type { - case model.PropertyFieldTypeText: - if valueType := strings.TrimSpace(field.Attrs.ValueType); valueType != "" { - if !model.IsKnownCustomProfilteAttributesValueType(valueType) { - return model.NewAppError("ValidateCPAField", "app.custom_profile_attributes.unknown_value_type.app_error", map[string]any{"ValueType": valueType}, "", http.StatusUnprocessableEntity) - } - field.Attrs.ValueType = valueType - } - - case model.PropertyFieldTypeSelect, model.PropertyFieldTypeMultiselect: - options := field.Attrs.Options - if err := options.IsValid(); err != nil { - return model.NewAppError("ValidateCPAField", "app.custom_profile_attributes.invalid_options.app_error", nil, "", http.StatusUnprocessableEntity).Wrap(err) - } - field.Attrs.Options = options - } - - visibility := model.CustomProfileAttributesVisibilityDefault - if visibilityAttr := strings.TrimSpace(field.Attrs.Visibility); visibilityAttr != "" { - if !model.IsKnownCustomProfilteAttributesVisibility(visibilityAttr) { - return model.NewAppError("ValidateCPAField", "app.custom_profile_attributes.unknown_visibility.app_error", map[string]any{"Visibility": visibilityAttr}, "", http.StatusUnprocessableEntity) - } - visibility = visibilityAttr - } - field.Attrs.Visibility = visibility - - return nil -} diff --git a/server/public/model/custom_profile_attributes.go b/server/public/model/custom_profile_attributes.go index 407dfa8f1ae..ae8bc254ef8 100644 --- a/server/public/model/custom_profile_attributes.go +++ b/server/public/model/custom_profile_attributes.go @@ -6,6 +6,8 @@ package model import ( "encoding/json" "errors" + "net/http" + "strings" ) const CustomProfileAttributesPropertyGroupName = "custom_profile_attributes" @@ -126,6 +128,36 @@ func (c *CPAField) ToPropertyField() *PropertyField { return &pf } +func (c *CPAField) Validate() *AppError { + switch c.Type { + case PropertyFieldTypeText: + if valueType := strings.TrimSpace(c.Attrs.ValueType); valueType != "" { + if !IsKnownCustomProfilteAttributesValueType(valueType) { + return NewAppError("ValidateCPAField", "app.custom_profile_attributes.unknown_value_type.app_error", map[string]any{"ValueType": valueType}, "", http.StatusUnprocessableEntity) + } + c.Attrs.ValueType = valueType + } + + case PropertyFieldTypeSelect, PropertyFieldTypeMultiselect: + options := c.Attrs.Options + if err := options.IsValid(); err != nil { + return NewAppError("ValidateCPAField", "app.custom_profile_attributes.invalid_options.app_error", nil, "", http.StatusUnprocessableEntity).Wrap(err) + } + c.Attrs.Options = options + } + + visibility := CustomProfileAttributesVisibilityDefault + if visibilityAttr := strings.TrimSpace(c.Attrs.Visibility); visibilityAttr != "" { + if !IsKnownCustomProfilteAttributesVisibility(visibilityAttr) { + return NewAppError("ValidateCPAField", "app.custom_profile_attributes.unknown_visibility.app_error", map[string]any{"Visibility": visibilityAttr}, "", http.StatusUnprocessableEntity) + } + visibility = visibilityAttr + } + c.Attrs.Visibility = visibility + + return nil +} + func NewCPAFieldFromPropertyField(pf *PropertyField) (*CPAField, error) { attrsJSON, err := json.Marshal(pf.Attrs) if err != nil {