product.go 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. package service
  2. import (
  3. "github.com/pkg/errors"
  4. "gorm.io/gorm"
  5. "net/http"
  6. "sghgogs.com/micro/common"
  7. "sghgogs.com/micro/common/errorcode"
  8. req "sghgogs.com/micro/shopping-service/domain/model/request"
  9. pb "sghgogs.com/micro/shopping-service/proto"
  10. "sghgogs.com/micro/shopping-service/utils"
  11. "time"
  12. )
  13. func (svc *Service) CreateMultipleProducts(products *pb.CreateProductRequest) error {
  14. if err := svc.Repository.CreateMultipleProducts(svc.getProductsReq(products.Items)); err != nil {
  15. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  16. }
  17. return nil
  18. }
  19. func (svc *Service) GetProductList(query *pb.GetProductListRequest) ([]*pb.Product, int64, error) {
  20. products := make([]*pb.Product, 0)
  21. list, count, err := svc.Repository.GetProductList(query)
  22. if err != nil {
  23. if errors.Is(err, gorm.ErrRecordNotFound) {
  24. return products, 0, nil // 记录不存在,角色不存在
  25. } else {
  26. return products, 0, err
  27. }
  28. }
  29. return svc.getProductRes(list), count, nil
  30. }
  31. func (svc *Service) DeleteProduct(query *pb.DeleteProductRequest) error {
  32. if err := svc.Repository.DeleteProduct(query.ProductId); err != nil {
  33. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  34. }
  35. return nil
  36. }
  37. func (svc *Service) UpdateProduct(query *pb.UpdateProductRequest) error {
  38. if err := svc.Repository.UpdateProduct(query); err != nil {
  39. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  40. }
  41. return nil
  42. }
  43. func (svc *Service) GetProduct(query *pb.GetProductRequest) (*pb.Product, error) {
  44. product, err := svc.Repository.GetProduct(query.ProductId)
  45. return svc.getProductResItem(product), err
  46. }
  47. func (svc *Service) getProductsReq(items []*pb.Product) []req.Product {
  48. products := make([]req.Product, 0)
  49. for _, item := range items {
  50. products = append(products, req.Product{
  51. Name: item.Name,
  52. Description: item.Description,
  53. Price: item.Price,
  54. StockQuantity: item.StockQuantity,
  55. CreatedAt: time.Now(),
  56. CategoryID: item.CategoryId,
  57. })
  58. }
  59. return products
  60. }
  61. func (svc *Service) getProductRes(items []req.Product) []*pb.Product {
  62. products := make([]*pb.Product, 0)
  63. for _, item := range items {
  64. products = append(products, svc.getProductResItem(item))
  65. }
  66. return products
  67. }
  68. func (svc *Service) getProductResItem(item req.Product) *pb.Product {
  69. var product pb.Product
  70. common.SwapTo(item, &product)
  71. product.CreatedAt = utils.ConvertTimeToInt64(item.CreatedAt)
  72. product.UpdatedAt = utils.ConvertTimeToInt64(*item.UpdatedAt)
  73. product.Category = svc.getCategory(item.Category)
  74. return &product
  75. }