Files
houston-be/appcontext/app.go
Gullipalli Chetan Kumar aeb572f47e TP-45807 : Sending google transcripts to gen ai (#315)
* created service for sending google transcripts to gen ai

* TP-45807| resolved bugs in drive service tests

* TP-45807| unit tests for getting conversation data function

* creating driveservice in app context and passing to rca service

* modified the unit tests to accomodate driveservicemock

* resolved merge conflicts

* resolved merge conflicts
2023-12-26 14:28:27 +05:30

219 lines
5.5 KiB
Go

package appcontext
import (
"github.com/slack-go/slack/socketmode"
"github.com/spf13/viper"
"gorm.io/gorm"
"houston/model/incident"
"houston/model/log"
"houston/model/severity"
"houston/model/tag"
"houston/model/team"
"houston/model/user"
conferenceActions "houston/pkg/conference"
"houston/pkg/google/googleDrive"
"houston/pkg/postgres"
"houston/pkg/rest"
rcaRepository "houston/repository/rca/impl"
"houston/repository/rcaInput"
"houston/service/conference"
"houston/service/documentService"
"houston/service/google"
incidentService "houston/service/incident"
"houston/service/rca"
"houston/service/slack"
)
type applicationContext struct {
db *gorm.DB
}
// todo: all the repo objects to be cleaned uo from here. appContext will only have services
type houstonServices struct {
logRepo *log.Repository
teamRepo *team.Repository
severityRepo *severity.Repository
incidentRepo *incident.Repository
slackService *slack.SlackService
incidentService *incidentService.IncidentServiceV2
tagRepo *tag.Repository
rcaRepository *rcaRepository.Repository
rcaInputRepository *rcaInput.Repository
userRepository *user.Repository
rcaService *rca.RcaService
driveService google.IDriveService
calendarService *conference.CalendarService
}
var appContext *applicationContext
var services *houstonServices
func InitiateContext() {
appContext = &applicationContext{
db: initDB(),
}
}
func InitializeServices() {
logRepo := initLogRepo()
severityRepo := initSeverityRepo()
teamRepo := initTeamRepo(logRepo)
slaService := initSlackService()
services = &houstonServices{
logRepo: logRepo,
teamRepo: teamRepo,
severityRepo: severityRepo,
incidentRepo: initIncidentRepo(severityRepo, logRepo, teamRepo, slaService.SocketModeClientWrapper.GetClient()),
slackService: slaService,
incidentService: initIncidentService(),
tagRepo: initTagRepo(),
rcaRepository: initRCARepo(),
rcaInputRepository: initRCAInputRepo(),
userRepository: initUserRepo(),
rcaService: initRCAService(),
driveService: initDriveService(),
calendarService: initCalendarService(),
}
}
func initDB() *gorm.DB {
return postgres.NewGormClient(
viper.GetString("postgres.dsn"),
viper.GetString("postgres.connection.max.idle.time"),
viper.GetString("postgres.connection.max.lifetime"),
viper.GetInt("postgres.connections.max.idle"),
viper.GetInt("postgres.connections.max.open"),
)
}
func GetDB() *gorm.DB {
return appContext.db
}
func initLogRepo() *log.Repository {
return log.NewLogRepository(GetDB())
}
func GetLogRepo() *log.Repository {
return services.logRepo
}
func initTeamRepo(logRepo *log.Repository) *team.Repository {
return team.NewTeamRepository(GetDB(), logRepo)
}
func GetTeamRepo() *team.Repository {
return services.teamRepo
}
func initSeverityRepo() *severity.Repository {
return severity.NewSeverityRepository(GetDB())
}
func GetSeverityRepo() *severity.Repository {
return services.severityRepo
}
func initIncidentRepo(
severityRepo *severity.Repository,
logRepo *log.Repository,
teamRepo *team.Repository,
socketModeClient *socketmode.Client,
) *incident.Repository {
return incident.NewIncidentRepository(GetDB(), severityRepo, logRepo, teamRepo, socketModeClient)
}
func GetIncidentRepo() *incident.Repository {
return services.incidentRepo
}
func initSlackService() *slack.SlackService {
return slack.NewSlackService()
}
func getRestClient() *rest.HttpRestClientImpl {
return rest.NewHttpRestClient()
}
func initDocumentService() *documentService.ActionsImpl {
return documentService.NewActionsImpl(getRestClient())
}
func initCalendarService() *conference.CalendarService {
calendarActions := conferenceActions.GetCalendarActions()
calendarService := conference.NewCalendarService(calendarActions)
return calendarService
}
func GetCalendarService() *conference.CalendarService {
return services.calendarService
}
func GetDocumentService() *documentService.ActionsImpl {
return initDocumentService()
}
func initRCAService() *rca.RcaService {
rcaService := rca.NewRcaService(initIncidentService(), initSlackService(),
initDocumentService(), initRCARepo(), initRCAInputRepo(), initUserRepo(), initDriveService())
return rcaService
}
func GetSlackService() *slack.SlackService {
return services.slackService
}
func initIncidentService() *incidentService.IncidentServiceV2 {
return incidentService.NewIncidentServiceV2(GetDB())
}
func GetIncidentService() *incidentService.IncidentServiceV2 {
return services.incidentService
}
func GetRCAService() *rca.RcaService {
return services.rcaService
}
func initTagRepo() *tag.Repository {
return tag.NewTagRepository(GetDB())
}
func GetTagRepo() *tag.Repository {
return services.tagRepo
}
func initRCARepo() *rcaRepository.Repository {
return rcaRepository.NewRcaRepository(GetDB())
}
func GetRCARepo() *rcaRepository.Repository {
return services.rcaRepository
}
func initRCAInputRepo() *rcaInput.Repository {
return rcaInput.NewRcaInputRepository(GetDB())
}
func GetRCAInputRepo() *rcaInput.Repository {
return services.rcaInputRepository
}
func initUserRepo() *user.Repository {
return user.NewUserRepository(GetDB())
}
func GetUserRepo() *user.Repository {
return services.userRepository
}
func initDriveService() google.IDriveService {
driveAction, err := googleDrive.NewGoogleDriveActions()
if err != nil {
return nil
}
return google.NewDriveService(driveAction)
}
func GetDriveService() google.IDriveService {
return services.driveService
}