56 lines
1.9 KiB
Go
56 lines
1.9 KiB
Go
package command
|
|
|
|
import (
|
|
"houston/pkg/postgres/query"
|
|
houston "houston/pkg/slack/houston/design"
|
|
|
|
"github.com/slack-go/slack"
|
|
"github.com/slack-go/slack/slackevents"
|
|
"github.com/slack-go/slack/socketmode"
|
|
"go.uber.org/zap"
|
|
"gorm.io/gorm"
|
|
)
|
|
|
|
type memberJoinProcessor struct {
|
|
client *socketmode.Client
|
|
db *gorm.DB
|
|
logger *zap.Logger
|
|
}
|
|
|
|
func NewMemberJoinProcessor(socketmodeClient *socketmode.Client, db *gorm.DB, logger *zap.Logger) *memberJoinProcessor {
|
|
return &memberJoinProcessor{
|
|
client: socketmodeClient,
|
|
db: db,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
func (mp *memberJoinProcessor) MemberJoinProcessCommand(memberJoinedChannelEvent *slackevents.MemberJoinedChannelEvent) {
|
|
mp.logger.Info("processing member join event", zap.String("channel", memberJoinedChannelEvent.Channel))
|
|
|
|
incidentEntity, err := query.FindIncidentByChannelId(mp.db, memberJoinedChannelEvent.Channel)
|
|
if err != nil {
|
|
mp.logger.Error("error in searching incident", zap.String("channel", memberJoinedChannelEvent.Channel),
|
|
zap.String("user_id", memberJoinedChannelEvent.User), zap.Error(err))
|
|
return
|
|
} else if err == nil && incidentEntity == nil {
|
|
mp.logger.Info("incident not found", zap.String("channel", memberJoinedChannelEvent.Channel),
|
|
zap.String("user_id", memberJoinedChannelEvent.User), zap.Error(err))
|
|
return
|
|
}
|
|
|
|
blocks, err := houston.IncidentSummarySection(incidentEntity, mp.db)
|
|
if err != nil {
|
|
mp.logger.Error("error in creating incident summary section inside incident",
|
|
zap.String("channel", memberJoinedChannelEvent.Channel),
|
|
zap.String("user_id", memberJoinedChannelEvent.User), zap.Error(err))
|
|
return
|
|
}
|
|
mp.logger.Info("member join block", zap.Any("blocks", blocks))
|
|
msgOption := slack.MsgOptionBlocks(blocks...)
|
|
_, err = mp.client.PostEphemeral(memberJoinedChannelEvent.Channel, memberJoinedChannelEvent.User, msgOption)
|
|
if err != nil {
|
|
mp.logger.Error("post response failed", zap.Error(err))
|
|
}
|
|
}
|