add some methods repo in amo repo

This commit is contained in:
Pavel 2024-04-17 21:09:09 +03:00
parent 24b7942061
commit b36797b22d
3 changed files with 122 additions and 9 deletions

@ -675,7 +675,7 @@ DELETE FROM tokens WHERE AccountID = $1;
-- name: SoftDeleteAccount :exec
UPDATE users SET Deleted = TRUE WHERE AccountID = $1;
-- name: GetCurrentAccount :exec
-- name: GetCurrentAccount :one
SELECT * FROM users WHERE AccountID = $1;
-- name: CheckUsers :exec

@ -52,7 +52,7 @@ type UserListPipelinesResp struct {
type UserListResp struct {
/* - общее количество юзеров, которые у нас закешированы для этого пользователя*/
Count int `json:"count"`
Count int64 `json:"count"`
/* - список юзеров, которые были закешированы нашим сервисом*/
Items []User `json:"items"`
}

@ -4,8 +4,10 @@ import (
"context"
"database/sql"
"encoding/json"
"github.com/sqlc-dev/pqtype"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"time"
)
type AmoRepository struct {
@ -43,7 +45,7 @@ func (r *AmoRepository) GettingUserWithPagination(ctx context.Context, req *mode
if err != nil {
return nil, err
}
var count int64
var users []model.User
for _, row := range rows {
user := model.User{
@ -58,6 +60,7 @@ func (r *AmoRepository) GettingUserWithPagination(ctx context.Context, req *mode
Amouserid: row.Amouserid,
Country: row.Country,
}
count = row.TotalCount
var group []model.UserGroups
if !row.Group.Valid {
err := json.Unmarshal(row.Group.RawMessage, &group)
@ -70,24 +73,70 @@ func (r *AmoRepository) GettingUserWithPagination(ctx context.Context, req *mode
users = append(users, user)
}
resp := model.UserListResp{}
resp := model.UserListResp{
Count: count,
Items: users,
}
return users, nil
return &resp, nil
}
func (r *AmoRepository) SoftDeleteAccount(ctx context.Context, accountID string) error {
err := r.queries.SoftDeleteAccount(ctx, accountID)
if err != nil {
return err
}
return nil
}
func (r *AmoRepository) GetCurrentAccount(ctx context.Context, accountID string) (*model.User, error) {
row, err := r.queries.GetCurrentAccount(ctx, accountID)
return nil, nil
}
func (r *AmoRepository) CreateAccount(ctx context.Context, accountID string, userInfo model.User) error {
group, err := json.Marshal(userInfo.Group)
if err != nil {
return err
}
err = r.queries.CreateAmoAccount(ctx, sqlcgen.CreateAmoAccountParams{
Accountid: accountID,
Amoid: userInfo.AmoID,
Name: userInfo.Name,
Email: userInfo.Email,
Role: userInfo.Role,
Group: pqtype.NullRawMessage{RawMessage: group, Valid: len(group) > 0},
Createdat: sql.NullTime{Time: time.Now(), Valid: true},
Subdomain: userInfo.Subdomain,
Amouserid: userInfo.Amouserid,
Country: userInfo.Country,
})
if err != nil {
return err
}
return nil
}
func (r *AmoRepository) CheckUsers(ctx context.Context, amouserid int, user model.User) error {
func (r *AmoRepository) CheckUsers(ctx context.Context, amouserid int32, user model.User) error {
group, err := json.Marshal(user.Group)
if err != nil {
return err
}
err = r.queries.CheckUsers(ctx, sqlcgen.CheckUsersParams{
Amoid: amouserid,
Name: user.Name,
Email: user.Email,
Role: user.Role,
Group: pqtype.NullRawMessage{RawMessage: group, Valid: len(group) > 0},
})
if err != nil {
return err
}
return nil
}
@ -95,24 +144,88 @@ func (r *AmoRepository) CheckUsers(ctx context.Context, amouserid int, user mode
// методы webhook
func (r *AmoRepository) WebhookCreate(ctx context.Context, tokens model.Token) error {
err := r.queries.CreateWebHook(ctx, sqlcgen.CreateWebHookParams{
Accountid: tokens.AccountID,
Refreshtoken: tokens.RefreshToken,
Accesstoken: tokens.AccessToken,
Authcode: tokens.AuthCode,
Expiration: time.Unix(tokens.Expiration, 0),
Createdat: sql.NullTime{Time: time.Unix(tokens.CreatedAt, 0), Valid: true},
})
if err != nil {
return err
}
return nil
}
func (r *AmoRepository) WebhookUpdate(ctx context.Context, tokens model.Token) error {
err := r.queries.WebhookUpdate(ctx, sqlcgen.WebhookUpdateParams{
Accountid: tokens.AccountID,
Accesstoken: tokens.AccessToken,
Refreshtoken: tokens.RefreshToken,
Expiration: time.Unix(tokens.Expiration, 0),
Createdat: sql.NullTime{Time: time.Unix(tokens.CreatedAt, 0), Valid: true},
})
if err != nil {
return err
}
return nil
}
// воркер запускается каждые 5 минут, поэтомму ищем токены котторые исекают менее чем через 10 минут отдаем их на обноление
func (r *AmoRepository) CheckExpired(ctx context.Context) ([]model.Token, error) {
return nil, nil
rows, err := r.queries.CheckExpired(ctx)
if err != nil {
return nil, err
}
var tokens []model.Token
for _, row := range rows {
token := model.Token{
AccountID: row.Accountid,
AccessToken: row.Accesstoken,
RefreshToken: row.Refreshtoken,
AuthCode: row.Authcode,
Expiration: row.Expiration.Unix(),
CreatedAt: row.Createdat.Time.Unix(),
}
tokens = append(tokens, token)
}
return tokens, nil
}
func (r *AmoRepository) GetAllTokens(ctx context.Context) ([]model.Token, error) {
return nil, nil
rows, err := r.queries.GetAllTokens(ctx)
if err != nil {
return nil, err
}
var tokens []model.Token
for _, row := range rows {
token := model.Token{
AccountID: row.Accountid,
AccessToken: row.Accesstoken,
RefreshToken: row.Refreshtoken,
AuthCode: row.Authcode,
Expiration: row.Expiration.Unix(),
CreatedAt: row.Createdat.Time.Unix(),
}
tokens = append(tokens, token)
}
return tokens, nil
}
func (r *AmoRepository) WebhookDelete(ctx context.Context) error {
//TODO:IMPLEMENT ME
return nil