diff --git a/repository/amo/amo.go b/repository/amo/amo.go index 204361e..8ae7f7c 100644 --- a/repository/amo/amo.go +++ b/repository/amo/amo.go @@ -6,7 +6,6 @@ import ( "encoding/json" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/dal/sqlcgen" "penahub.gitlab.yandexcloud.net/backend/quiz/common.git/model" - "strings" "time" ) @@ -136,32 +135,41 @@ func (r *AmoRepository) CheckMainUser(ctx context.Context, user model.User) erro return nil } -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, - }) +func (r *AmoRepository) CheckAndUpdateUsers(ctx context.Context, users []model.User) error { + dollar1, err := json.Marshal(users) + if err != nil { + return err + } + rows, err := r.queries.CheckUsers(ctx, dollar1) + if err != nil { + return err + } - // чекаем на конфликт - 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 rows != nil { + var toUpdate []model.User + for _, row := range rows { + to := model.User{ + AmoID: row.Amoid, + Name: row.Name, + Group: row.Group, + Role: row.Role, + Email: row.Email, + Amouserid: row.Amouserid, + } + toUpdate = append(toUpdate, to) + } + dollar1, err := json.Marshal(toUpdate) + if err != nil { + return err + } + + err = r.queries.UpdateUsers(ctx, dollar1) if err != nil { return err } - return nil } - return err + + return nil } func (r *AmoRepository) GetTokenByID(ctx context.Context, accountID string) (*model.Token, error) {