amocrm/internal/service/webhook.go

93 lines
2.7 KiB
Go
Raw Normal View History

package service
import (
"amocrm/internal/models"
2024-04-11 13:58:31 +00:00
"amocrm/internal/tools"
"context"
"go.uber.org/zap"
2024-04-17 12:21:06 +00:00
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"time"
)
type ParamsWebhookCreate struct {
Code string // Authorization 20 минут
Referer string // адрес аккаунта пользователя
State string // строка которая передавалась в соц аус сервисе
FromWidget string
Platform string // ru/global 1/2
}
func (s *Service) WebhookCreate(ctx context.Context, req ParamsWebhookCreate) error {
accountID, err := s.encrypt.DecryptStr([]byte(req.State))
if err != nil {
s.logger.Error("error decrypted state in service WebhookCreate:", zap.Error(err))
return err
}
// получаем аксес и рефреш токены по коду авторизации
2024-04-17 12:21:06 +00:00
forGetTokens := models.CreateWebHookReq{
GrantType: "authorization_code",
Code: req.Code,
}
tokens, err := s.amoClient.CreateWebHook(&forGetTokens)
if err != nil {
s.logger.Error("error getting webhook in Service:", zap.Error(err))
return err
}
2024-04-11 15:08:54 +00:00
2024-04-11 13:58:31 +00:00
// получаем информацию о пользователе по аксес токену и затем по его id
userInfo, err := s.amoClient.GetUserInfo(tokens.AccessToken)
if err != nil {
s.logger.Error("error getting UserInfo in Service:", zap.Error(err))
return err
}
2024-04-11 13:58:31 +00:00
2024-04-17 12:21:06 +00:00
userInfoByID, err := s.amoClient.GetUserByID(userInfo.ID)
2024-04-11 13:58:31 +00:00
if err != nil {
s.logger.Error("error getting GetUserByID in Service:", zap.Error(err))
return err
}
2024-04-17 12:21:06 +00:00
toUpdate := model.User{
2024-04-11 13:58:31 +00:00
Name: userInfoByID.Name,
Subdomain: userInfo.Subdomain,
2024-04-17 12:21:06 +00:00
AmoID: userInfo.ID,
// todo понять какой пользователь считается подключившим
Amouserid: userInfo.ID,
2024-04-11 13:58:31 +00:00
Email: userInfoByID.Email,
Group: tools.ConvertUserGroups(userInfo),
Country: userInfo.Country,
Role: *userInfoByID.Role,
}
2024-04-17 12:21:06 +00:00
err = s.repository.AmoRepo.UpdateAccount(ctx, accountID, toUpdate)
if err != nil {
s.logger.Error("error update account in mongo on service WebhookCreate", zap.Error(err))
return err
}
2024-04-17 12:21:06 +00:00
err = s.repository.AmoRepo.WebhookCreate(ctx, model.Token{
RefreshToken: tokens.RefreshToken,
AccessToken: tokens.AccessToken,
AccountID: accountID,
AuthCode: req.Code,
Expiration: time.Now().Unix() + tokens.ExpiresIn,
CreatedAt: time.Now().Unix(),
})
if err != nil {
s.logger.Error("error adding tokens to mongo on service WebhookCreate", zap.Error(err))
return err
}
return nil
}
func (s *Service) WebhookDelete(ctx context.Context) error {
2024-04-17 12:21:06 +00:00
err := s.repository.AmoRepo.WebhookDelete(ctx)
if err != nil {
return err
}
return nil
}