/
depency_injection.go
75 lines (66 loc) · 3.04 KB
/
depency_injection.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
package main
import (
pb "github.com/DIMO-Network/users-api/pkg/grpc"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
"github.com/DIMO-Network/shared/db"
"github.com/DIMO-Network/valuations-api/internal/config"
"github.com/DIMO-Network/valuations-api/internal/core/services"
"github.com/rs/zerolog"
)
// dependencyContainer way to hold different dependencies we need for our app. We could put all our deps and follow this pattern for everything.
type dependencyContainer struct {
settings *config.Settings
logger *zerolog.Logger
ddSvc services.DeviceDefinitionsAPIService
userDeviceSvc services.UserDeviceAPIService
deviceDataSvc services.UserDeviceDataAPIService
dbs func() *db.ReaderWriter
}
func newDependencyContainer(settings *config.Settings, logger zerolog.Logger, dbs func() *db.ReaderWriter) dependencyContainer {
return dependencyContainer{
settings: settings,
logger: &logger,
dbs: dbs,
}
}
func (dc *dependencyContainer) getDeviceDefinitionService() (services.DeviceDefinitionsAPIService, *grpc.ClientConn) {
definitionsConn, err := grpc.Dial(dc.settings.DeviceDefinitionsGRPCAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
dc.logger.Fatal().Err(err).Str("definitions-api-grpc-addr", dc.settings.DeviceDefinitionsGRPCAddr).
Msg("failed to dial device definitions grpc")
}
dc.ddSvc = services.NewDeviceDefinitionsAPIService(definitionsConn)
return dc.ddSvc, definitionsConn
}
func (dc *dependencyContainer) getDeviceService() (services.UserDeviceAPIService, *grpc.ClientConn) {
devicesConn, err := grpc.Dial(dc.settings.DevicesGRPCAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
dc.logger.Fatal().Err(err).Msg("failed to dial devices grpc")
}
dc.userDeviceSvc = services.NewUserDeviceService(devicesConn, dc.dbs, dc.logger)
return dc.userDeviceSvc, devicesConn
}
func (dc *dependencyContainer) getDeviceDataService() (services.UserDeviceDataAPIService, *grpc.ClientConn) {
deviceDataConn, err := grpc.Dial(dc.settings.DeviceDataGRPCAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
dc.logger.Fatal().Err(err).Msg("failed to dial device data grpc")
}
dc.deviceDataSvc = services.NewUserDeviceDataAPIService(deviceDataConn)
return dc.deviceDataSvc, deviceDataConn
}
// todo deprecated remove once instant offers validated working ok
//func (dc *dependencyContainer) getNATSService() *services.NATSService {
// service, err := services.NewNATSService(dc.settings, dc.logger)
// if err != nil {
// dc.logger.Fatal().Err(err).Msg("failed to connect to NATS server")
// }
// return service
//}
func (dc *dependencyContainer) getUsersClient(logger zerolog.Logger, usersAPIGRPCAddr string) (pb.UserServiceClient, *grpc.ClientConn) {
usersConn, err := grpc.Dial(usersAPIGRPCAddr, grpc.WithTransportCredentials(insecure.NewCredentials()))
if err != nil {
logger.Fatal().Err(err).Msgf("Failed to dial users-api at %s", usersAPIGRPCAddr)
}
return pb.NewUserServiceClient(usersConn), usersConn
}