
// GetUsersList მომხმარებელთა სია აბრუნებს. (მონაცემთა ბაზაში დაახლოებით 1 მილიონი მომხმარებელია შენახული)
// გამოიყენება ადმინისტრაციულ პანელზე მომხმარებელთა სიის გამოსაჩენად. თუ isActive = true, დაბრუნდება მხოლოდ აქტიური მომხმარებლები.
func (u *UsersRepo) GetUsersList(ctx context.Context, isActive bool) ([]User, error) {
rows, err := u.DB.Query("SELECT id, name, phone FROM users WHERE is_active = ?", isActive)
if err != nil {
return nil, errors.New("შეცდომა მომხმარებელთა სიის მიღებისას")
}
var users []User
// შეავსეთ მომხმარებლების შესახებ ინფორმაცია.
for rows.Next() {
var user User
err := rows.Scan(&user.ID, &user.Name, &user.Phone)
if err != nil {
return nil, err
}
// მიიღეთ მომხმარებლის ელფოსტის სია
err, err := u.DB.QueryContext(ctx, "SELECT email FROM user_emails WHERE user_id = ?", user.ID)
if err != nil {
return nil, errors.New("შეცდომა მომხმარებელთა სიის მიღებისას")
}
var emails []string
for er.Next() {
var email string
err := rows.Scan(&email)
if err != nil {
return nil, err
}
emails = append(emails, email)
}
if len(emails) != 0 {
for i, e := range emails {
e = strings.ToLower(e)
emails[i] = e
}
}
user.Emails = emails
// მიიღეთ პროფილის ინფორმაცია VK API-დან
profile, err := getUserProfileFromVkApiByUserPhone(user.Phone)
if err != nil {
return nil, errors.New("შეცდომა მომხმარებელთა სიის მიღებისას")
}
user.Profile = profile
users = append(users, user)
}
if err = rows.Err(); err != nil {
return nil, errors.New("შეცდომა მომხმარებელთა სიის მიღებისას")
}
}