geoGo/internal/service/product.go

98 lines
2.4 KiB
Go

package service
import (
"geo/internal/biz"
"geo/internal/config"
"geo/internal/data/impl"
"geo/internal/data/model"
"geo/internal/entitys"
"geo/pkg"
"geo/tmpl/dataTemp"
"github.com/go-viper/mapstructure/v2"
"github.com/gofiber/fiber/v2"
"xorm.io/builder"
)
type ProductService struct {
cfg *config.Config
productImpl *impl.ProductImpl
authBiz *biz.AuthBiz
}
func NewProductService(cfg *config.Config, ProductImpl *impl.ProductImpl, authBiz *biz.AuthBiz) *ProductService {
return &ProductService{
cfg: cfg,
productImpl: ProductImpl,
authBiz: authBiz,
}
}
func (p *ProductService) Add(c *fiber.Ctx, req *entitys.CreateProductRequest) error {
_, _, err := p.authBiz.UserAndTokenValid(c.UserContext(), req.UserIndex, req.AccessToken)
if err != nil {
return err
}
var data model.Product
err = mapstructure.Decode(req, &data)
if err != nil {
return err
}
err = p.productImpl.Add(c.UserContext(), &data)
if err != nil {
return err
}
return nil
}
func (p *ProductService) List(c *fiber.Ctx, req *entitys.ProductListRequest) error {
_, _, err := p.authBiz.UserAndTokenValid(c.UserContext(), req.UserIndex, req.AccessToken)
if err != nil {
return err
}
page := req.Page
if page < 1 {
page = 1
}
pageSize := req.PageSize
if pageSize < 1 {
pageSize = 20
}
if pageSize > 100 {
pageSize = 100
}
var list []*model.Product
cond := builder.NewCond().
And(builder.Eq{"user_index": req.UserIndex}).
And(builder.Eq{"status": 1})
total, err := p.productImpl.GetListToStruct(c.UserContext(), &cond, &dataTemp.ReqPageBo{Page: page, Limit: pageSize}, &list, "")
if err != nil {
return err
}
return pkg.SuccessWithPageMsg(c, list, total.Total, page, pageSize)
}
func (p *ProductService) Update(c *fiber.Ctx, req *entitys.ProductUpdateRequest) error {
_, err := p.authBiz.ValidateAccessToken(c.UserContext(), req.AccessToken)
if err != nil {
return err
}
var data model.Product
err = mapstructure.Decode(req, &data)
if err != nil {
return err
}
err = p.productImpl.UpdateByKey(c.UserContext(), p.productImpl.PrimaryKey(), req.Id, &data)
return nil
}
func (p *ProductService) Del(c *fiber.Ctx, req *entitys.ProductDelRequest) error {
_, err := p.authBiz.ValidateAccessToken(c.UserContext(), req.AccessToken)
if err != nil {
return err
}
err = p.productImpl.DeleteByKey(c.UserContext(), p.productImpl.PrimaryKey(), req.Id)
return nil
}