Sobes.tech
Middle

// GetUsersList foydalanuvchilar ro'yxatini qaytaradi. (ma'lumotlar bazasida taxminan 1 million foydalanuvchi saqlanadi) // Admin panelda foydalanuvchilar ro'yxatini ko'rsatish uchun ishlatiladi. Agar isActive = true bo'lsa, faqat faol foydalanuvchilar qaytariladi. 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("foydalanuvchilar ro'yxatini olishda xato") } var users []User // Foydalanuvchilar haqida ma'lumotlarni to'ldiring. for rows.Next() { var user User err := rows.Scan(&user.ID, &user.Name, &user.Phone) if err != nil { return nil, err } // Foydalanuvchining elektron pochta ro'yxatini oling err, err := u.DB.QueryContext(ctx, "SELECT email FROM user_emails WHERE user_id = ?", user.ID) if err != nil { return nil, errors.New("foydalanuvchilar ro'yxatini olishda xato") } 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'dan profil ma'lumotlarini oling profile, err := getUserProfileFromVkApiByUserPhone(user.Phone) if err != nil { return nil, errors.New("foydalanuvchilar ro'yxatini olishda xato") } user.Profile = profile users = append(users, user) } if err = rows.Err(); err != nil { return nil, errors.New("foydalanuvchilar ro'yxatini olishda xato") } }