update amo repo methods

This commit is contained in:
Pavel 2024-04-20 12:13:57 +03:00
parent 9a0b7b45cf
commit 8818afa463
2 changed files with 38 additions and 37 deletions

@ -12,9 +12,9 @@ type User struct {
/* - почта пользователя из амо*/ /* - почта пользователя из амо*/
Email string `json:"Email"` Email string `json:"Email"`
/* - роль пользователя в амо*/ /* - роль пользователя в амо*/
Role string `json:"Role"` Role int32 `json:"Role"`
/* - группы пользователя в амо*/ /* - группы пользователя в амо*/
Group []UserGroups `json:"Group"` Group int32 `json:"Group"`
/* - флаг мягкого удаления*/ /* - флаг мягкого удаления*/
Deleted bool `json:"Deleted"` Deleted bool `json:"Deleted"`
/* - таймштамп создания аккаунта*/ /* - таймштамп создания аккаунта*/

@ -4,9 +4,9 @@ import (
"context" "context"
"database/sql" "database/sql"
"encoding/json" "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/dal/sqlcgen"
"penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model"
"strings"
"time" "time"
) )
@ -54,6 +54,7 @@ func (r *AmoRepository) GettingUserWithPagination(ctx context.Context, req *mode
AmoID: row.Amoid, AmoID: row.Amoid,
Name: row.Name, Name: row.Name,
Email: row.Email, Email: row.Email,
Group: row.Group,
Role: row.Role, Role: row.Role,
Createdat: row.Createdat.Time.Unix(), Createdat: row.Createdat.Time.Unix(),
Subdomain: row.Subdomain, Subdomain: row.Subdomain,
@ -61,14 +62,6 @@ func (r *AmoRepository) GettingUserWithPagination(ctx context.Context, req *mode
Country: row.Country, Country: row.Country,
} }
count = row.TotalCount count = row.TotalCount
var group []model.UserGroups
if !row.Group.Valid {
err := json.Unmarshal(row.Group.RawMessage, &group)
if err != nil {
return nil, err
}
}
user.Group = group
users = append(users, user) users = append(users, user)
} }
@ -102,37 +95,24 @@ func (r *AmoRepository) GetCurrentAccount(ctx context.Context, accountID string)
Name: row.Name, Name: row.Name,
Email: row.Email, Email: row.Email,
Role: row.Role, Role: row.Role,
Group: row.Group,
Createdat: row.Createdat.Time.Unix(), Createdat: row.Createdat.Time.Unix(),
Subdomain: row.Subdomain, Subdomain: row.Subdomain,
Amouserid: row.Amouserid, Amouserid: row.Amouserid,
Country: row.Country, Country: row.Country,
} }
var group []model.UserGroups
if !row.Group.Valid {
err := json.Unmarshal(row.Group.RawMessage, &group)
if err != nil {
return nil, err
}
}
user.Group = group
return &user, nil return &user, nil
} }
func (r *AmoRepository) CreateAccount(ctx context.Context, accountID string, userInfo model.User) error { func (r *AmoRepository) CreateAccount(ctx context.Context, accountID string, userInfo model.User) error {
group, err := json.Marshal(userInfo.Group) err := r.queries.CreateAmoAccount(ctx, sqlcgen.CreateAmoAccountParams{
if err != nil {
return err
}
err = r.queries.CreateAmoAccount(ctx, sqlcgen.CreateAmoAccountParams{
Accountid: accountID, Accountid: accountID,
Amoid: userInfo.AmoID, Amoid: userInfo.AmoID,
Name: userInfo.Name, Name: userInfo.Name,
Email: userInfo.Email, Email: userInfo.Email,
Role: userInfo.Role, Role: userInfo.Role,
Group: pqtype.NullRawMessage{RawMessage: group, Valid: len(group) > 0}, Group: userInfo.Group,
Createdat: sql.NullTime{Time: time.Now(), Valid: true}, Createdat: sql.NullTime{Time: time.Now(), Valid: true},
Subdomain: userInfo.Subdomain, Subdomain: userInfo.Subdomain,
Amouserid: userInfo.Amouserid, Amouserid: userInfo.Amouserid,
@ -146,26 +126,47 @@ func (r *AmoRepository) CreateAccount(ctx context.Context, accountID string, use
return nil return nil
} }
func (r *AmoRepository) CheckUsers(ctx context.Context, amouserid int32, user model.User) error { func (r *AmoRepository) CheckMainUser(ctx context.Context, user model.User) error {
group, err := json.Marshal(user.Group) err := r.queries.CheckMainUser(ctx, sqlcgen.CheckMainUserParams{
if err != nil {
return err
}
err = r.queries.CheckUsers(ctx, sqlcgen.CheckUsersParams{
Amoid: amouserid,
Name: user.Name, Name: user.Name,
Group: user.Group,
Email: user.Email, Email: user.Email,
Role: user.Role, Role: user.Role,
Group: pqtype.NullRawMessage{RawMessage: group, Valid: len(group) > 0}, Amoid: user.AmoID,
}) })
if err != nil { if err != nil {
return err return err
} }
}
func (r *AmoRepository) CheckAndUpdateUsers(ctx context.Context, user model.User) error {
err := r.queries.CheckUsers(ctx, sqlcgen.CheckUsersParams{
Amoid: user.AmoID,
Name: user.Name,
Email: user.Email,
Role: user.Role,
Group: user.Group,
Amouserid: user.Amouserid,
})
// чекаем на конфликт
if err != nil && strings.Contains(err.Error(), "duplicate key value violates unique constraint") {
err = r.queries.UpdateUsers(ctx, sqlcgen.UpdateUsersParams{
Amoid: user.AmoID,
Name: user.Name,
Email: user.Email,
Role: user.Role,
Group: user.Group,
Amouserid: user.Amouserid,
})
if err != nil {
return err
}
return nil return nil
} }
return err
}
// методы webhook // методы webhook