-
Notifications
You must be signed in to change notification settings - Fork 0
/
wire_gen.go
126 lines (107 loc) · 4.78 KB
/
wire_gen.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
// Code generated by Wire. DO NOT EDIT.
//go:generate wire
//+build !wireinject
package main
import (
"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"
"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"
repo2 "github.com/gghcode/apas-todo-apiserver/infra/redis/repo"
"github.com/gghcode/apas-todo-apiserver/web"
"github.com/gghcode/apas-todo-apiserver/web/api"
app2 "github.com/gghcode/apas-todo-apiserver/web/api/app"
auth2 "github.com/gghcode/apas-todo-apiserver/web/api/auth"
todo2 "github.com/gghcode/apas-todo-apiserver/web/api/todo"
user2 "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"
"net/http"
)
import (
_ "github.com/gghcode/apas-todo-apiserver/docs"
)
// Injectors from wire.go:
func InitializeRouter() (*http.Server, func(), error) {
configuration, err := config.FromEnvs()
if err != nil {
return nil, nil, err
}
accessTokenHandlerFactory := jwt.NewJwtAccessTokenVerifyHandlerFactory(configuration)
accessTokenHandlerMiddleware := middleware.NewAccessTokenHandler(accessTokenHandlerFactory)
corsMiddleware := middleware.NewCors(configuration)
v := provideMiddlewares(accessTokenHandlerMiddleware, corsMiddleware)
fs := afero.NewOsFs()
fileReader := file.NewAferoFileReader(fs)
useCase := app.NewService(fileReader)
connection, cleanup, err := gorm.NewPostgresConnection(configuration)
if err != nil {
return nil, nil, err
}
redisConnection, cleanup2 := redis.NewConnection(configuration)
controller := app2.NewController(useCase, connection, redisConnection)
repository := repo.NewTodoRepository(connection)
todoUseCase := todo.NewTodoService(repository)
todoController := todo2.NewController(todoUseCase)
passwordAuthenticator := bcrypt.NewPasswordAuthenticator()
tokenRepository := repo2.NewRedisTokenRepository(redisConnection)
userRepository := repo.NewUserRepository(connection)
userDataSource := provideDataSource(userRepository)
accessTokenGeneratorFunc := jwt.NewJwtAccessTokenGeneratorFunc(configuration)
refreshTokenGeneratorFunc := jwt.NewJwtRefreshTokenGeneratorFunc(configuration)
authUseCase := auth.NewService(configuration, passwordAuthenticator, tokenRepository, userDataSource, accessTokenGeneratorFunc, refreshTokenGeneratorFunc)
authController := auth2.NewController(authUseCase)
passwordEncryptor := bcrypt.NewPasswordEncryptor(configuration)
userUseCase := user.NewService(userRepository, passwordEncryptor)
userController := user2.NewController(userUseCase)
v2 := provideControllers(controller, todoController, authController, userController)
server, cleanup3 := web.NewGinRouter(configuration, v, v2)
return server, func() {
cleanup3()
cleanup2()
cleanup()
}, nil
}
// wire.go:
func provideControllers(
appController *app2.Controller,
todoController *todo2.Controller,
authController *auth2.Controller,
userController *user2.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(repo.NewTodoRepository, todo.NewTodoService, todo2.NewController)
var bcryptSet = wire.NewSet(bcrypt.NewPasswordAuthenticator, bcrypt.NewPasswordEncryptor)
var authSet = wire.NewSet(repo2.NewRedisTokenRepository, jwt.NewJwtAccessTokenGeneratorFunc, jwt.NewJwtRefreshTokenGeneratorFunc, auth.NewService, auth2.NewController)
var userSet = wire.NewSet(repo.NewUserRepository, user.NewService, provideDataSource, user2.NewController)
var appSet = wire.NewSet(afero.NewOsFs, file.NewAferoFileReader, app.NewService, app2.NewController)
var routerSet = wire.NewSet(jwt.NewJwtAccessTokenVerifyHandlerFactory, middleware.NewAccessTokenHandler, middleware.NewCors, provideMiddlewares,
provideControllers, web.NewGinRouter,
)