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

services.NewServiceContainer   A

Complexity

Conditions 2

Size

Total Lines 18
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 16
nop 8
dl 0
loc 18
rs 9.6
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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