product.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. package repository
  2. import (
  3. req "sghgogs.com/micro/shopping-service/domain/model/request"
  4. pb "sghgogs.com/micro/shopping-service/proto"
  5. "time"
  6. )
  7. func (u *Repository) GetProductList(query *pb.GetProductListRequest) ([]req.Product, int64, error) {
  8. // Select("id, name, description, price, stock_quantity, created_at, updated_at, category_id").
  9. products := make([]req.Product, 0)
  10. tx := u.db.Model(&req.Product{}).
  11. Preload("Category").
  12. Order("id desc")
  13. if query.Keyword != "" {
  14. tx.Where("name = ? ", query.Keyword)
  15. }
  16. var totalCount int64
  17. tx.Count(&totalCount)
  18. return products, totalCount, tx.Limit(int(query.PageSize)).Offset(int((query.Page - 1) * query.PageSize)).Find(&products).Error
  19. }
  20. func (u *Repository) GetProduct(productID int64) (req.Product, error) {
  21. var product req.Product
  22. return product, u.db.Model(&req.Product{}).Preload("Category").Find(&product, productID).Error
  23. }
  24. func (u *Repository) CreateMultipleProducts(products []req.Product) error {
  25. // 开始事务
  26. tx := u.db.Begin()
  27. // 错误处理
  28. defer func() {
  29. if r := recover(); r != nil {
  30. tx.Rollback()
  31. }
  32. }()
  33. if err := tx.Create(&products).Error; err != nil {
  34. tx.Rollback()
  35. return err
  36. }
  37. return tx.Commit().Error
  38. }
  39. func (u *Repository) UpdateProduct(product *pb.UpdateProductRequest) error {
  40. // 开始事务
  41. tx := u.db.Begin()
  42. // 错误处理
  43. defer func() {
  44. if r := recover(); r != nil {
  45. tx.Rollback()
  46. }
  47. }()
  48. if err := tx.Model(&req.Product{}).Where("id = ?", product.ProductId).Updates(map[string]interface{}{
  49. "name": product.Name,
  50. "description": product.Description,
  51. "price": product.Price,
  52. "stock_quantity": product.StockQuantity,
  53. "updated_at": time.Now(),
  54. }).Error; err != nil {
  55. tx.Rollback()
  56. return err
  57. }
  58. return tx.Commit().Error
  59. }
  60. func (u *Repository) DeleteProduct(ProductId int64) error {
  61. return u.db.Model(&req.Product{}).Delete(&req.Product{ID: ProductId}).Error
  62. }