forked from ebhomengo/niki
92 lines
2.5 KiB
Go
92 lines
2.5 KiB
Go
package cart
|
|
|
|
import (
|
|
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
|
|
validation "github.com/go-ozzo/ozzo-validation/v4"
|
|
)
|
|
|
|
const (
|
|
ErrValidationPositive = "must be positive"
|
|
ErrValidationInvalidInput = "invalid input"
|
|
)
|
|
|
|
type Validate struct{}
|
|
|
|
func NewValidate() Validate {
|
|
return Validate{}
|
|
}
|
|
|
|
func (v Validate) ValidateAddToCart(req AddToCartRequest) error {
|
|
const op = "shoppingbasketapp.service.AddToCart"
|
|
|
|
if err := validation.ValidateStruct(&req,
|
|
validation.Field(&req.UserID, validation.Required),
|
|
validation.Field(&req.ProductID, validation.Required),
|
|
validation.Field(&req.Price, validation.Required, validation.Min(int64(1)).Error(ErrValidationPositive)),
|
|
validation.Field(&req.Quantity, validation.Min(int(1)).Error(ErrValidationPositive)),
|
|
validation.Field(&req.Name, validation.Required)); err != nil {
|
|
|
|
fieldErr := make(map[string]interface{})
|
|
vErr, ok := err.(validation.Errors)
|
|
if ok {
|
|
for key, value := range vErr {
|
|
if value != nil {
|
|
fieldErr[key] = value.Error()
|
|
}
|
|
}
|
|
}
|
|
|
|
return richerror.New(op).WithMessage(ErrValidationInvalidInput).
|
|
WithMeta(fieldErr).WithErr(err).WithKind(richerror.KindInvalid)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (v Validate) ValidateRemoveFromCart(req RemoveFromCartRequest) error {
|
|
const op = "shoppingbasketapp.service.ValidateRemoveFromCart"
|
|
|
|
if err := validation.ValidateStruct(&req,
|
|
validation.Field(&req.UserID, validation.Required),
|
|
validation.Field(&req.ProductID, validation.Required)); err != nil {
|
|
|
|
fieldErrs := make(map[string]interface{})
|
|
vErr, ok := err.(validation.Errors)
|
|
if ok {
|
|
for key, value := range vErr {
|
|
if value != nil {
|
|
fieldErrs[key] = value.Error()
|
|
}
|
|
}
|
|
}
|
|
return richerror.New(op).WithMessage(ErrValidationInvalidInput).
|
|
WithKind(richerror.KindInvalid).WithMeta(fieldErrs).WithErr(err)
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (v Validate) ValidateUpdateQuantity(req UpdateQuantityRequest) error {
|
|
const op = "shoppingbasketapp.service.ValidateUpdateQuantity"
|
|
|
|
if err := validation.ValidateStruct(&req,
|
|
validation.Field(&req.UserID, validation.Required),
|
|
validation.Field(&req.ProductID, validation.Required),
|
|
validation.Field(&req.Quantity, validation.Required, validation.Min(int(1)))); err != nil {
|
|
|
|
fieldErrs := make(map[string]interface{})
|
|
vErr, ok := err.(validation.Errors)
|
|
if ok {
|
|
for key, value := range vErr {
|
|
if value != nil {
|
|
fieldErrs[key] = value.Error()
|
|
}
|
|
}
|
|
}
|
|
return richerror.New(op).WithMessage(ErrValidationInvalidInput).
|
|
WithKind(richerror.KindInvalid).WithMeta(fieldErrs).WithErr(err)
|
|
}
|
|
|
|
return nil
|
|
}
|