package service import ( "context" "git.gocasts.ir/ebhomengo/niki/domain/authorization/entity" richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error" "github.com/go-ozzo/ozzo-validation/v4" "regexp" ) type Authorization struct { roleRepo RoleRepo } func NewAuthorization(roleRepo RoleRepo) Authorization { return Authorization{roleRepo: roleRepo} } func (a Authorization) Store(ctx context.Context, req StoreRoleRequest) (entity.Role, error) { const op = "authorizationservice.Store" if err := a.validateStoreRole(req); err != nil { return entity.Role{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected) } role, err := a.roleRepo.Store(ctx, req) if err != nil { return entity.Role{}, richerror.New(op).WithErr(err).WithKind(richerror.KindUnexpected) } return entity.Role{ ID: role, Title_fa: req.TitleFa, Title: req.Title, }, nil } func (s Authorization) validateStoreRole(req StoreRoleRequest) error { return validation.ValidateStruct(&req, validation.Field(&req.Title, validation.Required, validation.Length(4, 0), validation.Match(regexp.MustCompile(`^[a-zA-Z\s]+$`))), validation.Field(&req.TitleFa, validation.Required, validation.Length(4, 0), validation.Match(regexp.MustCompile(`^[\x{0600}-\x{06FF}\s]+$`))), ) }