package service import ( "amocrm/internal/models" "amocrm/internal/tools" "context" "go.uber.org/zap" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "time" ) type ParamsWebhookCreate struct { Code string // Authorization 20 минут Referer string // адрес аккаунта пользователя AccountID string // строка которая передавалась в соц аус сервисе FromWidget string Platform string // ru/global 1/2 } func (s *Service) WebhookCreate(ctx context.Context, req ParamsWebhookCreate) error { // получаем аксес и рефреш токены по коду авторизации 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 } // получаем информацию о пользователе по аксес токену и затем по его id userInfo, err := s.amoClient.GetUserInfo(tokens.AccessToken) if err != nil { s.logger.Error("error getting UserInfo in Service:", zap.Error(err)) return err } toUpdate := model.User{ Name: userInfo.Name, Subdomain: userInfo.Subdomain, AmoID: userInfo.ID, // подключивший юзер считается тот который прокинул хук сюда Amouserid: userInfo.ID, //Email: userInfoByID.Email, Group: tools.ConvertUserGroups(userInfo), Country: userInfo.Country, //Role: *userInfoByID.Role, } err = s.repository.AmoRepo.CreateAccount(ctx, req.AccountID, toUpdate) if err != nil { s.logger.Error("error update account in mongo on service WebhookCreate", zap.Error(err)) return err } err = s.repository.AmoRepo.WebhookCreate(ctx, model.Token{ RefreshToken: tokens.RefreshToken, AccessToken: tokens.AccessToken, AccountID: req.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 { err := s.repository.AmoRepo.WebhookDelete(ctx) if err != nil { return err } return nil }