-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathwire.go
128 lines (111 loc) · 2.99 KB
/
wire.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
//+build wireinject
package main
import (
"net/http"
"github.com/gghcode/apas-todo-apiserver/config"
"github.com/gghcode/apas-todo-apiserver/domain/usecase/app"
"github.com/gghcode/apas-todo-apiserver/domain/usecase/auth"
"github.com/gghcode/apas-todo-apiserver/domain/usecase/todo"
"github.com/gghcode/apas-todo-apiserver/domain/usecase/user"
"github.com/gghcode/apas-todo-apiserver/infra/bcrypt"
"github.com/gghcode/apas-todo-apiserver/infra/file"
"github.com/gghcode/apas-todo-apiserver/infra/gorm"
gormRepo "github.com/gghcode/apas-todo-apiserver/infra/gorm/repo"
"github.com/gghcode/apas-todo-apiserver/infra/jwt"
"github.com/gghcode/apas-todo-apiserver/infra/redis"
"github.com/gghcode/apas-todo-apiserver/infra/redis/repo"
"github.com/gghcode/apas-todo-apiserver/web"
"github.com/gghcode/apas-todo-apiserver/web/api"
webApp "github.com/gghcode/apas-todo-apiserver/web/api/app"
webAuth "github.com/gghcode/apas-todo-apiserver/web/api/auth"
webTodo "github.com/gghcode/apas-todo-apiserver/web/api/todo"
webUser "github.com/gghcode/apas-todo-apiserver/web/api/user"
"github.com/gghcode/apas-todo-apiserver/web/middleware"
"github.com/gin-gonic/gin"
"github.com/google/wire"
"github.com/spf13/afero"
)
func provideControllers(
appController *webApp.Controller,
todoController *webTodo.Controller,
authController *webAuth.Controller,
userController *webUser.Controller,
) []api.GinController {
return []api.GinController{
appController,
todoController,
authController,
userController,
}
}
func provideMiddlewares(
accessTokenHandlerMiddleware middleware.AccessTokenHandlerMiddleware,
corsMiddleware middleware.CorsMiddleware,
) []gin.HandlerFunc {
return []gin.HandlerFunc{
gin.HandlerFunc(accessTokenHandlerMiddleware),
gin.HandlerFunc(corsMiddleware),
}
}
func provideDataSource(userRepo user.Repository) auth.UserDataSource {
return userRepo
}
var configSet = wire.NewSet(
config.FromEnvs,
)
var dbSet = wire.NewSet(
gorm.NewPostgresConnection,
)
var redisSet = wire.NewSet(
redis.NewConnection,
)
var todoSet = wire.NewSet(
gormRepo.NewTodoRepository,
todo.NewTodoService,
webTodo.NewController,
)
var bcryptSet = wire.NewSet(
bcrypt.NewPasswordAuthenticator,
bcrypt.NewPasswordEncryptor,
)
var authSet = wire.NewSet(
repo.NewRedisTokenRepository,
jwt.NewJwtAccessTokenGeneratorFunc,
jwt.NewJwtRefreshTokenGeneratorFunc,
auth.NewService,
webAuth.NewController,
)
var userSet = wire.NewSet(
gormRepo.NewUserRepository,
user.NewService,
provideDataSource,
webUser.NewController,
)
var appSet = wire.NewSet(
afero.NewOsFs,
file.NewAferoFileReader,
app.NewService,
webApp.NewController,
)
var routerSet = wire.NewSet(
jwt.NewJwtAccessTokenVerifyHandlerFactory,
middleware.NewAccessTokenHandler,
middleware.NewCors,
provideMiddlewares,
provideControllers,
web.NewGinRouter,
)
func InitializeRouter() (*http.Server, func(), error) {
wire.Build(
configSet,
dbSet,
redisSet,
bcryptSet,
todoSet,
authSet,
userSet,
appSet,
routerSet,
)
return nil, nil, nil
}