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

services.NewServiceContainer   A

Complexity

Conditions 2

Size

Total Lines 13
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

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