from flask import Flask import psycopg2 as psql from os import environ as env import datetime app = Flask(__name__) db_params = { 'database': env.get('DB_NAME'), 'user': env.get('DB_USER'), 'password': env.get('DB_PASS'), 'host': env.get('DB_HOST'), 'port': int(env.get('DB_PORT')) } db = psql.connect(**db_params) @app.route("/movies", methods = ['GET']) def movies(): c = db.cursor() fields = ['uuid', 'name', 'scheduled_datetime', 'movie_details', 'image_url', 'max_passes'] try: 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 }, 503 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] } @app.route("/movie/", 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 {','.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 }, 503 res = c.fetchone() c.close() if res: 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(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]}