File size: 4,779 Bytes
b55a115
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
package provider

import "abdanhafidz.com/go-boilerplate/controllers"

type ControllerProvider interface {
	ProvideAcademyController() controllers.AcademyController
	ProvideAccountDetailController() controllers.AccountDetailController
	ProvideAuthenticationController() controllers.AuthenticationController
	ProvideEmailVerificationController() controllers.EmailVerificationController
	ProvideEventController() controllers.EventController
	ProvideExamController() controllers.ExamController
	ProvideForgotPasswordController() controllers.ForgotPasswordController
	ProvideOptionController() controllers.OptionController
    ProvideRegionController() controllers.RegionController
    ProvideUploadController() controllers.UploadController 
    ProvideAcademyExamController() controllers.AcademyExamController
}

type controllerProvider struct {
	academyController controllers.AcademyController
	accountDetailController controllers.AccountDetailController
	authenticationController controllers.AuthenticationController
	emailVerificationController controllers.EmailVerificationController
	eventController             controllers.EventController
	examController              controllers.ExamController
	forgotPasswordController    controllers.ForgotPasswordController
	optionController            controllers.OptionController
	regionController            controllers.RegionController
    uploadController            controllers.UploadController 
    academyExamController       controllers.AcademyExamController
}

func NewControllerProvider(servicesProvider ServicesProvider) ControllerProvider {

	academyController := controllers.NewAcademyController(servicesProvider.ProvideAcademyService())
	accountDetailController := controllers.NewAccountDetailController(servicesProvider.ProvideAccountService())
	authenticationController := controllers.NewAuthenticationController(servicesProvider.ProvideAccountService(), servicesProvider.ProvideExternalAuthService())
	emailVerificationController := controllers.NewEmailVerificationController(servicesProvider.ProvideEmailVerificationService())
	eventController := controllers.NewEventController(servicesProvider.ProvideEventService())
	examController := controllers.NewExamController(servicesProvider.ProvideExamService())
	forgotPasswordController := controllers.NewForgotPasswordController(servicesProvider.ProvideForgotPasswordService())
	optionController := controllers.NewOptionController(servicesProvider.ProvideOptionService())
	regionController := controllers.NewRegionController(servicesProvider.ProvideRegionService())
    uploadController := controllers.NewUploadController(servicesProvider.ProvideUploadService())
    academyExamController := controllers.NewAcademyExamController(servicesProvider.ProvideAcademyExamService())

	return &controllerProvider{
		academyController: academyController,
		accountDetailController: accountDetailController,
		authenticationController: authenticationController,
		emailVerificationController: emailVerificationController,
		eventController:             eventController,
		examController:              examController,
		forgotPasswordController:    forgotPasswordController,
		optionController:            optionController,
		regionController:            regionController,
        uploadController:            uploadController, 
        academyExamController:       academyExamController,
    }
}


func (c *controllerProvider) ProvideAcademyController() controllers.AcademyController {
	return c.academyController
}

func (c *controllerProvider) ProvideAccountDetailController() controllers.AccountDetailController {
	return c.accountDetailController
}

func (c *controllerProvider) ProvideAuthenticationController() controllers.AuthenticationController {
	return c.authenticationController
}

func (c *controllerProvider) ProvideEmailVerificationController() controllers.EmailVerificationController {
	return c.emailVerificationController
}

func (c *controllerProvider) ProvideEventController() controllers.EventController {
	return c.eventController
}

func (c *controllerProvider) ProvideExamController() controllers.ExamController {
	return c.examController
}

func (c *controllerProvider) ProvideForgotPasswordController() controllers.ForgotPasswordController {
	return c.forgotPasswordController
}

func (c *controllerProvider) ProvideOptionController() controllers.OptionController {
	return c.optionController
}

func (c *controllerProvider) ProvideRegionController() controllers.RegionController {
	return c.regionController
}

func (c *controllerProvider) ProvideUploadController() controllers.UploadController {
    return c.uploadController
}

func (c *controllerProvider) ProvideAcademyExamController() controllers.AcademyExamController { return c.academyExamController }