improve error handling, add route for getting list of all passes

This commit is contained in:
ІО-23 Шмуляр Олег 2025-05-19 19:02:53 +03:00
parent 28d7c46eec
commit ff7653b3fe
1 changed files with 69 additions and 23 deletions

View File

@ -1,6 +1,7 @@
from flask import Flask
import psycopg2 as psql
from os import environ as env
import datetime
app = Flask(__name__)
@ -14,13 +15,22 @@ db_params = {
db = psql.connect(**db_params)
@app.route("/movies")
@app.route("/movies", methods = ['GET'])
def movies():
c = db.cursor()
fields = ['uuid',
'name',
'scheduled_datetime',
'movie_details',
'image_url',
'max_passes']
try:
c.execute('SELECT uuid, name, scheduled_datetime, movie_details, image_url, max_passes FROM movies')
except Exception:
c.execute(f"SELECT {','.join(fields)} FROM public.movie")
except Exception as e:
c.close()
print(e)
return {
"error": "Failed to list movies",
"result": None
@ -31,25 +41,28 @@ def movies():
return {
"error": "",
"result": [
{
"uuid": i[0],
"name": i[1],
"scheduled_datetime": i[2].strftime("%Y-%m-%d %H:%M:%S"),
"movie_details": i[3],
"image_url": i[4],
"max_passes": i[5]
} for i in res
]
"result": [{fields[i]: v
if type(v) != datetime.datetime
else v.strftime("%Y-%m-%d %H:%M:%S")
for i, v in enumerate(r)}
for r in res]
}
@app.route("/movie/<movie_uuid>")
@app.route("/movie/<movie_uuid>", methods = ['GET'])
def movie_byid(movie_uuid):
c = db.cursor()
fields = ['name',
'scheduled_datetime',
'movie_details',
'image_url',
'max_passes']
try:
c.execute(f"SELECT name, scheduled_datetime, movie_details, image_url, max_passes FROM movies WHERE uuid='{movie_uuid}'")
except Exception:
c.execute(f"SELECT {','.join(fields)} FROM public.movie WHERE uuid='{movie_uuid}'")
except Exception as e:
c.close()
print(e)
return {
"error": "Failed to search for a movie",
"result": None
@ -61,16 +74,49 @@ def movie_byid(movie_uuid):
if res:
return {
"error": "",
"result": {
"name": res[0],
"scheduled_datetime": res[1].strftime("%Y-%m-%d %H:%M:%S"),
"movie_details": res[2],
"image_url": res[3],
"max_passes": res[4]
}
"result": {fields[i]: v
if type(v) != datetime.datetime
else v.strftime("%Y-%m-%d %H:%M:%S")
for i, v in enumerate(res)}
}
else:
return {
"error": f"No movie with uuid={movie_uuid} has been found",
"result": None
}, 404
@app.route("/passes", methods = ['GET'])
def passes():
c = db.cursor()
fields = ["uuid",
"movie_uuid",
"user_first",
"user_last",
"user_email",
"pass_type",
"pass_price",
"pass_requested_at",
"payment_received",
"payment_received_at"]
try:
c.execute(f"SELECT {','.join(fields)} FROM public.pass")
except Exception as e:
c.close()
print(e)
return {
"error": "Failed to list out passes",
"result": None
}
res = c.fetchall()
c.close()
return {
"error": "",
"result": [{fields[i]: v
if type(v) != datetime.datetime
else v.strftime("%Y-%m-%d %H:%M:%S")
for i, v in enumerate(r)}
for r in res]}