diff --git a/rifaserver/app.py b/rifaserver/app.py index 0f24c8b..e3a1f66 100644 --- a/rifaserver/app.py +++ b/rifaserver/app.py @@ -121,18 +121,19 @@ def seller_screen(): def suggest_numbers(raffle_id, amount=3): - suggestions = [] - tickets = iter(Ticket.query.filter_by(raffle_id=raffle_id).order_by(Ticket.chosen_number.asc())) - next_ticket = next(tickets, None) + nums_needed = target_pool_size = max(amount * 2, 50) + possible_suggestions = [] candidate_number = 1 - while len(suggestions) < max(amount, 50) and next_ticket: - if candidate_number < next_ticket.chosen_number: - suggestions.append(candidate_number) - else: - next_ticket = next(tickets, None) - candidate_number += 1 - suggestions.extend(range(candidate_number, candidate_number + (max(amount, 50) - len(suggestions)))) - return sorted(random.sample(suggestions, amount)) + for ticket in Ticket.query.filter_by(raffle_id=raffle_id).order_by(Ticket.chosen_number.asc()): + possible_suggestions.extend(range(candidate_number, min(ticket.chosen_number, candidate_number + nums_needed))) + candidate_number = ticket.chosen_number + 1 + if len(possible_suggestions) >= target_pool_size: + nums_needed = 0 + break + nums_needed = target_pool_size - len(possible_suggestions) + + possible_suggestions.extend(range(candidate_number, candidate_number + nums_needed)) + return sorted(random.sample(possible_suggestions, amount)) @app.route('/numeros/', methods=['GET', 'POST'])