123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- package service
- import (
- "fmt"
- "github.com/pkg/errors"
- "gorm.io/gorm"
- "net/http"
- "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"
- "sghgogs.com/micro/shopping-service/utils/authutil"
- "time"
- )
- func (svc *Service) CreateAddress(add *pb.CreateAddressRequest) error {
- if err := svc.Repository.CreateAddress(&req.Address{
- UserID: add.UserId,
- Country: add.Country,
- Province: add.Province,
- City: add.City,
- District: add.District,
- Street: add.Street,
- Remark: add.Remark,
- Location: req.Location{
- Lon: add.Location.Lon,
- Lat: add.Location.Lat,
- },
- IsDefault: add.IsDefault,
- }); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
- }
- return nil
- }
- func (svc *Service) GetAddressList(query *pb.GetAddressListRequest) ([]*pb.Address, int64, error) {
- list, i, err := svc.Repository.GetAddressList(query)
- addresses := make([]*pb.Address, 0)
- if err != nil {
- if errors.Is(err, gorm.ErrRecordNotFound) {
- return addresses, 0, nil
- }
- return addresses, 0, errorcode.New(svc.Namespace, err.Error(), 500)
- }
- for _, item := range list {
- addresses = append(addresses, svc.getAddressRes(item))
- }
- return addresses, i, nil
- }
- func (svc *Service) getAddressRes(item req.Address) *pb.Address {
- fmt.Println("item", item.CreatedAt)
- address := pb.Address{
- Id: item.ID,
- UserId: item.UserID,
- Country: item.Country,
- Province: item.Province,
- City: item.City,
- District: item.District,
- Street: item.Street,
- Remark: item.Remark,
- IsDefault: item.IsDefault,
- }
- address.CreatedAt = utils.ConvertTimeToInt64(item.CreatedAt)
- if item.UpdatedAt != nil {
- address.UpdatedAt = utils.ConvertTimeToInt64(*item.UpdatedAt)
- }
- return &address
- }
- func (svc *Service) GetAddress(query *pb.GetAddressRequest) (*pb.Address, error) {
- address, err := svc.Repository.GetAddress(query.AddressId)
- if err != nil {
- return &pb.Address{}, errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
- }
- res := svc.getAddressRes(address)
- res.Location = &pb.Location{
- Lon: address.Location.Lon,
- Lat: address.Location.Lat,
- }
- return res, nil
- }
- func (svc *Service) UpdateAddress(query *pb.UpdateAddressRequest) error {
- // 获取权限ID作为锁的键
- lockKey := fmt.Sprintf("update_shopping_Address_%d", query.AddressId)
- lock := authutil.JWTAuthService.Mu.NewMutex(lockKey)
- // 获取锁,保证原子性
- if err := lock.Lock(); err != nil {
- return err
- }
- defer lock.Unlock()
- now := time.Now()
- if err := svc.Repository.UpdateAddress(query.AddressId, &req.Address{
- Country: query.Country,
- Province: query.Province,
- City: query.City,
- District: query.District,
- Street: query.Street,
- Remark: query.Remark,
- Location: req.Location{
- Lon: query.Location.Lon,
- Lat: query.Location.Lat,
- },
- IsDefault: query.IsDefault,
- UpdatedAt: &now,
- }); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), 500)
- }
- return nil
- }
- func (svc *Service) DeleteAddress(query *pb.DeleteAddressRequest) error {
- if err := svc.Repository.DeleteProduct(query.AddressId); err != nil {
- return errorcode.New(svc.Namespace, err.Error(), http.StatusBadRequest)
- }
- return nil
- }
|