2023-11-30 11:56:32 +05:30
|
|
|
package appcontext
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"github.com/slack-go/slack/socketmode"
|
|
|
|
|
"github.com/spf13/viper"
|
|
|
|
|
"gorm.io/gorm"
|
|
|
|
|
"houston/model/incident"
|
2024-02-28 14:35:22 +05:30
|
|
|
"houston/model/incident_products"
|
2023-11-30 11:56:32 +05:30
|
|
|
"houston/model/log"
|
2024-02-19 18:57:10 +05:30
|
|
|
productModel "houston/model/product"
|
2024-02-21 16:19:15 +05:30
|
|
|
"houston/model/products_teams"
|
2023-11-30 11:56:32 +05:30
|
|
|
"houston/model/severity"
|
|
|
|
|
"houston/model/tag"
|
|
|
|
|
"houston/model/team"
|
2023-12-13 18:26:13 +05:30
|
|
|
"houston/model/user"
|
2023-12-22 12:05:47 +05:30
|
|
|
conferenceActions "houston/pkg/conference"
|
2023-12-26 14:28:27 +05:30
|
|
|
"houston/pkg/google/googleDrive"
|
2023-11-30 11:56:32 +05:30
|
|
|
"houston/pkg/postgres"
|
2023-12-13 18:26:13 +05:30
|
|
|
"houston/pkg/rest"
|
2024-02-27 17:02:22 +05:30
|
|
|
"houston/repository/externalTeamRepo"
|
2023-12-13 18:26:13 +05:30
|
|
|
rcaRepository "houston/repository/rca/impl"
|
|
|
|
|
"houston/repository/rcaInput"
|
2024-02-23 16:05:20 +05:30
|
|
|
teamSeverityRepo "houston/repository/teamSeverity"
|
|
|
|
|
teamUserRepo "houston/repository/teamUser"
|
|
|
|
|
teamUserSeverityRepo "houston/repository/teamUserSeverity"
|
2023-12-22 12:05:47 +05:30
|
|
|
"houston/service/conference"
|
2023-12-13 18:26:13 +05:30
|
|
|
"houston/service/documentService"
|
2023-12-26 14:28:27 +05:30
|
|
|
"houston/service/google"
|
2024-02-01 15:23:15 +05:30
|
|
|
incidentService "houston/service/incident/impl"
|
2024-02-28 14:35:22 +05:30
|
|
|
"houston/service/incidentProducts"
|
2024-02-19 18:57:10 +05:30
|
|
|
"houston/service/products"
|
2024-02-21 16:19:15 +05:30
|
|
|
"houston/service/productsTeams"
|
2024-02-01 15:23:15 +05:30
|
|
|
rcaService "houston/service/rca/impl"
|
2024-02-23 16:05:20 +05:30
|
|
|
severityService "houston/service/severity"
|
|
|
|
|
severityServiceImpl "houston/service/severity/impl"
|
2023-11-30 11:56:32 +05:30
|
|
|
"houston/service/slack"
|
2024-02-01 15:23:15 +05:30
|
|
|
tagService "houston/service/tag"
|
2024-02-27 17:02:22 +05:30
|
|
|
"houston/service/teamService"
|
2024-02-23 16:05:20 +05:30
|
|
|
"houston/service/teamSeverity"
|
|
|
|
|
teamSeverityServiceImpl "houston/service/teamSeverity/impl"
|
|
|
|
|
"houston/service/teamUser"
|
|
|
|
|
teamUserServiceImpl "houston/service/teamUser/impl"
|
|
|
|
|
"houston/service/teamUserSeverity"
|
|
|
|
|
teamUserSeverityServiceImpl "houston/service/teamUserSeverity/impl"
|
|
|
|
|
userService "houston/service/user"
|
2023-11-30 11:56:32 +05:30
|
|
|
)
|
|
|
|
|
|
|
|
|
|
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 {
|
2024-02-23 16:05:20 +05:30
|
|
|
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 *rcaService.RcaService
|
|
|
|
|
driveService google.IDriveService
|
|
|
|
|
calendarService *conference.CalendarService
|
|
|
|
|
tagService *tagService.TagService
|
|
|
|
|
productsService products.ProductService
|
2024-02-28 14:35:22 +05:30
|
|
|
incidentProductsService incidentProducts.IncidentProductsService
|
2024-02-23 16:05:20 +05:30
|
|
|
productTeamsService productsTeams.ProductTeamsService
|
|
|
|
|
severityService severityService.ISeverityService
|
|
|
|
|
teamSeverityService teamSeverity.ITeamSeverityService
|
2024-02-26 13:29:49 +05:30
|
|
|
userService userService.UserService
|
2024-02-23 16:05:20 +05:30
|
|
|
teamUserService teamUser.ITeamUserService
|
|
|
|
|
teamUserSeverityService teamUserSeverity.ITeamUserSeverityService
|
2024-02-27 17:02:22 +05:30
|
|
|
teamService teamService.ITeamServiceV2
|
2023-11-30 11:56:32 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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{
|
2024-02-23 16:05:20 +05:30
|
|
|
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(),
|
|
|
|
|
tagService: initTagService(),
|
|
|
|
|
productsService: initProductsService(),
|
2024-02-28 14:35:22 +05:30
|
|
|
incidentProductsService: initIncidentProductsService(),
|
2024-02-23 16:05:20 +05:30
|
|
|
productTeamsService: initProductTeamsService(),
|
|
|
|
|
severityService: initSeverityService(),
|
|
|
|
|
teamSeverityService: initTeamSeverityService(),
|
|
|
|
|
userService: initUserService(),
|
|
|
|
|
teamUserService: initTeamUserService(),
|
|
|
|
|
teamUserSeverityService: initTeamUserSeverityService(),
|
2024-02-27 17:02:22 +05:30
|
|
|
teamService: initTeamService(),
|
2023-11-30 11:56:32 +05:30
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-13 18:26:13 +05:30
|
|
|
func getRestClient() *rest.HttpRestClientImpl {
|
|
|
|
|
return rest.NewHttpRestClient()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func initDocumentService() *documentService.ActionsImpl {
|
|
|
|
|
return documentService.NewActionsImpl(getRestClient())
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-22 12:05:47 +05:30
|
|
|
func initCalendarService() *conference.CalendarService {
|
|
|
|
|
calendarActions := conferenceActions.GetCalendarActions()
|
|
|
|
|
calendarService := conference.NewCalendarService(calendarActions)
|
|
|
|
|
return calendarService
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-27 17:02:22 +05:30
|
|
|
func initTeamService() teamService.ITeamServiceV2 {
|
|
|
|
|
return teamService.NewTeamServiceV2(
|
|
|
|
|
initTeamRepo(initLogRepo()),
|
|
|
|
|
initUserRepo(),
|
|
|
|
|
initSlackService(),
|
|
|
|
|
externalTeamRepo.NewExternalTeamRepository(GetDB()),
|
|
|
|
|
initTeamSeverityService(),
|
|
|
|
|
initUserService(),
|
|
|
|
|
initTeamUserService(),
|
|
|
|
|
initTeamUserSeverityService(),
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetTeamService() teamService.ITeamServiceV2 {
|
|
|
|
|
return services.teamService
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-01 15:23:15 +05:30
|
|
|
func initTagService() *tagService.TagService {
|
|
|
|
|
return tagService.NewTagService(GetDB())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetTagService() *tagService.TagService {
|
|
|
|
|
return services.tagService
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-19 18:57:10 +05:30
|
|
|
func initProductsService() products.ProductService {
|
|
|
|
|
return products.NewProductService(productModel.NewProductRepo(GetDB()))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetProductsService() products.ProductService {
|
|
|
|
|
return services.productsService
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-28 14:35:22 +05:30
|
|
|
func initIncidentProductsService() incidentProducts.IncidentProductsService {
|
|
|
|
|
return incidentProducts.NewIncidentProductsService(incident_products.NewIncidentProductsRepo(GetDB()))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetIncidentProductsService() incidentProducts.IncidentProductsService {
|
|
|
|
|
return services.incidentProductsService
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-21 16:19:15 +05:30
|
|
|
func initProductTeamsService() productsTeams.ProductTeamsService {
|
|
|
|
|
return productsTeams.NewProductTeamsService(products_teams.NewProductsTeamsRepo(GetDB()))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetProductTeamsService() productsTeams.ProductTeamsService {
|
|
|
|
|
return services.productTeamsService
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-22 12:05:47 +05:30
|
|
|
func GetCalendarService() *conference.CalendarService {
|
|
|
|
|
return services.calendarService
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-13 18:26:13 +05:30
|
|
|
func GetDocumentService() *documentService.ActionsImpl {
|
|
|
|
|
return initDocumentService()
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-01 15:23:15 +05:30
|
|
|
func initRCAService() *rcaService.RcaService {
|
|
|
|
|
rcaService := rcaService.NewRcaService(
|
|
|
|
|
initIncidentService(), initSlackService(), initDocumentService(),
|
|
|
|
|
initRCARepo(), initRCAInputRepo(), initUserRepo(), initDriveService(),
|
|
|
|
|
)
|
2023-12-13 18:26:13 +05:30
|
|
|
return rcaService
|
|
|
|
|
}
|
|
|
|
|
|
2023-11-30 11:56:32 +05:30
|
|
|
func GetSlackService() *slack.SlackService {
|
|
|
|
|
return services.slackService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func initIncidentService() *incidentService.IncidentServiceV2 {
|
|
|
|
|
return incidentService.NewIncidentServiceV2(GetDB())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetIncidentService() *incidentService.IncidentServiceV2 {
|
|
|
|
|
return services.incidentService
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-01 15:23:15 +05:30
|
|
|
func GetRCAService() *rcaService.RcaService {
|
2023-12-13 18:26:13 +05:30
|
|
|
return services.rcaService
|
|
|
|
|
}
|
2023-11-30 11:56:32 +05:30
|
|
|
func initTagRepo() *tag.Repository {
|
|
|
|
|
return tag.NewTagRepository(GetDB())
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetTagRepo() *tag.Repository {
|
|
|
|
|
return services.tagRepo
|
|
|
|
|
}
|
2023-12-13 18:26:13 +05:30
|
|
|
|
|
|
|
|
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())
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-23 16:05:20 +05:30
|
|
|
func initSeverityService() severityService.ISeverityService {
|
|
|
|
|
return severityServiceImpl.NewSeverityService(severity.NewSeverityRepository(GetDB()))
|
2023-12-13 18:26:13 +05:30
|
|
|
}
|
2024-02-23 16:05:20 +05:30
|
|
|
|
2024-03-05 15:26:00 +05:30
|
|
|
func GetSeverityService() severityService.ISeverityService {
|
|
|
|
|
return services.severityService
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-23 16:05:20 +05:30
|
|
|
func initTeamSeverityService() teamSeverity.ITeamSeverityService {
|
|
|
|
|
return teamSeverityServiceImpl.NewTeamSeverityService(
|
|
|
|
|
teamSeverityRepo.NewTeamSeverityRepository(GetDB()), initSeverityService(),
|
|
|
|
|
)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetTeamSeverityService() teamSeverity.ITeamSeverityService {
|
|
|
|
|
return services.teamSeverityService
|
|
|
|
|
}
|
|
|
|
|
|
2024-02-26 13:29:49 +05:30
|
|
|
func initUserService() userService.UserService {
|
|
|
|
|
return userService.NewUserService(user.NewUserRepository(GetDB()))
|
2024-02-23 16:05:20 +05:30
|
|
|
}
|
|
|
|
|
|
2024-02-26 13:29:49 +05:30
|
|
|
func GetUserService() userService.UserService {
|
2024-02-23 16:05:20 +05:30
|
|
|
return services.userService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func initTeamUserService() teamUser.ITeamUserService {
|
|
|
|
|
return teamUserServiceImpl.NewTeamUserService(teamUserRepo.NewTeamUserRepository(GetDB()))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetTeamUserService() teamUser.ITeamUserService {
|
|
|
|
|
return services.teamUserService
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func initTeamUserSeverityService() teamUserSeverity.ITeamUserSeverityService {
|
|
|
|
|
return teamUserSeverityServiceImpl.NewTeamUserSeverityService(teamUserSeverityRepo.NewTeamUserSeverityRepository(GetDB()))
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetTeamUserSeverityService() teamUserSeverity.ITeamUserSeverityService {
|
|
|
|
|
return services.teamUserSeverityService
|
|
|
|
|
}
|
|
|
|
|
|
2023-12-26 14:28:27 +05:30
|
|
|
func initDriveService() google.IDriveService {
|
|
|
|
|
driveAction, err := googleDrive.NewGoogleDriveActions()
|
|
|
|
|
if err != nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
return google.NewDriveService(driveAction)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func GetDriveService() google.IDriveService {
|
|
|
|
|
return services.driveService
|
|
|
|
|
}
|