use github.com/alimy/mir/v4 as web api generator

pull/327/head
Michael Li 2 years ago
parent 4432559389
commit ae22095604
No known key found for this signature in database

@ -1,16 +1,29 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
type _binding_ interface {
Bind(*gin.Context) mir.Error
}
type _render_ interface {
Render(*gin.Context)
}
type _default_ interface {
Bind(*gin.Context, any) mir.Error
Render(*gin.Context, any, mir.Error)
}
type LoginReq struct { type LoginReq struct {
AgentInfo AgentInfo `json:"agent_info"` AgentInfo AgentInfo `json:"agent_info"`
Name string `json:"name"` Name string `json:"name"`
@ -37,6 +50,8 @@ type UserInfo struct {
} }
type User interface { type User interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -46,21 +61,8 @@ type User interface {
mustEmbedUnimplementedUserServant() mustEmbedUnimplementedUserServant()
} }
type UserBinding interface {
BindLogin(*gin.Context) (*LoginReq, mir.Error)
mustEmbedUnimplementedUserBinding()
}
type UserRender interface {
RenderLogout(*gin.Context, mir.Error)
RenderLogin(*gin.Context, *LoginResp, mir.Error)
mustEmbedUnimplementedUserRender()
}
// RegisterUserServant register User servant to gin // RegisterUserServant register User servant to gin
func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) { func RegisterUserServant(e *gin.Engine, s User) {
router := e.Group("m/v1") router := e.Group("m/v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -74,9 +76,8 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
r.RenderLogout(c, s.Logout()) s.Render(c, nil, s.Logout())
}) })
router.Handle("POST", "/user/login/", func(c *gin.Context) { router.Handle("POST", "/user/login/", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -84,20 +85,36 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
req, err := b.BindLogin(c) var (
obj any
err mir.Error
)
req := new(LoginReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderLogin(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.Login(req) obj, err = s.Login(req)
r.RenderLogin(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
} }
// UnimplementedUserServant can be embedded to have forward compatible implementations. // UnimplementedUserServant can be embedded to have forward compatible implementations.
type UnimplementedUserServant struct { type UnimplementedUserServant struct{}
}
func (UnimplementedUserServant) Chain() gin.HandlersChain { func (UnimplementedUserServant) Chain() gin.HandlersChain {
return nil return nil
@ -112,31 +129,3 @@ func (UnimplementedUserServant) Login(req *LoginReq) (*LoginResp, mir.Error) {
} }
func (UnimplementedUserServant) mustEmbedUnimplementedUserServant() {} func (UnimplementedUserServant) mustEmbedUnimplementedUserServant() {}
// UnimplementedUserRender can be embedded to have forward compatible implementations.
type UnimplementedUserRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedUserRender) RenderLogout(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedUserRender) RenderLogin(c *gin.Context, data *LoginResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedUserRender) mustEmbedUnimplementedUserRender() {}
// UnimplementedUserBinding can be embedded to have forward compatible implementations.
type UnimplementedUserBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedUserBinding) BindLogin(c *gin.Context) (*LoginReq, mir.Error) {
obj := new(LoginReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedUserBinding) mustEmbedUnimplementedUserBinding() {}

@ -1,16 +1,29 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
type _binding_ interface {
Bind(*gin.Context) mir.Error
}
type _render_ interface {
Render(*gin.Context)
}
type _default_ interface {
Bind(*gin.Context, any) mir.Error
Render(*gin.Context, any, mir.Error)
}
type LoginReq struct { type LoginReq struct {
AgentInfo AgentInfo `json:"agent_info"` AgentInfo AgentInfo `json:"agent_info"`
Name string `json:"name"` Name string `json:"name"`
@ -37,6 +50,8 @@ type UserInfo struct {
} }
type User interface { type User interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -46,21 +61,8 @@ type User interface {
mustEmbedUnimplementedUserServant() mustEmbedUnimplementedUserServant()
} }
type UserBinding interface {
BindLogin(*gin.Context) (*LoginReq, mir.Error)
mustEmbedUnimplementedUserBinding()
}
type UserRender interface {
RenderLogout(*gin.Context, mir.Error)
RenderLogin(*gin.Context, *LoginResp, mir.Error)
mustEmbedUnimplementedUserRender()
}
// RegisterUserServant register User servant to gin // RegisterUserServant register User servant to gin
func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) { func RegisterUserServant(e *gin.Engine, s User) {
router := e.Group("r/v1") router := e.Group("r/v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -74,9 +76,8 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
r.RenderLogout(c, s.Logout()) s.Render(c, nil, s.Logout())
}) })
router.Handle("POST", "/user/login/", func(c *gin.Context) { router.Handle("POST", "/user/login/", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -84,20 +85,36 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
req, err := b.BindLogin(c) var (
obj any
err mir.Error
)
req := new(LoginReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderLogin(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.Login(req) obj, err = s.Login(req)
r.RenderLogin(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
} }
// UnimplementedUserServant can be embedded to have forward compatible implementations. // UnimplementedUserServant can be embedded to have forward compatible implementations.
type UnimplementedUserServant struct { type UnimplementedUserServant struct{}
}
func (UnimplementedUserServant) Chain() gin.HandlersChain { func (UnimplementedUserServant) Chain() gin.HandlersChain {
return nil return nil
@ -112,31 +129,3 @@ func (UnimplementedUserServant) Login(req *LoginReq) (*LoginResp, mir.Error) {
} }
func (UnimplementedUserServant) mustEmbedUnimplementedUserServant() {} func (UnimplementedUserServant) mustEmbedUnimplementedUserServant() {}
// UnimplementedUserRender can be embedded to have forward compatible implementations.
type UnimplementedUserRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedUserRender) RenderLogout(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedUserRender) RenderLogin(c *gin.Context, data *LoginResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedUserRender) mustEmbedUnimplementedUserRender() {}
// UnimplementedUserBinding can be embedded to have forward compatible implementations.
type UnimplementedUserBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedUserBinding) BindLogin(c *gin.Context) (*LoginReq, mir.Error) {
obj := new(LoginReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedUserBinding) mustEmbedUnimplementedUserBinding() {}

@ -1,16 +1,29 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
type _binding_ interface {
Bind(*gin.Context) mir.Error
}
type _render_ interface {
Render(*gin.Context)
}
type _default_ interface {
Bind(*gin.Context, any) mir.Error
Render(*gin.Context, any, mir.Error)
}
type LoginReq struct { type LoginReq struct {
AgentInfo AgentInfo `json:"agent_info"` AgentInfo AgentInfo `json:"agent_info"`
Name string `json:"name"` Name string `json:"name"`
@ -37,6 +50,8 @@ type UserInfo struct {
} }
type User interface { type User interface {
_default_
Logout() mir.Error Logout() mir.Error
Login(*LoginReq) (*LoginResp, mir.Error) Login(*LoginReq) (*LoginResp, mir.Error)
Index() mir.Error Index() mir.Error
@ -44,22 +59,8 @@ type User interface {
mustEmbedUnimplementedUserServant() mustEmbedUnimplementedUserServant()
} }
type UserBinding interface {
BindLogin(*gin.Context) (*LoginReq, mir.Error)
mustEmbedUnimplementedUserBinding()
}
type UserRender interface {
RenderLogout(*gin.Context, mir.Error)
RenderLogin(*gin.Context, *LoginResp, mir.Error)
RenderIndex(*gin.Context, mir.Error)
mustEmbedUnimplementedUserRender()
}
// RegisterUserServant register User servant to gin // RegisterUserServant register User servant to gin
func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) { func RegisterUserServant(e *gin.Engine, s User) {
router := e.Group("s/v1") router := e.Group("s/v1")
// register routes info to router // register routes info to router
@ -70,9 +71,8 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
r.RenderLogout(c, s.Logout()) s.Render(c, nil, s.Logout())
}) })
router.Handle("POST", "/user/login/", func(c *gin.Context) { router.Handle("POST", "/user/login/", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -80,15 +80,32 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
req, err := b.BindLogin(c) var (
obj any
err mir.Error
)
req := new(LoginReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.Login(req)
if err != nil { if err != nil {
r.RenderLogin(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.Login(req) if rv, ok := obj.(_render_); !ok {
r.RenderLogin(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/index/", func(c *gin.Context) { router.Handle("GET", "/index/", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -96,14 +113,12 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
r.RenderIndex(c, s.Index()) s.Render(c, nil, s.Index())
}) })
} }
// UnimplementedUserServant can be embedded to have forward compatible implementations. // UnimplementedUserServant can be embedded to have forward compatible implementations.
type UnimplementedUserServant struct { type UnimplementedUserServant struct{}
}
func (UnimplementedUserServant) Logout() mir.Error { func (UnimplementedUserServant) Logout() mir.Error {
return mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented)) return mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented))
@ -118,35 +133,3 @@ func (UnimplementedUserServant) Index() mir.Error {
} }
func (UnimplementedUserServant) mustEmbedUnimplementedUserServant() {} func (UnimplementedUserServant) mustEmbedUnimplementedUserServant() {}
// UnimplementedUserRender can be embedded to have forward compatible implementations.
type UnimplementedUserRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedUserRender) RenderLogout(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedUserRender) RenderLogin(c *gin.Context, data *LoginResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedUserRender) RenderIndex(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedUserRender) mustEmbedUnimplementedUserRender() {}
// UnimplementedUserBinding can be embedded to have forward compatible implementations.
type UnimplementedUserBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedUserBinding) BindLogin(c *gin.Context) (*LoginReq, mir.Error) {
obj := new(LoginReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedUserBinding) mustEmbedUnimplementedUserBinding() {}

@ -1,18 +1,20 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )
type Admin interface { type Admin interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -21,20 +23,8 @@ type Admin interface {
mustEmbedUnimplementedAdminServant() mustEmbedUnimplementedAdminServant()
} }
type AdminBinding interface {
BindChangeUserStatus(*gin.Context) (*web.ChangeUserStatusReq, mir.Error)
mustEmbedUnimplementedAdminBinding()
}
type AdminRender interface {
RenderChangeUserStatus(*gin.Context, mir.Error)
mustEmbedUnimplementedAdminRender()
}
// RegisterAdminServant register Admin servant to gin // RegisterAdminServant register Admin servant to gin
func RegisterAdminServant(e *gin.Engine, s Admin, b AdminBinding, r AdminRender) { func RegisterAdminServant(e *gin.Engine, s Admin) {
router := e.Group("v1") router := e.Group("v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -48,19 +38,28 @@ func RegisterAdminServant(e *gin.Engine, s Admin, b AdminBinding, r AdminRender)
default: default:
} }
req, err := b.BindChangeUserStatus(c) var (
obj any
err mir.Error
)
req := new(web.ChangeUserStatusReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderChangeUserStatus(c, err) s.Render(c, nil, err)
return return
} }
r.RenderChangeUserStatus(c, s.ChangeUserStatus(req))
})
s.Render(c, nil, s.ChangeUserStatus(req))
})
} }
// UnimplementedAdminServant can be embedded to have forward compatible implementations. // UnimplementedAdminServant can be embedded to have forward compatible implementations.
type UnimplementedAdminServant struct { type UnimplementedAdminServant struct{}
}
func (UnimplementedAdminServant) Chain() gin.HandlersChain { func (UnimplementedAdminServant) Chain() gin.HandlersChain {
return nil return nil
@ -71,27 +70,3 @@ func (UnimplementedAdminServant) ChangeUserStatus(req *web.ChangeUserStatusReq)
} }
func (UnimplementedAdminServant) mustEmbedUnimplementedAdminServant() {} func (UnimplementedAdminServant) mustEmbedUnimplementedAdminServant() {}
// UnimplementedAdminRender can be embedded to have forward compatible implementations.
type UnimplementedAdminRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedAdminRender) RenderChangeUserStatus(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedAdminRender) mustEmbedUnimplementedAdminRender() {}
// UnimplementedAdminBinding can be embedded to have forward compatible implementations.
type UnimplementedAdminBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedAdminBinding) BindChangeUserStatus(c *gin.Context) (*web.ChangeUserStatusReq, mir.Error) {
obj := new(web.ChangeUserStatusReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedAdminBinding) mustEmbedUnimplementedAdminBinding() {}

@ -1,18 +1,20 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )
type AlipayPriv interface { type AlipayPriv interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -23,24 +25,8 @@ type AlipayPriv interface {
mustEmbedUnimplementedAlipayPrivServant() mustEmbedUnimplementedAlipayPrivServant()
} }
type AlipayPrivBinding interface {
BindUserWalletBills(*gin.Context) (*web.UserWalletBillsReq, mir.Error)
BindUserRechargeResult(*gin.Context) (*web.UserRechargeResultReq, mir.Error)
BindUserRechargeLink(*gin.Context) (*web.UserRechargeLinkReq, mir.Error)
mustEmbedUnimplementedAlipayPrivBinding()
}
type AlipayPrivRender interface {
RenderUserWalletBills(*gin.Context, *web.UserWalletBillsResp, mir.Error)
RenderUserRechargeResult(*gin.Context, *web.UserRechargeResultResp, mir.Error)
RenderUserRechargeLink(*gin.Context, *web.UserRechargeLinkResp, mir.Error)
mustEmbedUnimplementedAlipayPrivRender()
}
// RegisterAlipayPrivServant register AlipayPriv servant to gin // RegisterAlipayPrivServant register AlipayPriv servant to gin
func RegisterAlipayPrivServant(e *gin.Engine, s AlipayPriv, b AlipayPrivBinding, r AlipayPrivRender) { func RegisterAlipayPrivServant(e *gin.Engine, s AlipayPriv) {
router := e.Group("v1") router := e.Group("v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -54,15 +40,32 @@ func RegisterAlipayPrivServant(e *gin.Engine, s AlipayPriv, b AlipayPrivBinding,
default: default:
} }
req, err := b.BindUserWalletBills(c) var (
obj any
err mir.Error
)
req := new(web.UserWalletBillsReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.UserWalletBills(req)
if err != nil { if err != nil {
r.RenderUserWalletBills(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.UserWalletBills(req) if rv, ok := obj.(_render_); !ok {
r.RenderUserWalletBills(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/user/recharge", func(c *gin.Context) { router.Handle("GET", "/user/recharge", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -70,15 +73,32 @@ func RegisterAlipayPrivServant(e *gin.Engine, s AlipayPriv, b AlipayPrivBinding,
default: default:
} }
req, err := b.BindUserRechargeResult(c) var (
obj any
err mir.Error
)
req := new(web.UserRechargeResultReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.UserRechargeResult(req)
if err != nil { if err != nil {
r.RenderUserRechargeResult(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.UserRechargeResult(req) if rv, ok := obj.(_render_); !ok {
r.RenderUserRechargeResult(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("POST", "/user/recharge", func(c *gin.Context) { router.Handle("POST", "/user/recharge", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -86,20 +106,36 @@ func RegisterAlipayPrivServant(e *gin.Engine, s AlipayPriv, b AlipayPrivBinding,
default: default:
} }
req, err := b.BindUserRechargeLink(c) var (
obj any
err mir.Error
)
req := new(web.UserRechargeLinkReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.UserRechargeLink(req)
if err != nil { if err != nil {
r.RenderUserRechargeLink(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.UserRechargeLink(req) if rv, ok := obj.(_render_); !ok {
r.RenderUserRechargeLink(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
} }
// UnimplementedAlipayPrivServant can be embedded to have forward compatible implementations. // UnimplementedAlipayPrivServant can be embedded to have forward compatible implementations.
type UnimplementedAlipayPrivServant struct { type UnimplementedAlipayPrivServant struct{}
}
func (UnimplementedAlipayPrivServant) Chain() gin.HandlersChain { func (UnimplementedAlipayPrivServant) Chain() gin.HandlersChain {
return nil return nil
@ -118,47 +154,3 @@ func (UnimplementedAlipayPrivServant) UserRechargeLink(req *web.UserRechargeLink
} }
func (UnimplementedAlipayPrivServant) mustEmbedUnimplementedAlipayPrivServant() {} func (UnimplementedAlipayPrivServant) mustEmbedUnimplementedAlipayPrivServant() {}
// UnimplementedAlipayPrivRender can be embedded to have forward compatible implementations.
type UnimplementedAlipayPrivRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedAlipayPrivRender) RenderUserWalletBills(c *gin.Context, data *web.UserWalletBillsResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedAlipayPrivRender) RenderUserRechargeResult(c *gin.Context, data *web.UserRechargeResultResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedAlipayPrivRender) RenderUserRechargeLink(c *gin.Context, data *web.UserRechargeLinkResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedAlipayPrivRender) mustEmbedUnimplementedAlipayPrivRender() {}
// UnimplementedAlipayPrivBinding can be embedded to have forward compatible implementations.
type UnimplementedAlipayPrivBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedAlipayPrivBinding) BindUserWalletBills(c *gin.Context) (*web.UserWalletBillsReq, mir.Error) {
obj := new(web.UserWalletBillsReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedAlipayPrivBinding) BindUserRechargeResult(c *gin.Context) (*web.UserRechargeResultReq, mir.Error) {
obj := new(web.UserRechargeResultReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedAlipayPrivBinding) BindUserRechargeLink(c *gin.Context) (*web.UserRechargeLinkReq, mir.Error) {
obj := new(web.UserRechargeLinkReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedAlipayPrivBinding) mustEmbedUnimplementedAlipayPrivBinding() {}

@ -1,37 +1,27 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )
type AlipayPub interface { type AlipayPub interface {
_default_
AlipayNotify(*web.AlipayNotifyReq) mir.Error AlipayNotify(*web.AlipayNotifyReq) mir.Error
mustEmbedUnimplementedAlipayPubServant() mustEmbedUnimplementedAlipayPubServant()
} }
type AlipayPubBinding interface {
BindAlipayNotify(*gin.Context) (*web.AlipayNotifyReq, mir.Error)
mustEmbedUnimplementedAlipayPubBinding()
}
type AlipayPubRender interface {
RenderAlipayNotify(*gin.Context, mir.Error)
mustEmbedUnimplementedAlipayPubRender()
}
// RegisterAlipayPubServant register AlipayPub servant to gin // RegisterAlipayPubServant register AlipayPub servant to gin
func RegisterAlipayPubServant(e *gin.Engine, s AlipayPub, b AlipayPubBinding, r AlipayPubRender) { func RegisterAlipayPubServant(e *gin.Engine, s AlipayPub) {
router := e.Group("v1") router := e.Group("v1")
// register routes info to router // register routes info to router
@ -42,46 +32,31 @@ func RegisterAlipayPubServant(e *gin.Engine, s AlipayPub, b AlipayPubBinding, r
default: default:
} }
req, err := b.BindAlipayNotify(c) var (
obj any
err mir.Error
)
req := new(web.AlipayNotifyReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderAlipayNotify(c, err) s.Render(c, nil, err)
return return
} }
r.RenderAlipayNotify(c, s.AlipayNotify(req))
})
s.Render(c, nil, s.AlipayNotify(req))
})
} }
// UnimplementedAlipayPubServant can be embedded to have forward compatible implementations. // UnimplementedAlipayPubServant can be embedded to have forward compatible implementations.
type UnimplementedAlipayPubServant struct { type UnimplementedAlipayPubServant struct{}
}
func (UnimplementedAlipayPubServant) AlipayNotify(req *web.AlipayNotifyReq) mir.Error { func (UnimplementedAlipayPubServant) AlipayNotify(req *web.AlipayNotifyReq) mir.Error {
return mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented)) return mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented))
} }
func (UnimplementedAlipayPubServant) mustEmbedUnimplementedAlipayPubServant() {} func (UnimplementedAlipayPubServant) mustEmbedUnimplementedAlipayPubServant() {}
// UnimplementedAlipayPubRender can be embedded to have forward compatible implementations.
type UnimplementedAlipayPubRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedAlipayPubRender) RenderAlipayNotify(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedAlipayPubRender) mustEmbedUnimplementedAlipayPubRender() {}
// UnimplementedAlipayPubBinding can be embedded to have forward compatible implementations.
type UnimplementedAlipayPubBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedAlipayPubBinding) BindAlipayNotify(c *gin.Context) (*web.AlipayNotifyReq, mir.Error) {
obj := new(web.AlipayNotifyReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedAlipayPubBinding) mustEmbedUnimplementedAlipayPubBinding() {}

@ -1,18 +1,20 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )
type Core interface { type Core interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -36,50 +38,8 @@ type Core interface {
mustEmbedUnimplementedCoreServant() mustEmbedUnimplementedCoreServant()
} }
type CoreBinding interface {
BindTweetCollectionStatus(*gin.Context) (*web.TweetCollectionStatusReq, mir.Error)
BindTweetStarStatus(*gin.Context) (*web.TweetStarStatusReq, mir.Error)
BindSuggestTags(*gin.Context) (*web.SuggestTagsReq, mir.Error)
BindSuggestUsers(*gin.Context) (*web.SuggestUsersReq, mir.Error)
BindChangeAvatar(*gin.Context) (*web.ChangeAvatarReq, mir.Error)
BindChangeNickname(*gin.Context) (*web.ChangeNicknameReq, mir.Error)
BindChangePassword(*gin.Context) (*web.ChangePasswordReq, mir.Error)
BindUserPhoneBind(*gin.Context) (*web.UserPhoneBindReq, mir.Error)
BindGetStars(*gin.Context) (*web.GetStarsReq, mir.Error)
BindGetCollections(*gin.Context) (*web.GetCollectionsReq, mir.Error)
BindSendUserWhisper(*gin.Context) (*web.SendWhisperReq, mir.Error)
BindReadMessage(*gin.Context) (*web.ReadMessageReq, mir.Error)
BindGetMessages(*gin.Context) (*web.GetMessagesReq, mir.Error)
BindGetUnreadMsgCount(*gin.Context) (*web.GetUnreadMsgCountReq, mir.Error)
BindGetUserInfo(*gin.Context) (*web.UserInfoReq, mir.Error)
BindSyncSearchIndex(*gin.Context) (*web.SyncSearchIndexReq, mir.Error)
mustEmbedUnimplementedCoreBinding()
}
type CoreRender interface {
RenderTweetCollectionStatus(*gin.Context, *web.TweetCollectionStatusResp, mir.Error)
RenderTweetStarStatus(*gin.Context, *web.TweetStarStatusResp, mir.Error)
RenderSuggestTags(*gin.Context, *web.SuggestTagsResp, mir.Error)
RenderSuggestUsers(*gin.Context, *web.SuggestUsersResp, mir.Error)
RenderChangeAvatar(*gin.Context, mir.Error)
RenderChangeNickname(*gin.Context, mir.Error)
RenderChangePassword(*gin.Context, mir.Error)
RenderUserPhoneBind(*gin.Context, mir.Error)
RenderGetStars(*gin.Context, *web.GetStarsResp, mir.Error)
RenderGetCollections(*gin.Context, *web.GetCollectionsResp, mir.Error)
RenderSendUserWhisper(*gin.Context, mir.Error)
RenderReadMessage(*gin.Context, mir.Error)
RenderGetMessages(*gin.Context, *web.GetMessagesResp, mir.Error)
RenderGetUnreadMsgCount(*gin.Context, *web.GetUnreadMsgCountResp, mir.Error)
RenderGetUserInfo(*gin.Context, *web.UserInfoResp, mir.Error)
RenderSyncSearchIndex(*gin.Context, mir.Error)
mustEmbedUnimplementedCoreRender()
}
// RegisterCoreServant register Core servant to gin // RegisterCoreServant register Core servant to gin
func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) { func RegisterCoreServant(e *gin.Engine, s Core) {
router := e.Group("v1") router := e.Group("v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -93,15 +53,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindTweetCollectionStatus(c) var (
obj any
err mir.Error
)
req := new(web.TweetCollectionStatusReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderTweetCollectionStatus(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.TweetCollectionStatus(req) obj, err = s.TweetCollectionStatus(req)
r.RenderTweetCollectionStatus(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/post/star", func(c *gin.Context) { router.Handle("GET", "/post/star", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -109,15 +86,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindTweetStarStatus(c) var (
obj any
err mir.Error
)
req := new(web.TweetStarStatusReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.TweetStarStatus(req)
if err != nil { if err != nil {
r.RenderTweetStarStatus(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.TweetStarStatus(req) if rv, ok := obj.(_render_); !ok {
r.RenderTweetStarStatus(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/suggest/tags", func(c *gin.Context) { router.Handle("GET", "/suggest/tags", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -125,15 +119,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindSuggestTags(c) var (
obj any
err mir.Error
)
req := new(web.SuggestTagsReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.SuggestTags(req)
if err != nil { if err != nil {
r.RenderSuggestTags(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.SuggestTags(req) if rv, ok := obj.(_render_); !ok {
r.RenderSuggestTags(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/suggest/users", func(c *gin.Context) { router.Handle("GET", "/suggest/users", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -141,15 +152,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindSuggestUsers(c) var (
obj any
err mir.Error
)
req := new(web.SuggestUsersReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderSuggestUsers(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.SuggestUsers(req) obj, err = s.SuggestUsers(req)
r.RenderSuggestUsers(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("POST", "/user/avatar", func(c *gin.Context) { router.Handle("POST", "/user/avatar", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -157,14 +185,24 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindChangeAvatar(c) var (
obj any
err mir.Error
)
req := new(web.ChangeAvatarReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderChangeAvatar(c, err) s.Render(c, nil, err)
return return
} }
r.RenderChangeAvatar(c, s.ChangeAvatar(req))
})
s.Render(c, nil, s.ChangeAvatar(req))
})
router.Handle("POST", "/user/nickname", func(c *gin.Context) { router.Handle("POST", "/user/nickname", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -172,14 +210,24 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindChangeNickname(c) var (
obj any
err mir.Error
)
req := new(web.ChangeNicknameReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderChangeNickname(c, err) s.Render(c, nil, err)
return return
} }
r.RenderChangeNickname(c, s.ChangeNickname(req))
})
s.Render(c, nil, s.ChangeNickname(req))
})
router.Handle("POST", "/user/password", func(c *gin.Context) { router.Handle("POST", "/user/password", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -187,14 +235,24 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindChangePassword(c) var (
obj any
err mir.Error
)
req := new(web.ChangePasswordReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderChangePassword(c, err) s.Render(c, nil, err)
return return
} }
r.RenderChangePassword(c, s.ChangePassword(req))
})
s.Render(c, nil, s.ChangePassword(req))
})
router.Handle("POST", "/user/phone", func(c *gin.Context) { router.Handle("POST", "/user/phone", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -202,14 +260,24 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindUserPhoneBind(c) var (
obj any
err mir.Error
)
req := new(web.UserPhoneBindReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderUserPhoneBind(c, err) s.Render(c, nil, err)
return return
} }
r.RenderUserPhoneBind(c, s.UserPhoneBind(req))
})
s.Render(c, nil, s.UserPhoneBind(req))
})
router.Handle("GET", "/user/stars", func(c *gin.Context) { router.Handle("GET", "/user/stars", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -217,15 +285,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindGetStars(c) var (
obj any
err mir.Error
)
req := new(web.GetStarsReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.GetStars(req)
if err != nil { if err != nil {
r.RenderGetStars(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.GetStars(req) if rv, ok := obj.(_render_); !ok {
r.RenderGetStars(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/user/collections", func(c *gin.Context) { router.Handle("GET", "/user/collections", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -233,15 +318,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindGetCollections(c) var (
obj any
err mir.Error
)
req := new(web.GetCollectionsReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderGetCollections(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.GetCollections(req) obj, err = s.GetCollections(req)
r.RenderGetCollections(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("POST", "/user/whisper", func(c *gin.Context) { router.Handle("POST", "/user/whisper", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -249,14 +351,24 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindSendUserWhisper(c) var (
obj any
err mir.Error
)
req := new(web.SendWhisperReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderSendUserWhisper(c, err) s.Render(c, nil, err)
return return
} }
r.RenderSendUserWhisper(c, s.SendUserWhisper(req))
})
s.Render(c, nil, s.SendUserWhisper(req))
})
router.Handle("POST", "/user/message/read", func(c *gin.Context) { router.Handle("POST", "/user/message/read", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -264,14 +376,24 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindReadMessage(c) var (
obj any
err mir.Error
)
req := new(web.ReadMessageReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderReadMessage(c, err) s.Render(c, nil, err)
return return
} }
r.RenderReadMessage(c, s.ReadMessage(req))
})
s.Render(c, nil, s.ReadMessage(req))
})
router.Handle("GET", "/user/messages", func(c *gin.Context) { router.Handle("GET", "/user/messages", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -279,15 +401,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindGetMessages(c) var (
obj any
err mir.Error
)
req := new(web.GetMessagesReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.GetMessages(req)
if err != nil { if err != nil {
r.RenderGetMessages(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.GetMessages(req) if rv, ok := obj.(_render_); !ok {
r.RenderGetMessages(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/user/msgcount/unread", func(c *gin.Context) { router.Handle("GET", "/user/msgcount/unread", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -295,15 +434,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindGetUnreadMsgCount(c) var (
obj any
err mir.Error
)
req := new(web.GetUnreadMsgCountReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderGetUnreadMsgCount(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.GetUnreadMsgCount(req) obj, err = s.GetUnreadMsgCount(req)
r.RenderGetUnreadMsgCount(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/user/info", func(c *gin.Context) { router.Handle("GET", "/user/info", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -311,15 +467,32 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindGetUserInfo(c) var (
obj any
err mir.Error
)
req := new(web.UserInfoReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderGetUserInfo(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.GetUserInfo(req) obj, err = s.GetUserInfo(req)
r.RenderGetUserInfo(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/sync/index", func(c *gin.Context) { router.Handle("GET", "/sync/index", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -327,19 +500,28 @@ func RegisterCoreServant(e *gin.Engine, s Core, b CoreBinding, r CoreRender) {
default: default:
} }
req, err := b.BindSyncSearchIndex(c) var (
obj any
err mir.Error
)
req := new(web.SyncSearchIndexReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderSyncSearchIndex(c, err) s.Render(c, nil, err)
return return
} }
r.RenderSyncSearchIndex(c, s.SyncSearchIndex(req))
})
s.Render(c, nil, s.SyncSearchIndex(req))
})
} }
// UnimplementedCoreServant can be embedded to have forward compatible implementations. // UnimplementedCoreServant can be embedded to have forward compatible implementations.
type UnimplementedCoreServant struct { type UnimplementedCoreServant struct{}
}
func (UnimplementedCoreServant) Chain() gin.HandlersChain { func (UnimplementedCoreServant) Chain() gin.HandlersChain {
return nil return nil
@ -410,177 +592,3 @@ func (UnimplementedCoreServant) SyncSearchIndex(req *web.SyncSearchIndexReq) mir
} }
func (UnimplementedCoreServant) mustEmbedUnimplementedCoreServant() {} func (UnimplementedCoreServant) mustEmbedUnimplementedCoreServant() {}
// UnimplementedCoreRender can be embedded to have forward compatible implementations.
type UnimplementedCoreRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedCoreRender) RenderTweetCollectionStatus(c *gin.Context, data *web.TweetCollectionStatusResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderTweetStarStatus(c *gin.Context, data *web.TweetStarStatusResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderSuggestTags(c *gin.Context, data *web.SuggestTagsResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderSuggestUsers(c *gin.Context, data *web.SuggestUsersResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderChangeAvatar(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedCoreRender) RenderChangeNickname(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedCoreRender) RenderChangePassword(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedCoreRender) RenderUserPhoneBind(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedCoreRender) RenderGetStars(c *gin.Context, data *web.GetStarsResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderGetCollections(c *gin.Context, data *web.GetCollectionsResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderSendUserWhisper(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedCoreRender) RenderReadMessage(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedCoreRender) RenderGetMessages(c *gin.Context, data *web.GetMessagesResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderGetUnreadMsgCount(c *gin.Context, data *web.GetUnreadMsgCountResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderGetUserInfo(c *gin.Context, data *web.UserInfoResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedCoreRender) RenderSyncSearchIndex(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedCoreRender) mustEmbedUnimplementedCoreRender() {}
// UnimplementedCoreBinding can be embedded to have forward compatible implementations.
type UnimplementedCoreBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedCoreBinding) BindTweetCollectionStatus(c *gin.Context) (*web.TweetCollectionStatusReq, mir.Error) {
obj := new(web.TweetCollectionStatusReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindTweetStarStatus(c *gin.Context) (*web.TweetStarStatusReq, mir.Error) {
obj := new(web.TweetStarStatusReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindSuggestTags(c *gin.Context) (*web.SuggestTagsReq, mir.Error) {
obj := new(web.SuggestTagsReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindSuggestUsers(c *gin.Context) (*web.SuggestUsersReq, mir.Error) {
obj := new(web.SuggestUsersReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindChangeAvatar(c *gin.Context) (*web.ChangeAvatarReq, mir.Error) {
obj := new(web.ChangeAvatarReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindChangeNickname(c *gin.Context) (*web.ChangeNicknameReq, mir.Error) {
obj := new(web.ChangeNicknameReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindChangePassword(c *gin.Context) (*web.ChangePasswordReq, mir.Error) {
obj := new(web.ChangePasswordReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindUserPhoneBind(c *gin.Context) (*web.UserPhoneBindReq, mir.Error) {
obj := new(web.UserPhoneBindReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindGetStars(c *gin.Context) (*web.GetStarsReq, mir.Error) {
obj := new(web.GetStarsReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindGetCollections(c *gin.Context) (*web.GetCollectionsReq, mir.Error) {
obj := new(web.GetCollectionsReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindSendUserWhisper(c *gin.Context) (*web.SendWhisperReq, mir.Error) {
obj := new(web.SendWhisperReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindReadMessage(c *gin.Context) (*web.ReadMessageReq, mir.Error) {
obj := new(web.ReadMessageReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindGetMessages(c *gin.Context) (*web.GetMessagesReq, mir.Error) {
obj := new(web.GetMessagesReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindGetUnreadMsgCount(c *gin.Context) (*web.GetUnreadMsgCountReq, mir.Error) {
obj := new(web.GetUnreadMsgCountReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindGetUserInfo(c *gin.Context) (*web.UserInfoReq, mir.Error) {
obj := new(web.UserInfoReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) BindSyncSearchIndex(c *gin.Context) (*web.SyncSearchIndexReq, mir.Error) {
obj := new(web.SyncSearchIndexReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedCoreBinding) mustEmbedUnimplementedCoreBinding() {}

@ -1,18 +1,20 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )
type Followship interface { type Followship interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -24,26 +26,8 @@ type Followship interface {
mustEmbedUnimplementedFollowshipServant() mustEmbedUnimplementedFollowshipServant()
} }
type FollowshipBinding interface {
BindListFollowers(*gin.Context) (*web.ListFollowersReq, mir.Error)
BindListFollowings(*gin.Context) (*web.ListFollowingsReq, mir.Error)
BindDeleteFollowing(*gin.Context) (*web.DeleteFollowingReq, mir.Error)
BindAddFollowing(*gin.Context) (*web.AddFollowingReq, mir.Error)
mustEmbedUnimplementedFollowshipBinding()
}
type FollowshipRender interface {
RenderListFollowers(*gin.Context, *web.ListFollowersResp, mir.Error)
RenderListFollowings(*gin.Context, *web.ListFollowingsResp, mir.Error)
RenderDeleteFollowing(*gin.Context, mir.Error)
RenderAddFollowing(*gin.Context, mir.Error)
mustEmbedUnimplementedFollowshipRender()
}
// RegisterFollowshipServant register Followship servant to gin // RegisterFollowshipServant register Followship servant to gin
func RegisterFollowshipServant(e *gin.Engine, s Followship, b FollowshipBinding, r FollowshipRender) { func RegisterFollowshipServant(e *gin.Engine, s Followship) {
router := e.Group("v1") router := e.Group("v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -57,15 +41,32 @@ func RegisterFollowshipServant(e *gin.Engine, s Followship, b FollowshipBinding,
default: default:
} }
req, err := b.BindListFollowers(c) var (
obj any
err mir.Error
)
req := new(web.ListFollowersReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.ListFollowers(req)
if err != nil { if err != nil {
r.RenderListFollowers(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.ListFollowers(req) if rv, ok := obj.(_render_); !ok {
r.RenderListFollowers(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/following/list", func(c *gin.Context) { router.Handle("GET", "/following/list", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -73,15 +74,32 @@ func RegisterFollowshipServant(e *gin.Engine, s Followship, b FollowshipBinding,
default: default:
} }
req, err := b.BindListFollowings(c) var (
obj any
err mir.Error
)
req := new(web.ListFollowingsReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.ListFollowings(req)
if err != nil { if err != nil {
r.RenderListFollowings(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.ListFollowings(req) if rv, ok := obj.(_render_); !ok {
r.RenderListFollowings(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("POST", "/following/delete", func(c *gin.Context) { router.Handle("POST", "/following/delete", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -89,14 +107,24 @@ func RegisterFollowshipServant(e *gin.Engine, s Followship, b FollowshipBinding,
default: default:
} }
req, err := b.BindDeleteFollowing(c) var (
obj any
err mir.Error
)
req := new(web.DeleteFollowingReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderDeleteFollowing(c, err) s.Render(c, nil, err)
return return
} }
r.RenderDeleteFollowing(c, s.DeleteFollowing(req))
})
s.Render(c, nil, s.DeleteFollowing(req))
})
router.Handle("POST", "/following/add", func(c *gin.Context) { router.Handle("POST", "/following/add", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -104,19 +132,28 @@ func RegisterFollowshipServant(e *gin.Engine, s Followship, b FollowshipBinding,
default: default:
} }
req, err := b.BindAddFollowing(c) var (
obj any
err mir.Error
)
req := new(web.AddFollowingReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderAddFollowing(c, err) s.Render(c, nil, err)
return return
} }
r.RenderAddFollowing(c, s.AddFollowing(req))
})
s.Render(c, nil, s.AddFollowing(req))
})
} }
// UnimplementedFollowshipServant can be embedded to have forward compatible implementations. // UnimplementedFollowshipServant can be embedded to have forward compatible implementations.
type UnimplementedFollowshipServant struct { type UnimplementedFollowshipServant struct{}
}
func (UnimplementedFollowshipServant) Chain() gin.HandlersChain { func (UnimplementedFollowshipServant) Chain() gin.HandlersChain {
return nil return nil
@ -139,57 +176,3 @@ func (UnimplementedFollowshipServant) AddFollowing(req *web.AddFollowingReq) mir
} }
func (UnimplementedFollowshipServant) mustEmbedUnimplementedFollowshipServant() {} func (UnimplementedFollowshipServant) mustEmbedUnimplementedFollowshipServant() {}
// UnimplementedFollowshipRender can be embedded to have forward compatible implementations.
type UnimplementedFollowshipRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedFollowshipRender) RenderListFollowers(c *gin.Context, data *web.ListFollowersResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedFollowshipRender) RenderListFollowings(c *gin.Context, data *web.ListFollowingsResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedFollowshipRender) RenderDeleteFollowing(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedFollowshipRender) RenderAddFollowing(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedFollowshipRender) mustEmbedUnimplementedFollowshipRender() {}
// UnimplementedFollowshipBinding can be embedded to have forward compatible implementations.
type UnimplementedFollowshipBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedFollowshipBinding) BindListFollowers(c *gin.Context) (*web.ListFollowersReq, mir.Error) {
obj := new(web.ListFollowersReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFollowshipBinding) BindListFollowings(c *gin.Context) (*web.ListFollowingsReq, mir.Error) {
obj := new(web.ListFollowingsReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFollowshipBinding) BindDeleteFollowing(c *gin.Context) (*web.DeleteFollowingReq, mir.Error) {
obj := new(web.DeleteFollowingReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFollowshipBinding) BindAddFollowing(c *gin.Context) (*web.AddFollowingReq, mir.Error) {
obj := new(web.AddFollowingReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFollowshipBinding) mustEmbedUnimplementedFollowshipBinding() {}

@ -1,18 +1,20 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )
type Friendship interface { type Friendship interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -25,28 +27,8 @@ type Friendship interface {
mustEmbedUnimplementedFriendshipServant() mustEmbedUnimplementedFriendshipServant()
} }
type FriendshipBinding interface {
BindGetContacts(*gin.Context) (*web.GetContactsReq, mir.Error)
BindDeleteFriend(*gin.Context) (*web.DeleteFriendReq, mir.Error)
BindRejectFriend(*gin.Context) (*web.RejectFriendReq, mir.Error)
BindAddFriend(*gin.Context) (*web.AddFriendReq, mir.Error)
BindRequestingFriend(*gin.Context) (*web.RequestingFriendReq, mir.Error)
mustEmbedUnimplementedFriendshipBinding()
}
type FriendshipRender interface {
RenderGetContacts(*gin.Context, *web.GetContactsResp, mir.Error)
RenderDeleteFriend(*gin.Context, mir.Error)
RenderRejectFriend(*gin.Context, mir.Error)
RenderAddFriend(*gin.Context, mir.Error)
RenderRequestingFriend(*gin.Context, mir.Error)
mustEmbedUnimplementedFriendshipRender()
}
// RegisterFriendshipServant register Friendship servant to gin // RegisterFriendshipServant register Friendship servant to gin
func RegisterFriendshipServant(e *gin.Engine, s Friendship, b FriendshipBinding, r FriendshipRender) { func RegisterFriendshipServant(e *gin.Engine, s Friendship) {
router := e.Group("v1") router := e.Group("v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -60,15 +42,32 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship, b FriendshipBinding,
default: default:
} }
req, err := b.BindGetContacts(c) var (
obj any
err mir.Error
)
req := new(web.GetContactsReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.GetContacts(req)
if err != nil { if err != nil {
r.RenderGetContacts(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.GetContacts(req) if rv, ok := obj.(_render_); !ok {
r.RenderGetContacts(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("POST", "/friend/delete", func(c *gin.Context) { router.Handle("POST", "/friend/delete", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -76,14 +75,24 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship, b FriendshipBinding,
default: default:
} }
req, err := b.BindDeleteFriend(c) var (
obj any
err mir.Error
)
req := new(web.DeleteFriendReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderDeleteFriend(c, err) s.Render(c, nil, err)
return return
} }
r.RenderDeleteFriend(c, s.DeleteFriend(req))
})
s.Render(c, nil, s.DeleteFriend(req))
})
router.Handle("POST", "/friend/reject", func(c *gin.Context) { router.Handle("POST", "/friend/reject", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -91,14 +100,24 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship, b FriendshipBinding,
default: default:
} }
req, err := b.BindRejectFriend(c) var (
obj any
err mir.Error
)
req := new(web.RejectFriendReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderRejectFriend(c, err) s.Render(c, nil, err)
return return
} }
r.RenderRejectFriend(c, s.RejectFriend(req))
})
s.Render(c, nil, s.RejectFriend(req))
})
router.Handle("POST", "/friend/add", func(c *gin.Context) { router.Handle("POST", "/friend/add", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -106,14 +125,24 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship, b FriendshipBinding,
default: default:
} }
req, err := b.BindAddFriend(c) var (
obj any
err mir.Error
)
req := new(web.AddFriendReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderAddFriend(c, err) s.Render(c, nil, err)
return return
} }
r.RenderAddFriend(c, s.AddFriend(req))
})
s.Render(c, nil, s.AddFriend(req))
})
router.Handle("POST", "/friend/requesting", func(c *gin.Context) { router.Handle("POST", "/friend/requesting", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -121,19 +150,28 @@ func RegisterFriendshipServant(e *gin.Engine, s Friendship, b FriendshipBinding,
default: default:
} }
req, err := b.BindRequestingFriend(c) var (
obj any
err mir.Error
)
req := new(web.RequestingFriendReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderRequestingFriend(c, err) s.Render(c, nil, err)
return return
} }
r.RenderRequestingFriend(c, s.RequestingFriend(req))
})
s.Render(c, nil, s.RequestingFriend(req))
})
} }
// UnimplementedFriendshipServant can be embedded to have forward compatible implementations. // UnimplementedFriendshipServant can be embedded to have forward compatible implementations.
type UnimplementedFriendshipServant struct { type UnimplementedFriendshipServant struct{}
}
func (UnimplementedFriendshipServant) Chain() gin.HandlersChain { func (UnimplementedFriendshipServant) Chain() gin.HandlersChain {
return nil return nil
@ -160,67 +198,3 @@ func (UnimplementedFriendshipServant) RequestingFriend(req *web.RequestingFriend
} }
func (UnimplementedFriendshipServant) mustEmbedUnimplementedFriendshipServant() {} func (UnimplementedFriendshipServant) mustEmbedUnimplementedFriendshipServant() {}
// UnimplementedFriendshipRender can be embedded to have forward compatible implementations.
type UnimplementedFriendshipRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedFriendshipRender) RenderGetContacts(c *gin.Context, data *web.GetContactsResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedFriendshipRender) RenderDeleteFriend(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedFriendshipRender) RenderRejectFriend(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedFriendshipRender) RenderAddFriend(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedFriendshipRender) RenderRequestingFriend(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedFriendshipRender) mustEmbedUnimplementedFriendshipRender() {}
// UnimplementedFriendshipBinding can be embedded to have forward compatible implementations.
type UnimplementedFriendshipBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedFriendshipBinding) BindGetContacts(c *gin.Context) (*web.GetContactsReq, mir.Error) {
obj := new(web.GetContactsReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFriendshipBinding) BindDeleteFriend(c *gin.Context) (*web.DeleteFriendReq, mir.Error) {
obj := new(web.DeleteFriendReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFriendshipBinding) BindRejectFriend(c *gin.Context) (*web.RejectFriendReq, mir.Error) {
obj := new(web.RejectFriendReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFriendshipBinding) BindAddFriend(c *gin.Context) (*web.AddFriendReq, mir.Error) {
obj := new(web.AddFriendReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFriendshipBinding) BindRequestingFriend(c *gin.Context) (*web.RequestingFriendReq, mir.Error) {
obj := new(web.RequestingFriendReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedFriendshipBinding) mustEmbedUnimplementedFriendshipBinding() {}

@ -1,18 +1,20 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )
type Loose interface { type Loose interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -25,28 +27,8 @@ type Loose interface {
mustEmbedUnimplementedLooseServant() mustEmbedUnimplementedLooseServant()
} }
type LooseBinding interface {
BindTweetComments(*gin.Context) (*web.TweetCommentsReq, mir.Error)
BindTopicList(*gin.Context) (*web.TopicListReq, mir.Error)
BindGetUserProfile(*gin.Context) (*web.GetUserProfileReq, mir.Error)
BindGetUserTweets(*gin.Context) (*web.GetUserTweetsReq, mir.Error)
BindTimeline(*gin.Context) (*web.TimelineReq, mir.Error)
mustEmbedUnimplementedLooseBinding()
}
type LooseRender interface {
RenderTweetComments(*gin.Context, *web.TweetCommentsResp, mir.Error)
RenderTopicList(*gin.Context, *web.TopicListResp, mir.Error)
RenderGetUserProfile(*gin.Context, *web.GetUserProfileResp, mir.Error)
RenderGetUserTweets(*gin.Context, *web.GetUserTweetsResp, mir.Error)
RenderTimeline(*gin.Context, *web.TimelineResp, mir.Error)
mustEmbedUnimplementedLooseRender()
}
// RegisterLooseServant register Loose servant to gin // RegisterLooseServant register Loose servant to gin
func RegisterLooseServant(e *gin.Engine, s Loose, b LooseBinding, r LooseRender) { func RegisterLooseServant(e *gin.Engine, s Loose) {
router := e.Group("v1") router := e.Group("v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -60,15 +42,32 @@ func RegisterLooseServant(e *gin.Engine, s Loose, b LooseBinding, r LooseRender)
default: default:
} }
req, err := b.BindTweetComments(c) var (
obj any
err mir.Error
)
req := new(web.TweetCommentsReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderTweetComments(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.TweetComments(req) obj, err = s.TweetComments(req)
r.RenderTweetComments(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/tags", func(c *gin.Context) { router.Handle("GET", "/tags", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -76,15 +75,32 @@ func RegisterLooseServant(e *gin.Engine, s Loose, b LooseBinding, r LooseRender)
default: default:
} }
req, err := b.BindTopicList(c) var (
obj any
err mir.Error
)
req := new(web.TopicListReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.TopicList(req)
if err != nil { if err != nil {
r.RenderTopicList(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.TopicList(req) if rv, ok := obj.(_render_); !ok {
r.RenderTopicList(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/user/profile", func(c *gin.Context) { router.Handle("GET", "/user/profile", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -92,15 +108,32 @@ func RegisterLooseServant(e *gin.Engine, s Loose, b LooseBinding, r LooseRender)
default: default:
} }
req, err := b.BindGetUserProfile(c) var (
obj any
err mir.Error
)
req := new(web.GetUserProfileReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderGetUserProfile(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.GetUserProfile(req) obj, err = s.GetUserProfile(req)
r.RenderGetUserProfile(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/user/posts", func(c *gin.Context) { router.Handle("GET", "/user/posts", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -108,15 +141,32 @@ func RegisterLooseServant(e *gin.Engine, s Loose, b LooseBinding, r LooseRender)
default: default:
} }
req, err := b.BindGetUserTweets(c) var (
obj any
err mir.Error
)
req := new(web.GetUserTweetsReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil {
s.Render(c, nil, err)
return
}
obj, err = s.GetUserTweets(req)
if err != nil { if err != nil {
r.RenderGetUserTweets(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.GetUserTweets(req) if rv, ok := obj.(_render_); !ok {
r.RenderGetUserTweets(c, resp, err) s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/posts", func(c *gin.Context) { router.Handle("GET", "/posts", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -124,20 +174,36 @@ func RegisterLooseServant(e *gin.Engine, s Loose, b LooseBinding, r LooseRender)
default: default:
} }
req, err := b.BindTimeline(c) var (
obj any
err mir.Error
)
req := new(web.TimelineReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderTimeline(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.Timeline(req) obj, err = s.Timeline(req)
r.RenderTimeline(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
} }
// UnimplementedLooseServant can be embedded to have forward compatible implementations. // UnimplementedLooseServant can be embedded to have forward compatible implementations.
type UnimplementedLooseServant struct { type UnimplementedLooseServant struct{}
}
func (UnimplementedLooseServant) Chain() gin.HandlersChain { func (UnimplementedLooseServant) Chain() gin.HandlersChain {
return nil return nil
@ -164,67 +230,3 @@ func (UnimplementedLooseServant) Timeline(req *web.TimelineReq) (*web.TimelineRe
} }
func (UnimplementedLooseServant) mustEmbedUnimplementedLooseServant() {} func (UnimplementedLooseServant) mustEmbedUnimplementedLooseServant() {}
// UnimplementedLooseRender can be embedded to have forward compatible implementations.
type UnimplementedLooseRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedLooseRender) RenderTweetComments(c *gin.Context, data *web.TweetCommentsResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedLooseRender) RenderTopicList(c *gin.Context, data *web.TopicListResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedLooseRender) RenderGetUserProfile(c *gin.Context, data *web.GetUserProfileResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedLooseRender) RenderGetUserTweets(c *gin.Context, data *web.GetUserTweetsResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedLooseRender) RenderTimeline(c *gin.Context, data *web.TimelineResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedLooseRender) mustEmbedUnimplementedLooseRender() {}
// UnimplementedLooseBinding can be embedded to have forward compatible implementations.
type UnimplementedLooseBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedLooseBinding) BindTweetComments(c *gin.Context) (*web.TweetCommentsReq, mir.Error) {
obj := new(web.TweetCommentsReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedLooseBinding) BindTopicList(c *gin.Context) (*web.TopicListReq, mir.Error) {
obj := new(web.TopicListReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedLooseBinding) BindGetUserProfile(c *gin.Context) (*web.GetUserProfileReq, mir.Error) {
obj := new(web.GetUserProfileReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedLooseBinding) BindGetUserTweets(c *gin.Context) (*web.GetUserTweetsReq, mir.Error) {
obj := new(web.GetUserTweetsReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedLooseBinding) BindTimeline(c *gin.Context) (*web.TimelineReq, mir.Error) {
obj := new(web.TimelineReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedLooseBinding) mustEmbedUnimplementedLooseBinding() {}

File diff suppressed because it is too large Load Diff

@ -1,18 +1,33 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )
type _binding_ interface {
Bind(*gin.Context) mir.Error
}
type _render_ interface {
Render(*gin.Context)
}
type _default_ interface {
Bind(*gin.Context, any) mir.Error
Render(*gin.Context, any, mir.Error)
}
type Pub interface { type Pub interface {
_default_
TweetDetail(*web.TweetDetailReq) (*web.TweetDetailResp, mir.Error) TweetDetail(*web.TweetDetailReq) (*web.TweetDetailResp, mir.Error)
SendCaptcha(*web.SendCaptchaReq) mir.Error SendCaptcha(*web.SendCaptchaReq) mir.Error
GetCaptcha() (*web.GetCaptchaResp, mir.Error) GetCaptcha() (*web.GetCaptchaResp, mir.Error)
@ -23,28 +38,8 @@ type Pub interface {
mustEmbedUnimplementedPubServant() mustEmbedUnimplementedPubServant()
} }
type PubBinding interface {
BindTweetDetail(*gin.Context) (*web.TweetDetailReq, mir.Error)
BindSendCaptcha(*gin.Context) (*web.SendCaptchaReq, mir.Error)
BindRegister(*gin.Context) (*web.RegisterReq, mir.Error)
BindLogin(*gin.Context) (*web.LoginReq, mir.Error)
mustEmbedUnimplementedPubBinding()
}
type PubRender interface {
RenderTweetDetail(*gin.Context, *web.TweetDetailResp, mir.Error)
RenderSendCaptcha(*gin.Context, mir.Error)
RenderGetCaptcha(*gin.Context, *web.GetCaptchaResp, mir.Error)
RenderRegister(*gin.Context, *web.RegisterResp, mir.Error)
RenderLogin(*gin.Context, *web.LoginResp, mir.Error)
RenderVersion(*gin.Context, *web.VersionResp, mir.Error)
mustEmbedUnimplementedPubRender()
}
// RegisterPubServant register Pub servant to gin // RegisterPubServant register Pub servant to gin
func RegisterPubServant(e *gin.Engine, s Pub, b PubBinding, r PubRender) { func RegisterPubServant(e *gin.Engine, s Pub) {
router := e.Group("v1") router := e.Group("v1")
// register routes info to router // register routes info to router
@ -55,15 +50,32 @@ func RegisterPubServant(e *gin.Engine, s Pub, b PubBinding, r PubRender) {
default: default:
} }
req, err := b.BindTweetDetail(c) var (
obj any
err mir.Error
)
req := new(web.TweetDetailReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderTweetDetail(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.TweetDetail(req) obj, err = s.TweetDetail(req)
r.RenderTweetDetail(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("POST", "/captcha", func(c *gin.Context) { router.Handle("POST", "/captcha", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -71,14 +83,24 @@ func RegisterPubServant(e *gin.Engine, s Pub, b PubBinding, r PubRender) {
default: default:
} }
req, err := b.BindSendCaptcha(c) var (
obj any
err mir.Error
)
req := new(web.SendCaptchaReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderSendCaptcha(c, err) s.Render(c, nil, err)
return return
} }
r.RenderSendCaptcha(c, s.SendCaptcha(req))
})
s.Render(c, nil, s.SendCaptcha(req))
})
router.Handle("GET", "/captcha", func(c *gin.Context) { router.Handle("GET", "/captcha", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -86,10 +108,22 @@ func RegisterPubServant(e *gin.Engine, s Pub, b PubBinding, r PubRender) {
default: default:
} }
resp, err := s.GetCaptcha() var (
r.RenderGetCaptcha(c, resp, err) obj any
}) err mir.Error
)
obj, err = s.GetCaptcha()
if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
})
router.Handle("POST", "/auth/register", func(c *gin.Context) { router.Handle("POST", "/auth/register", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -97,15 +131,32 @@ func RegisterPubServant(e *gin.Engine, s Pub, b PubBinding, r PubRender) {
default: default:
} }
req, err := b.BindRegister(c) var (
obj any
err mir.Error
)
req := new(web.RegisterReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderRegister(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.Register(req) obj, err = s.Register(req)
r.RenderRegister(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("POST", "/auth/login", func(c *gin.Context) { router.Handle("POST", "/auth/login", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -113,15 +164,32 @@ func RegisterPubServant(e *gin.Engine, s Pub, b PubBinding, r PubRender) {
default: default:
} }
req, err := b.BindLogin(c) var (
obj any
err mir.Error
)
req := new(web.LoginReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderLogin(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.Login(req) obj, err = s.Login(req)
r.RenderLogin(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
router.Handle("GET", "/", func(c *gin.Context) { router.Handle("GET", "/", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -129,15 +197,26 @@ func RegisterPubServant(e *gin.Engine, s Pub, b PubBinding, r PubRender) {
default: default:
} }
resp, err := s.Version() var (
r.RenderVersion(c, resp, err) obj any
}) err mir.Error
)
obj, err = s.Version()
if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
})
} }
// UnimplementedPubServant can be embedded to have forward compatible implementations. // UnimplementedPubServant can be embedded to have forward compatible implementations.
type UnimplementedPubServant struct { type UnimplementedPubServant struct{}
}
func (UnimplementedPubServant) TweetDetail(req *web.TweetDetailReq) (*web.TweetDetailResp, mir.Error) { func (UnimplementedPubServant) TweetDetail(req *web.TweetDetailReq) (*web.TweetDetailResp, mir.Error) {
return nil, mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented)) return nil, mir.Errorln(http.StatusNotImplemented, http.StatusText(http.StatusNotImplemented))
@ -164,65 +243,3 @@ func (UnimplementedPubServant) Version() (*web.VersionResp, mir.Error) {
} }
func (UnimplementedPubServant) mustEmbedUnimplementedPubServant() {} func (UnimplementedPubServant) mustEmbedUnimplementedPubServant() {}
// UnimplementedPubRender can be embedded to have forward compatible implementations.
type UnimplementedPubRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedPubRender) RenderTweetDetail(c *gin.Context, data *web.TweetDetailResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedPubRender) RenderSendCaptcha(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedPubRender) RenderGetCaptcha(c *gin.Context, data *web.GetCaptchaResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedPubRender) RenderRegister(c *gin.Context, data *web.RegisterResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedPubRender) RenderLogin(c *gin.Context, data *web.LoginResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedPubRender) RenderVersion(c *gin.Context, data *web.VersionResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedPubRender) mustEmbedUnimplementedPubRender() {}
// UnimplementedPubBinding can be embedded to have forward compatible implementations.
type UnimplementedPubBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedPubBinding) BindTweetDetail(c *gin.Context) (*web.TweetDetailReq, mir.Error) {
obj := new(web.TweetDetailReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedPubBinding) BindSendCaptcha(c *gin.Context) (*web.SendCaptchaReq, mir.Error) {
obj := new(web.SendCaptchaReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedPubBinding) BindRegister(c *gin.Context) (*web.RegisterReq, mir.Error) {
obj := new(web.RegisterReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedPubBinding) BindLogin(c *gin.Context) (*web.LoginReq, mir.Error) {
obj := new(web.LoginReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedPubBinding) mustEmbedUnimplementedPubBinding() {}

@ -1,16 +1,29 @@
// Code generated by go-mir. DO NOT EDIT. // Code generated by go-mir. DO NOT EDIT.
// versions: // versions:
// - mir v3.2.0 // - mir v4.0.0
package v1 package v1
import ( import (
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
) )
type _binding_ interface {
Bind(*gin.Context) mir.Error
}
type _render_ interface {
Render(*gin.Context)
}
type _default_ interface {
Bind(*gin.Context, any) mir.Error
Render(*gin.Context, any, mir.Error)
}
type LoginReq struct { type LoginReq struct {
AgentInfo AgentInfo `json:"agent_info"` AgentInfo AgentInfo `json:"agent_info"`
Name string `json:"name"` Name string `json:"name"`
@ -37,6 +50,8 @@ type UserInfo struct {
} }
type User interface { type User interface {
_default_
// Chain provide handlers chain for gin // Chain provide handlers chain for gin
Chain() gin.HandlersChain Chain() gin.HandlersChain
@ -46,21 +61,8 @@ type User interface {
mustEmbedUnimplementedUserServant() mustEmbedUnimplementedUserServant()
} }
type UserBinding interface {
BindLogin(*gin.Context) (*LoginReq, mir.Error)
mustEmbedUnimplementedUserBinding()
}
type UserRender interface {
RenderLogout(*gin.Context, mir.Error)
RenderLogin(*gin.Context, *LoginResp, mir.Error)
mustEmbedUnimplementedUserRender()
}
// RegisterUserServant register User servant to gin // RegisterUserServant register User servant to gin
func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) { func RegisterUserServant(e *gin.Engine, s User) {
router := e.Group("x/v1") router := e.Group("x/v1")
// use chain for router // use chain for router
middlewares := s.Chain() middlewares := s.Chain()
@ -74,9 +76,8 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
r.RenderLogout(c, s.Logout()) s.Render(c, nil, s.Logout())
}) })
router.Handle("POST", "/user/login/", func(c *gin.Context) { router.Handle("POST", "/user/login/", func(c *gin.Context) {
select { select {
case <-c.Request.Context().Done(): case <-c.Request.Context().Done():
@ -84,20 +85,36 @@ func RegisterUserServant(e *gin.Engine, s User, b UserBinding, r UserRender) {
default: default:
} }
req, err := b.BindLogin(c) var (
obj any
err mir.Error
)
req := new(LoginReq)
obj = req
if bv, ok := obj.(_binding_); !ok {
err = s.Bind(c, req)
} else {
err = bv.Bind(c)
}
if err != nil { if err != nil {
r.RenderLogin(c, nil, err) s.Render(c, nil, err)
return return
} }
resp, err := s.Login(req) obj, err = s.Login(req)
r.RenderLogin(c, resp, err) if err != nil {
s.Render(c, nil, err)
return
}
if rv, ok := obj.(_render_); !ok {
s.Render(c, obj, nil)
} else {
rv.Render(c)
}
}) })
} }
// UnimplementedUserServant can be embedded to have forward compatible implementations. // UnimplementedUserServant can be embedded to have forward compatible implementations.
type UnimplementedUserServant struct { type UnimplementedUserServant struct{}
}
func (UnimplementedUserServant) Chain() gin.HandlersChain { func (UnimplementedUserServant) Chain() gin.HandlersChain {
return nil return nil
@ -112,31 +129,3 @@ func (UnimplementedUserServant) Login(req *LoginReq) (*LoginResp, mir.Error) {
} }
func (UnimplementedUserServant) mustEmbedUnimplementedUserServant() {} func (UnimplementedUserServant) mustEmbedUnimplementedUserServant() {}
// UnimplementedUserRender can be embedded to have forward compatible implementations.
type UnimplementedUserRender struct {
RenderAny func(*gin.Context, any, mir.Error)
}
func (r *UnimplementedUserRender) RenderLogout(c *gin.Context, err mir.Error) {
r.RenderAny(c, nil, err)
}
func (r *UnimplementedUserRender) RenderLogin(c *gin.Context, data *LoginResp, err mir.Error) {
r.RenderAny(c, data, err)
}
func (r *UnimplementedUserRender) mustEmbedUnimplementedUserRender() {}
// UnimplementedUserBinding can be embedded to have forward compatible implementations.
type UnimplementedUserBinding struct {
BindAny func(*gin.Context, any) mir.Error
}
func (b *UnimplementedUserBinding) BindLogin(c *gin.Context) (*LoginReq, mir.Error) {
obj := new(LoginReq)
err := b.BindAny(c, obj)
return obj, err
}
func (b *UnimplementedUserBinding) mustEmbedUnimplementedUserBinding() {}

@ -6,7 +6,7 @@ require (
github.com/Masterminds/semver/v3 v3.2.1 github.com/Masterminds/semver/v3 v3.2.1
github.com/afocus/captcha v0.0.0-20191010092841-4bd1f21c8868 github.com/afocus/captcha v0.0.0-20191010092841-4bd1f21c8868
github.com/alimy/cfg v0.3.0 github.com/alimy/cfg v0.3.0
github.com/alimy/mir/v3 v3.2.1 github.com/alimy/mir/v4 v4.0.0-alpha.3
github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible
github.com/allegro/bigcache/v3 v3.0.2 github.com/allegro/bigcache/v3 v3.0.2
github.com/bytedance/sonic v1.9.1 github.com/bytedance/sonic v1.9.1

@ -131,8 +131,8 @@ github.com/alexflint/go-filemutex v0.0.0-20171022225611-72bdc8eae2ae/go.mod h1:C
github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk= github.com/alexflint/go-filemutex v1.1.0/go.mod h1:7P4iRhttt/nUvUOrYIhcpMzv2G6CY9UnI16Z+UJqRyk=
github.com/alimy/cfg v0.3.0 h1:9xgA0QWVCPSq9fFNRcYahVCAX22IL9ts2wrTQPfAStY= github.com/alimy/cfg v0.3.0 h1:9xgA0QWVCPSq9fFNRcYahVCAX22IL9ts2wrTQPfAStY=
github.com/alimy/cfg v0.3.0/go.mod h1:rOxbasTH2srl6StAjNF5Vyi8bfrdkl3fLGmOYtSw81c= github.com/alimy/cfg v0.3.0/go.mod h1:rOxbasTH2srl6StAjNF5Vyi8bfrdkl3fLGmOYtSw81c=
github.com/alimy/mir/v3 v3.2.1 h1:vnAHdqzMccP8C0DDyY3hAV50cVNBfDopgcyvv8TL9L4= github.com/alimy/mir/v4 v4.0.0-alpha.3 h1:T1i3xolo/cvOxCpUTSvAU2AcgB3ajNm0/jM1EbsqpJM=
github.com/alimy/mir/v3 v3.2.1/go.mod h1:ybhT2ijOiDn0lLwWzIY6vXdv+uzZrctS7VFfczcXBWU= github.com/alimy/mir/v4 v4.0.0-alpha.3/go.mod h1:X09f2IOQ4NTyJFKJ10S+J7Jk988T5IvvprwTijQZAsg=
github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible h1:KpbJFXwhVeuxNtBJ74MCGbIoaBok2uZvkD7QXp2+Wis= github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible h1:KpbJFXwhVeuxNtBJ74MCGbIoaBok2uZvkD7QXp2+Wis=
github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8= github.com/aliyun/aliyun-oss-go-sdk v2.2.7+incompatible/go.mod h1:T/Aws4fEfogEE9v+HPhhw+CntffsBHJ8nXQCwKr0/g8=
github.com/allegro/bigcache/v3 v3.0.2 h1:AKZCw+5eAaVyNTBmI2fgyPVJhHkdWder3O9IrprcQfI= github.com/allegro/bigcache/v3 v3.0.2 h1:AKZCw+5eAaVyNTBmI2fgyPVJhHkdWder3O9IrprcQfI=

@ -0,0 +1,38 @@
package conf
import (
"sync"
"github.com/sirupsen/logrus"
"github.com/smartwalle/alipay/v3"
)
var (
_alipayClient *alipay.Client
_onceAlipay sync.Once
)
func MustAlipayClient() *alipay.Client {
_onceAlipay.Do(func() {
s := AlipaySetting
// 将 key 的验证调整到初始化阶段
client, err := alipay.New(s.AppID, s.PrivateKey, s.InProduction)
if err != nil {
logrus.Fatalf("alipay.New err: %s", err)
}
// 加载应用公钥证书
if err = client.LoadAppPublicCertFromFile(s.AppPublicCertFile); err != nil {
logrus.Fatalf("client.LoadAppPublicCertFromFile err: %s\n", err)
}
// 加载支付宝根证书
if err = client.LoadAliPayRootCertFromFile(s.RootCertFile); err != nil {
logrus.Fatalf("client.LoadAliPayRootCertFromFile err: %s\n", err)
}
// 加载支付宝公钥证书
if err = client.LoadAliPayPublicCertFromFile(s.PublicCertFile); err != nil {
logrus.Fatalf("client.LoadAliPayPublicCertFromFile err: %s\n", err)
}
_alipayClient = client
})
return _alipayClient
}

@ -7,7 +7,14 @@ package web
import ( import (
"context" "context"
"github.com/alimy/mir/v4"
"github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/conf"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/rocboss/paopao-ce/pkg/app"
"github.com/rocboss/paopao-ce/pkg/convert"
"github.com/rocboss/paopao-ce/pkg/xerror"
"github.com/sirupsen/logrus"
"github.com/smartwalle/alipay/v3" "github.com/smartwalle/alipay/v3"
) )
@ -46,3 +53,44 @@ type AlipayNotifyReq struct {
TradeNo string TradeNo string
TradeStatus alipay.TradeStatus TradeStatus alipay.TradeStatus
} }
func (r *AlipayNotifyReq) Bind(c *gin.Context) mir.Error {
if err := c.Request.ParseForm(); err != nil {
logrus.Errorf("parse form err: %s", err)
return _errRechargeNotifyError
}
noti, err := conf.MustAlipayClient().GetTradeNotification(c.Request)
if err != nil {
logrus.Errorf("alipayClient.GetTradeNotification err: %s form: %v", err, c.Request.Form)
return _errRechargeNotifyError
}
r.Ctx = c.Request.Context()
r.ID = convert.StrTo(noti.OutTradeNo).MustInt64()
r.TradeNo, r.TradeStatus = noti.TradeNo, noti.TradeStatus
return nil
}
func (r *UserWalletBillsReq) Bind(c *gin.Context) mir.Error {
uid, ok := base.UserIdFrom(c)
if !ok {
return xerror.UnauthorizedTokenError
}
r.UserId = uid
r.Page, r.PageSize = app.GetPageInfo(c)
return nil
}
func (r *UserRechargeLinkReq) Bind(c *gin.Context) mir.Error {
r.Host = c.Request.Host
return bindAny(c, r)
}
func (r *UserRechargeResultReq) Bind(c *gin.Context) mir.Error {
uid, exist := base.UserIdFrom(c)
if !exist {
return xerror.UnauthorizedTokenError
}
r.UserId, r.Id = uid, convert.StrTo(c.Query("id")).MustInt64()
return nil
}

@ -5,7 +5,11 @@
package web package web
import ( import (
"github.com/alimy/mir/v4"
"github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/rocboss/paopao-ce/pkg/convert"
"github.com/rocboss/paopao-ce/pkg/xerror"
) )
type ChangeAvatarReq struct { type ChangeAvatarReq struct {
@ -111,3 +115,58 @@ type TweetCollectionStatusReq struct {
type TweetCollectionStatusResp struct { type TweetCollectionStatusResp struct {
Status bool `json:"status"` Status bool `json:"status"`
} }
func (r *UserInfoReq) Bind(c *gin.Context) mir.Error {
username, exist := base.UserNameFrom(c)
if !exist {
return xerror.UnauthorizedAuthNotExist
}
r.Username = username
return nil
}
func (r *GetMessagesReq) Bind(c *gin.Context) mir.Error {
return (*BasePageReq)(r).Bind(c)
}
func (r *GetCollectionsReq) Bind(c *gin.Context) mir.Error {
return (*BasePageReq)(r).Bind(c)
}
func (r *GetStarsReq) Bind(c *gin.Context) mir.Error {
return (*BasePageReq)(r).Bind(c)
}
func (r *SuggestTagsReq) Bind(c *gin.Context) mir.Error {
r.Keyword = c.Query("k")
return nil
}
func (r *SuggestUsersReq) Bind(c *gin.Context) mir.Error {
r.Keyword = c.Query("k")
return nil
}
func (r *TweetCollectionStatusReq) Bind(c *gin.Context) mir.Error {
userId, exist := base.UserIdFrom(c)
if !exist {
return xerror.UnauthorizedAuthNotExist
}
r.SimpleInfo = SimpleInfo{
Uid: userId,
}
r.TweetId = convert.StrTo(c.Query("id")).MustInt64()
return nil
}
func (r *TweetStarStatusReq) Bind(c *gin.Context) mir.Error {
UserId, exist := base.UserIdFrom(c)
if !exist {
return xerror.UnauthorizedAuthNotExist
}
r.SimpleInfo = SimpleInfo{
Uid: UserId,
}
r.TweetId = convert.StrTo(c.Query("id")).MustInt64()
return nil
}

@ -5,8 +5,11 @@
package web package web
import ( import (
"github.com/alimy/mir/v4"
"github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/rocboss/paopao-ce/pkg/app"
) )
const ( const (
@ -84,3 +87,13 @@ func (r *GetUserTweetsReq) SetPageInfo(page int, pageSize int) {
func (r *TweetCommentsReq) SetPageInfo(page int, pageSize int) { func (r *TweetCommentsReq) SetPageInfo(page int, pageSize int) {
r.Page, r.PageSize = page, pageSize r.Page, r.PageSize = page, pageSize
} }
func (r *TimelineReq) Bind(c *gin.Context) mir.Error {
user, _ := base.UserFrom(c)
r.BaseInfo = BaseInfo{
User: user,
}
r.Page, r.PageSize = app.GetPageInfo(c)
r.Query, r.Type = c.Query("query"), "search"
return nil
}

@ -9,7 +9,12 @@ import (
"mime/multipart" "mime/multipart"
"strings" "strings"
"github.com/alimy/mir/v4"
"github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/rocboss/paopao-ce/pkg/convert"
"github.com/rocboss/paopao-ce/pkg/xerror"
) )
type TweetCommentThumbsReq struct { type TweetCommentThumbsReq struct {
@ -194,3 +199,75 @@ func (p *PostContentItem) Check(acs core.AttachmentCheckService) error {
} }
return nil return nil
} }
func (r *UploadAttachmentReq) Bind(c *gin.Context) (xerr mir.Error) {
userId, exist := base.UserIdFrom(c)
if !exist {
return xerror.UnauthorizedAuthNotExist
}
uploadType := c.Request.FormValue("type")
file, fileHeader, err := c.Request.FormFile("file")
if err != nil {
return _errFileUploadFailed
}
defer func() {
if xerr != nil {
file.Close()
}
}()
if err := fileCheck(uploadType, fileHeader.Size); err != nil {
return err
}
contentType := fileHeader.Header.Get("Content-Type")
fileExt, xerr := getFileExt(contentType)
if xerr != nil {
return xerr
}
r.SimpleInfo = SimpleInfo{
Uid: userId,
}
r.UploadType, r.ContentType = uploadType, contentType
r.File, r.FileSize, r.FileExt = file, fileHeader.Size, fileExt
return nil
}
func (r *DownloadAttachmentPrecheckReq) Bind(c *gin.Context) mir.Error {
user, exist := base.UserFrom(c)
if !exist {
return xerror.UnauthorizedAuthNotExist
}
r.BaseInfo = BaseInfo{
User: user,
}
r.ContentID = convert.StrTo(c.Query("id")).MustInt64()
return nil
}
func (r *DownloadAttachmentReq) Bind(c *gin.Context) mir.Error {
user, exist := base.UserFrom(c)
if !exist {
return xerror.UnauthorizedAuthNotExist
}
r.BaseInfo = BaseInfo{
User: user,
}
r.ContentID = convert.StrTo(c.Query("id")).MustInt64()
return nil
}
func (r *CreateTweetReq) Bind(c *gin.Context) mir.Error {
r.ClientIP = c.ClientIP()
return bindAny(c, r)
}
func (r *CreateCommentReplyReq) Bind(c *gin.Context) mir.Error {
r.ClientIP = c.ClientIP()
return bindAny(c, r)
}
func (r *CreateCommentReq) Bind(c *gin.Context) mir.Error {
r.ClientIP = c.ClientIP()
return bindAny(c, r)
}

@ -0,0 +1,47 @@
// Copyright 2022 ROC. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package web
import (
"github.com/alimy/mir/v4"
"github.com/rocboss/paopao-ce/pkg/xerror"
)
func fileCheck(uploadType string, size int64) mir.Error {
if uploadType != "public/video" &&
uploadType != "public/image" &&
uploadType != "public/avatar" &&
uploadType != "attachment" {
return xerror.InvalidParams
}
if size > 1024*1024*100 {
return _errFileInvalidSize.WithDetails("最大允许100MB")
}
return nil
}
func getFileExt(s string) (string, mir.Error) {
switch s {
case "image/png":
return ".png", nil
case "image/jpg":
return ".jpg", nil
case "image/jpeg":
return ".jpeg", nil
case "image/gif":
return ".gif", nil
case "video/mp4":
return ".mp4", nil
case "video/quicktime":
return ".mov", nil
case "application/zip",
"application/x-zip",
"application/octet-stream",
"application/x-zip-compressed":
return ".zip", nil
default:
return "", _errFileInvalidExt.WithDetails("仅允许 png/jpg/gif/mp4/mov/zip 类型")
}
}

@ -5,7 +5,7 @@
package web package web
import ( import (
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
@ -13,6 +13,10 @@ import (
"github.com/rocboss/paopao-ce/pkg/xerror" "github.com/rocboss/paopao-ce/pkg/xerror"
) )
var (
bindAny = base.NewBindAnyFn()
)
type BaseInfo struct { type BaseInfo struct {
User *core.User User *core.User
} }
@ -47,3 +51,13 @@ func BasePageReqFrom(c *gin.Context) (*BasePageReq, mir.Error) {
PageSize: pageSize, PageSize: pageSize,
}, nil }, nil
} }
func (r *BasePageReq) Bind(c *gin.Context) mir.Error {
uid, ok := base.UserIdFrom(c)
if !ok {
return xerror.UnauthorizedTokenError
}
r.UserId = uid
r.Page, r.PageSize = app.GetPageInfo(c)
return nil
}

@ -0,0 +1,93 @@
// Copyright 2023 ROC. All rights reserved.
// Use of this source code is governed by a MIT style
// license that can be found in the LICENSE file.
package web
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, "无管理权限")
_errDisallowUserRegister = xerror.NewError(20023, "系统不允许注册用户")
_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, "评论发布失败")
_errGetCommentFailed = xerror.NewError(40003, "获取评论详情失败")
_errDeleteCommentFailed = xerror.NewError(40004, "评论删除失败")
_errCreateReplyFailed = xerror.NewError(40005, "评论回复失败")
_errGetReplyFailed = xerror.NewError(40006, "获取评论详情失败")
_errMaxCommentCount = xerror.NewError(40007, "评论数已达最大限制")
_errGetCommentThumbs = xerror.NewError(40008, "获取评论点赞信息失败")
_errGetMessagesFailed = xerror.NewError(50001, "获取消息列表失败")
_errReadMessageFailed = xerror.NewError(50002, "标记消息已读失败")
_errSendWhisperFailed = xerror.NewError(50003, "私信发送失败")
_errNoWhisperToSelf = xerror.NewError(50004, "不允许给自己发送私信")
_errTooManyWhisperNum = xerror.NewError(50005, "今日私信次数已达上限")
_errGetCollectionsFailed = xerror.NewError(60001, "获取收藏列表失败")
_errGetStarsFailed = xerror.NewError(60002, "获取点赞列表失败")
_errRechargeReqFail = xerror.NewError(70001, "充值请求失败")
_errRechargeNotifyError = xerror.NewError(70002, "充值回调失败")
_errGetRechargeFailed = xerror.NewError(70003, "充值详情获取失败")
_errUserWalletBillsFailed = xerror.NewError(70004, "用户钱包账单获取失败")
_errNoRequestingFriendToSelf = xerror.NewError(80001, "不允许添加自己为好友")
_errNotExistFriendId = xerror.NewError(80002, "好友id不存在")
_errSendRequestingFriendFailed = xerror.NewError(80003, "申请添加朋友请求发送失败")
_errAddFriendFailed = xerror.NewError(80004, "添加好友失败")
_errRejectFriendFailed = xerror.NewError(80005, "拒绝好友失败")
_errDeleteFriendFailed = xerror.NewError(80006, "删除好友失败")
_errGetContactsFailed = xerror.NewError(80007, "获取联系人列表失败")
_errNoActionToSelf = xerror.NewError(80008, "不允许对自己操作")
_errFollowTopicFailed = xerror.NewError(90001, "关注话题失败")
_errUnfollowTopicFailed = xerror.NewError(90002, "取消关注话题失败")
_errStickTopicFailed = xerror.NewError(90003, "更行话题置顶状态失败")
_errThumbsUpTweetComment = xerror.NewError(90101, "评论点赞失败")
_errThumbsDownTweetComment = xerror.NewError(90102, "评论点踩失败")
_errThumbsUpTweetReply = xerror.NewError(90103, "评论回复点赞失败")
_errThumbsDownTweetReply = xerror.NewError(90104, "评论回复点踩失败")
_errFileUploadFailed = xerror.NewError(10200, "文件上传失败")
_errFileInvalidExt = xerror.NewError(10201, "文件类型不合法")
_errFileInvalidSize = xerror.NewError(10202, "文件大小超限")
)

@ -11,5 +11,5 @@ import (
// RouteWeb register Manager route // RouteWeb register Manager route
func RouteManager(e *gin.Engine) { func RouteManager(e *gin.Engine) {
api.RegisterUserServant(e, newUserSrv(), newUserBinding(), newUserRender()) api.RegisterUserServant(e, newUserSrv())
} }

@ -10,9 +10,7 @@ import (
) )
var ( var (
_ api.User = (*userSrv)(nil) _ api.User = (*userSrv)(nil)
_ api.UserBinding = (*userBinding)(nil)
_ api.UserRender = (*userRender)(nil)
) )
type userSrv struct { type userSrv struct {
@ -20,32 +18,6 @@ type userSrv struct {
api.UnimplementedUserServant api.UnimplementedUserServant
} }
type userBinding struct {
base.BaseBinding
*api.UnimplementedUserBinding
}
type userRender struct {
base.BaseRender
*api.UnimplementedUserRender
}
func newUserSrv() api.User { func newUserSrv() api.User {
return &userSrv{} return &userSrv{}
} }
func newUserBinding() api.UserBinding {
return &userBinding{
UnimplementedUserBinding: &api.UnimplementedUserBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newUserRender() api.UserRender {
return &userRender{
UnimplementedUserRender: &api.UnimplementedUserRender{
RenderAny: base.RenderAny,
},
}
}

@ -10,7 +10,7 @@ import (
"math" "math"
"net/http" "net/http"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/cockroachdb/errors" "github.com/cockroachdb/errors"
"github.com/getsentry/sentry-go" "github.com/getsentry/sentry-go"
sentrygin "github.com/getsentry/sentry-go/gin" sentrygin "github.com/getsentry/sentry-go/gin"
@ -25,9 +25,13 @@ import (
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
type BaseServant types.Empty type BaseServant struct {
bindAny func(c *gin.Context, obj any) mir.Error
}
type DaoServant struct { type DaoServant struct {
*BaseServant
Ds core.DataService Ds core.DataService
Ts core.TweetSearchService Ts core.TweetSearchService
Redis core.RedisCache Redis core.RedisCache
@ -156,6 +160,25 @@ func RenderAny(c *gin.Context, data any, err mir.Error) {
} }
} }
func (s *BaseServant) Bind(c *gin.Context, obj any) mir.Error {
return s.bindAny(c, obj)
}
func (s *BaseServant) Render(c *gin.Context, data any, err mir.Error) {
if err == nil {
c.JSON(http.StatusOK, &JsonResp{
Code: 0,
Msg: "success",
Data: data,
})
} else {
c.JSON(xerror.HttpStatusCode(err), &JsonResp{
Code: err.StatusCode(),
Msg: err.Error(),
})
}
}
func (s *DaoServant) GetTweetBy(id int64) (*core.PostFormated, error) { func (s *DaoServant) GetTweetBy(id int64) (*core.PostFormated, error) {
post, err := s.Ds.GetPostByID(id) post, err := s.Ds.GetPostByID(id)
if err != nil { if err != nil {
@ -253,17 +276,24 @@ func (s *DaoServant) GetTweetList(conditions *core.ConditionsT, offset, limit in
return posts, postFormated, err return posts, postFormated, err
} }
func NewDaoServant() *DaoServant {
return &DaoServant{
Redis: cache.NewRedisCache(),
Ds: dao.DataService(),
Ts: dao.TweetSearchService(),
}
}
func NewBindAnyFn() func(c *gin.Context, obj any) mir.Error { func NewBindAnyFn() func(c *gin.Context, obj any) mir.Error {
if conf.UseSentryGin() { if conf.UseSentryGin() {
return bindAnySentry return bindAnySentry
} }
return bindAny return bindAny
} }
func NewBaseServant() *BaseServant {
return &BaseServant{
bindAny: NewBindAnyFn(),
}
}
func NewDaoServant() *DaoServant {
return &DaoServant{
BaseServant: NewBaseServant(),
Redis: cache.NewRedisCache(),
Ds: dao.DataService(),
Ts: dao.TweetSearchService(),
}
}

@ -11,5 +11,5 @@ import (
// RouteBot register Bot route // RouteBot register Bot route
func RouteBot(e *gin.Engine) { func RouteBot(e *gin.Engine) {
api.RegisterUserServant(e, newUserSrv(), newUserBinding(), newUserRender()) api.RegisterUserServant(e, newUserSrv())
} }

@ -10,42 +10,16 @@ import (
) )
var ( var (
_ api.User = (*userSrv)(nil) _ api.User = (*userSrv)(nil)
_ api.UserBinding = (*userBinding)(nil)
_ api.UserRender = (*userRender)(nil)
) )
type userSrv struct { type userSrv struct {
base.BaseServant *base.BaseServant
api.UnimplementedUserServant api.UnimplementedUserServant
} }
type userBinding struct {
base.BaseBinding
*api.UnimplementedUserBinding
}
type userRender struct {
base.BaseRender
*api.UnimplementedUserRender
}
func newUserSrv() api.User { func newUserSrv() api.User {
return &userSrv{} return &userSrv{
} BaseServant: base.NewBaseServant(),
func newUserBinding() api.UserBinding {
return &userBinding{
UnimplementedUserBinding: &api.UnimplementedUserBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newUserRender() api.UserRender {
return &userRender{
UnimplementedUserRender: &api.UnimplementedUserRender{
RenderAny: base.RenderAny,
},
} }
} }

@ -26,5 +26,5 @@ func RouteLocalOSS(e *gin.Engine) {
// RouteLocaloss register LocalOSS route if needed // RouteLocaloss register LocalOSS route if needed
func RouteLocaloss(e *gin.Engine) { func RouteLocaloss(e *gin.Engine) {
api.RegisterUserServant(e, newUserSrv(), newUserBinding(), newUserRender()) api.RegisterUserServant(e, newUserSrv())
} }

@ -10,42 +10,16 @@ import (
) )
var ( var (
_ api.User = (*userSrv)(nil) _ api.User = (*userSrv)(nil)
_ api.UserBinding = (*userBinding)(nil)
_ api.UserRender = (*userRender)(nil)
) )
type userSrv struct { type userSrv struct {
base.BaseServant *base.BaseServant
api.UnimplementedUserServant api.UnimplementedUserServant
} }
type userBinding struct {
base.BaseBinding
*api.UnimplementedUserBinding
}
type userRender struct {
base.BaseRender
*api.UnimplementedUserRender
}
func newUserSrv() api.User { func newUserSrv() api.User {
return &userSrv{} return &userSrv{
} BaseServant: base.NewBaseServant(),
func newUserBinding() api.UserBinding {
return &userBinding{
UnimplementedUserBinding: &api.UnimplementedUserBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newUserRender() api.UserRender {
return &userRender{
UnimplementedUserRender: &api.UnimplementedUserRender{
RenderAny: base.RenderAny,
},
} }
} }

@ -11,5 +11,5 @@ import (
// RouteWeb register SpaceX route // RouteWeb register SpaceX route
func RouteSpaceX(e *gin.Engine) { func RouteSpaceX(e *gin.Engine) {
api.RegisterUserServant(e, newUserSrv(), newUserBinding(), newUserRender()) api.RegisterUserServant(e, newUserSrv())
} }

@ -10,42 +10,16 @@ import (
) )
var ( var (
_ api.User = (*userSrv)(nil) _ api.User = (*userSrv)(nil)
_ api.UserBinding = (*userBinding)(nil)
_ api.UserRender = (*userRender)(nil)
) )
type userSrv struct { type userSrv struct {
base.BaseServant *base.BaseServant
api.UnimplementedUserServant api.UnimplementedUserServant
} }
type userBinding struct {
base.BaseBinding
*api.UnimplementedUserBinding
}
type userRender struct {
base.BaseRender
*api.UnimplementedUserRender
}
func newUserSrv() api.User { func newUserSrv() api.User {
return &userSrv{} return &userSrv{
} BaseServant: base.NewBaseServant(),
func newUserBinding() api.UserBinding {
return &userBinding{
UnimplementedUserBinding: &api.UnimplementedUserBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newUserRender() api.UserRender {
return &userRender{
UnimplementedUserRender: &api.UnimplementedUserRender{
RenderAny: base.RenderAny,
},
} }
} }

@ -5,7 +5,7 @@
package web package web
import ( import (
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
api "github.com/rocboss/paopao-ce/auto/api/v1" api "github.com/rocboss/paopao-ce/auto/api/v1"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
@ -15,9 +15,7 @@ import (
) )
var ( var (
_ api.Admin = (*adminSrv)(nil) _ api.Admin = (*adminSrv)(nil)
_ api.AdminBinding = (*adminBinding)(nil)
_ api.AdminRender = (*adminRender)(nil)
) )
type adminSrv struct { type adminSrv struct {
@ -25,14 +23,6 @@ type adminSrv struct {
*base.DaoServant *base.DaoServant
} }
type adminBinding struct {
*api.UnimplementedAdminBinding
}
type adminRender struct {
*api.UnimplementedAdminRender
}
func (s *adminSrv) Chain() gin.HandlersChain { func (s *adminSrv) Chain() gin.HandlersChain {
return gin.HandlersChain{chain.JWT(), chain.Admin()} return gin.HandlersChain{chain.JWT(), chain.Admin()}
} }
@ -55,19 +45,3 @@ func newAdminSrv(s *base.DaoServant) api.Admin {
DaoServant: s, DaoServant: s,
} }
} }
func newAdminBinding() api.AdminBinding {
return &adminBinding{
UnimplementedAdminBinding: &api.UnimplementedAdminBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newAdminRender() api.AdminRender {
return &adminRender{
UnimplementedAdminRender: &api.UnimplementedAdminRender{
RenderAny: base.RenderAny,
},
}
}

@ -7,26 +7,19 @@ package web
import ( import (
"fmt" "fmt"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
api "github.com/rocboss/paopao-ce/auto/api/v1" api "github.com/rocboss/paopao-ce/auto/api/v1"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/rocboss/paopao-ce/internal/servants/chain" "github.com/rocboss/paopao-ce/internal/servants/chain"
"github.com/rocboss/paopao-ce/pkg/app"
"github.com/rocboss/paopao-ce/pkg/convert"
"github.com/rocboss/paopao-ce/pkg/xerror"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
"github.com/smartwalle/alipay/v3" "github.com/smartwalle/alipay/v3"
) )
var ( var (
_ api.AlipayPub = (*alipayPubSrv)(nil) _ api.AlipayPub = (*alipayPubSrv)(nil)
_ api.AlipayPubBinding = (*alipayPubBinding)(nil) _ api.AlipayPriv = (*alipayPrivSrv)(nil)
_ api.AlipayPubRender = (*alipayPubRender)(nil)
_ api.AlipayPriv = (*alipayPrivSrv)(nil)
_ api.AlipayPrivBinding = (*alipayPrivBinding)(nil)
_ api.AlipayPrivRender = (*alipayPrivRender)(nil)
) )
type alipayPubSrv struct { type alipayPubSrv struct {
@ -34,16 +27,6 @@ type alipayPubSrv struct {
*base.DaoServant *base.DaoServant
} }
type alipayPubBinding struct {
*api.UnimplementedAlipayPubBinding
alipayClient *alipay.Client
}
type alipayPubRender struct {
*api.UnimplementedAlipayPubRender
}
type alipayPrivSrv struct { type alipayPrivSrv struct {
api.UnimplementedAlipayPrivServant api.UnimplementedAlipayPrivServant
*base.DaoServant *base.DaoServant
@ -51,32 +34,6 @@ type alipayPrivSrv struct {
alipayClient *alipay.Client alipayClient *alipay.Client
} }
type alipayPrivBinding struct {
*api.UnimplementedAlipayPrivBinding
}
type alipayPrivRender struct {
*api.UnimplementedAlipayPrivRender
}
func (b *alipayPubBinding) BindAlipayNotify(c *gin.Context) (*web.AlipayNotifyReq, mir.Error) {
if err := c.Request.ParseForm(); err != nil {
logrus.Errorf("parse form err: %s", err)
return nil, _errRechargeNotifyError
}
noti, err := b.alipayClient.GetTradeNotification(c.Request)
if err != nil {
logrus.Errorf("alipayClient.GetTradeNotification err: %s form: %v", err, c.Request.Form)
return nil, _errRechargeNotifyError
}
return &web.AlipayNotifyReq{
Ctx: c.Request.Context(),
ID: convert.StrTo(noti.OutTradeNo).MustInt64(),
TradeNo: noti.TradeNo,
TradeStatus: noti.TradeStatus,
}, nil
}
func (s *alipayPubSrv) AlipayNotify(req *web.AlipayNotifyReq) mir.Error { func (s *alipayPubSrv) AlipayNotify(req *web.AlipayNotifyReq) mir.Error {
if req.TradeStatus == alipay.TradeStatusSuccess { if req.TradeStatus == alipay.TradeStatusSuccess {
if err := s.Redis.SetRechargeStatus(req.Ctx, req.TradeNo); err == nil { if err := s.Redis.SetRechargeStatus(req.Ctx, req.TradeNo); err == nil {
@ -99,38 +56,6 @@ func (s *alipayPubSrv) AlipayNotify(req *web.AlipayNotifyReq) mir.Error {
return nil return nil
} }
func (b *alipayPrivBinding) BindUserWalletBills(c *gin.Context) (*web.UserWalletBillsReq, mir.Error) {
uid, ok := base.UserIdFrom(c)
if !ok {
return nil, xerror.UnauthorizedTokenError
}
page, pageSize := app.GetPageInfo(c)
return &web.UserWalletBillsReq{
UserId: uid,
Page: page,
PageSize: pageSize,
}, nil
}
func (b *alipayPrivBinding) BindUserRechargeLink(c *gin.Context) (*web.UserRechargeLinkReq, mir.Error) {
v := &web.UserRechargeLinkReq{
Host: c.Request.Host,
}
err := b.BindAny(c, v)
return v, err
}
func (b *alipayPrivBinding) BindUserRechargeResult(c *gin.Context) (*web.UserRechargeResultReq, mir.Error) {
uid, exist := base.UserIdFrom(c)
if !exist {
return nil, xerror.UnauthorizedTokenError
}
return &web.UserRechargeResultReq{
UserId: uid,
Id: convert.StrTo(c.Query("id")).MustInt64(),
}, nil
}
func (s *alipayPrivSrv) Chain() gin.HandlersChain { func (s *alipayPrivSrv) Chain() gin.HandlersChain {
return gin.HandlersChain{chain.JWT()} return gin.HandlersChain{chain.JWT()}
} }
@ -197,42 +122,9 @@ func newAlipayPubSrv(s *base.DaoServant) api.AlipayPub {
} }
} }
func newAlipayPubBinding(alipayClient *alipay.Client) api.AlipayPubBinding {
return &alipayPubBinding{
UnimplementedAlipayPubBinding: &api.UnimplementedAlipayPubBinding{
BindAny: base.NewBindAnyFn(),
},
alipayClient: alipayClient,
}
}
func newAlipayPubRender() api.AlipayPubRender {
return &alipayPubRender{
UnimplementedAlipayPubRender: &api.UnimplementedAlipayPubRender{
RenderAny: base.RenderAny,
},
}
}
func newAlipayPrivSrv(s *base.DaoServant, client *alipay.Client) api.AlipayPriv { func newAlipayPrivSrv(s *base.DaoServant, client *alipay.Client) api.AlipayPriv {
return &alipayPrivSrv{ return &alipayPrivSrv{
DaoServant: s, DaoServant: s,
alipayClient: client, alipayClient: client,
} }
} }
func newAlipayPrivBinding() api.AlipayPrivBinding {
return &alipayPrivBinding{
UnimplementedAlipayPrivBinding: &api.UnimplementedAlipayPrivBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newAlipayPrivRender() api.AlipayPrivRender {
return &alipayPrivRender{
UnimplementedAlipayPrivRender: &api.UnimplementedAlipayPrivRender{
RenderAny: base.RenderAny,
},
}
}

@ -10,14 +10,13 @@ import (
"time" "time"
"unicode/utf8" "unicode/utf8"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
api "github.com/rocboss/paopao-ce/auto/api/v1" api "github.com/rocboss/paopao-ce/auto/api/v1"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/rocboss/paopao-ce/internal/servants/chain" "github.com/rocboss/paopao-ce/internal/servants/chain"
"github.com/rocboss/paopao-ce/pkg/convert"
"github.com/rocboss/paopao-ce/pkg/xerror" "github.com/rocboss/paopao-ce/pkg/xerror"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
@ -29,9 +28,7 @@ const (
) )
var ( var (
_ api.Core = (*coreSrv)(nil) _ api.Core = (*coreSrv)(nil)
_ api.CoreBinding = (*coreBinding)(nil)
_ api.CoreRender = (*coreRender)(nil)
) )
type coreSrv struct { type coreSrv struct {
@ -41,77 +38,6 @@ type coreSrv struct {
oss core.ObjectStorageService oss core.ObjectStorageService
} }
type coreBinding struct {
*api.UnimplementedCoreBinding
}
type coreRender struct {
*api.UnimplementedCoreRender
}
func (b *coreBinding) BindGetUserInfo(c *gin.Context) (*web.UserInfoReq, mir.Error) {
username, exist := base.UserNameFrom(c)
if !exist {
return nil, xerror.UnauthorizedAuthNotExist
}
return &web.UserInfoReq{
Username: username,
}, nil
}
func (b *coreBinding) BindGetMessages(c *gin.Context) (*web.GetMessagesReq, mir.Error) {
v, err := web.BasePageReqFrom(c)
return (*web.GetMessagesReq)(v), err
}
func (b *coreBinding) BindGetCollections(c *gin.Context) (*web.GetCollectionsReq, mir.Error) {
v, err := web.BasePageReqFrom(c)
return (*web.GetCollectionsReq)(v), err
}
func (b *coreBinding) BindGetStars(c *gin.Context) (*web.GetStarsReq, mir.Error) {
v, err := web.BasePageReqFrom(c)
return (*web.GetStarsReq)(v), err
}
func (b *coreBinding) BindSuggestTags(c *gin.Context) (*web.SuggestTagsReq, mir.Error) {
return &web.SuggestTagsReq{
Keyword: c.Query("k"),
}, nil
}
func (b *coreBinding) BindSuggestUsers(c *gin.Context) (*web.SuggestUsersReq, mir.Error) {
return &web.SuggestUsersReq{
Keyword: c.Query("k"),
}, nil
}
func (b *coreBinding) BindTweetCollectionStatus(c *gin.Context) (*web.TweetCollectionStatusReq, mir.Error) {
UserId, exist := base.UserIdFrom(c)
if !exist {
return nil, xerror.UnauthorizedAuthNotExist
}
return &web.TweetCollectionStatusReq{
SimpleInfo: web.SimpleInfo{
Uid: UserId,
},
TweetId: convert.StrTo(c.Query("id")).MustInt64(),
}, nil
}
func (b *coreBinding) BindTweetStarStatus(c *gin.Context) (*web.TweetStarStatusReq, mir.Error) {
UserId, exist := base.UserIdFrom(c)
if !exist {
return nil, xerror.UnauthorizedAuthNotExist
}
return &web.TweetStarStatusReq{
SimpleInfo: web.SimpleInfo{
Uid: UserId,
},
TweetId: convert.StrTo(c.Query("id")).MustInt64(),
}, nil
}
func (s *coreSrv) Chain() gin.HandlersChain { func (s *coreSrv) Chain() gin.HandlersChain {
return gin.HandlersChain{chain.JWT()} return gin.HandlersChain{chain.JWT()}
} }
@ -448,19 +374,3 @@ func newCoreSrv(s *base.DaoServant, oss core.ObjectStorageService) api.Core {
oss: oss, oss: oss,
} }
} }
func newCoreBinding() api.CoreBinding {
return &coreBinding{
UnimplementedCoreBinding: &api.UnimplementedCoreBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newCoreRender() api.CoreRender {
return &coreRender{
UnimplementedCoreRender: &api.UnimplementedCoreRender{
RenderAny: base.RenderAny,
},
}
}

@ -12,9 +12,7 @@ import (
) )
var ( var (
_ api.Followship = (*followshipSrv)(nil) _ api.Followship = (*followshipSrv)(nil)
_ api.FollowshipBinding = (*followshipBinding)(nil)
_ api.FollowshipRender = (*followshipRender)(nil)
) )
type followshipSrv struct { type followshipSrv struct {
@ -22,14 +20,6 @@ type followshipSrv struct {
*base.DaoServant *base.DaoServant
} }
type followshipBinding struct {
*api.UnimplementedFollowshipBinding
}
type followshipRender struct {
*api.UnimplementedFollowshipRender
}
func (s *followshipSrv) Chain() gin.HandlersChain { func (s *followshipSrv) Chain() gin.HandlersChain {
return gin.HandlersChain{chain.JWT()} return gin.HandlersChain{chain.JWT()}
} }
@ -37,19 +27,3 @@ func (s *followshipSrv) Chain() gin.HandlersChain {
func newFollowshipSrv(s *base.DaoServant) api.Followship { func newFollowshipSrv(s *base.DaoServant) api.Followship {
return &followshipSrv{} return &followshipSrv{}
} }
func newFollowshipBinding() api.FollowshipBinding {
return &followshipBinding{
UnimplementedFollowshipBinding: &api.UnimplementedFollowshipBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newFollowshipRender() api.FollowshipRender {
return &followshipRender{
UnimplementedFollowshipRender: &api.UnimplementedFollowshipRender{
RenderAny: base.RenderAny,
},
}
}

@ -5,7 +5,7 @@
package web package web
import ( import (
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
api "github.com/rocboss/paopao-ce/auto/api/v1" api "github.com/rocboss/paopao-ce/auto/api/v1"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
@ -16,9 +16,7 @@ import (
) )
var ( var (
_ api.Friendship = (*friendshipSrv)(nil) _ api.Friendship = (*friendshipSrv)(nil)
_ api.FriendshipBinding = (*friendshipBinding)(nil)
_ api.FriendshipRender = (*friendshipRender)(nil)
) )
type friendshipSrv struct { type friendshipSrv struct {
@ -26,14 +24,6 @@ type friendshipSrv struct {
*base.DaoServant *base.DaoServant
} }
type friendshipBinding struct {
*api.UnimplementedFriendshipBinding
}
type friendshipRender struct {
*api.UnimplementedFriendshipRender
}
func (s *friendshipSrv) Chain() gin.HandlersChain { func (s *friendshipSrv) Chain() gin.HandlersChain {
return gin.HandlersChain{chain.JWT()} return gin.HandlersChain{chain.JWT()}
} }
@ -124,19 +114,3 @@ func newFriendshipSrv(s *base.DaoServant) api.Friendship {
DaoServant: s, DaoServant: s,
} }
} }
func newFriendshipBinding() api.FriendshipBinding {
return &friendshipBinding{
UnimplementedFriendshipBinding: &api.UnimplementedFriendshipBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newFriendshipRender() api.FriendshipRender {
return &friendshipRender{
UnimplementedFriendshipRender: &api.UnimplementedFriendshipRender{
RenderAny: base.RenderAny,
},
}
}

@ -5,7 +5,7 @@
package web package web
import ( import (
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
api "github.com/rocboss/paopao-ce/auto/api/v1" api "github.com/rocboss/paopao-ce/auto/api/v1"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
@ -14,14 +14,11 @@ import (
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/rocboss/paopao-ce/internal/servants/chain" "github.com/rocboss/paopao-ce/internal/servants/chain"
"github.com/rocboss/paopao-ce/pkg/app"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
var ( var (
_ api.Loose = (*looseSrv)(nil) _ api.Loose = (*looseSrv)(nil)
_ api.LooseBinding = (*looseBinding)(nil)
_ api.LooseRender = (*looseRender)(nil)
) )
type looseSrv struct { type looseSrv struct {
@ -29,32 +26,6 @@ type looseSrv struct {
*base.DaoServant *base.DaoServant
} }
type looseBinding struct {
*api.UnimplementedLooseBinding
}
type looseRender struct {
*api.UnimplementedLooseRender
}
func (s *looseBinding) BindTimeline(c *gin.Context) (*web.TimelineReq, mir.Error) {
user, _ := base.UserFrom(c)
page, pageSize := app.GetPageInfo(c)
v := &web.TimelineReq{
BaseInfo: web.BaseInfo{
User: user,
},
Query: c.Query("query"),
Type: "search",
Page: page,
PageSize: pageSize,
}
if c.Query("type") == "tag" {
v.Type = "tag"
}
return v, nil
}
func (s *looseSrv) Chain() gin.HandlersChain { func (s *looseSrv) Chain() gin.HandlersChain {
return gin.HandlersChain{chain.JwtLoose()} return gin.HandlersChain{chain.JwtLoose()}
} }
@ -278,19 +249,3 @@ func newLooseSrv(s *base.DaoServant) api.Loose {
DaoServant: s, DaoServant: s,
} }
} }
func newLooseBinding() api.LooseBinding {
return &looseBinding{
UnimplementedLooseBinding: &api.UnimplementedLooseBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newLooseRender() api.LooseRender {
return &looseRender{
UnimplementedLooseRender: &api.UnimplementedLooseRender{
RenderAny: base.RenderAny,
},
}
}

@ -9,7 +9,7 @@ import (
"strings" "strings"
"time" "time"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/disintegration/imaging" "github.com/disintegration/imaging"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gofrs/uuid" "github.com/gofrs/uuid"
@ -19,16 +19,13 @@ import (
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/rocboss/paopao-ce/internal/servants/chain" "github.com/rocboss/paopao-ce/internal/servants/chain"
"github.com/rocboss/paopao-ce/pkg/convert"
"github.com/rocboss/paopao-ce/pkg/utils" "github.com/rocboss/paopao-ce/pkg/utils"
"github.com/rocboss/paopao-ce/pkg/xerror" "github.com/rocboss/paopao-ce/pkg/xerror"
"github.com/sirupsen/logrus" "github.com/sirupsen/logrus"
) )
var ( var (
_ api.Priv = (*privSrv)(nil) _ api.Priv = (*privSrv)(nil)
_ api.PrivBinding = (*privBinding)(nil)
_ api.PrivRender = (*privRender)(nil)
_uploadAttachmentTypeMap = map[string]core.AttachmentType{ _uploadAttachmentTypeMap = map[string]core.AttachmentType{
"public/image": core.AttachmentTypeImage, "public/image": core.AttachmentTypeImage,
@ -45,100 +42,6 @@ type privSrv struct {
oss core.ObjectStorageService oss core.ObjectStorageService
} }
type privBinding struct {
*api.UnimplementedPrivBinding
}
type privRender struct {
*api.UnimplementedPrivRender
}
func (b *privBinding) BindUploadAttachment(c *gin.Context) (_ *web.UploadAttachmentReq, xerr mir.Error) {
UserId, exist := base.UserIdFrom(c)
if !exist {
return nil, xerror.UnauthorizedAuthNotExist
}
uploadType := c.Request.FormValue("type")
file, fileHeader, err := c.Request.FormFile("file")
if err != nil {
return nil, _errFileUploadFailed
}
defer func() {
if xerr != nil {
file.Close()
}
}()
if err := fileCheck(uploadType, fileHeader.Size); err != nil {
return nil, err
}
contentType := fileHeader.Header.Get("Content-Type")
fileExt, xerr := getFileExt(contentType)
if xerr != nil {
return nil, xerr
}
return &web.UploadAttachmentReq{
SimpleInfo: web.SimpleInfo{
Uid: UserId,
},
UploadType: uploadType,
ContentType: contentType,
File: file,
FileSize: fileHeader.Size,
FileExt: fileExt,
}, nil
}
func (b *privBinding) BindDownloadAttachmentPrecheck(c *gin.Context) (*web.DownloadAttachmentPrecheckReq, mir.Error) {
user, exist := base.UserFrom(c)
if !exist {
return nil, xerror.UnauthorizedAuthNotExist
}
return &web.DownloadAttachmentPrecheckReq{
BaseInfo: web.BaseInfo{
User: user,
},
ContentID: convert.StrTo(c.Query("id")).MustInt64(),
}, nil
}
func (b *privBinding) BindDownloadAttachment(c *gin.Context) (*web.DownloadAttachmentReq, mir.Error) {
user, exist := base.UserFrom(c)
if !exist {
return nil, xerror.UnauthorizedAuthNotExist
}
return &web.DownloadAttachmentReq{
BaseInfo: web.BaseInfo{
User: user,
},
ContentID: convert.StrTo(c.Query("id")).MustInt64(),
}, nil
}
func (s *privBinding) BindCreateTweet(c *gin.Context) (*web.CreateTweetReq, mir.Error) {
v := &web.CreateTweetReq{}
err := s.BindAny(c, v)
v.ClientIP = c.ClientIP()
return v, err
}
func (s *privBinding) BindCreateCommentReply(c *gin.Context) (*web.CreateCommentReplyReq, mir.Error) {
v := &web.CreateCommentReplyReq{}
err := s.BindAny(c, v)
v.ClientIP = c.ClientIP()
return v, err
}
func (s *privBinding) BindCreateComment(c *gin.Context) (*web.CreateCommentReq, mir.Error) {
v := &web.CreateCommentReq{}
err := s.BindAny(c, v)
v.ClientIP = c.ClientIP()
return v, err
}
func (s *privSrv) Chain() gin.HandlersChain { func (s *privSrv) Chain() gin.HandlersChain {
return gin.HandlersChain{chain.JWT(), chain.Priv()} return gin.HandlersChain{chain.JWT(), chain.Priv()}
} }
@ -927,19 +830,3 @@ func newPrivSrv(s *base.DaoServant, oss core.ObjectStorageService) api.Priv {
oss: oss, oss: oss,
} }
} }
func newPrivBinding() api.PrivBinding {
return &privBinding{
UnimplementedPrivBinding: &api.UnimplementedPrivBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newPrivRender() api.PrivRender {
return &privRender{
UnimplementedPrivRender: &api.UnimplementedPrivRender{
RenderAny: base.RenderAny,
},
}
}

@ -14,7 +14,7 @@ import (
"unicode/utf8" "unicode/utf8"
"github.com/afocus/captcha" "github.com/afocus/captcha"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gofrs/uuid" "github.com/gofrs/uuid"
api "github.com/rocboss/paopao-ce/auto/api/v1" api "github.com/rocboss/paopao-ce/auto/api/v1"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
@ -29,9 +29,7 @@ import (
) )
var ( var (
_ api.Pub = (*pubSrv)(nil) _ api.Pub = (*pubSrv)(nil)
_ api.PubBinding = (*pubBinding)(nil)
_ api.PubRender = (*pubRender)(nil)
) )
const ( const (
@ -44,14 +42,6 @@ type pubSrv struct {
*base.DaoServant *base.DaoServant
} }
type pubBinding struct {
*api.UnimplementedPubBinding
}
type pubRender struct {
*api.UnimplementedPubRender
}
func (s *pubSrv) TweetDetail(req *web.TweetDetailReq) (*web.TweetDetailResp, mir.Error) { func (s *pubSrv) TweetDetail(req *web.TweetDetailReq) (*web.TweetDetailResp, mir.Error) {
post, err := s.Ds.GetPostByID(req.TweetId) post, err := s.Ds.GetPostByID(req.TweetId)
if err != nil { if err != nil {
@ -228,19 +218,3 @@ func newPubSrv(s *base.DaoServant) api.Pub {
DaoServant: s, DaoServant: s,
} }
} }
func newPubBinding() api.PubBinding {
return &pubBinding{
UnimplementedPubBinding: &api.UnimplementedPubBinding{
BindAny: base.NewBindAnyFn(),
},
}
}
func newPubRender() api.PubRender {
return &pubRender{
UnimplementedPubRender: &api.UnimplementedPubRender{
RenderAny: base.RenderAny,
},
}
}

@ -11,7 +11,7 @@ import (
"time" "time"
"unicode/utf8" "unicode/utf8"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
"github.com/gofrs/uuid" "github.com/gofrs/uuid"
"github.com/rocboss/paopao-ce/internal/core" "github.com/rocboss/paopao-ce/internal/core"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"

@ -13,8 +13,6 @@ import (
"github.com/rocboss/paopao-ce/internal/conf" "github.com/rocboss/paopao-ce/internal/conf"
"github.com/rocboss/paopao-ce/internal/dao" "github.com/rocboss/paopao-ce/internal/dao"
"github.com/rocboss/paopao-ce/internal/servants/base" "github.com/rocboss/paopao-ce/internal/servants/base"
"github.com/sirupsen/logrus"
"github.com/smartwalle/alipay/v3"
) )
var ( var (
@ -29,49 +27,27 @@ func RouteWeb(e *gin.Engine) {
oss := dao.ObjectStorageService() oss := dao.ObjectStorageService()
ds := base.NewDaoServant() ds := base.NewDaoServant()
// aways register servants // aways register servants
api.RegisterAdminServant(e, newAdminSrv(ds), newAdminBinding(), newAdminRender()) api.RegisterAdminServant(e, newAdminSrv(ds))
api.RegisterCoreServant(e, newCoreSrv(ds, oss), newCoreBinding(), newCoreRender()) api.RegisterCoreServant(e, newCoreSrv(ds, oss))
api.RegisterLooseServant(e, newLooseSrv(ds), newLooseBinding(), newLooseRender()) api.RegisterLooseServant(e, newLooseSrv(ds))
api.RegisterPrivServant(e, newPrivSrv(ds, oss), newPrivBinding(), newPrivRender()) api.RegisterPrivServant(e, newPrivSrv(ds, oss))
api.RegisterPubServant(e, newPubSrv(ds), newPubBinding(), newPubRender()) api.RegisterPubServant(e, newPubSrv(ds))
// regster servants if needed by configure // regster servants if needed by configure
cfg.In(cfg.Actions{ cfg.In(cfg.Actions{
"Alipay": func() { "Alipay": func() {
client := mustAlipayClient() client := conf.MustAlipayClient()
api.RegisterAlipayPubServant(e, newAlipayPubSrv(ds), newAlipayPubBinding(client), newAlipayPubRender()) api.RegisterAlipayPubServant(e, newAlipayPubSrv(ds))
api.RegisterAlipayPrivServant(e, newAlipayPrivSrv(ds, client), newAlipayPrivBinding(), newAlipayPrivRender()) api.RegisterAlipayPrivServant(e, newAlipayPrivSrv(ds, client))
}, },
"Followship": func() { "Followship": func() {
api.RegisterFollowshipServant(e, newFollowshipSrv(ds), newFollowshipBinding(), newFollowshipRender()) api.RegisterFollowshipServant(e, newFollowshipSrv(ds))
}, },
"Friendship": func() { "Friendship": func() {
api.RegisterFriendshipServant(e, newFriendshipSrv(ds), newFriendshipBinding(), newFriendshipRender()) api.RegisterFriendshipServant(e, newFriendshipSrv(ds))
}, },
}) })
} }
func mustAlipayClient() *alipay.Client {
s := conf.AlipaySetting
// 将 key 的验证调整到初始化阶段
client, err := alipay.New(s.AppID, s.PrivateKey, s.InProduction)
if err != nil {
logrus.Fatalf("alipay.New err: %s", err)
}
// 加载应用公钥证书
if err = client.LoadAppPublicCertFromFile(s.AppPublicCertFile); err != nil {
logrus.Fatalf("client.LoadAppPublicCertFromFile err: %s\n", err)
}
// 加载支付宝根证书
if err = client.LoadAliPayRootCertFromFile(s.RootCertFile); err != nil {
logrus.Fatalf("client.LoadAliPayRootCertFromFile err: %s\n", err)
}
// 加载支付宝公钥证书
if err = client.LoadAliPayPublicCertFromFile(s.PublicCertFile); err != nil {
logrus.Fatalf("client.LoadAliPayPublicCertFromFile err: %s\n", err)
}
return client
}
// lazyInitial do some package lazy initialize for performance // lazyInitial do some package lazy initialize for performance
func lazyInitial() { func lazyInitial() {
_onceInitial.Do(func() { _onceInitial.Do(func() {

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
) )
func init() { func init() {

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
) )
func init() { func init() {

@ -10,8 +10,8 @@ package main
import ( import (
"log" "log"
. "github.com/alimy/mir/v3/core" . "github.com/alimy/mir/v4/core"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
_ "github.com/rocboss/paopao-ce/mirc/admin/v1" _ "github.com/rocboss/paopao-ce/mirc/admin/v1"
_ "github.com/rocboss/paopao-ce/mirc/bot/v1" _ "github.com/rocboss/paopao-ce/mirc/bot/v1"

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
) )
func init() { func init() {

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
) )
func init() { func init() {

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )

@ -1,8 +1,8 @@
package v1 package v1
import ( import (
. "github.com/alimy/mir/v3" . "github.com/alimy/mir/v4"
. "github.com/alimy/mir/v3/engine" . "github.com/alimy/mir/v4/engine"
"github.com/rocboss/paopao-ce/internal/model/web" "github.com/rocboss/paopao-ce/internal/model/web"
) )

@ -9,7 +9,7 @@ import (
"net/http" "net/http"
"strings" "strings"
"github.com/alimy/mir/v3" "github.com/alimy/mir/v4"
) )
var ( var (

Loading…
Cancel
Save