diff --git a/model/gmodel/fs_address_logic.go b/model/gmodel/fs_address_logic.go index 08b747f2..b6fb06e7 100755 --- a/model/gmodel/fs_address_logic.go +++ b/model/gmodel/fs_address_logic.go @@ -2,17 +2,19 @@ package gmodel import ( "context" + "time" + "github.com/zeromicro/go-zero/core/logx" "gorm.io/gorm" ) -func (a *FsAddressModel) GetOne(ctx context.Context, id int64, userId int64) (resp *FsAddress, err error) { - err = a.db.WithContext(ctx).Model(&FsAddress{}).Where("`id` = ? and `user_id` = ? and `status` = ? ", id, userId, 1).Take(&resp).Error +func (a *FsAddressModel) GetOne(ctx context.Context, addressId int64, userId int64) (resp *FsAddress, err error) { + err = a.db.WithContext(ctx).Model(&FsAddress{}).Where("`address_id` = ? and `user_id` = ? and `status` = ? ", addressId, userId, 1).Take(&resp).Error return resp, err } func (a *FsAddressModel) GetUserAllAddress(ctx context.Context, userId int64) (resp []FsAddress, err error) { - err = a.db.WithContext(ctx).Model(&FsAddress{}).Where("`user_id` = ? and `status` = ?", userId, 1).Order("`id` DESC").Find(&resp).Error + err = a.db.WithContext(ctx).Model(&FsAddress{}).Where("`user_id` = ? and `status` = ?", userId, 1).Order("`ltime` DESC").Find(&resp).Error if err != nil { return nil, err } @@ -21,8 +23,8 @@ func (a *FsAddressModel) GetUserAllAddress(ctx context.Context, userId int64) (r func (a *FsAddressModel) CreateOne(ctx context.Context, address *FsAddress) (result *FsAddress, err error) { - err = a.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { - // now := time.Now().UTC().Unix() + err = a.db.WithContext(ctx).Model(&FsAddress{}).Transaction(func(tx *gorm.DB) error { + now := time.Now().UTC() result = &FsAddress{ UserId: address.UserId, AddressName: address.AddressName, @@ -37,9 +39,26 @@ func (a *FsAddressModel) CreateOne(ctx context.Context, address *FsAddress) (res ZipCode: address.ZipCode, Status: address.Status, IsDefault: address.IsDefault, + Ctime: &now, + Utime: &now, + Ltime: &now, } - return tx.Create(result).Error + // lastOne := &FsAddress{} + // err = tx.Where("user_id = ?", lastOne.UserId).Order("ltime ASC").Take(&lastOne).Error + // if err == gorm.ErrRecordNotFound { + // result.Ltime = &now + // return tx.Model(&FsAddress{}).Create(result).Error + // } + // if err != nil { + // return err + // } + + // // 根据lastOne处理时间 + + // ltime := (*lastOne.Ltime).Add(-time.Second) + // result.Ltime = <ime + return tx.Model(&FsAddress{}).Create(result).Error }) if err != nil { @@ -61,3 +80,28 @@ func (a *FsAddressModel) UpdateAddAddress(ctx context.Context, address *FsAddres }) return err } + +func (a *FsAddressModel) SettingUserDefaultAddress(ctx context.Context, userId int64, addressId int64) (resp []FsAddress, err error) { + + a.db.WithContext(ctx).Model(&FsAddress{}).Transaction(func(tx *gorm.DB) error { + + now := time.Now().UTC() + + err = tx.Where(" `user_id` = ? and `status` = ? and `address_id = ?` ", userId, 1, addressId). + UpdateColumn("ltime", now.Add(time.Hour*24*365*290)). + UpdateColumn("utime", now).Error + if err != nil { + return err + } + + err = tx.Where(" `user_id` = ? and `status` = ? and `address_id != ? and `ltime` > ?` ", userId, 1, addressId, now.Add(time.Hour*24*365)). + UpdateColumn("ltime", now).Error + if err != nil { + logx.Error(err) + } + + return nil + }) + + return +} diff --git a/server/info/internal/handler/addressaddhandler.go b/server/info/internal/handler/addressaddhandler.go index 0e02dc4b..e13163fb 100644 --- a/server/info/internal/handler/addressaddhandler.go +++ b/server/info/internal/handler/addressaddhandler.go @@ -14,7 +14,7 @@ import ( func AddressAddHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req types.AddressNameRequest + var req types.AddressRequest userinfo, err := basic.RequestParse(w, r, svcCtx, &req) if err != nil { return diff --git a/server/info/internal/logic/addressaddlogic.go b/server/info/internal/logic/addressaddlogic.go index 9527b89c..61599266 100644 --- a/server/info/internal/logic/addressaddlogic.go +++ b/server/info/internal/logic/addressaddlogic.go @@ -1,6 +1,7 @@ package logic import ( + "fusenapi/model/gmodel" "fusenapi/utils/auth" "fusenapi/utils/basic" @@ -30,11 +31,60 @@ func NewAddressAddLogic(ctx context.Context, svcCtx *svc.ServiceContext) *Addres // func (l *AddressAddLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { // } -func (l *AddressAddLogic) AddressAdd(req *types.AddressNameRequest, userinfo *auth.UserInfo) (resp *basic.Response) { +func (l *AddressAddLogic) AddressAdd(req *types.AddressRequest, userinfo *auth.UserInfo) (resp *basic.Response) { // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) // userinfo 传入值时, 一定不为null - return resp.SetStatus(basic.CodeOK) + if !userinfo.IsUser() { + return resp.SetStatus(basic.CodeUnAuth) + } + + // 确认这个IsDefault的值范围 + if !auth.CheckValueRange(req.IsDefault, 0, 1) { + return resp.SetStatus(basic.CodeSafeValueRangeErr) // IsDefault值超出范围, 返回安全值范围错误 + } + + m := l.svcCtx.AllModels.FsAddress // 创建地址模型 + + // 如果ID为0, 表示新增地址 + + var ( + country string = "USA" // 国家默认为美国 + isDefautl int64 = 1 // 默认地址为1 + status int64 = 1 // 默认地址状态为1(正常) + ) + + createOne := &gmodel.FsAddress{ // 构建FsAddress结构体 + AddressName: &req.AddressName, + FirstName: &req.FirstName, + LastName: &req.LastName, + Mobile: &req.Mobile, + Street: &req.Street, + Suite: &req.Suite, + City: &req.City, + State: &req.State, + Country: &country, + Status: &status, + UserId: &userinfo.UserId, + ZipCode: &req.ZipCode, + IsDefault: &isDefautl, + } + _, err := m.CreateOne(l.ctx, createOne) // 新增地址 + if err != nil { + logx.Error(err) // 日志记录错误 + return resp.SetStatus(basic.CodeDbCreateErr) // 返回数据库创建错误 + } + + addresses, err := m.GetUserAllAddress(l.ctx, userinfo.UserId) + if err != nil { + logx.Error(err) + return resp.SetStatus(basic.CodeDbSqlErr) // 返回数据库创建错误 + } + + return resp.SetStatus(basic.CodeOK, map[string]any{ + "address_list": addresses, + }) // 返回成功并返回地址ID + } // 处理逻辑后 w,r 如:重定向, resp 必须重新处理 diff --git a/server/info/internal/logic/addressdefaultlogic.go b/server/info/internal/logic/addressdefaultlogic.go index c7ad7067..6ff06367 100644 --- a/server/info/internal/logic/addressdefaultlogic.go +++ b/server/info/internal/logic/addressdefaultlogic.go @@ -34,6 +34,10 @@ func (l *AddressDefaultLogic) AddressDefault(req *types.AddressIdRequest, userin // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) // userinfo 传入值时, 一定不为null + if !userinfo.IsUser() { + return resp.SetStatus(basic.CodeUnAuth) + } + return resp.SetStatus(basic.CodeOK) } diff --git a/server/info/internal/types/types.go b/server/info/internal/types/types.go index 3b42e0a9..479a29da 100644 --- a/server/info/internal/types/types.go +++ b/server/info/internal/types/types.go @@ -10,8 +10,8 @@ type UserInfoRequest struct { } type AddressObjectRequest struct { - AddressId int64 `json:"address_id"` // 地址id - Address string `json:"address"` // 地址 + AddressId int64 `json:"address_id"` // 地址id + AddressName string `json:"address_name"` // 地址 } type AddressIdRequest struct { @@ -19,7 +19,20 @@ type AddressIdRequest struct { } type AddressNameRequest struct { - Address string `json:"address"` // 地址 + AddressName string `json:"address_name"` // 地址 +} + +type AddressRequest struct { + IsDefault int64 `json:"is_default"` //是否默认 + AddressName string `json:"address_name"` //收货人 + FirstName string `json:"first_name"` //first_name + LastName string `json:"last_name"` //last_name + Mobile string `json:"mobile"` //手机 + ZipCode string `json:"zip_code"` //邮编 + Street string `json:"street"` //街道 + Suite string `json:"suite"` //房号 + City string `json:"city"` //城市 + State string `json:"state"` //州 } type Request struct { diff --git a/server_api/info.api b/server_api/info.api index ce28f486..e0a7439c 100644 --- a/server_api/info.api +++ b/server_api/info.api @@ -32,8 +32,8 @@ type ( } AddressObjectRequest { - AddressId int64 `json:"address_id"` // 地址id - AddressName string `json:"address_name"` // 地址 + AddressId int64 `json:"address_id"` // 地址id + AddressName string `json:"address_name"` // 地址 } AddressIdRequest { @@ -43,4 +43,17 @@ type ( AddressNameRequest { AddressName string `json:"address_name"` // 地址 } + + AddressRequest { + IsDefault int64 `json:"is_default"` //是否默认 + AddressName string `json:"address_name"` //收货人 + FirstName string `json:"first_name"` //first_name + LastName string `json:"last_name"` //last_name + Mobile string `json:"mobile"` //手机 + ZipCode string `json:"zip_code"` //邮编 + Street string `json:"street"` //街道 + Suite string `json:"suite"` //房号 + City string `json:"city"` //城市 + State string `json:"state"` //州 + } ) \ No newline at end of file