diff --git a/vblog/README.md b/vblog/README.md index c2cc746..09b89b4 100644 --- a/vblog/README.md +++ b/vblog/README.md @@ -367,4 +367,17 @@ func (i *TokenServiceImpl) Init() error { func GetService() Service { return ioc.Controller().Get(AppName).(Service) } +``` + + +启动的时候 只需要启动 HTTP Sever就可以啦 +```go +func main() { + config.LoadConfig() + + // 服务器启动 + if err := server.GinServer.Run(http.Get().Addr()); err != nil { + log.Println(err) + } +} ``` \ No newline at end of file diff --git a/vblog/apps/blog/api/api.go b/vblog/apps/blog/api/api.go index 6c6a8db..434eef0 100644 --- a/vblog/apps/blog/api/api.go +++ b/vblog/apps/blog/api/api.go @@ -3,30 +3,44 @@ package api import ( "github.com/gin-gonic/gin" "github.com/infraboard/mcube/v2/http/gin/response" + "github.com/infraboard/mcube/v2/ioc" "gitlab.com/go-course-project/go17/vblog/apps/blog" "gitlab.com/go-course-project/go17/vblog/middleware" + "gitlab.com/go-course-project/go17/vblog/server" ) // 上传怎么用: // main.go 组装的时候,传入具体实现, 实现了业务的 插件化 // 访问我们mock测试, 有助于构造 小规模的单元环境 -func NewBlogApiHandler(blogImpl blog.Service) *BlogApiHandler { - return &BlogApiHandler{ - blog: blogImpl, - } +// func NewBlogApiHandler(blogImpl blog.Service) *BlogApiHandler { +// return &BlogApiHandler{ +// blog: blogImpl, +// } +// } + +func init() { + ioc.Api().Registry(&BlogApiHandler{}) } type BlogApiHandler struct { + ioc.ObjectImpl blog blog.Service } +func (i *BlogApiHandler) Init() error { + i.blog = blog.GetService() + i.Registry(server.GinServer) + return nil +} + // 提供注册功能, 提供一个Group // book := server.Group("/api/tokens") func (h *BlogApiHandler) Registry(r *gin.Engine) { router := r.Group("/vblog/api/v1/blogs") + router.GET("", h.QueryBlog) + router.Use(middleware.Auth) router.POST("", h.CreateBlog) - router.GET("", h.QueryBlog) } // BODY diff --git a/vblog/apps/blog/impl/impl.go b/vblog/apps/blog/impl/impl.go index bc32358..435205f 100644 --- a/vblog/apps/blog/impl/impl.go +++ b/vblog/apps/blog/impl/impl.go @@ -4,16 +4,24 @@ import ( "context" "fmt" + "github.com/infraboard/mcube/v2/ioc" "github.com/infraboard/mcube/v2/ioc/config/datasource" "gitlab.com/go-course-project/go17/vblog/apps/blog" "gitlab.com/go-course-project/go17/vblog/middleware" ) -var BlogService blog.Service = &BlogServiceImpl{} +func init() { + ioc.Controller().Registry(&BlogServiceImpl{}) +} // 定义一个struct, 用于实现 UserService就是刚才定义的接口 // 怎么才能判断这个结构体没有实现这个接口 type BlogServiceImpl struct { + ioc.ObjectImpl +} + +func (i *BlogServiceImpl) Name() string { + return blog.AppName } // CreateBlog implements blog.Service. diff --git a/vblog/apps/blog/impl_test.go b/vblog/apps/blog/impl_test.go index fe26d5f..771a7e1 100644 --- a/vblog/apps/blog/impl_test.go +++ b/vblog/apps/blog/impl_test.go @@ -5,7 +5,6 @@ import ( "testing" "gitlab.com/go-course-project/go17/vblog/apps/blog" - "gitlab.com/go-course-project/go17/vblog/apps/blog/impl" ) var ( @@ -23,7 +22,7 @@ func TestCreateBlog(t *testing.T) { "Language": "Golang", }, } - ins, err := impl.BlogService.CreateBlog(ctx, req) + ins, err := blog.GetService().CreateBlog(ctx, req) if err != nil { t.Fatal(err) } @@ -36,7 +35,7 @@ func TestQueryBlog(t *testing.T) { req.Tags = map[string]string{ "Language": "Golang", } - ins, err := impl.BlogService.QueryBlog(ctx, req) + ins, err := blog.GetService().QueryBlog(ctx, req) if err != nil { t.Fatal(err) } diff --git a/vblog/apps/blog/interface.go b/vblog/apps/blog/interface.go index 8434c56..47441a9 100644 --- a/vblog/apps/blog/interface.go +++ b/vblog/apps/blog/interface.go @@ -4,9 +4,18 @@ import ( "context" "strings" + "github.com/infraboard/mcube/v2/ioc" "gitlab.com/go-course-project/go17/vblog/utils" ) +const ( + AppName = "blog" +) + +func GetService() Service { + return ioc.Controller().Get(AppName).(Service) +} + type Service interface { // 创建博客 CreateBlog(context.Context, *CreateBlogRequest) (*Blog, error) diff --git a/vblog/apps/registry.go b/vblog/apps/registry.go index 7124ee0..f3e8574 100644 --- a/vblog/apps/registry.go +++ b/vblog/apps/registry.go @@ -1,7 +1,9 @@ package apps import ( + _ "gitlab.com/go-course-project/go17/vblog/apps/blog/api" _ "gitlab.com/go-course-project/go17/vblog/apps/blog/impl" + _ "gitlab.com/go-course-project/go17/vblog/apps/token/api" _ "gitlab.com/go-course-project/go17/vblog/apps/token/impl" _ "gitlab.com/go-course-project/go17/vblog/apps/user/impl" ) diff --git a/vblog/apps/token/api/api.go b/vblog/apps/token/api/api.go index a282d78..2f46103 100644 --- a/vblog/apps/token/api/api.go +++ b/vblog/apps/token/api/api.go @@ -3,20 +3,27 @@ package api import ( "github.com/gin-gonic/gin" "github.com/infraboard/mcube/v2/http/gin/response" + "github.com/infraboard/mcube/v2/ioc" "gitlab.com/go-course-project/go17/vblog/apps/token" + "gitlab.com/go-course-project/go17/vblog/server" ) -func NewTokenApiHandler(tokenImpl token.UserService) *TokenApiHandler { - return &TokenApiHandler{ - token: tokenImpl, - } +func init() { + ioc.Api().Registry(&TokenApiHandler{}) } type TokenApiHandler struct { + ioc.ObjectImpl // 业务控制器 token token.UserService } +func (i *TokenApiHandler) Init() error { + i.token = token.GetService() + i.Registry(server.GinServer) + return nil +} + // 提供注册功能, 提供一个Group // book := server.Group("/api/tokens") func (h *TokenApiHandler) Registry(r *gin.Engine) { diff --git a/vblog/apps/token/impl/impl.go b/vblog/apps/token/impl/impl.go index bc8fd47..4a58f4c 100644 --- a/vblog/apps/token/impl/impl.go +++ b/vblog/apps/token/impl/impl.go @@ -56,6 +56,10 @@ func (t *TokenServiceImpl) IssueToken(ctx context.Context, in *token.IssueTokenR // 3. 颁发Token tk := token.NewToken(fmt.Sprintf("%d", u.Id)).SetRefUserName(u.Username) + // if in.RememberMe { + // tk.AccessTokenExpireAt + // } + if err := datasource.DBFromCtx(ctx).Create(tk).Error; err != nil { return nil, err } diff --git a/vblog/docs/ioc.drawio b/vblog/docs/ioc.drawio index ff4bcad..41977bd 100644 --- a/vblog/docs/ioc.drawio +++ b/vblog/docs/ioc.drawio @@ -1,6 +1,6 @@ - + @@ -57,7 +57,7 @@ - + diff --git a/vblog/main.go b/vblog/main.go index d68fb4a..0741504 100644 --- a/vblog/main.go +++ b/vblog/main.go @@ -3,30 +3,16 @@ package main import ( "log" - blogApi "gitlab.com/go-course-project/go17/vblog/apps/blog/api" - blogImpl "gitlab.com/go-course-project/go17/vblog/apps/blog/impl" - "gitlab.com/go-course-project/go17/vblog/apps/token" - tokenApi "gitlab.com/go-course-project/go17/vblog/apps/token/api" - - "github.com/gin-gonic/gin" "github.com/infraboard/mcube/v2/ioc/config/http" "gitlab.com/go-course-project/go17/vblog/config" + "gitlab.com/go-course-project/go17/vblog/server" ) func main() { config.LoadConfig() - // gin Engine, 它包装了http server - server := gin.Default() - - // 注册业务模块的路有 - tokenApi.NewTokenApiHandler(token.GetService()).Registry(server) - blogApi.NewBlogApiHandler(&blogImpl.BlogServiceImpl{}).Registry(server) - // ... 50 个API - // - // 服务器启动 - if err := server.Run(http.Get().Addr()); err != nil { + if err := server.GinServer.Run(http.Get().Addr()); err != nil { log.Println(err) } } diff --git a/vblog/server/server.go b/vblog/server/server.go new file mode 100644 index 0000000..ceecbde --- /dev/null +++ b/vblog/server/server.go @@ -0,0 +1,8 @@ +package server + +import "github.com/gin-gonic/gin" + +var ( + // gin Engine, 它包装了http server + GinServer = gin.Default() +)