Files
houston-be/appcontext/app.go
Shashank Shekhar 88459577f4 TP-49403 | parameterized slash command (#297)
* TP-49403 | parameterized slash command

* TP-49403 | handeling resolve and rca params also implemented Help-Commands button

* TP-49403 | using command pattern for command resolutiuon and execution

* TP-49403 | made find team by name and find severity by name queries case insensitive

* TP-49403 | updating help message keys
2023-11-30 11:56:32 +05:30

131 lines
3.1 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/pkg/postgres"
incidentService "houston/service/incident"
"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
}
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.SocketModeClient),
slackService: slaService,
incidentService: initIncidentService(),
tagRepo: initTagRepo(),
}
}
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 GetSlackService() *slack.SlackService {
return services.slackService
}
func initIncidentService() *incidentService.IncidentServiceV2 {
return incidentService.NewIncidentServiceV2(GetDB())
}
func GetIncidentService() *incidentService.IncidentServiceV2 {
return services.incidentService
}
func initTagRepo() *tag.Repository {
return tag.NewTagRepository(GetDB())
}
func GetTagRepo() *tag.Repository {
return services.tagRepo
}