package service import ( "github.com/pkg/errors" "gorm.io/gorm" "net/http" "sghgogs.com/micro/common" "sghgogs.com/micro/common/errorcode" req "sghgogs.com/micro/shopping-service/domain/model/request" pb "sghgogs.com/micro/shopping-service/proto" "sghgogs.com/micro/shopping-service/utils" "time" ) func (svc *Service) CreateMultipleProducts(products *pb.CreateProductRequest) error { if err := svc.Repository.CreateMultipleProducts(svc.getProductsReq(products.Items)); err != nil { return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest) } return nil } func (svc *Service) GetProductList(query *pb.GetProductListRequest) ([]*pb.Product, int64, error) { products := make([]*pb.Product, 0) list, count, err := svc.Repository.GetProductList(query) if err != nil { if errors.Is(err, gorm.ErrRecordNotFound) { return products, 0, nil // 记录不存在,角色不存在 } else { return products, 0, err } } return svc.getProductRes(list), count, nil } func (svc *Service) DeleteProduct(query *pb.DeleteProductRequest) error { if err := svc.Repository.DeleteProduct(query.ProductId); err != nil { return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest) } return nil } func (svc *Service) UpdateProduct(query *pb.UpdateProductRequest) error { if err := svc.Repository.UpdateProduct(query); err != nil { return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest) } return nil } func (svc *Service) GetProduct(query *pb.GetProductRequest) (*pb.Product, error) { product, err := svc.Repository.GetProduct(query.ProductId) return svc.getProductResItem(product), err } func (svc *Service) getProductsReq(items []*pb.Product) []req.Product { products := make([]req.Product, 0) for _, item := range items { products = append(products, req.Product{ Name: item.Name, Description: item.Description, Price: item.Price, StockQuantity: item.StockQuantity, CreatedAt: time.Now(), CategoryID: item.CategoryId, }) } return products } func (svc *Service) getProductRes(items []req.Product) []*pb.Product { products := make([]*pb.Product, 0) for _, item := range items { products = append(products, svc.getProductResItem(item)) } return products } func (svc *Service) getProductResItem(item req.Product) *pb.Product { var product pb.Product common.SwapTo(item, &product) product.CreatedAt = utils.ConvertTimeToInt64(item.CreatedAt) product.UpdatedAt = utils.ConvertTimeToInt64(*item.UpdatedAt) product.Category = svc.getCategory(item.Category) return &product }