Skip to content

Commit

Permalink
feat: add di by using wire for handler (#17)
Browse files Browse the repository at this point in the history
* add di for handler

* modify wire

* feat: use wire for handler

* feat: use wire for handler
  • Loading branch information
qloog authored Dec 15, 2024
1 parent a7198d8 commit dfad2bf
Show file tree
Hide file tree
Showing 25 changed files with 338 additions and 69 deletions.
9 changes: 9 additions & 0 deletions cmd/consumer/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
v "github.com/go-eagle/eagle/pkg/version"
"github.com/spf13/pflag"

"github.com/go-eagle/eagle-layout/internal/handler"
"github.com/go-eagle/eagle-layout/internal/tasks"
)

Expand Down Expand Up @@ -52,6 +53,14 @@ func main() {
panic(err)
}

// init handler for http server that only use gin router
h, cleanup1, err := handler.NewHandler()
defer cleanup1()
if err != nil {
panic(err)
}
handler.Handle = h

// start app
app, cleanup, err := InitApp(&cfg, &cfg.HTTP, &taskCfg)
defer cleanup()
Expand Down
5 changes: 4 additions & 1 deletion cmd/consumer/wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,10 @@ import (
)

func InitApp(cfg *eagle.Config, config *eagle.ServerConfig, tc *tasks.Config) (*eagle.App, func(), error) {
wire.Build(server.ProviderSet, newApp)
wire.Build(
server.ServerSet,
newApp,
)
return &eagle.App{}, nil, nil
}

Expand Down
60 changes: 60 additions & 0 deletions cmd/consumer/wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 11 additions & 2 deletions cmd/server/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"os"

"github.com/gin-gonic/gin"
"github.com/go-eagle/eagle-layout/internal/handler"
eagle "github.com/go-eagle/eagle/pkg/app"
"github.com/go-eagle/eagle/pkg/config"
logger "github.com/go-eagle/eagle/pkg/log"
Expand Down Expand Up @@ -74,9 +75,17 @@ func main() {
}
}()

// init handler for http server that only use gin router
h, cleanup1, err := handler.NewHandler()
defer cleanup1()
if err != nil {
panic(err)
}
handler.Handle = h

// start app
app, cleanup, err := InitApp(&cfg)
defer cleanup()
app, cleanup2, err := InitApp(&cfg)
defer cleanup2()
if err != nil {
panic(err)
}
Expand Down
11 changes: 6 additions & 5 deletions cmd/server/wire.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,20 @@
package main

import (
"github.com/go-eagle/eagle-layout/internal/dal/cache"
"github.com/go-eagle/eagle-layout/internal/repository"
"github.com/go-eagle/eagle-layout/internal/server"
"github.com/go-eagle/eagle-layout/internal/service"
eagle "github.com/go-eagle/eagle/pkg/app"
logger "github.com/go-eagle/eagle/pkg/log"
"github.com/go-eagle/eagle/pkg/transport/grpc"
httpSrv "github.com/go-eagle/eagle/pkg/transport/http"
"github.com/google/wire"

"github.com/go-eagle/eagle-layout/internal/server"
)

func InitApp(cfg *eagle.Config) (*eagle.App, func(), error) {
wire.Build(server.ProviderSet, service.ProviderSet, repository.ProviderSet, cache.ProviderSet, newApp)
wire.Build(
server.ServerSet,
newApp,
)
return &eagle.App{}, nil, nil
}

