From a30a9dba1f8e363983dcdd698665b9dfc87a373b Mon Sep 17 00:00:00 2001 From: behemoth-thangnt Date: Mon, 10 Jun 2024 23:26:55 +0700 Subject: [PATCH 1/2] sync user slack id --- models/slackClient.go | 35 +++++++++++++++++++++++ models/slackInteractiveResponse.go | 9 ++++++ models/slackMessage.go | 14 --------- models/slackUserResponse.go | 11 +++++++ models/users.go | 4 +++ tasks/asynq.go | 1 + tasks/slackSyncUserIdTask.go | 46 ++++++++++++++++++++++++++++++ 7 files changed, 106 insertions(+), 14 deletions(-) create mode 100644 models/slackUserResponse.go create mode 100644 tasks/slackSyncUserIdTask.go diff --git a/models/slackClient.go b/models/slackClient.go index 8b22fe71..8c12db47 100644 --- a/models/slackClient.go +++ b/models/slackClient.go @@ -243,3 +243,38 @@ func (client *SlackClient) UpdateMessage(channel string, timestamp string, text return &message, nil } + +func (client *SlackClient) FindByEmail(email string) (*SlackUserReponse, error) { + payload := map[string]string{ + "email": email, + } + + payloadBytes, err := json.Marshal(payload) + if err != nil { + return nil, err + } + + request, err := client.Request(constants.Post, "users.lookupByEmail", payloadBytes) + if err != nil { + return nil, err + } + + response, err := client.Client.Do(request) + if err != nil { + return nil, err + } + + body, err := io.ReadAll(response.Body) + if err != nil { + return nil, err + } + defer response.Body.Close() + + userResponse := SlackUserReponse{} + err = json.Unmarshal(body, &userResponse) + if err != nil { + return nil, err + } + + return &userResponse, nil +} diff --git a/models/slackInteractiveResponse.go b/models/slackInteractiveResponse.go index a5090a18..839c9f71 100644 --- a/models/slackInteractiveResponse.go +++ b/models/slackInteractiveResponse.go @@ -5,3 +5,12 @@ type SlackInteractiveResponse struct { ReplaceOriginal bool `json:"replace_original"` Text string `json:"text"` } + +type SlackInteractivePayload struct { + Type string `json:"type"` + CallbackId string `json:"callback_id"` + OriginalMessage MessageContent `json:"original_message"` + Action []ActionDetail `json:"actions"` + User SlackUser `json:"user"` + Channel SlackChannel `json:"channel"` +} diff --git a/models/slackMessage.go b/models/slackMessage.go index 117eda3e..b3f8ce98 100644 --- a/models/slackMessage.go +++ b/models/slackMessage.go @@ -44,20 +44,6 @@ type ActionDetail struct { Value string `json:"value"` } -type SlackInteractivePayload struct { - Type string `json:"type"` - CallbackId string `json:"callback_id"` - OriginalMessage MessageContent `json:"original_message"` - Action []ActionDetail `json:"actions"` - User SlackUser `json:"user"` - Channel SlackChannel `json:"channel"` -} - -type SlackUser struct { - Id string `json:"id"` - Name string `json:"name"` -} - type SlackChannel struct { Id string `json:"id"` } diff --git a/models/slackUserResponse.go b/models/slackUserResponse.go new file mode 100644 index 00000000..17919db4 --- /dev/null +++ b/models/slackUserResponse.go @@ -0,0 +1,11 @@ +package models + +type SlackUserReponse struct { + Ok bool `json:"ok"` + User SlackUser `json:"user"` +} + +type SlackUser struct { + Id string `json:"id"` + Name string `json:"name"` +} diff --git a/models/users.go b/models/users.go index 3adb626d..91a8e60f 100644 --- a/models/users.go +++ b/models/users.go @@ -121,3 +121,7 @@ func (u *User) Inactiveable() bool { return result } + +func (u *User) SyncSlackId() { + +} diff --git a/tasks/asynq.go b/tasks/asynq.go index 76ee0041..39ae6c3f 100644 --- a/tasks/asynq.go +++ b/tasks/asynq.go @@ -11,6 +11,7 @@ const ( SlackSendLeaveDayRequestMessageTask = "slackSendLeaveDayRequest" SlackUpdateLeaveDayRequestStateTask = "slackUpdteLeaveDayRequestState" SlackUpdateLeaveDayRequestMessageTask = "slackUpdateLeaveDayRequestMessage" + SlackSyncUserIdTask = "slackSyncUserId" ) var AsynqClient *asynq.Client diff --git a/tasks/slackSyncUserIdTask.go b/tasks/slackSyncUserIdTask.go new file mode 100644 index 00000000..75099394 --- /dev/null +++ b/tasks/slackSyncUserIdTask.go @@ -0,0 +1,46 @@ +package tasks + +import ( + "aio-server/database" + "aio-server/exceptions" + "aio-server/models" + "aio-server/repository" + "context" + "encoding/json" + "fmt" + + "github.com/hibiken/asynq" + "gorm.io/gorm" +) + +type SlackSyncUserIdTaskPayload struct { + UserId int32 +} + +func NewSlackSyncUserIdTask(userId int32) (*asynq.Task, error) { + if payload, err := json.Marshal(SlackSyncUserIdTaskPayload{UserId: userId}); err != nil { + return nil, err + } else { + return asynq.NewTask(SlackSyncUserIdTask, payload), nil + } +} + +func HandleSlackSyncUserIdTask(ctx context.Context, t *asynq.Task) error { + db := database.Db + + var p SlackSyncUserIdTaskPayload + + if err := json.Unmarshal(t.Payload(), &p); err != nil { + return fmt.Errorf("json.Unmarshal failed: %v: %w", err, asynq.SkipRetry) + } + + userRepo := repository.NewUserRepository(&ctx, db) + + user := models.User{Id: p.UserId} + if err := userRepo.Find(&user); err != nil { + if err == gorm.ErrRecordNotFound { + return exceptions.NewRecordNotFoundError() + } + + } +} From 449af76d41d32a589768e9f5b2f069e8c863e6e5 Mon Sep 17 00:00:00 2001 From: behemoth-thangnt Date: Mon, 10 Jun 2024 23:27:38 +0700 Subject: [PATCH 2/2] create task --- tasks/slackSyncUserIdTask.go | 1 - 1 file changed, 1 deletion(-) diff --git a/tasks/slackSyncUserIdTask.go b/tasks/slackSyncUserIdTask.go index 75099394..e2b4454e 100644 --- a/tasks/slackSyncUserIdTask.go +++ b/tasks/slackSyncUserIdTask.go @@ -41,6 +41,5 @@ func HandleSlackSyncUserIdTask(ctx context.Context, t *asynq.Task) error { if err == gorm.ErrRecordNotFound { return exceptions.NewRecordNotFoundError() } - } }