50 lines
1.4 KiB
Go
50 lines
1.4 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/incident"
|
||
|
|
)
|
||
|
|
|
||
|
|
type SlashCommandAction struct {
|
||
|
|
incidentService *incident.Service
|
||
|
|
logger *zap.Logger
|
||
|
|
socketModeClient *socketmode.Client
|
||
|
|
}
|
||
|
|
|
||
|
|
func NewSlashCommandAction(service *incident.Service, logger *zap.Logger, socketModeClient *socketmode.Client) *SlashCommandAction {
|
||
|
|
return &SlashCommandAction{
|
||
|
|
incidentService: service,
|
||
|
|
logger: logger,
|
||
|
|
socketModeClient: socketModeClient,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (sca *SlashCommandAction) PerformAction(evt *socketmode.Event) {
|
||
|
|
cmd, ok := evt.Data.(slack.SlashCommand)
|
||
|
|
sca.logger.Info("processing houston command", zap.Any("payload", cmd))
|
||
|
|
if !ok {
|
||
|
|
sca.logger.Error("event data to slash command conversion failed", zap.Any("data", evt))
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
result, err := sca.incidentService.FindIncidentByChannelId(cmd.ChannelID)
|
||
|
|
if err != nil {
|
||
|
|
sca.logger.Error("FindIncidentBySlackChannelId errors",
|
||
|
|
zap.String("channel_id", cmd.ChannelID), zap.String("channel", cmd.ChannelName),
|
||
|
|
zap.String("user_id", cmd.UserID), zap.Error(err))
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
if result != nil {
|
||
|
|
sca.logger.Info("Result", zap.String("result", result.IncidentName))
|
||
|
|
payload := view.ExistingIncidentOptionsBlock()
|
||
|
|
sca.socketModeClient.Ack(*evt.Request, payload)
|
||
|
|
}
|
||
|
|
|
||
|
|
payload := view.NewIncidentBlock()
|
||
|
|
sca.socketModeClient.Ack(*evt.Request, payload)
|
||
|
|
}
|