54 lines
1.7 KiB
Go
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)
|
|
}
|