Passed
Pull Request — main (#166)
by Yume
02:21
created

services/containers.go   A

Size/Duplication

Total Lines 91
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
cc 11
eloc 60
dl 0
loc 91
rs 10
c 0
b 0
f 0

10 Methods

Rating   Name   Duplication   Size   Complexity  
A services.*ServiceContainer.Deck 0 2 1
A services.DefaultServiceContainer 0 14 1
A services.NewServiceContainer 0 18 2
A services.*ServiceContainer.User 0 2 1
A services.*ServiceContainer.Card 0 2 1
A services.*ServiceContainer.Jwt 0 2 1
A services.*ServiceContainer.OAuth 0 2 1
A services.*ServiceContainer.Mcq 0 2 1
A services.*ServiceContainer.AuthHandler 0 2 1
A services.*ServiceContainer.Auth 0 2 1
1
package services
2
3
import (
4
	"sync"
5
6
	"github.com/memnix/memnix-rest/app/v1/controllers"
7
	"github.com/memnix/memnix-rest/app/v2/handlers"
8
)
9
10
type ServiceContainer struct {
11
	user        controllers.UserController
12
	auth        controllers.AuthController
13
	jwt         controllers.JwtController
14
	oAuth       controllers.OAuthController
15
	deck        controllers.DeckController
16
	card        controllers.CardController
17
	mcq         controllers.McqController
18
	authHandler handlers.AuthController
19
}
20
21
var (
22
	container *ServiceContainer //nolint:gochecknoglobals // Singleton
23
	once      sync.Once         //nolint:gochecknoglobals // Singleton
24
)
25
26
func DefaultServiceContainer() *ServiceContainer {
27
	userController := InitializeUser()
28
	authController := InitializeAuth()
29
	jwtController := InitializeJWT()
30
	oAuthController := InitializeOAuth()
31
	deckController := InitializeDeck()
32
	cardController := InitializeCard()
33
	mcqController := InitializeMcq()
34
35
	authHandler := InitializeAuthHandler()
36
37
	return NewServiceContainer(userController, authController,
38
		jwtController, oAuthController, deckController,
39
		cardController, mcqController, authHandler)
40
}
41
42
func NewServiceContainer(user controllers.UserController, auth controllers.AuthController,
43
	jwt controllers.JwtController, oAuth controllers.OAuthController,
44
	deck controllers.DeckController, card controllers.CardController,
45
	mcq controllers.McqController, authHandler handlers.AuthController,
46
) *ServiceContainer {
47
	once.Do(func() {
48
		container = &ServiceContainer{
49
			user:        user,
50
			auth:        auth,
51
			jwt:         jwt,
52
			oAuth:       oAuth,
53
			deck:        deck,
54
			card:        card,
55
			mcq:         mcq,
56
			authHandler: authHandler,
57
		}
58
	})
59
	return container
60
}
61
62
func (sc *ServiceContainer) User() controllers.UserController {
63
	return sc.user
64
}
65
66
func (sc *ServiceContainer) Auth() controllers.AuthController {
67
	return sc.auth
68
}
69
70
func (sc *ServiceContainer) Jwt() controllers.JwtController {
71
	return sc.jwt
72
}
73
74
func (sc *ServiceContainer) OAuth() controllers.OAuthController {
75
	return sc.oAuth
76
}
77
78
func (sc *ServiceContainer) Deck() controllers.DeckController {
79
	return sc.deck
80
}
81
82
func (sc *ServiceContainer) Card() controllers.CardController {
83
	return sc.card
84
}
85
86
func (sc *ServiceContainer) Mcq() controllers.McqController {
87
	return sc.mcq
88
}
89
90
func (sc *ServiceContainer) AuthHandler() handlers.AuthController {
91
	return sc.authHandler
92
}
93