Files
houston-be/internal/processor/action/user_change_event_action.go
Shivam Handa bcbbd2b44f NTP-13111 | log (#484)
* 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
2025-03-07 13:35:15 +05:30

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