improve error handling, add route for getting list of all passes
This commit is contained in:
parent
28d7c46eec
commit
ff7653b3fe
|
@ -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]}
|
||||
|
|
Loading…
Reference in New Issue