address.go 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package service
  2. import (
  3. "fmt"
  4. "github.com/pkg/errors"
  5. "gorm.io/gorm"
  6. "net/http"
  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. "sghgogs.com/micro/shopping-service/utils/authutil"
  12. "time"
  13. )
  14. func (svc *Service) CreateAddress(add *pb.CreateAddressRequest) error {
  15. if err := svc.Repository.CreateAddress(&req.Address{
  16. UserID: add.UserId,
  17. Country: add.Country,
  18. Province: add.Province,
  19. City: add.City,
  20. District: add.District,
  21. Street: add.Street,
  22. Remark: add.Remark,
  23. Location: req.Location{
  24. Lon: add.Location.Lon,
  25. Lat: add.Location.Lat,
  26. },
  27. IsDefault: add.IsDefault,
  28. }); err != nil {
  29. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  30. }
  31. return nil
  32. }
  33. func (svc *Service) GetAddressList(query *pb.GetAddressListRequest) ([]*pb.Address, int64, error) {
  34. list, i, err := svc.Repository.GetAddressList(query)
  35. addresses := make([]*pb.Address, 0)
  36. if err != nil {
  37. if errors.Is(err, gorm.ErrRecordNotFound) {
  38. return addresses, 0, nil
  39. }
  40. return addresses, 0, errorcode.New(svc.Namespace, err.Error(), 500)
  41. }
  42. for _, item := range list {
  43. addresses = append(addresses, svc.getAddressRes(item))
  44. }
  45. return addresses, i, nil
  46. }
  47. func (svc *Service) getAddressRes(item req.Address) *pb.Address {
  48. fmt.Println("item", item.CreatedAt)
  49. address := pb.Address{
  50. Id: item.ID,
  51. UserId: item.UserID,
  52. Country: item.Country,
  53. Province: item.Province,
  54. City: item.City,
  55. District: item.District,
  56. Street: item.Street,
  57. Remark: item.Remark,
  58. IsDefault: item.IsDefault,
  59. }
  60. address.CreatedAt = utils.ConvertTimeToInt64(item.CreatedAt)
  61. if item.UpdatedAt != nil {
  62. address.UpdatedAt = utils.ConvertTimeToInt64(*item.UpdatedAt)
  63. }
  64. return &address
  65. }
  66. func (svc *Service) GetAddress(query *pb.GetAddressRequest) (*pb.Address, error) {
  67. address, err := svc.Repository.GetAddress(query.AddressId)
  68. if err != nil {
  69. return &pb.Address{}, errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  70. }
  71. res := svc.getAddressRes(address)
  72. res.Location = &pb.Location{
  73. Lon: address.Location.Lon,
  74. Lat: address.Location.Lat,
  75. }
  76. return res, nil
  77. }
  78. func (svc *Service) UpdateAddress(query *pb.UpdateAddressRequest) error {
  79. // 获取权限ID作为锁的键
  80. lockKey := fmt.Sprintf("update_shopping_Address_%d", query.AddressId)
  81. lock := authutil.JWTAuthService.Mu.NewMutex(lockKey)
  82. // 获取锁,保证原子性
  83. if err := lock.Lock(); err != nil {
  84. return err
  85. }
  86. defer lock.Unlock()
  87. now := time.Now()
  88. if err := svc.Repository.UpdateAddress(query.AddressId, &req.Address{
  89. Country: query.Country,
  90. Province: query.Province,
  91. City: query.City,
  92. District: query.District,
  93. Street: query.Street,
  94. Remark: query.Remark,
  95. Location: req.Location{
  96. Lon: query.Location.Lon,
  97. Lat: query.Location.Lat,
  98. },
  99. IsDefault: query.IsDefault,
  100. UpdatedAt: &now,
  101. }); err != nil {
  102. return errorcode.New(svc.Namespace, err.Error(), 500)
  103. }
  104. return nil
  105. }
  106. func (svc *Service) DeleteAddress(query *pb.DeleteAddressRequest) error {
  107. if err := svc.Repository.DeleteProduct(query.AddressId); err != nil {
  108. return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
  109. }
  110. return nil
  111. }