-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathapp.py
More file actions
101 lines (82 loc) · 2.76 KB
/
Copy pathapp.py
File metadata and controls
101 lines (82 loc) · 2.76 KB
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
89
90
91
92
93
94
95
96
97
98
99
100
101
from flask import Flask, render_template, request, jsonify
from data import db
from utils import compute_balances
app = Flask(__name__)
app.config['DATABASE'] = 'data/database'
# Initialize the database
with app.app_context():
db.init_app(app)
db.get_db()
@app.route('/')
def index():
return render_template('index.html')
@app.route('/add_expense', methods=['POST'])
def add_expense():
if request.is_json:
data = request.get_json()
else:
data = request.form
# Get all form fields from Emma’s frontend
rm1 = data.get('rm1', '')
rm2 = data.get('rm2', '')
rm3 = data.get('rm3', '')
rm4 = data.get('rm4', '')
rent = data.get('rent', '')
groceries = data.get('groceries', '')
# Basic validation
if not all([rm1, rm2, rm3, rm4, rent, groceries]):
return jsonify({'error': 'All fields are required.'}), 400
try:
rent = float(rent)
groceries = float(groceries)
except ValueError:
return jsonify({'error': 'Rent and groceries must be numbers.'}), 400
# Combine names and costs into entries
conn = db.get_db()
cursor = conn.cursor()
tracker_id = 1
roommate_id = 1 # placeholder; replace with logic if needed
# Rent entry
if rent > 0:
cursor.execute(
'INSERT INTO expense (amount, description, tracker_id, roommate_id) VALUES (?, ?, ?, ?)',
(rent, 'Rent', tracker_id, roommate_id)
)
# Groceries entry
if groceries > 0:
cursor.execute(
'INSERT INTO expense (amount, description, tracker_id, roommate_id) VALUES (?, ?, ?, ?)',
(groceries, 'Groceries', tracker_id, roommate_id)
)
conn.commit()
return jsonify({'status': 'Expenses added successfully'}), 200
@app.route('/get_expenses', methods=['GET'])
def get_expenses():
conn = db.get_db()
cursor = conn.cursor()
cursor.execute('SELECT id, amount, description FROM expense')
expenses = cursor.fetchall()
result = []
for row in expenses:
result.append({
'id': row['id'],
'description': row['description'],
'amount': row['amount']
})
return jsonify(result)
@app.route('/get_balances', methods=['GET'])
def get_balances():
conn = db.get_db()
cursor = conn.cursor()
cursor.execute('SELECT amount, description FROM expense')
expenses = cursor.fetchall()
roommates = [
request.args.get('rm1', 'Roommate 1').strip(),
request.args.get('rm2', 'Roommate 2').strip(),
request.args.get('rm3', 'Roommate 3').strip(),
request.args.get('rm4', 'Roommate 4').strip(),
]
debts = compute_balances(roommates, expenses)
return jsonify(debts)
if __name__ == '__main__':
app.run(debug=True, port=3000)