feat(niki): add ozo package and add validation for kindbox and kindboxreq

This commit is contained in:
miaad shahrokhi 2023-12-21 16:30:31 +03:30
parent 359cfc3244
commit 1c96539af2
13 changed files with 351 additions and 3 deletions

View File

@ -1,7 +1,7 @@
package param package param
type KindBoxDeleteRequest struct { type KindBoxDeleteRequest struct {
kindBoxID uint KindBoxID uint
} }
type KindBoxDeleteResponse struct{} type KindBoxDeleteResponse struct{}

View File

@ -3,7 +3,7 @@ package param
import "git.gocasts.ir/ebhomengo/niki/entity" import "git.gocasts.ir/ebhomengo/niki/entity"
type KindBoxGetByIDRequest struct { type KindBoxGetByIDRequest struct {
kindBoxID uint KindBoxID uint
} }
type KindBoxGetByIDResponse struct { type KindBoxGetByIDResponse struct {

View File

@ -1,7 +1,7 @@
package param package param
type KindBoxReqDeleteRequest struct { type KindBoxReqDeleteRequest struct {
kindBoxID uint KindBoxReqID uint
} }
type KindBoxReqDeleteResponse struct{} type KindBoxReqDeleteResponse struct{}

View File

@ -3,4 +3,5 @@ package errmsg
const ( const (
ErrorMsgNotFound = "record not found" ErrorMsgNotFound = "record not found"
ErrorMsgSomethingWentWrong = "something went wrong" ErrorMsgSomethingWentWrong = "something went wrong"
ErrorMsgInvalidInput = "invalid input"
) )

View File

@ -0,0 +1,33 @@
package kindbox
import (
param "git.gocasts.ir/ebhomengo/niki/param/kind_box"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
func (v Validator) ValidateDeleteRequest(req param.KindBoxDeleteRequest) (map[string]string, error) {
const op = "kindbox.ValidateDeleteRequest"
if err := validation.Validate(&req.KindBoxID, validation.Required); err != nil {
fieldErrors := make(map[string]string)
errV, ok := err.(validation.Errors)
if ok {
for key, value := range errV {
if value != nil {
fieldErrors[key] = value.Error()
}
}
}
return fieldErrors, richerror.New(op).
WithMessage(errmsg.ErrorMsgInvalidInput).
WithKind(richerror.KindInvalid).
WithMeta(map[string]interface{}{"req": req}).
WithErr(err)
}
return nil, nil
}

View File

@ -0,0 +1,33 @@
package kindbox
import (
param "git.gocasts.ir/ebhomengo/niki/param/kind_box"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
func (v Validator) ValidateGetByIdRequest(req param.KindBoxGetByIDRequest) (map[string]string, error) {
const op = "kindbox.ValidateGetByIdRequest"
if err := validation.Validate(&req.KindBoxID, validation.Required); err != nil {
fieldErrors := make(map[string]string)
errV, ok := err.(validation.Errors)
if ok {
for key, value := range errV {
if value != nil {
fieldErrors[key] = value.Error()
}
}
}
return fieldErrors, richerror.New(op).
WithMessage(errmsg.ErrorMsgInvalidInput).
WithKind(richerror.KindInvalid).
WithMeta(map[string]interface{}{"req": req}).
WithErr(err)
}
return nil, nil
}

View File

@ -0,0 +1,43 @@
package kindbox
import (
param "git.gocasts.ir/ebhomengo/niki/param/kind_box"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
func (v Validator) ValidateUpdateRequest(req param.KindBoxUpdateRequest) (map[string]string, error) {
const op = "kindbox.ValidateUpdateRequest"
if err := validation.ValidateStruct(&req,
validation.Field(&req.KindBox.SerialNumber, validation.Required),
validation.Field(&req.KindBox.ReceiverId,
validation.Required,
validation.By(v.doesReceiverUserExist)),
validation.Field(&req.KindBox.SenderID,
validation.Required,
validation.By(v.doesSenderUserExist)),
); err != nil {
fieldErrors := make(map[string]string)
errV, ok := err.(validation.Errors)
if ok {
for key, value := range errV {
if value != nil {
fieldErrors[key] = value.Error()
}
}
}
return fieldErrors, richerror.New(op).
WithMessage(errmsg.ErrorMsgInvalidInput).
WithKind(richerror.KindInvalid).
WithMeta(map[string]interface{}{"req": req}).
WithErr(err)
}
return nil, nil
}

View File

@ -0,0 +1,40 @@
package kindbox
import (
"fmt"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
)
type Repository interface {
ReceiverUserExist(id int) (bool, error)
SenderUserExist(id int) (bool, error)
}
type Validator struct {
repo Repository
}
func New(repo Repository) Validator {
return Validator{repo: repo}
}
func (v Validator) doesReceiverUserExist(value interface{}) error {
receiverId := value.(int)
_, err := v.repo.ReceiverUserExist(receiverId)
if err != nil {
return fmt.Errorf(errmsg.ErrorMsgNotFound)
}
return nil
}
func (v Validator) doesSenderUserExist(value interface{}) error {
senderId := value.(int)
_, err := v.repo.SenderUserExist(senderId)
if err != nil {
return fmt.Errorf(errmsg.ErrorMsgNotFound)
}
return nil
}

View File

@ -0,0 +1,44 @@
package kindboxreq
import (
param "git.gocasts.ir/ebhomengo/niki/param/kind_box_req"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
func (v Validator) ValidateAddRequest(req param.KindBoxReqAddRequest) (map[string]string, error) {
const op = "kindboxreq.ValidateAddRequest"
if err := validation.ValidateStruct(&req,
validation.Field(&req.KindBoxReq.CountRequested, validation.Required, validation.Min(MinKindBoxReq), validation.Max(MaxKindBoxReq)),
validation.Field(&req.KindBoxReq.BenefactorID,
validation.Required,
validation.By(v.doesBeneFactorExist)),
validation.Field(&req.KindBoxReq.TypeID,
validation.Required,
validation.By(v.doesTypeExist)),
); err != nil {
fieldErrors := make(map[string]string)
errV, ok := err.(validation.Errors)
if ok {
for key, value := range errV {
if value != nil {
fieldErrors[key] = value.Error()
}
}
}
return fieldErrors, richerror.New(op).
WithMessage(errmsg.ErrorMsgInvalidInput).
WithKind(richerror.KindInvalid).
WithMeta(map[string]interface{}{"req": req}).
WithErr(err)
}
return nil, nil
}

View File

@ -0,0 +1,33 @@
package kindboxreq
import (
param "git.gocasts.ir/ebhomengo/niki/param/kind_box_req"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
func (v Validator) ValidateDeleteRequest(req param.KindBoxReqDeleteRequest) (map[string]string, error) {
const op = "kindboxreq.ValidateDeleteRequest"
if err := validation.Validate(req.KindBoxReqID, validation.Required); err != nil {
fieldErrors := make(map[string]string)
errV, ok := err.(validation.Errors)
if ok {
for key, value := range errV {
if value != nil {
fieldErrors[key] = value.Error()
}
}
}
return fieldErrors, richerror.New(op).
WithMessage(errmsg.ErrorMsgInvalidInput).
WithKind(richerror.KindInvalid).
WithMeta(map[string]interface{}{"req": req}).
WithErr(err)
}
return nil, nil
}

View File

@ -0,0 +1,33 @@
package kindboxreq
import (
param "git.gocasts.ir/ebhomengo/niki/param/kind_box_req"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
func (v Validator) ValidateGetByIdRequest(req param.KindBoxReqGetByIDRequest) (map[string]string, error) {
const op = "kindboxreq.ValidateGetByIdRequest"
if err := validation.Validate(req.KindBoxReqID, validation.Required); err != nil {
fieldErrors := make(map[string]string)
errV, ok := err.(validation.Errors)
if ok {
for key, value := range errV {
if value != nil {
fieldErrors[key] = value.Error()
}
}
}
return fieldErrors, richerror.New(op).
WithMessage(errmsg.ErrorMsgInvalidInput).
WithKind(richerror.KindInvalid).
WithMeta(map[string]interface{}{"req": req}).
WithErr(err)
}
return nil, nil
}

View File

@ -0,0 +1,43 @@
package kindboxreq
import (
param "git.gocasts.ir/ebhomengo/niki/param/kind_box_req"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
richerror "git.gocasts.ir/ebhomengo/niki/pkg/rich_error"
validation "github.com/go-ozzo/ozzo-validation/v4"
)
func (v Validator) ValidateUpdateRequest(req param.KindBoxReqUpdateRequest) (map[string]string, error) {
const op = "kindboxreq.ValidateUpdateRequest"
if err := validation.ValidateStruct(&req,
validation.Field(&req.KindBoxReq.CountRequested, validation.Required, validation.Min(MinKindBoxReq), validation.Max(MaxKindBoxReq)),
validation.Field(&req.KindBoxReq.BenefactorID,
validation.Required,
validation.By(v.doesBeneFactorExist)),
validation.Field(&req.KindBoxReq.TypeID,
validation.Required,
validation.By(v.doesTypeExist)),
); err != nil {
fieldErrors := make(map[string]string)
errV, ok := err.(validation.Errors)
if ok {
for key, value := range errV {
if value != nil {
fieldErrors[key] = value.Error()
}
}
}
return fieldErrors, richerror.New(op).
WithMessage(errmsg.ErrorMsgInvalidInput).
WithKind(richerror.KindInvalid).
WithMeta(map[string]interface{}{"req": req}).
WithErr(err)
}
return nil, nil
}

View File

@ -0,0 +1,45 @@
package kindboxreq
import (
"fmt"
errmsg "git.gocasts.ir/ebhomengo/niki/pkg/err_msg"
)
const (
MinKindBoxReq = 1
MaxKindBoxReq = 100
)
type Repository interface {
BeneFactorExist(id int) (bool, error)
TypeExist(id int) (bool, error)
}
type Validator struct {
repo Repository
}
func New(repo Repository) Validator {
return Validator{repo: repo}
}
func (v Validator) doesBeneFactorExist(value interface{}) error {
benefactorId := value.(int)
_, err := v.repo.BeneFactorExist(benefactorId)
if err != nil {
return fmt.Errorf(errmsg.ErrorMsgNotFound)
}
return nil
}
func (v Validator) doesTypeExist(value interface{}) error {
typeId := value.(int)
_, err := v.repo.TypeExist(typeId)
if err != nil {
return fmt.Errorf(errmsg.ErrorMsgNotFound)
}
return nil
}