-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.py
88 lines (73 loc) · 2.99 KB
/
app.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
from flask import Flask, jsonify, request
from flask_sqlalchemy import SQLAlchemy
from flask_cors import CORS
import random
app = Flask(__name__)
CORS(app) # Enable CORS
# Database configuration
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///number_picker.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False # Disable modification tracking for performance
db = SQLAlchemy(app) # Initialize the database
# Model for the User table
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(120), unique=True, nullable=False)
number = db.Column(db.Integer, nullable=False)
# Create the database tables
with app.app_context():
db.create_all()
# List of provided email addresses
member_emails = [
]
# In-memory data
members = {email: f"Member {i+1}" for i, email in enumerate(member_emails)}
available_numbers = list(range(1, len(member_emails) + 1))
selected_numbers = {}
# Function to verify if the email exists in the system
def verify_email(email):
return email in members
# API to select a random number and save it to the database
@app.route('/select_number', methods=['POST'])
def select_number():
data = request.json
email = data.get('email')
if email and verify_email(email):
# Check if the user has already selected a number
existing_user = User.query.filter_by(email=email).first()
if existing_user:
return jsonify({"message": f"{members[email]} has already selected number {existing_user.number}!", "status": "error"}), 400
# Select a random number
if available_numbers:
chosen_number = random.choice(available_numbers)
available_numbers.remove(chosen_number)
selected_numbers[email] = chosen_number
# Save the selected number in the database
new_user = User(email=email, number=chosen_number)
db.session.add(new_user)
db.session.commit()
return jsonify({"message": f"{members[email]} has selected number {chosen_number}.", "status": "success", "number": chosen_number}), 200
else:
return jsonify({"message": "No more numbers available.", "status": "error"}), 400
else:
return jsonify({"message": "Invalid email. Please try again.", "status": "error"}), 400
# API to show the final selected numbers from the database
@app.route('/show_results', methods=['GET'])
def show_results():
users = User.query.all()
results = {user.email: user.number for user in users}
return jsonify(results)
if __name__ == '__main__':
app.run(debug=True)