From d92c77766c2571771f33bcbfef8e72c5344ffeaf Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 13:25:06 +0800 Subject: [PATCH 1/9] info get profile --- model/gmodel/var.go | 18 ++-- .../home-user-auth/internal/handler/routes.go | 25 ----- .../internal/handler/useraddaddresshandler.go | 35 ------- .../handler/useraddresslisthandler.go | 35 ------- .../internal/logic/useraddaddresslogic.go | 93 ------------------- .../internal/logic/useraddresslistlogic.go | 42 --------- .../handler/updateprofilebasehandler.go | 2 +- .../internal/logic/updateprofilebaselogic.go | 2 +- server/info/internal/types/types.go | 32 +++++-- server_api/home-user-auth.api | 37 +++----- server_api/info.api | 38 ++++++-- 11 files changed, 81 insertions(+), 278 deletions(-) delete mode 100644 server/home-user-auth/internal/handler/useraddaddresshandler.go delete mode 100644 server/home-user-auth/internal/handler/useraddresslisthandler.go delete mode 100644 server/home-user-auth/internal/logic/useraddaddresslogic.go delete mode 100644 server/home-user-auth/internal/logic/useraddresslistlogic.go diff --git a/model/gmodel/var.go b/model/gmodel/var.go index b471b204..e9536e0e 100644 --- a/model/gmodel/var.go +++ b/model/gmodel/var.go @@ -38,9 +38,15 @@ func FsBool(v bool) *bool { // SubscriptionStatus 订阅状态 type SubscriptionStatus struct { - SubEmail bool `json:"all_emails"` - ItemMap *struct { - } `json:"item_map"` + NotificationEmail *struct { + OrderUpdate bool `json:"order_update"` + Newseleter bool `json:"newseleter"` + } `json:"notification_email"` + + NotificationPhone *struct { + OrderUpdate bool `json:"order_update"` + Newseleter bool `json:"newseleter"` + } `json:"notification_phone"` } type UserProfile struct { @@ -50,9 +56,9 @@ type UserProfile struct { // UserProfileBase 个人信息 type UserProfileBase struct { - FirstName string `json:"first_name"` // 首名 - LastName string `json:"last_name"` // 后名 - UserName string `json:"user_name"` // 用户名 + FirstName string `json:"first_name"` // 首名 + LastName string `json:"last_name"` // 后名 + // UserName string `json:"user_name"` // 用户名 Mobile string `json:"mobile"` // 电话 Resetaurant string `json:"resetaurant"` // 不知道干什么 Company string `json:"company"` // 公司 diff --git a/server/home-user-auth/internal/handler/routes.go b/server/home-user-auth/internal/handler/routes.go index 6e056ad4..d8855f3a 100644 --- a/server/home-user-auth/internal/handler/routes.go +++ b/server/home-user-auth/internal/handler/routes.go @@ -17,36 +17,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/api/user/fonts", Handler: UserFontsHandler(serverCtx), }, - { - Method: http.MethodGet, - Path: "/api/user/get-type", - Handler: UserGetTypeHandler(serverCtx), - }, - { - Method: http.MethodPost, - Path: "/api/user/basic-info", - Handler: UserSaveBasicInfoHandler(serverCtx), - }, { Method: http.MethodGet, Path: "/api/user/status-config", Handler: UserStatusConfigHandler(serverCtx), }, - { - Method: http.MethodGet, - Path: "/api/user/basic-info", - Handler: UserBasicInfoHandler(serverCtx), - }, - { - Method: http.MethodGet, - Path: "/api/user/address-list", - Handler: UserAddressListHandler(serverCtx), - }, - { - Method: http.MethodPost, - Path: "/api/user/add-address", - Handler: UserAddAddressHandler(serverCtx), - }, { Method: http.MethodPost, Path: "/api/user/contact-service", diff --git a/server/home-user-auth/internal/handler/useraddaddresshandler.go b/server/home-user-auth/internal/handler/useraddaddresshandler.go deleted file mode 100644 index 84354a6d..00000000 --- a/server/home-user-auth/internal/handler/useraddaddresshandler.go +++ /dev/null @@ -1,35 +0,0 @@ -package handler - -import ( - "net/http" - "reflect" - - "fusenapi/utils/basic" - - "fusenapi/server/home-user-auth/internal/logic" - "fusenapi/server/home-user-auth/internal/svc" - "fusenapi/server/home-user-auth/internal/types" -) - -func UserAddAddressHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - - var req types.RequestAddAddress - userinfo, err := basic.RequestParse(w, r, svcCtx, &req) - if err != nil { - return - } - - // 创建一个业务逻辑层实例 - l := logic.NewUserAddAddressLogic(r.Context(), svcCtx) - - rl := reflect.ValueOf(l) - basic.BeforeLogic(w, r, rl) - - resp := l.UserAddAddress(&req, userinfo) - - if !basic.AfterLogic(w, r, rl, resp) { - basic.NormalAfterLogic(w, r, resp) - } - } -} diff --git a/server/home-user-auth/internal/handler/useraddresslisthandler.go b/server/home-user-auth/internal/handler/useraddresslisthandler.go deleted file mode 100644 index 9060da40..00000000 --- a/server/home-user-auth/internal/handler/useraddresslisthandler.go +++ /dev/null @@ -1,35 +0,0 @@ -package handler - -import ( - "net/http" - "reflect" - - "fusenapi/utils/basic" - - "fusenapi/server/home-user-auth/internal/logic" - "fusenapi/server/home-user-auth/internal/svc" - "fusenapi/server/home-user-auth/internal/types" -) - -func UserAddressListHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { - return func(w http.ResponseWriter, r *http.Request) { - - var req types.Request - userinfo, err := basic.RequestParse(w, r, svcCtx, &req) - if err != nil { - return - } - - // 创建一个业务逻辑层实例 - l := logic.NewUserAddressListLogic(r.Context(), svcCtx) - - rl := reflect.ValueOf(l) - basic.BeforeLogic(w, r, rl) - - resp := l.UserAddressList(&req, userinfo) - - if !basic.AfterLogic(w, r, rl, resp) { - basic.NormalAfterLogic(w, r, resp) - } - } -} diff --git a/server/home-user-auth/internal/logic/useraddaddresslogic.go b/server/home-user-auth/internal/logic/useraddaddresslogic.go deleted file mode 100644 index be56cd5e..00000000 --- a/server/home-user-auth/internal/logic/useraddaddresslogic.go +++ /dev/null @@ -1,93 +0,0 @@ -package logic - -import ( - "fusenapi/model/gmodel" - "fusenapi/utils/auth" - "fusenapi/utils/basic" - - "context" - - "fusenapi/server/home-user-auth/internal/svc" - "fusenapi/server/home-user-auth/internal/types" - - "github.com/zeromicro/go-zero/core/logx" -) - -type UserAddAddressLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewUserAddAddressLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserAddAddressLogic { - return &UserAddAddressLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *UserAddAddressLogic) UserAddAddress(req *types.RequestAddAddress, userinfo *auth.UserInfo) (resp *basic.Response) { - // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) - // userinfo 传入值时, 一定不为null - 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 // 创建地址模型 - var status int64 = 1 // 默认地址状态为1(正常) - - // 如果ID为0, 表示新增地址 - if req.Id == 0 { - var ( - country string = "USA" // 国家默认为美国 - ) - createOne := &gmodel.FsAddress{ // 构建FsAddress结构体 - 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, - } - created, err := m.CreateOne(l.ctx, createOne) // 新增地址 - if err != nil { - logx.Error(err) // 日志记录错误 - return resp.SetStatus(basic.CodeDbCreateErr) // 返回数据库创建错误 - } - return resp.SetStatus(basic.CodeOK, map[string]int64{"id": created.AddressId}) // 返回成功并返回地址ID - } - - address := &gmodel.FsAddress{ - AddressId: req.Id, - FirstName: &req.FirstName, - LastName: &req.LastName, - Mobile: &req.Mobile, - Street: &req.Street, - Suite: &req.Suite, - City: &req.City, - State: &req.State, - Status: &status, - UserId: &userinfo.UserId, - ZipCode: &req.ZipCode, - } - - // 插入数据库 更新地址 - err := m.UpdateAddress(l.ctx, address) - if err != nil { - logx.Error(err) - return resp.SetStatus(basic.CodeDbUpdateErr) - } - - return resp.SetStatus(basic.CodeOK, map[string]int64{"id": address.AddressId}) -} diff --git a/server/home-user-auth/internal/logic/useraddresslistlogic.go b/server/home-user-auth/internal/logic/useraddresslistlogic.go deleted file mode 100644 index 7c320207..00000000 --- a/server/home-user-auth/internal/logic/useraddresslistlogic.go +++ /dev/null @@ -1,42 +0,0 @@ -package logic - -import ( - "context" - - "fusenapi/server/home-user-auth/internal/svc" - "fusenapi/server/home-user-auth/internal/types" - "fusenapi/utils/auth" - "fusenapi/utils/basic" - - "github.com/zeromicro/go-zero/core/logx" -) - -type UserAddressListLogic struct { - logx.Logger - ctx context.Context - svcCtx *svc.ServiceContext -} - -func NewUserAddressListLogic(ctx context.Context, svcCtx *svc.ServiceContext) *UserAddressListLogic { - return &UserAddressListLogic{ - Logger: logx.WithContext(ctx), - ctx: ctx, - svcCtx: svcCtx, - } -} - -func (l *UserAddressListLogic) UserAddressList(req *types.Request, userinfo *auth.UserInfo) (resp *basic.Response) { - // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) - if !userinfo.IsUser() { - return resp.SetStatus(basic.CodeUnAuth) - } - - m := l.svcCtx.AllModels.FsAddress - - data, err := m.GetUserAllAddress(l.ctx, userinfo.UserId) - if err != nil { - logx.Error(err) - return resp.SetStatusWithMessage(basic.CodeServiceErr, err.Error()) - } - return resp.SetStatus(basic.CodeOK, data) -} diff --git a/server/info/internal/handler/updateprofilebasehandler.go b/server/info/internal/handler/updateprofilebasehandler.go index 73670c61..43d972d5 100644 --- a/server/info/internal/handler/updateprofilebasehandler.go +++ b/server/info/internal/handler/updateprofilebasehandler.go @@ -14,7 +14,7 @@ import ( func UpdateProfileBaseHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { - var req types.ProfileBaseRequest + var req types.ProfileRequest userinfo, err := basic.RequestParse(w, r, svcCtx, &req) if err != nil { return diff --git a/server/info/internal/logic/updateprofilebaselogic.go b/server/info/internal/logic/updateprofilebaselogic.go index 12e9e3cd..13b5ada2 100644 --- a/server/info/internal/logic/updateprofilebaselogic.go +++ b/server/info/internal/logic/updateprofilebaselogic.go @@ -30,7 +30,7 @@ func NewUpdateProfileBaseLogic(ctx context.Context, svcCtx *svc.ServiceContext) // func (l *UpdateProfileBaseLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { // } -func (l *UpdateProfileBaseLogic) UpdateProfileBase(req *types.ProfileBaseRequest, userinfo *auth.UserInfo) (resp *basic.Response) { +func (l *UpdateProfileBaseLogic) UpdateProfileBase(req *types.ProfileRequest, userinfo *auth.UserInfo) (resp *basic.Response) { // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) // userinfo 传入值时, 一定不为null if !userinfo.IsUser() { diff --git a/server/info/internal/types/types.go b/server/info/internal/types/types.go index b510ac96..21e43c78 100644 --- a/server/info/internal/types/types.go +++ b/server/info/internal/types/types.go @@ -31,13 +31,31 @@ type AddressRequest struct { State string `json:"state"` //州 } -type ProfileBaseRequest struct { - FirstName *string `json:"first_name,optional,omitempty"` // 首名 - LastName *string `json:"last_name,optional,omitempty"` // 后名 - UserName *string `json:"user_name,optional,omitempty"` // 用户名 - Mobile *string `json:"mobile,optional,omitempty"` // 电话 - Resetaurant *string `json:"resetaurant,optional,omitempty"` // 不知道干什么 - Company *string `json:"company,optional,omitempty"` // 公司 +type ProfileRequest struct { + ProfileBase *ProfileBase `json:"base,optional,omitempty"` // 基础的个人消息, 姓名 公司等 + SubscriptionStatus *SubscriptionStatus `json:"sub_status,optional,omitempty"` // 订阅的通知状态 +} + +type ProfileBase struct { + FirstName *string `json:"first_name,optional,omitempty"` // 首名 + LastName *string `json:"last_name,optional,omitempty"` // 后名 + Mobile *string `json:"mobile,optional,omitempty"` // 电话 + Company *string `json:"company,optional,omitempty"` // 公司 +} + +type SubscriptionStatus struct { + NotificationEmail NotificationEmail `json:"notification_email,optional,omitempty"` + NotificationPhone NotificationPhone `json:"notification_phone,optional,omitempty"` +} + +type NotificationEmail struct { + OrderUpdate bool `json:"order_update,optional,omitempty"` + Newseleter bool `json:"newseleter,optional,omitempty"` +} + +type NotificationPhone struct { + OrderUpdate bool `json:"order_update,optional,omitempty"` + Newseleter bool `json:"newseleter,optional,omitempty"` } type QueryProfileRequest struct { diff --git a/server_api/home-user-auth.api b/server_api/home-user-auth.api index 6bc61df5..5bc06711 100644 --- a/server_api/home-user-auth.api +++ b/server_api/home-user-auth.api @@ -10,68 +10,55 @@ info ( import "basic.api" service home-user-auth { - + // @handler UserRegisterHandler // post /api/user/register(RequestUserRegister) returns (response); //用户字体 @handler UserFontsHandler get /api/user/fonts(request) returns (response); - //获取用户类型 - @handler UserGetTypeHandler - get /api/user/get-type(request) returns (response); - //保存用户基础信息 - @handler UserSaveBasicInfoHandler - post /api/user/basic-info(RequestBasicInfoForm) returns (response); + //状态配置 @handler UserStatusConfigHandler get /api/user/status-config(request) returns (response); - //基础信息 - @handler UserBasicInfoHandler - get /api/user/basic-info(request) returns (response); - //地址列表 - @handler UserAddressListHandler - get /api/user/address-list(request) returns (response); - //添加地址 - @handler UserAddAddressHandler - post /api/user/add-address(RequestAddAddress) returns (response); + //联系服务 @handler UserContactServiceHandler post /api/user/contact-service (RequestContactService) returns (response); - + // @handler UserOderListHandler // get /api/user/order-list(RequestOrderId) returns (response); //删除订单 @handler UserOderDeleteHandler post /api/user/order-delete(RequestOrderId) returns (response); - + //订单列表 @handler UserOrderListHandler get /api/user/order-list (UserOrderListReq) returns (response); - + //删除订单 @handler UserOrderDeleteHandler get /api/user/order-delete (UserOrderDeleteReq) returns (response); - + //取消订单 @handler UserOrderCancelHandler get /api/user/order-cancel (UserOrderCancelReq) returns (response); - + // 用户logo列表 @handler UserLogoListHandler get /api/user/logo-list (UserLogoListReq) returns (response); - + // 再来一单 @handler UserAgainOrderHandler get /api/user/one-more-order (UserAgainOrderReq) returns (response); - + // 保存商户信息 @handler UserInfoSetHandler post /api/user/set_user_info (UserInfoSetReq) returns (response); - + // 用户logo设置当前 @handler UserLogoSetHandler post /api/user/logo-set (UserLogoSetReq) returns (response); - + // 用户logo模版信息 @handler UserLogoTemplateTagSetHandler post /api/user/logo-templatetag-set (UserLogoTemplateTagSetReq) returns (response); diff --git a/server_api/info.api b/server_api/info.api index a3dc8a6d..ce40c9de 100644 --- a/server_api/info.api +++ b/server_api/info.api @@ -17,7 +17,7 @@ service info { post /api/info/user/profile(QueryProfileRequest) returns (response); @handler UpdateProfileBaseHandler - post /api/info/user/profile/base/update(ProfileBaseRequest) returns (response); + post /api/info/user/profile/base/update(ProfileRequest) returns (response); @handler AddressDefaultHandler post /api/info/address/default(AddressIdRequest) returns (response); @@ -62,15 +62,37 @@ type ( State string `json:"state"` //州 } - ProfileBaseRequest { - FirstName *string `json:"first_name,optional,omitempty"` // 首名 - LastName *string `json:"last_name,optional,omitempty"` // 后名 - UserName *string `json:"user_name,optional,omitempty"` // 用户名 - Mobile *string `json:"mobile,optional,omitempty"` // 电话 - Resetaurant *string `json:"resetaurant,optional,omitempty"` // 不知道干什么 - Company *string `json:"company,optional,omitempty"` // 公司 + ProfileRequest { + ProfileBase *ProfileBase `json:"base,optional,omitempty"` // 基础的个人消息, 姓名 公司等 + SubscriptionStatus *SubscriptionStatus `json:"sub_status,optional,omitempty"` // 订阅的通知状态 + } + ProfileBase { + FirstName *string `json:"first_name,optional,omitempty"` // 首名 + LastName *string `json:"last_name,optional,omitempty"` // 后名 + // UserName *string `json:"user_name,optional,omitempty"` // 用户名 + Mobile *string `json:"mobile,optional,omitempty"` // 电话 + // Resetaurant *string `json:"resetaurant,optional,omitempty"` // 不知道干什么 + Company *string `json:"company,optional,omitempty"` // 公司 + + } + + SubscriptionStatus { + NotificationEmail NotificationEmail `json:"notification_email,optional,omitempty"` + NotificationPhone NotificationPhone `json:"notification_phone,optional,omitempty"` + } // 订阅的通知状态 + + NotificationEmail { + OrderUpdate bool `json:"order_update,optional,omitempty"` + Newseleter bool `json:"newseleter,optional,omitempty"` + } // 邮件通知设置 + + NotificationPhone { + OrderUpdate bool `json:"order_update,optional,omitempty"` + Newseleter bool `json:"newseleter,optional,omitempty"` + } // 电话通知设置 + QueryProfileRequest { TopKey string `json:"top_key"` // 首名 } From 1f9123c0f43ee9086c837b9f22ec67627c543e84 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 13:32:37 +0800 Subject: [PATCH 2/9] info get profile --- model/gmodel/fs_user_info_logic.go | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/model/gmodel/fs_user_info_logic.go b/model/gmodel/fs_user_info_logic.go index aab9a4f3..d21f79cf 100644 --- a/model/gmodel/fs_user_info_logic.go +++ b/model/gmodel/fs_user_info_logic.go @@ -47,9 +47,7 @@ func (p *FsUserInfoModel) CreateOrUpdate(gormDB *gorm.DB, req *FsUserInfo) (resp } func (m *FsUserInfoModel) MergeMetadata(userId int64, meta any) error { - return fssql.MetadataModulePATCH(m.db, "profile", FsUserInfo{}, map[string]any{ - "base": meta, - }, "user_id = ?", userId) + return fssql.MetadataModulePATCH(m.db, "profile", FsUserInfo{}, meta, "user_id = ?", userId) } func (m *FsUserInfoModel) GetProfile(ctx context.Context, pkey string, userId int64) (map[string]any, error) { From 6072341a2bf223bb03dffc8aa89f65cda9bc94e4 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 14:42:26 +0800 Subject: [PATCH 3/9] info get profile --- model/gmodel/fs_user_logic.go | 1 + model/gmodel/var.go | 6 +++--- server/info/internal/logic/updateprofilebaselogic.go | 2 ++ server/info/internal/types/types.go | 10 ++++++---- server_api/info.api | 7 ++++--- 5 files changed, 16 insertions(+), 10 deletions(-) diff --git a/model/gmodel/fs_user_logic.go b/model/gmodel/fs_user_logic.go index 1dbe2d0d..2f059579 100644 --- a/model/gmodel/fs_user_logic.go +++ b/model/gmodel/fs_user_logic.go @@ -178,6 +178,7 @@ func (u *FsUserModel) RegisterByFusen(ctx context.Context, token *auth.RegisterT FirstName: FirstName, LastName: LastName, Resetaurant: Resetaurant, + Email: *user.Email, } userProfile := &UserProfile{ diff --git a/model/gmodel/var.go b/model/gmodel/var.go index e9536e0e..59559d8e 100644 --- a/model/gmodel/var.go +++ b/model/gmodel/var.go @@ -56,9 +56,9 @@ type UserProfile struct { // UserProfileBase 个人信息 type UserProfileBase struct { - FirstName string `json:"first_name"` // 首名 - LastName string `json:"last_name"` // 后名 - // UserName string `json:"user_name"` // 用户名 + FirstName string `json:"first_name"` // 首名 + LastName string `json:"last_name"` // 后名 + Email string `json:"email"` // email Mobile string `json:"mobile"` // 电话 Resetaurant string `json:"resetaurant"` // 不知道干什么 Company string `json:"company"` // 公司 diff --git a/server/info/internal/logic/updateprofilebaselogic.go b/server/info/internal/logic/updateprofilebaselogic.go index 13b5ada2..57d2913b 100644 --- a/server/info/internal/logic/updateprofilebaselogic.go +++ b/server/info/internal/logic/updateprofilebaselogic.go @@ -37,6 +37,8 @@ func (l *UpdateProfileBaseLogic) UpdateProfileBase(req *types.ProfileRequest, us return resp.SetStatus(basic.CodeUnAuth) } + req.ProfileBase.Email = nil + err := l.svcCtx.AllModels.FsUserInfo.MergeMetadata(userinfo.UserId, req) if err != nil { logx.Error(err) // 日志记录错误 diff --git a/server/info/internal/types/types.go b/server/info/internal/types/types.go index 21e43c78..b5921a6e 100644 --- a/server/info/internal/types/types.go +++ b/server/info/internal/types/types.go @@ -37,10 +37,12 @@ type ProfileRequest struct { } type ProfileBase struct { - FirstName *string `json:"first_name,optional,omitempty"` // 首名 - LastName *string `json:"last_name,optional,omitempty"` // 后名 - Mobile *string `json:"mobile,optional,omitempty"` // 电话 - Company *string `json:"company,optional,omitempty"` // 公司 + FirstName *string `json:"first_name,optional,omitempty"` // 首名 + LastName *string `json:"last_name,optional,omitempty"` // 后名 + Email *string `json:"email"` // email + Mobile *string `json:"mobile,optional,omitempty"` // 电话 + Resetaurant *string `json:"resetaurant,optional,omitempty"` // 不知道干什么 + Company *string `json:"company,optional,omitempty"` // 公司 } type SubscriptionStatus struct { diff --git a/server_api/info.api b/server_api/info.api index ce40c9de..9c7eadd3 100644 --- a/server_api/info.api +++ b/server_api/info.api @@ -72,9 +72,10 @@ type ( FirstName *string `json:"first_name,optional,omitempty"` // 首名 LastName *string `json:"last_name,optional,omitempty"` // 后名 // UserName *string `json:"user_name,optional,omitempty"` // 用户名 - Mobile *string `json:"mobile,optional,omitempty"` // 电话 - // Resetaurant *string `json:"resetaurant,optional,omitempty"` // 不知道干什么 - Company *string `json:"company,optional,omitempty"` // 公司 + Email *string `json:"email"` // email + Mobile *string `json:"mobile,optional,omitempty"` // 电话 + Resetaurant *string `json:"resetaurant,optional,omitempty"` // 不知道干什么 + Company *string `json:"company,optional,omitempty"` // 公司 } From 316ebd9fca191993d07c22deb49cdb84c43a1618 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 15:19:45 +0800 Subject: [PATCH 4/9] info get profile --- model/gmodel/fs_user_logic.go | 49 +++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/model/gmodel/fs_user_logic.go b/model/gmodel/fs_user_logic.go index 2f059579..729c0798 100644 --- a/model/gmodel/fs_user_logic.go +++ b/model/gmodel/fs_user_logic.go @@ -121,13 +121,58 @@ func (u *FsUserModel) RegisterByGoogleOAuth(ctx context.Context, token *auth.Reg user.GoogleId = &googleId user.PasswordHash = &token.Password user.FirstName = &firstName - user.FirstName = &lastName + user.LastName = &lastName err = tx.Model(&FsUser{}).Create(user).Error if err != nil { return err } // 继承guest_id的资源表 - return InheritGuestIdResource(tx, user.Id, token.GuestId, nil) + return InheritGuestIdResource(tx, user.Id, token.GuestId, func(txResouce, txUserMaterial, txUserInfo *gorm.DB) error { + userProfileBase := UserProfileBase{ + FirstName: *user.FirstName, + LastName: *user.LastName, + Email: *user.Email, + } + + userProfile := &UserProfile{ + ProfileBase: userProfileBase, + } + + metadata, err := json.Marshal(userProfile) + if err != nil { + return err + } + + now := time.Now().UTC() + uinfo := &FsUserInfo{ + Module: FsString("profile"), + UserId: &user.Id, + GuestId: &token.GuestId, + Metadata: &metadata, + Ctime: &now, + Utime: &now, + } + + // logx.Error(metadata) + + err = txUserInfo.Where("module = 'profile' and user_id = ?", *uinfo.UserId).Take(nil).Error + if err != nil { + if err == gorm.ErrRecordNotFound { + err = tx.Model(&FsUserInfo{}).Create(uinfo).Error + // logx.Info(err, "*uinfo.UserId:", *uinfo.UserId, " ", uinfo.Id) + if err == gorm.ErrRecordNotFound { + return nil + } + } + } else { + err = fssql.MetadataModulePATCH(txUserInfo, "profile", FsUserInfo{}, metadata, "user_id = ?", *uinfo.UserId) + if err != nil { + return err + } + } + return err + + }) } return err From db0c8a2532c2ea521144518584cdd7719bdc1b11 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 15:26:02 +0800 Subject: [PATCH 5/9] info get profile --- server/info/internal/types/types.go | 2 +- server_api/info.api | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/server/info/internal/types/types.go b/server/info/internal/types/types.go index b5921a6e..581340aa 100644 --- a/server/info/internal/types/types.go +++ b/server/info/internal/types/types.go @@ -39,7 +39,7 @@ type ProfileRequest struct { type ProfileBase struct { FirstName *string `json:"first_name,optional,omitempty"` // 首名 LastName *string `json:"last_name,optional,omitempty"` // 后名 - Email *string `json:"email"` // email + Email *string `json:"email,optional,omitempty"` // email Mobile *string `json:"mobile,optional,omitempty"` // 电话 Resetaurant *string `json:"resetaurant,optional,omitempty"` // 不知道干什么 Company *string `json:"company,optional,omitempty"` // 公司 diff --git a/server_api/info.api b/server_api/info.api index 9c7eadd3..783e0307 100644 --- a/server_api/info.api +++ b/server_api/info.api @@ -72,7 +72,7 @@ type ( FirstName *string `json:"first_name,optional,omitempty"` // 首名 LastName *string `json:"last_name,optional,omitempty"` // 后名 // UserName *string `json:"user_name,optional,omitempty"` // 用户名 - Email *string `json:"email"` // email + Email *string `json:"email,optional,omitempty"` // email Mobile *string `json:"mobile,optional,omitempty"` // 电话 Resetaurant *string `json:"resetaurant,optional,omitempty"` // 不知道干什么 Company *string `json:"company,optional,omitempty"` // 公司 From 989b2daacc4625b450682fbaecf10455523af855 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 16:47:02 +0800 Subject: [PATCH 6/9] info get profile --- server/info/internal/logic/addressupdatelogic.go | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/server/info/internal/logic/addressupdatelogic.go b/server/info/internal/logic/addressupdatelogic.go index 572353bc..377021c2 100644 --- a/server/info/internal/logic/addressupdatelogic.go +++ b/server/info/internal/logic/addressupdatelogic.go @@ -40,6 +40,11 @@ func (l *AddressUpdateLogic) AddressUpdate(req *types.AddressRequest, userinfo * return resp.SetStatus(basic.CodeUnAuth) } + // 确认这个IsDefault的值范围 + if !auth.CheckValueRange(req.IsDefault, 0, 1) { + return resp.SetStatus(basic.CodeSafeValueRangeErr) // IsDefault值超出范围, 返回安全值范围错误 + } + now := time.Now().UTC() if req.AddressId == 0 { @@ -65,6 +70,10 @@ func (l *AddressUpdateLogic) AddressUpdate(req *types.AddressRequest, userinfo * return resp.SetStatusWithMessage(basic.CodeApiErr, err.Error()) } + if req.IsDefault > 0 { + l.svcCtx.AllModels.FsAddress.SettingUserDefaultAddress(l.ctx, userinfo.UserId, address.AddressId) + } + addresses, err := l.svcCtx.AllModels.FsAddress.GetUserAllAddress(l.ctx, userinfo.UserId) if err != nil { logx.Error(err) From 649e635d1754d6f5b9c679b125182d3d2db073b1 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 16:54:10 +0800 Subject: [PATCH 7/9] info get profile --- model/gmodel/fs_address_logic.go | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/model/gmodel/fs_address_logic.go b/model/gmodel/fs_address_logic.go index 8b7ae175..061e9e43 100755 --- a/model/gmodel/fs_address_logic.go +++ b/model/gmodel/fs_address_logic.go @@ -109,12 +109,27 @@ func (a *FsAddressModel) SettingUserDefaultAddress(ctx context.Context, userId i return nil }) - return + return err } func (a *FsAddressModel) DeleteOne(ctx context.Context, addressId int64, userId int64) (err error) { err = a.db.WithContext(ctx).Model(&FsAddress{}). - Where("`address_id` = ? and `user_id` = ? and `status` = ? ", addressId, userId, 1). + Where("`address_id` = ? and `user_id` = ? and `status` = 1 ", addressId, userId). UpdateColumn("status", 0).Error return err } + +// UpdateUsedAddress 当每次订单成功后, 更新一次地址使用时间 +func (a *FsAddressModel) UpdateUsedAddress(ctx context.Context, addressId int64, userId int64) (err error) { + err = a.db.WithContext(ctx).Model(&FsAddress{}).Transaction(func(tx *gorm.DB) error { + logx.Info("address_id:", addressId, " update used") + now := time.Now().UTC() + err = tx.Where("`user_id` = ? and `status` = 1 and `address_id` = ? and `ltime` < ?", userId, addressId, now). + UpdateColumn("ltime", now).Error + if err != nil { + return err + } + return nil + }) + return err +} From f7d0a6422efb135629496f01f1baa7762b9497c2 Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 17:06:38 +0800 Subject: [PATCH 8/9] info address used --- .../handler/addressusedupdatehandler.go | 35 ++++++++++++ server/info/internal/handler/routes.go | 5 ++ .../internal/logic/addressusedupdatelogic.go | 54 +++++++++++++++++++ server_api/info.api | 3 ++ 4 files changed, 97 insertions(+) create mode 100644 server/info/internal/handler/addressusedupdatehandler.go create mode 100644 server/info/internal/logic/addressusedupdatelogic.go diff --git a/server/info/internal/handler/addressusedupdatehandler.go b/server/info/internal/handler/addressusedupdatehandler.go new file mode 100644 index 00000000..ed360210 --- /dev/null +++ b/server/info/internal/handler/addressusedupdatehandler.go @@ -0,0 +1,35 @@ +package handler + +import ( + "net/http" + "reflect" + + "fusenapi/utils/basic" + + "fusenapi/server/info/internal/logic" + "fusenapi/server/info/internal/svc" + "fusenapi/server/info/internal/types" +) + +func AddressUsedUpdateHandler(svcCtx *svc.ServiceContext) http.HandlerFunc { + return func(w http.ResponseWriter, r *http.Request) { + + var req types.AddressIdRequest + userinfo, err := basic.RequestParse(w, r, svcCtx, &req) + if err != nil { + return + } + + // 创建一个业务逻辑层实例 + l := logic.NewAddressUsedUpdateLogic(r.Context(), svcCtx) + + rl := reflect.ValueOf(l) + basic.BeforeLogic(w, r, rl) + + resp := l.AddressUsedUpdate(&req, userinfo) + + if !basic.AfterLogic(w, r, rl, resp) { + basic.NormalAfterLogic(w, r, resp) + } + } +} diff --git a/server/info/internal/handler/routes.go b/server/info/internal/handler/routes.go index b2194efd..f35abb84 100644 --- a/server/info/internal/handler/routes.go +++ b/server/info/internal/handler/routes.go @@ -42,6 +42,11 @@ func RegisterHandlers(server *rest.Server, serverCtx *svc.ServiceContext) { Path: "/api/info/address/update", Handler: AddressUpdateHandler(serverCtx), }, + { + Method: http.MethodPost, + Path: "/api/info/address/update/used", + Handler: AddressUsedUpdateHandler(serverCtx), + }, { Method: http.MethodPost, Path: "/api/info/address/delete", diff --git a/server/info/internal/logic/addressusedupdatelogic.go b/server/info/internal/logic/addressusedupdatelogic.go new file mode 100644 index 00000000..d6cdc5eb --- /dev/null +++ b/server/info/internal/logic/addressusedupdatelogic.go @@ -0,0 +1,54 @@ +package logic + +import ( + "fusenapi/utils/auth" + "fusenapi/utils/basic" + + "context" + + "fusenapi/server/info/internal/svc" + "fusenapi/server/info/internal/types" + + "github.com/zeromicro/go-zero/core/logx" +) + +type AddressUsedUpdateLogic struct { + logx.Logger + ctx context.Context + svcCtx *svc.ServiceContext +} + +func NewAddressUsedUpdateLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AddressUsedUpdateLogic { + return &AddressUsedUpdateLogic{ + Logger: logx.WithContext(ctx), + ctx: ctx, + svcCtx: svcCtx, + } +} + +// 处理进入前逻辑w,r +// func (l *AddressUsedUpdateLogic) BeforeLogic(w http.ResponseWriter, r *http.Request) { +// } + +func (l *AddressUsedUpdateLogic) AddressUsedUpdate(req *types.AddressIdRequest, userinfo *auth.UserInfo) (resp *basic.Response) { + // 返回值必须调用Set重新返回, resp可以空指针调用 resp.SetStatus(basic.CodeOK, data) + // userinfo 传入值时, 一定不为null + if !userinfo.IsUser() { + return resp.SetStatus(basic.CodeUnAuth) + } + + err := l.svcCtx.AllModels.FsAddress.UpdateUsedAddress(l.ctx, req.AddressId, userinfo.UserId) + if err != nil { + return resp.SetStatusWithMessage(basic.CodeApiErr, err.Error()) + } + + return resp.SetStatus(basic.CodeOK, map[string]any{ + "address_id": req.AddressId, + }) // 返回成功并返回地址ID + +} + +// 处理逻辑后 w,r 如:重定向, resp 必须重新处理 +// func (l *AddressUsedUpdateLogic) AfterLogic(w http.ResponseWriter, r *http.Request, resp *basic.Response) { +// // httpx.OkJsonCtx(r.Context(), w, resp) +// } diff --git a/server_api/info.api b/server_api/info.api index 783e0307..821a46e0 100644 --- a/server_api/info.api +++ b/server_api/info.api @@ -28,6 +28,9 @@ service info { @handler AddressUpdateHandler post /api/info/address/update(AddressRequest) returns (response); + @handler AddressUsedUpdateHandler + post /api/info/address/update/used(AddressIdRequest) returns (response); + @handler AddressDeleteHandler post /api/info/address/delete(AddressIdRequest) returns (response); From de751d5d68f8d8aaecb1ca589dac10ffb653fa7b Mon Sep 17 00:00:00 2001 From: eson <9673575+githubcontent@user.noreply.gitee.com> Date: Thu, 28 Sep 2023 17:27:52 +0800 Subject: [PATCH 9/9] info address used --- model/gmodel/fs_address_logic.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/model/gmodel/fs_address_logic.go b/model/gmodel/fs_address_logic.go index 061e9e43..c8f47563 100755 --- a/model/gmodel/fs_address_logic.go +++ b/model/gmodel/fs_address_logic.go @@ -14,7 +14,7 @@ func (a *FsAddressModel) GetOne(ctx context.Context, addressId int64, userId int } 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("`ltime` DESC").Find(&resp).Error + err = a.db.WithContext(ctx).Model(&FsAddress{}).Where("`user_id` = ? and `status` = 1", userId).Order("`ltime` DESC").Find(&resp).Error if err != nil { return nil, err } @@ -70,7 +70,7 @@ func (a *FsAddressModel) CreateOne(ctx context.Context, address *FsAddress) (res func (a *FsAddressModel) UpdateAddress(ctx context.Context, address *FsAddress) (err error) { err = a.db.WithContext(ctx).Model(&FsAddress{}).Transaction(func(tx *gorm.DB) error { err = tx. - Where("user_id = ? and address_id = ? and status = 1 ", address.UserId, address.AddressId). + Where("address_id = ? and user_id = ? and status = 1 ", address.AddressId, address.UserId). Updates(address).Error if err != nil { return err @@ -88,19 +88,19 @@ func (a *FsAddressModel) SettingUserDefaultAddress(ctx context.Context, userId i now := time.Now().UTC() - err = tx.Where("`user_id` = ? and `status` = 1 and `address_id` = ? ", userId, addressId).Take(nil).Error + err = tx.Where("`address_id` = ? and `user_id` = ? and `status` = 1 ", addressId, userId).Take(nil).Error if err != nil { return err } - err = tx.Where("`user_id` = ? and `status` = 1 and `address_id` = ?", userId, addressId). + err = tx.Where("`address_id` = ? and `user_id` = ? and `status` = 1 ", addressId, userId). UpdateColumn("ltime", now.AddDate(250, 0, 0)). UpdateColumn("utime", now).Error if err != nil { return err } - err = tx.Model(&FsAddress{}).Where("`user_id` = ? and `status` = 1 and `address_id` != ? and `ltime` > ?", userId, addressId, now.AddDate(10, 0, 0)). + err = tx.Model(&FsAddress{}).Where("`address_id` != ? and `user_id` = ? and `status` = 1 and `ltime` > ?", addressId, userId, now.AddDate(10, 0, 0)). UpdateColumn("ltime", now).Error if err != nil { logx.Error(err) @@ -124,7 +124,7 @@ func (a *FsAddressModel) UpdateUsedAddress(ctx context.Context, addressId int64, err = a.db.WithContext(ctx).Model(&FsAddress{}).Transaction(func(tx *gorm.DB) error { logx.Info("address_id:", addressId, " update used") now := time.Now().UTC() - err = tx.Where("`user_id` = ? and `status` = 1 and `address_id` = ? and `ltime` < ?", userId, addressId, now). + err = tx.Where("`address_id` = ? and `user_id` = ? and `status` = 1 and `ltime` < ?", addressId, userId, now). UpdateColumn("ltime", now).Error if err != nil { return err