Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
35 changes: 35 additions & 0 deletions models/slackClient.go
Original file line number Diff line number Diff line change
Expand Up @@ -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
}
9 changes: 9 additions & 0 deletions models/slackInteractiveResponse.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
}
14 changes: 0 additions & 14 deletions models/slackMessage.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"`
}
Expand Down
11 changes: 11 additions & 0 deletions models/slackUserResponse.go
Original file line number Diff line number Diff line change
@@ -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"`
}
4 changes: 4 additions & 0 deletions models/users.go
Original file line number Diff line number Diff line change
Expand Up @@ -121,3 +121,7 @@ func (u *User) Inactiveable() bool {

return result
}

func (u *User) SyncSlackId() {

}
1 change: 1 addition & 0 deletions tasks/asynq.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ const (
SlackSendLeaveDayRequestMessageTask = "slackSendLeaveDayRequest"
SlackUpdateLeaveDayRequestStateTask = "slackUpdteLeaveDayRequestState"
SlackUpdateLeaveDayRequestMessageTask = "slackUpdateLeaveDayRequestMessage"
SlackSyncUserIdTask = "slackSyncUserId"
)

var AsynqClient *asynq.Client
Expand Down
45 changes: 45 additions & 0 deletions tasks/slackSyncUserIdTask.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
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()
}
}
}