From 63bc1c57e6d9ea70cde945d84496bddfa4f2d044 Mon Sep 17 00:00:00 2001 From: Michael Li Date: Fri, 23 Dec 2022 14:29:32 +0800 Subject: [PATCH] add internal/servants/web servants init logic --- internal/model/web/admin.go | 2 +- internal/model/web/alipay.go | 2 +- internal/model/web/core.go | 4 +- internal/model/web/followship.go | 2 +- internal/model/web/friendship.go | 2 +- internal/model/web/loose.go | 2 +- internal/model/web/priv.go | 2 +- internal/model/web/web.go | 4 ++ internal/servants/base/base.go | 9 +++ internal/servants/web/alipay.go | 90 ++++++++++++++++++++++++++++- internal/servants/web/followship.go | 50 +++++++++++++++- internal/servants/web/friendship.go | 50 +++++++++++++++- internal/servants/web/loose.go | 50 +++++++++++++++- internal/servants/web/priv.go | 50 +++++++++++++++- internal/servants/web/pub.go | 50 +++++++++++++++- internal/servants/web/web.go | 19 +++++- internal/servants/web/xerror.go | 69 +++++++++++----------- 17 files changed, 407 insertions(+), 50 deletions(-) diff --git a/internal/model/web/admin.go b/internal/model/web/admin.go index ab4747fd..765d507a 100644 --- a/internal/model/web/admin.go +++ b/internal/model/web/admin.go @@ -1,5 +1,5 @@ package web type ChangeUserStatusReq struct { - *BaseInfo + *BaseInfo `json:"-"` } diff --git a/internal/model/web/alipay.go b/internal/model/web/alipay.go index 4b4549bd..15fc2321 100644 --- a/internal/model/web/alipay.go +++ b/internal/model/web/alipay.go @@ -1,7 +1,7 @@ package web type UserWalletBillsReq struct { - *BaseInfo + *BaseInfo `json:"-"` } type UserWalletBillsResp struct { diff --git a/internal/model/web/core.go b/internal/model/web/core.go index ca989990..12243a1e 100644 --- a/internal/model/web/core.go +++ b/internal/model/web/core.go @@ -5,11 +5,11 @@ package web type ChangeAvatarReq struct { - *BaseInfo + *BaseInfo `json:"-"` } type UserInfoReq struct { - *BaseInfo + *BaseInfo `json:"-"` } type UserInfoResp struct { diff --git a/internal/model/web/followship.go b/internal/model/web/followship.go index dc51409e..1b1f0428 100644 --- a/internal/model/web/followship.go +++ b/internal/model/web/followship.go @@ -5,7 +5,7 @@ package web type ListFollowersReq struct { - *BaseInfo + *BaseInfo `json:"-"` } type ListFollowersResp struct { diff --git a/internal/model/web/friendship.go b/internal/model/web/friendship.go index 79612078..1cece059 100644 --- a/internal/model/web/friendship.go +++ b/internal/model/web/friendship.go @@ -5,7 +5,7 @@ package web type GetContactsReq struct { - *BaseInfo + *BaseInfo `json:"-"` } type GetContactsResp struct { diff --git a/internal/model/web/loose.go b/internal/model/web/loose.go index cd9d3fe4..26a3aa6e 100644 --- a/internal/model/web/loose.go +++ b/internal/model/web/loose.go @@ -1,7 +1,7 @@ package web type TimelineReq struct { - *BaseInfo + *BaseInfo `json:"-"` } type TimelineResp struct { diff --git a/internal/model/web/priv.go b/internal/model/web/priv.go index 7e8efd65..d6ced02e 100644 --- a/internal/model/web/priv.go +++ b/internal/model/web/priv.go @@ -1,7 +1,7 @@ package web type CreateTweetReq struct { - *BaseInfo + *BaseInfo `json:"-"` } type CreateTweetResp struct { diff --git a/internal/model/web/web.go b/internal/model/web/web.go index 8ac4236d..dd04971a 100644 --- a/internal/model/web/web.go +++ b/internal/model/web/web.go @@ -11,3 +11,7 @@ import ( type BaseInfo struct { User *core.User } + +func (b *BaseInfo) SetUser(user *core.User) { + b.User = user +} diff --git a/internal/servants/base/base.go b/internal/servants/base/base.go index 3a1c3382..eac975ed 100644 --- a/internal/servants/base/base.go +++ b/internal/servants/base/base.go @@ -31,6 +31,10 @@ type JsonResp struct { Data any `json:",omitempty"` } +type UserSetter interface { + SetUser(*core.User) +} + func UserFrom(c *gin.Context) (*core.User, bool) { if u, exists := c.Get("USER"); exists { user, ok := u.(*core.User) @@ -45,6 +49,11 @@ func BindAny(c *gin.Context, obj any) mir.Error { if err != nil { return mir.NewError(xerror.InvalidParams.Code(), xerror.InvalidParams.WithDetails(errs.Error())) } + // setup *core.User if needed + if setter, ok := obj.(UserSetter); ok { + user, _ := UserFrom(c) + setter.SetUser(user) + } return nil } diff --git a/internal/servants/web/alipay.go b/internal/servants/web/alipay.go index 80cfd7b7..d8c143eb 100644 --- a/internal/servants/web/alipay.go +++ b/internal/servants/web/alipay.go @@ -4,6 +4,92 @@ package web -type webAlipaySrv struct { - // TODO +import ( + "github.com/gin-gonic/gin" + api "github.com/rocboss/paopao-ce/auto/api/v1" + "github.com/rocboss/paopao-ce/internal/servants/base" + "github.com/rocboss/paopao-ce/internal/servants/chain" +) + +var ( + _ api.WebAlipayPub = (*webAlipayPubSrv)(nil) + _ api.WebAlipayPubBinding = (*webAlipayPubBinding)(nil) + _ api.WebAlipayPubRender = (*webAlipayPubRender)(nil) + _ api.WebAlipayPriv = (*webAlipayPrivSrv)(nil) + _ api.WebAlipayPrivBinding = (*webAlipayPrivBinding)(nil) + _ api.WebAlipayPrivRender = (*webAlipayPrivRender)(nil) +) + +type webAlipayPubSrv struct { + base.BaseServant + api.UnimplementedWebAlipayPubServant +} + +type webAlipayPubBinding struct { + base.BaseBinding + *api.UnimplementedWebAlipayPubBinding +} + +type webAlipayPubRender struct { + base.BaseRender + *api.UnimplementedWebAlipayPubRender +} + +type webAlipayPrivSrv struct { + base.BaseServant + api.UnimplementedWebAlipayPrivServant +} + +type webAlipayPrivBinding struct { + base.BaseBinding + *api.UnimplementedWebAlipayPrivBinding +} + +type webAlipayPrivRender struct { + base.BaseRender + *api.UnimplementedWebAlipayPrivRender +} + +func (s *webAlipayPrivSrv) Chain() gin.HandlersChain { + return gin.HandlersChain{chain.JWT()} +} + +func newWebAlipayPubSrv() api.WebAlipayPub { + return &webAlipayPubSrv{} +} + +func newWebAlipayPubBinding() api.WebAlipayPubBinding { + return &webAlipayPubBinding{ + UnimplementedWebAlipayPubBinding: &api.UnimplementedWebAlipayPubBinding{ + BindAny: base.BindAny, + }, + } +} + +func newWebAlipayPubRender() api.WebAlipayPubRender { + return &webAlipayPubRender{ + UnimplementedWebAlipayPubRender: &api.UnimplementedWebAlipayPubRender{ + RenderAny: base.RenderAny, + }, + } +} + +func newWebAlipayPrivSrv() api.WebAlipayPriv { + return &webAlipayPrivSrv{} +} + +func newWebAlipayPrivBinding() api.WebAlipayPrivBinding { + return &webAlipayPrivBinding{ + UnimplementedWebAlipayPrivBinding: &api.UnimplementedWebAlipayPrivBinding{ + BindAny: base.BindAny, + }, + } +} + +func newWebAlipayPrivRender() api.WebAlipayPrivRender { + return &webAlipayPrivRender{ + UnimplementedWebAlipayPrivRender: &api.UnimplementedWebAlipayPrivRender{ + RenderAny: base.RenderAny, + }, + } } diff --git a/internal/servants/web/followship.go b/internal/servants/web/followship.go index 4158de39..a9c077f3 100644 --- a/internal/servants/web/followship.go +++ b/internal/servants/web/followship.go @@ -4,6 +4,54 @@ package web +import ( + "github.com/gin-gonic/gin" + api "github.com/rocboss/paopao-ce/auto/api/v1" + "github.com/rocboss/paopao-ce/internal/servants/base" + "github.com/rocboss/paopao-ce/internal/servants/chain" +) + +var ( + _ api.WebFollowship = (*webFollowshipSrv)(nil) + _ api.WebFollowshipBinding = (*webFollowshipBinding)(nil) + _ api.WebFollowshipRender = (*webFollowshipRender)(nil) +) + type webFollowshipSrv struct { - // TODO + base.BaseServant + api.UnimplementedWebFollowshipServant +} + +type webFollowshipBinding struct { + base.BaseBinding + *api.UnimplementedWebFollowshipBinding +} + +type webFollowshipRender struct { + base.BaseRender + *api.UnimplementedWebFollowshipRender +} + +func (s *webFollowshipSrv) Chain() gin.HandlersChain { + return gin.HandlersChain{chain.JWT()} +} + +func newWebFollowshipSrv() api.WebFollowship { + return &webFollowshipSrv{} +} + +func newWebFollowshipBinding() api.WebFollowshipBinding { + return &webFollowshipBinding{ + UnimplementedWebFollowshipBinding: &api.UnimplementedWebFollowshipBinding{ + BindAny: base.BindAny, + }, + } +} + +func newWebFollowshipRender() api.WebFollowshipRender { + return &webFollowshipRender{ + UnimplementedWebFollowshipRender: &api.UnimplementedWebFollowshipRender{ + RenderAny: base.RenderAny, + }, + } } diff --git a/internal/servants/web/friendship.go b/internal/servants/web/friendship.go index a4fb3d59..042bf0a5 100644 --- a/internal/servants/web/friendship.go +++ b/internal/servants/web/friendship.go @@ -4,6 +4,54 @@ package web +import ( + "github.com/gin-gonic/gin" + api "github.com/rocboss/paopao-ce/auto/api/v1" + "github.com/rocboss/paopao-ce/internal/servants/base" + "github.com/rocboss/paopao-ce/internal/servants/chain" +) + +var ( + _ api.WebFriendship = (*webFriendshipSrv)(nil) + _ api.WebFriendshipBinding = (*webFriendshipBinding)(nil) + _ api.WebFriendshipRender = (*webFriendshipRender)(nil) +) + type webFriendshipSrv struct { - // TODO + base.BaseServant + api.UnimplementedWebFriendshipServant +} + +type webFriendshipBinding struct { + base.BaseBinding + *api.UnimplementedWebFriendshipBinding +} + +type webFriendshipRender struct { + base.BaseRender + *api.UnimplementedWebFriendshipRender +} + +func (s *webFriendshipSrv) Chain() gin.HandlersChain { + return gin.HandlersChain{chain.JWT()} +} + +func newWebFriendshipSrv() api.WebFriendship { + return &webFriendshipSrv{} +} + +func newWebFriendshipBinding() api.WebFriendshipBinding { + return &webFriendshipBinding{ + UnimplementedWebFriendshipBinding: &api.UnimplementedWebFriendshipBinding{ + BindAny: base.BindAny, + }, + } +} + +func newWebFriendshipRender() api.WebFriendshipRender { + return &webFriendshipRender{ + UnimplementedWebFriendshipRender: &api.UnimplementedWebFriendshipRender{ + RenderAny: base.RenderAny, + }, + } } diff --git a/internal/servants/web/loose.go b/internal/servants/web/loose.go index 51a309a1..04a75faa 100644 --- a/internal/servants/web/loose.go +++ b/internal/servants/web/loose.go @@ -4,6 +4,54 @@ package web +import ( + "github.com/gin-gonic/gin" + api "github.com/rocboss/paopao-ce/auto/api/v1" + "github.com/rocboss/paopao-ce/internal/servants/base" + "github.com/rocboss/paopao-ce/internal/servants/chain" +) + +var ( + _ api.WebLoose = (*webLooseSrv)(nil) + _ api.WebLooseBinding = (*webLooseBinding)(nil) + _ api.WebLooseRender = (*webLooseRender)(nil) +) + type webLooseSrv struct { - // TODO + base.BaseServant + api.UnimplementedWebLooseServant +} + +type webLooseBinding struct { + base.BaseBinding + *api.UnimplementedWebLooseBinding +} + +type webLooseRender struct { + base.BaseRender + *api.UnimplementedWebLooseRender +} + +func (s *webLooseSrv) Chain() gin.HandlersChain { + return gin.HandlersChain{chain.JwtLoose()} +} + +func newWebLooseSrv() api.WebLoose { + return &webLooseSrv{} +} + +func newWebLooseBinding() api.WebLooseBinding { + return &webLooseBinding{ + UnimplementedWebLooseBinding: &api.UnimplementedWebLooseBinding{ + BindAny: base.BindAny, + }, + } +} + +func newWebLooseRender() api.WebLooseRender { + return &webLooseRender{ + UnimplementedWebLooseRender: &api.UnimplementedWebLooseRender{ + RenderAny: base.RenderAny, + }, + } } diff --git a/internal/servants/web/priv.go b/internal/servants/web/priv.go index 51f0f486..96485fec 100644 --- a/internal/servants/web/priv.go +++ b/internal/servants/web/priv.go @@ -4,6 +4,54 @@ package web +import ( + "github.com/gin-gonic/gin" + api "github.com/rocboss/paopao-ce/auto/api/v1" + "github.com/rocboss/paopao-ce/internal/servants/base" + "github.com/rocboss/paopao-ce/internal/servants/chain" +) + +var ( + _ api.WebPriv = (*webPrivSrv)(nil) + _ api.WebPrivBinding = (*webPrivBinding)(nil) + _ api.WebPrivRender = (*webPrivRender)(nil) +) + type webPrivSrv struct { - // TODO + base.BaseServant + api.UnimplementedWebPrivServant +} + +type webPrivBinding struct { + base.BaseBinding + *api.UnimplementedWebPrivBinding +} + +type webPrivRender struct { + base.BaseRender + *api.UnimplementedWebPrivRender +} + +func (s *webPrivSrv) Chain() gin.HandlersChain { + return gin.HandlersChain{chain.JWT(), chain.Priv()} +} + +func newWebPrivSrv() api.WebPriv { + return &webPrivSrv{} +} + +func newWebPrivBinding() api.WebPrivBinding { + return &webPrivBinding{ + UnimplementedWebPrivBinding: &api.UnimplementedWebPrivBinding{ + BindAny: base.BindAny, + }, + } +} + +func newWebPrivRender() api.WebPrivRender { + return &webPrivRender{ + UnimplementedWebPrivRender: &api.UnimplementedWebPrivRender{ + RenderAny: base.RenderAny, + }, + } } diff --git a/internal/servants/web/pub.go b/internal/servants/web/pub.go index d7c68ec5..689cbc32 100644 --- a/internal/servants/web/pub.go +++ b/internal/servants/web/pub.go @@ -4,6 +4,54 @@ package web +import ( + "github.com/gin-gonic/gin" + api "github.com/rocboss/paopao-ce/auto/api/v1" + "github.com/rocboss/paopao-ce/internal/servants/base" + "github.com/rocboss/paopao-ce/internal/servants/chain" +) + +var ( + _ api.WebPub = (*webPubSrv)(nil) + _ api.WebPubBinding = (*webPubBinding)(nil) + _ api.WebPubRender = (*webPubRender)(nil) +) + type webPubSrv struct { - // TODO + base.BaseServant + api.UnimplementedWebPubServant +} + +type webPubBinding struct { + base.BaseBinding + *api.UnimplementedWebPubBinding +} + +type webPubRender struct { + base.BaseRender + *api.UnimplementedWebPubRender +} + +func (s *webPubSrv) Chain() gin.HandlersChain { + return gin.HandlersChain{chain.JwtLoose()} +} + +func newWebPubSrv() api.WebPub { + return &webPubSrv{} +} + +func newWebPubBinding() api.WebPubBinding { + return &webPubBinding{ + UnimplementedWebPubBinding: &api.UnimplementedWebPubBinding{ + BindAny: base.BindAny, + }, + } +} + +func newWebPubRender() api.WebPubRender { + return &webPubRender{ + UnimplementedWebPubRender: &api.UnimplementedWebPubRender{ + RenderAny: base.RenderAny, + }, + } } diff --git a/internal/servants/web/web.go b/internal/servants/web/web.go index 12cd6937..d19444a7 100644 --- a/internal/servants/web/web.go +++ b/internal/servants/web/web.go @@ -5,12 +5,29 @@ package web import ( + "github.com/alimy/cfg" "github.com/gin-gonic/gin" api "github.com/rocboss/paopao-ce/auto/api/v1" ) // RouteWeb register web route func RouteWeb(e *gin.Engine) { - api.RegisterWebCoreServant(e, newWebCoreSrv(), newWebCoreBinding(), newWebCoreRender()) api.RegisterWebAdminServant(e, newWebAdminSrv(), newWebAdminBinding(), newWebAdminRender()) + api.RegisterWebCoreServant(e, newWebCoreSrv(), newWebCoreBinding(), newWebCoreRender()) + api.RegisterWebLooseServant(e, newWebLooseSrv(), newWebLooseBinding(), newWebLooseRender()) + api.RegisterWebPrivServant(e, newWebPrivSrv(), newWebPrivBinding(), newWebPrivRender()) + api.RegisterWebPubServant(e, newWebPubSrv(), newWebPubBinding(), newWebPubRender()) + + cfg.In(cfg.Actions{ + "Alipay": func() { + api.RegisterWebAlipayPubServant(e, newWebAlipayPubSrv(), newWebAlipayPubBinding(), newWebAlipayPubRender()) + api.RegisterWebAlipayPrivServant(e, newWebAlipayPrivSrv(), newWebAlipayPrivBinding(), newWebAlipayPrivRender()) + }, + "Followship": func() { + api.RegisterWebFollowshipServant(e, newWebFollowshipSrv(), newWebFollowshipBinding(), newWebFollowshipRender()) + }, + "Friendship": func() { + api.RegisterWebFriendshipServant(e, newWebFriendshipSrv(), newWebFriendshipBinding(), newWebFriendshipRender()) + }, + }) } diff --git a/internal/servants/web/xerror.go b/internal/servants/web/xerror.go index ecc0355e..f5c9aeb3 100644 --- a/internal/servants/web/xerror.go +++ b/internal/servants/web/xerror.go @@ -8,42 +8,43 @@ import ( "github.com/rocboss/paopao-ce/pkg/xerror" ) +// nolint var ( - errUsernameHasExisted = xerror.NewError(20001, "用户名已存在") - errUsernameLengthLimit = xerror.NewError(20002, "用户名长度3~12") - errUsernameCharLimit = xerror.NewError(20003, "用户名只能包含字母、数字") - errPasswordLengthLimit = xerror.NewError(20004, "密码长度6~16") - errUserRegisterFailed = xerror.NewError(20005, "用户注册失败") - errUserHasBeenBanned = xerror.NewError(20006, "该账户已被封停") - errNoPermission = xerror.NewError(20007, "无权限执行该请求") - errUserHasBindOTP = xerror.NewError(20008, "当前用户已绑定二次验证") - errUserOTPInvalid = xerror.NewError(20009, "二次验证码验证失败") - errUserNoBindOTP = xerror.NewError(20010, "当前用户未绑定二次验证") - errErrorOldPassword = xerror.NewError(20011, "当前用户密码验证失败") - errErrorCaptchaPassword = xerror.NewError(20012, "图形验证码验证失败") - errAccountNoPhoneBind = xerror.NewError(20013, "拒绝操作: 账户未绑定手机号") - errTooManyLoginError = xerror.NewError(20014, "登录失败次数过多,请稍后再试") - errGetPhoneCaptchaError = xerror.NewError(20015, "短信验证码获取失败") - errTooManyPhoneCaptchaSend = xerror.NewError(20016, "短信验证码获取次数已达今日上限") - errExistedUserPhone = xerror.NewError(20017, "该手机号已被绑定") - errErrorPhoneCaptcha = xerror.NewError(20018, "手机验证码不正确") - errMaxPhoneCaptchaUseTimes = xerror.NewError(20019, "手机验证码已达最大使用次数") - errNicknameLengthLimit = xerror.NewError(20020, "昵称长度2~12") - errNoExistUsername = xerror.NewError(20021, "用户不存在") - errNoAdminPermission = xerror.NewError(20022, "无管理权限") + _errUsernameHasExisted = xerror.NewError(20001, "用户名已存在") + _errUsernameLengthLimit = xerror.NewError(20002, "用户名长度3~12") + _errUsernameCharLimit = xerror.NewError(20003, "用户名只能包含字母、数字") + _errPasswordLengthLimit = xerror.NewError(20004, "密码长度6~16") + _errUserRegisterFailed = xerror.NewError(20005, "用户注册失败") + _errUserHasBeenBanned = xerror.NewError(20006, "该账户已被封停") + _errNoPermission = xerror.NewError(20007, "无权限执行该请求") + _errUserHasBindOTP = xerror.NewError(20008, "当前用户已绑定二次验证") + _errUserOTPInvalid = xerror.NewError(20009, "二次验证码验证失败") + _errUserNoBindOTP = xerror.NewError(20010, "当前用户未绑定二次验证") + _errErrorOldPassword = xerror.NewError(20011, "当前用户密码验证失败") + _errErrorCaptchaPassword = xerror.NewError(20012, "图形验证码验证失败") + _errAccountNoPhoneBind = xerror.NewError(20013, "拒绝操作: 账户未绑定手机号") + _errTooManyLoginError = xerror.NewError(20014, "登录失败次数过多,请稍后再试") + _errGetPhoneCaptchaError = xerror.NewError(20015, "短信验证码获取失败") + _errTooManyPhoneCaptchaSend = xerror.NewError(20016, "短信验证码获取次数已达今日上限") + _errExistedUserPhone = xerror.NewError(20017, "该手机号已被绑定") + _errErrorPhoneCaptcha = xerror.NewError(20018, "手机验证码不正确") + _errMaxPhoneCaptchaUseTimes = xerror.NewError(20019, "手机验证码已达最大使用次数") + _errNicknameLengthLimit = xerror.NewError(20020, "昵称长度2~12") + _errNoExistUsername = xerror.NewError(20021, "用户不存在") + _errNoAdminPermission = xerror.NewError(20022, "无管理权限") - errGetPostsFailed = xerror.NewError(30001, "获取动态列表失败") - errCreatePostFailed = xerror.NewError(30002, "动态发布失败") - errGetPostFailed = xerror.NewError(30003, "获取动态详情失败") - errDeletePostFailed = xerror.NewError(30004, "动态删除失败") - errLockPostFailed = xerror.NewError(30005, "动态锁定失败") - errGetPostTagsFailed = xerror.NewError(30006, "获取话题列表失败") - errInvalidDownloadReq = xerror.NewError(30007, "附件下载请求不合法") - errDownloadReqError = xerror.NewError(30008, "附件下载请求失败") - errInsuffientDownloadMoney = xerror.NewError(30009, "附件下载失败:账户资金不足") - errDownloadExecFail = xerror.NewError(30010, "附件下载失败:扣费失败") - errStickPostFailed = xerror.NewError(30011, "动态置顶失败") - errVisblePostFailed = xerror.NewError(30012, "更新可见性失败") + _errGetPostsFailed = xerror.NewError(30001, "获取动态列表失败") + _errCreatePostFailed = xerror.NewError(30002, "动态发布失败") + _errGetPostFailed = xerror.NewError(30003, "获取动态详情失败") + _errDeletePostFailed = xerror.NewError(30004, "动态删除失败") + _errLockPostFailed = xerror.NewError(30005, "动态锁定失败") + _errGetPostTagsFailed = xerror.NewError(30006, "获取话题列表失败") + _errInvalidDownloadReq = xerror.NewError(30007, "附件下载请求不合法") + _errDownloadReqError = xerror.NewError(30008, "附件下载请求失败") + _errInsuffientDownloadMoney = xerror.NewError(30009, "附件下载失败:账户资金不足") + _errDownloadExecFail = xerror.NewError(30010, "附件下载失败:扣费失败") + _errStickPostFailed = xerror.NewError(30011, "动态置顶失败") + _errVisblePostFailed = xerror.NewError(30012, "更新可见性失败") errGetCommentsFailed = xerror.NewError(40001, "获取评论列表失败") errCreateCommentFailed = xerror.NewError(40002, "评论发布失败")