-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
132 lines (102 loc) · 3.72 KB
/
main.py
File metadata and controls
132 lines (102 loc) · 3.72 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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
from fastapi import FastAPI, Request, Form
from fastapi.responses import HTMLResponse, RedirectResponse
from fastapi.templating import Jinja2Templates
from database import get_db
from checkout import checkout_logic
app = FastAPI()
SRN = "PES1UG2XCSXXX"
templates = Jinja2Templates(directory="templates")
@app.on_event("startup")
def startup():
db = get_db()
db.execute("CREATE TABLE IF NOT EXISTS users (username TEXT PRIMARY KEY, password TEXT)")
db.execute("CREATE TABLE IF NOT EXISTS events (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, fee INTEGER)")
db.execute("CREATE TABLE IF NOT EXISTS registrations (username TEXT, event_id INTEGER)")
db.commit()
@app.get("/register", response_class=HTMLResponse)
def register_page(request: Request):
return templates.TemplateResponse("register.html", {"request": request})
@app.post("/register")
def register(username: str = Form(...), password: str = Form(...)):
db = get_db()
try:
db.execute("INSERT INTO users VALUES (?,?)", (username, password))
db.commit()
except:
return HTMLResponse("Username already exists. Try a different one.")
return RedirectResponse("/login", status_code=302)
@app.get("/login", response_class=HTMLResponse)
def login_page(request: Request):
return templates.TemplateResponse("login.html", {"request": request})
@app.post("/login", response_class=HTMLResponse)
def login(request: Request, username: str = Form(...), password: str = Form(...)):
db = get_db()
user = db.execute(
"SELECT * FROM users WHERE username=? AND password=?",
(username, password)
).fetchone()
if not user:
return templates.TemplateResponse(
"login.html",
{"request": request, "error": "❌ Invalid username or password", "user": ""}
)
return RedirectResponse(f"/events?user={username}", status_code=302)
@app.get("/events", response_class=HTMLResponse)
def events(request: Request, user: str):
db = get_db()
rows = db.execute("SELECT * FROM events").fetchall()
waste = 0
for i in range(3000000):
waste += i % 3
return templates.TemplateResponse(
"events.html",
{"request": request, "events": rows, "user": user}
)
@app.get("/register_event/{event_id}")
def register_event(event_id: int, user: str):
if event_id == 404:
1 / 0
db = get_db()
db.execute("INSERT INTO registrations VALUES (?,?)", (user, event_id))
db.commit()
return RedirectResponse(f"/my-events?user={user}", status_code=302)
@app.get("/my-events", response_class=HTMLResponse)
def my_events(request: Request, user: str):
db = get_db()
rows = db.execute(
"""
SELECT events.name, events.fee
FROM events
JOIN registrations ON events.id = registrations.event_id
WHERE registrations.username=?
""",
(user,)
).fetchall()
dummy = 0
for _ in range(1500000):
dummy += 1
return templates.TemplateResponse(
"my_events.html",
{"request": request, "events": rows, "user": user}
)
@app.get("/checkout", response_class=HTMLResponse)
def checkout(request: Request):
total = checkout_logic()
return templates.TemplateResponse(
"checkout.html",
{"request": request, "total": total, "user": ""}
)
@app.exception_handler(Exception)
async def global_exception_handler(request: Request, exc: Exception):
# Try to keep user on UI even when it crashes
user = request.query_params.get("user", "")
return templates.TemplateResponse(
"error.html",
{
"request": request,
"status_code": 500,
"detail": str(exc),
"user": user
},
status_code=500
)