* NTP-13111 | logs added * NTP-13111 | app_name changed to tracker_app_name * NTP-13111 | log added for user event change monitoring * NTP-13111 | log added for user event change monitoring * NTP-13111 | logs added
86 lines
3.2 KiB
Go
86 lines
3.2 KiB
Go
package action
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/slack-go/slack/slackevents"
|
|
"github.com/spf13/viper"
|
|
"go.uber.org/zap"
|
|
"houston/common/util"
|
|
"houston/logger"
|
|
"houston/model/user"
|
|
service "houston/service/request"
|
|
)
|
|
|
|
type UserChangeEventAction struct {
|
|
userRepository *user.Repository
|
|
}
|
|
|
|
func NewUserChangeEventAction(userRepository *user.Repository) *UserChangeEventAction {
|
|
return &UserChangeEventAction{
|
|
userRepository: userRepository,
|
|
}
|
|
}
|
|
|
|
func (userChangeEventAction *UserChangeEventAction) PerformAction(event slackevents.EventsAPIEvent) {
|
|
var userChangeEventRequest service.UserChangeEventRequest
|
|
serializedEventJson, marshalError := json.Marshal(&event.InnerEvent.Data)
|
|
if marshalError != nil {
|
|
logger.Error("error occurred while serializing the event object", zap.Any("error", marshalError))
|
|
}
|
|
unmarshalError := json.Unmarshal(serializedEventJson, &userChangeEventRequest)
|
|
if unmarshalError != nil {
|
|
logger.Error("error occurred while deserializing the event object", zap.Any("error", unmarshalError), zap.String("event", string(serializedEventJson)))
|
|
return
|
|
}
|
|
|
|
logger.Info(fmt.Sprintf("received user change event: %v", userChangeEventRequest))
|
|
// If User is not part of Navi Workspace Team, then we don't need to process the event
|
|
if userChangeEventRequest.User.Profile.TeamName != viper.GetString("slack.workspace.id") {
|
|
return
|
|
}
|
|
userEntity := user.UserEntity{
|
|
Name: userChangeEventRequest.User.Name,
|
|
SlackUserId: userChangeEventRequest.User.ID,
|
|
Email: userChangeEventRequest.User.Profile.Email,
|
|
Image: userChangeEventRequest.User.Profile.Image,
|
|
RealName: userChangeEventRequest.User.Profile.RealName,
|
|
Active: !userChangeEventRequest.User.Deleted,
|
|
IsBot: userChangeEventRequest.User.IsBot,
|
|
}
|
|
existingUser, err := userChangeEventAction.userRepository.FindHoustonUserBySlackUserId(userEntity.SlackUserId)
|
|
if err != nil {
|
|
logger.Error("error in finding user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(err))
|
|
return
|
|
}
|
|
if existingUser == nil {
|
|
logger.Info(fmt.Sprintf("inserting user %s", userEntity.Name))
|
|
resultError := userChangeEventAction.userRepository.InsertHoustonUser(&userEntity)
|
|
if resultError != nil {
|
|
logger.Error("error in inserting user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError))
|
|
return
|
|
}
|
|
return
|
|
}
|
|
// If User is Totally Deactivated then only we need to update the Active Field
|
|
if userEntity.RealName == util.DeactivatedUserName {
|
|
existingUser.Active = false
|
|
resultError := userChangeEventAction.userRepository.UpdateHoustonUser(*existingUser)
|
|
if resultError != nil {
|
|
logger.Error("error in updating user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError))
|
|
return
|
|
}
|
|
return
|
|
}
|
|
|
|
updatedExistingUser, isChanged := util.UpdateUserFieldsIfChanged(existingUser, &userEntity)
|
|
|
|
if isChanged {
|
|
logger.Info(fmt.Sprintf("upadting user %s", updatedExistingUser.Name))
|
|
resultError := userChangeEventAction.userRepository.UpdateHoustonUser(*updatedExistingUser)
|
|
if resultError != nil {
|
|
logger.Error("error in updating user", zap.String("user_slack_id", userChangeEventRequest.User.ID), zap.Error(resultError))
|
|
}
|
|
}
|
|
}
|