product.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. package service
  2. import (
  3. "context"
  4. "fmt"
  5. "strconv"
  6. "youngee_m_api/consts"
  7. "youngee_m_api/db"
  8. "youngee_m_api/model/gorm_model"
  9. "youngee_m_api/model/http_model"
  10. )
  11. var Product *product
  12. type product struct {
  13. }
  14. func (*product) Create(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
  15. product := gorm_model.YounggeeProduct{
  16. ProductName: newProduct.ProductName,
  17. ProductType: newProduct.ProductType,
  18. ShopAddress: newProduct.ShopAddress,
  19. ProductPrice: newProduct.ProductPrice,
  20. ProductDetail: newProduct.ProductDetail,
  21. ProductUrl: newProduct.ProductUrl,
  22. EnterpriseID: enterpriseID,
  23. BrandName: newProduct.BrandName,
  24. }
  25. productID, err := db.CreateProduct(ctx, product)
  26. if err != nil {
  27. return nil, err
  28. }
  29. if newProduct.ProductPhotos != nil {
  30. productPhotos := []gorm_model.YounggeeProductPhoto{}
  31. for _, photo := range newProduct.ProductPhotos {
  32. productPhoto := gorm_model.YounggeeProductPhoto{
  33. PhotoUrl: photo.PhotoUrl,
  34. PhotoUid: photo.PhotoUid,
  35. Symbol: photo.Symbol,
  36. ProductID: *productID,
  37. }
  38. productPhotos = append(productPhotos, productPhoto)
  39. }
  40. err = db.CreateProductPhoto(ctx, productPhotos)
  41. if err != nil {
  42. return nil, err
  43. }
  44. }
  45. res := &http_model.CreateProductData{
  46. ProductID: *productID,
  47. }
  48. return res, nil
  49. }
  50. func (*product) FindByID(ctx context.Context, productID int64) (*http_model.FindProductData, error) {
  51. product, err := db.GetProductByID(ctx, productID)
  52. if err != nil {
  53. return nil, err
  54. }
  55. if product == nil {
  56. return nil, nil
  57. }
  58. productPhotos, err := db.GetProductPhotoByProductID(ctx, productID)
  59. if err != nil {
  60. return nil, err
  61. }
  62. productPrice, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", product.ProductPrice), 64)
  63. findProductData := http_model.FindProductData{
  64. ProductID: product.ProductID,
  65. ProductName: product.ProductName,
  66. ProductType: product.ProductType,
  67. ShopAddress: product.ShopAddress,
  68. ProductPrice: productPrice,
  69. ProductDetail: product.ProductDetail,
  70. ProductUrl: product.ProductUrl,
  71. EnterpriseID: product.EnterpriseID,
  72. BrandName: product.BrandName,
  73. }
  74. for _, photo := range productPhotos {
  75. productPhoto := http_model.ProductPhoto{
  76. PhotoUrl: photo.PhotoUrl,
  77. PhotoUid: photo.PhotoUid,
  78. Symbol: photo.Symbol,
  79. }
  80. findProductData.ProductPhotos = append(findProductData.ProductPhotos, productPhoto)
  81. }
  82. return &findProductData, nil
  83. }
  84. func (*product) FindAll(ctx context.Context, enterpriseID string) (*http_model.FindAllProductData, error) {
  85. products, err := db.GetProductByEnterpriseID(ctx, enterpriseID)
  86. if err != nil {
  87. // 数据库查询error
  88. return nil, err
  89. }
  90. findAllProductData := http_model.FindAllProductData{}
  91. for _, product := range products {
  92. productData := http_model.ProductInfo{
  93. ProductID: product.ProductID,
  94. BrandName: product.BrandName,
  95. ProductName: product.ProductName,
  96. ProductType: consts.GetProjectTypes(product.ProductType),
  97. }
  98. findAllProductData.ProductInfos = append(findAllProductData.ProductInfos, productData)
  99. }
  100. return &findAllProductData, nil
  101. }
  102. func (*product) Update(ctx context.Context, newProduct http_model.CreateProductRequest, enterpriseID string) (*http_model.CreateProductData, error) {
  103. productPrice, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", newProduct.ProductPrice), 64)
  104. product := gorm_model.YounggeeProduct{
  105. ProductID: newProduct.ProductId,
  106. ProductName: newProduct.ProductName,
  107. ProductType: newProduct.ProductType,
  108. ShopAddress: newProduct.ShopAddress,
  109. ProductPrice: productPrice,
  110. ProductDetail: newProduct.ProductDetail,
  111. ProductUrl: newProduct.ProductUrl,
  112. EnterpriseID: enterpriseID,
  113. BrandName: newProduct.BrandName,
  114. }
  115. productID, err := db.UpdateProduct(ctx, product)
  116. if err != nil {
  117. return nil, err
  118. }
  119. // 删除该商品之前的所有图片
  120. err = db.DeleteProductPhotoByProductID(ctx, *productID)
  121. if err != nil {
  122. return nil, err
  123. }
  124. if newProduct.ProductPhotos != nil {
  125. // 新增图片
  126. productPhotos := []gorm_model.YounggeeProductPhoto{}
  127. for _, photo := range newProduct.ProductPhotos {
  128. productPhoto := gorm_model.YounggeeProductPhoto{
  129. PhotoUrl: photo.PhotoUrl,
  130. PhotoUid: photo.PhotoUid,
  131. Symbol: photo.Symbol,
  132. ProductID: *productID,
  133. }
  134. productPhotos = append(productPhotos, productPhoto)
  135. }
  136. err = db.CreateProductPhoto(ctx, productPhotos)
  137. if err != nil {
  138. return nil, err
  139. }
  140. }
  141. res := &http_model.CreateProductData{
  142. ProductID: *productID,
  143. }
  144. return res, nil
  145. }