niki/domain/authorization/service/authorization.go

50 lines
1.3 KiB
Go

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]+$`))),
)
}