Expand Down
2 changes: 1 addition & 1 deletion cmd/server/wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion config/dev/database.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ default:
Name: eagle # 数据库名称
Addr: localhost:3306 # 如果是 docker,可以替换为 对应的服务名称,eg: db:3306
UserName: root
Password: 123456
Password: 12345678
ShowLog: true # 是否打印所有SQL日志
MaxIdleConn: 10 # 最大闲置的连接数,0意味着使用默认的大小2, 小于0表示不使用连接池
MaxOpenConn: 60 # 最大打开的连接数, 需要小于数据库配置中的max_connections数
Expand Down
4 changes: 2 additions & 2 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ require (
github.com/envoyproxy/protoc-gen-validate v1.0.2
github.com/gin-gonic/gin v1.9.0
github.com/go-eagle/eagle v1.9.1-0.20241020110908-0a1f7a28cb1c
github.com/go-microservice/user-service v0.0.0-20240822145227-ee87e3a8f671
github.com/gogo/protobuf v1.3.2
github.com/google/wire v0.5.0
github.com/hibiken/asynq v0.23.0
Expand All @@ -21,6 +20,7 @@ require (
go.opentelemetry.io/otel v1.26.0
go.opentelemetry.io/otel/trace v1.26.0
go.uber.org/automaxprocs v1.5.1
golang.org/x/sync v0.6.0
google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98
google.golang.org/grpc v1.58.3
google.golang.org/protobuf v1.33.0
Expand Down Expand Up @@ -133,13 +133,13 @@ require (
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.45.0 // indirect
go.opentelemetry.io/contrib/propagators v0.22.0 // indirect
go.opentelemetry.io/otel/metric v1.26.0 // indirect
go.opentelemetry.io/otel/sdk v1.26.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
go.uber.org/zap v1.27.0 // indirect
golang.org/x/arch v0.3.0 // indirect
golang.org/x/crypto v0.21.0 // indirect
golang.org/x/mod v0.14.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/sync v0.6.0 // indirect
golang.org/x/sys v0.19.0 // indirect
golang.org/x/text v0.14.0 // indirect
golang.org/x/time v0.3.0 // indirect
Expand Down
2 changes: 0 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -162,8 +162,6 @@ github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-microservice/user-service v0.0.0-20240822145227-ee87e3a8f671 h1:G6PUmFNfAudEN3LLtZ5fdUH9DjjG4udyoHKlbZETMKU=
github.com/go-microservice/user-service v0.0.0-20240822145227-ee87e3a8f671/go.mod h1:hXKBhD0Rg1SJFmzk56pc8w1S+ZdxzOC9ch2uP+Zh4ws=
github.com/go-ole/go-ole v1.2.5/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY=
github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0=
Expand Down
7 changes: 5 additions & 2 deletions internal/dal/cache/cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,8 @@ const (
prefix = "eagle:"
)

// ProviderSet is cache providers.
var ProviderSet = wire.NewSet(redis.Init, NewUserCache)
// CacheSet is cache providers.
var CacheSet = wire.NewSet(
redis.Init,
NewUserCache,
)
3 changes: 2 additions & 1 deletion internal/dal/cache/user_cache.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,13 @@ import (
"fmt"
"time"

"github.com/go-eagle/eagle-layout/internal/dal/db/model"
"github.com/go-eagle/eagle/pkg/cache"
"github.com/go-eagle/eagle/pkg/encoding"
"github.com/go-eagle/eagle/pkg/log"
"github.com/go-eagle/eagle/pkg/utils"
"github.com/redis/go-redis/v9"

"github.com/go-eagle/eagle-layout/internal/dal/db/model"
)

var (
Expand Down
26 changes: 26 additions & 0 deletions internal/handler/handler.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package handler

import (
"github.com/google/wire"

v1 "github.com/go-eagle/eagle-layout/internal/handler/v1"
)

// here you can add other sets
// ...

// HandlerSet compose all services and all subsets.
var HandlerSet = wire.NewSet(
v1.NewLoginHandler,
v1.NewRegisterHandler,
)

type Handler struct {
Login *v1.LoginHandler
Register *v1.RegisterHandler
}

var (
// Handle expose the handler to outside
Handle *Handler
)
29 changes: 0 additions & 29 deletions internal/handler/hello.go

This file was deleted.

48 changes: 48 additions & 0 deletions internal/handler/v1/login.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package v1

import (
"github.com/gin-gonic/gin"
"github.com/go-eagle/eagle-layout/internal/service"
"github.com/go-eagle/eagle/pkg/app"
"github.com/go-eagle/eagle/pkg/errcode"
)

// LoginHandler 包含 UserService
type LoginHandler struct {
UserService service.UserService
}

// NewLoginHandler 创建一个新的 LoginHandler
func NewLoginHandler(userService service.UserService) *LoginHandler {
return &LoginHandler{UserService: userService}
}

// LoginHandler 登录
// @Summary 用户名和密码登录
// @Description demo
// @Tags user
// @Accept json
// @Produce json
// @Router /v1/auth/login [post]
func (h *LoginHandler) LoginHandler(c *gin.Context) {
// 从请求中提取参数(例如 JSON 或表单参数)
var loginRequest struct {
Username string `json:"username"`
Password string `json:"password"`
}

if err := c.ShouldBindJSON(&loginRequest); err != nil {
app.Error(c, errcode.ErrInvalidParam.WithDetails(err.Error()))
return
}

// 调用 UserService 的逻辑
user, err := h.UserService.Login(c.Request.Context(), loginRequest.Username, loginRequest.Password)
if err != nil {
app.Error(c, errcode.ErrUnauthorized.WithDetails(err.Error()))
return
}

// 返回成功响应
app.Success(c, gin.H{"user": user})
}
48 changes: 48 additions & 0 deletions internal/handler/v1/register.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package v1

import (
"github.com/gin-gonic/gin"
"github.com/go-eagle/eagle-layout/internal/service"
"github.com/go-eagle/eagle/pkg/app"
"github.com/go-eagle/eagle/pkg/errcode"
)

// RegisterHandler 包含 UserService
type RegisterHandler struct {
UserService service.UserService
}

// NewRegisterHandler 创建一个新的 RegisterHandler
func NewRegisterHandler(userService service.UserService) *RegisterHandler {
return &RegisterHandler{UserService: userService}
}

// RegisterHandler 登录
// @Summary 用户名和密码登录
// @Description demo
// @Tags user
// @Accept json
// @Produce json
// @Router /v1/auth/Register [post]
func (h *RegisterHandler) RegisterHandler(c *gin.Context) {
// 从请求中提取参数(例如 JSON 或表单参数)
var RegisterRequest struct {
Username string `json:"username"`
Password string `json:"password"`
}

if err := c.ShouldBindJSON(&RegisterRequest); err != nil {
app.Error(c, errcode.ErrInvalidParam.WithDetails(err.Error()))
return
}

// 调用 UserService 的逻辑
user, err := h.UserService.Register(c.Request.Context(), RegisterRequest.Username, RegisterRequest.Password)
if err != nil {
app.Error(c, errcode.ErrUnauthorized.WithDetails(err.Error()))
return
}

// 返回成功响应
app.Success(c, gin.H{"user": user})
}
Loading

0 comments on commit dfad2bf

Please sign in to comment.