refactor and add outlet product table

This commit is contained in:
2026-05-13 21:58:54 +07:00
parent fa037b4d2a
commit 4130cb66df
19 changed files with 835 additions and 42 deletions
@@ -0,0 +1,80 @@
package validator
import (
"errors"
"apskel-pos-be/internal/constants"
"apskel-pos-be/internal/contract"
"github.com/google/uuid"
)
type ProductOutletPriceValidator interface {
ValidateCreateRequest(req *contract.CreateProductOutletPriceRequest) (error, string)
ValidateUpdateRequest(req *contract.UpdateProductOutletPriceRequest) (error, string)
ValidateBulkCreateRequest(req *contract.BulkCreateProductOutletPriceRequest) (error, string)
}
type ProductOutletPriceValidatorImpl struct{}
func NewProductOutletPriceValidator() *ProductOutletPriceValidatorImpl {
return &ProductOutletPriceValidatorImpl{}
}
func (v *ProductOutletPriceValidatorImpl) ValidateCreateRequest(req *contract.CreateProductOutletPriceRequest) (error, string) {
if req == nil {
return errors.New("request body is required"), constants.MissingFieldErrorCode
}
if req.ProductID == uuid.Nil {
return errors.New("product_id is required"), constants.MissingFieldErrorCode
}
if req.OutletID == uuid.Nil {
return errors.New("outlet_id is required"), constants.MissingFieldErrorCode
}
if req.Price < 0 {
return errors.New("price must be non-negative"), constants.MalformedFieldErrorCode
}
return nil, ""
}
func (v *ProductOutletPriceValidatorImpl) ValidateUpdateRequest(req *contract.UpdateProductOutletPriceRequest) (error, string) {
if req == nil {
return errors.New("request body is required"), constants.MissingFieldErrorCode
}
if req.Price < 0 {
return errors.New("price must be non-negative"), constants.MalformedFieldErrorCode
}
return nil, ""
}
func (v *ProductOutletPriceValidatorImpl) ValidateBulkCreateRequest(req *contract.BulkCreateProductOutletPriceRequest) (error, string) {
if req == nil {
return errors.New("request body is required"), constants.MissingFieldErrorCode
}
if req.ProductID == uuid.Nil {
return errors.New("product_id is required"), constants.MissingFieldErrorCode
}
if len(req.Prices) == 0 {
return errors.New("at least one price entry is required"), constants.MissingFieldErrorCode
}
for i, p := range req.Prices {
if p.OutletID == uuid.Nil {
return errors.New("outlet_id is required for each price entry"), constants.MissingFieldErrorCode
}
if p.Price < 0 {
_ = i
return errors.New("price must be non-negative for each price entry"), constants.MalformedFieldErrorCode
}
}
return nil, ""
}