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

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)
}