Files
houston-be/internal/processor/action/start_incident_block_action.go
2023-04-10 17:30:28 +05:30

54 lines
1.7 KiB
Go

package action
import (
"github.com/slack-go/slack"
"github.com/slack-go/slack/socketmode"
"go.uber.org/zap"
"houston/internal/processor/action/view"
"houston/pkg/postgres/service/severity"
"houston/pkg/postgres/service/team"
)
type StartIncidentBlockAction struct {
socketModeClient *socketmode.Client
logger *zap.Logger
teamService *team.Service
severityService *severity.Service
}
func NewStartIncidentBlockAction(client *socketmode.Client, logger *zap.Logger, teamService *team.Service, severityService *severity.Service) *StartIncidentBlockAction {
return &StartIncidentBlockAction{
socketModeClient: client,
logger: logger,
teamService: teamService,
severityService: severityService,
}
}
func (sip *StartIncidentBlockAction) ProcessAction(request *socketmode.Request, callback slack.InteractionCallback) {
teams, err := sip.teamService.GetAllActiveTeams()
if err != nil || teams == nil {
sip.logger.Error("[SIP] failed while getting all active teams")
return
}
severities, err := sip.severityService.GetAllActiveSeverity()
if err != nil || severities == nil {
sip.logger.Error("[SIP] failed while getting all active severities")
return
}
modal := view.GenerateModalRequest(*teams, *severities, callback.Channel.ID)
_, err = sip.socketModeClient.OpenView(callback.TriggerID, modal)
if err != nil {
sip.logger.Error("[SIP] houston slackbot open view command failed.",
zap.String("trigger_id", callback.TriggerID), zap.String("channel_id", callback.Channel.ID), zap.Error(err))
return
}
sip.logger.Info("[SIP] houston successfully send modal to slackbot", zap.String("trigger_id", callback.TriggerID))
var payload interface{}
sip.socketModeClient.Ack(*request, payload)
}