retro-back/api.py
2025-01-22 17:18:24 +01:00

193 lines
6.0 KiB
Python

import flask
from db_classes import *
from sqlalchemy.orm import Session
from sqlalchemy import create_engine
from flask_cors import CORS
app = flask.Flask(__name__)
CORS(app)
def setup_session():
engine = create_engine("mariadb+mariadbconnector://videogamedb:MumMTK3bwjYJRfe@simailadjalim.fr/videogamedb")
return Session(engine)
def close_session(session):
session.close()
@app.route("/langage", methods=["GET"])
def get_langage():
session = setup_session()
data = []
for language in session.query(Language).all():
data.append({
"id": language.id,
"name": language.name
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/langage/<int:langage_id>", methods=["GET"])
def get_langage_id(langage_id):
session = setup_session()
language = session.query(Language).filter(Language.id == langage_id).first()
if language is None:
close_session(session)
return flask.jsonify({"error": "language not found"}), 404
data = {
"id": language.id,
"name": language.name
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/extention", methods=["GET"])
def get_extention():
session = setup_session()
data = []
for extention in session.query(RomFileExtensions).all():
data.append({
"id": extention.id,
"name": extention.name
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/extention/<int:extention_id>", methods=["GET"])
def get_extention_id(extention_id):
session = setup_session()
extention = session.query(RomFileExtensions).filter(RomFileExtensions.id == extention_id).first()
if extention is None:
close_session(session)
return flask.jsonify({"error": "extention not found"}), 404
data = {
"id": extention.id,
"name": extention.name
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/consoles", methods=["GET"])
def get_consoles():
session = setup_session()
send_data = []
for console in session.query(Console).all():
data = {
"id": console.id,
"name": console.name,
"core": console.core,
#TODO Fix
"playable": True if console.playable else False
}
send_data.append(data)
close_session(session)
return send_data, 200
@app.route("/consoles/<int:console_id>", methods=["GET"])
def get_console(console_id):
session = setup_session()
console = session.query(Console).filter(Console.id == console_id).first()
if console is None:
close_session(session)
return flask.jsonify({"error": "console not found"}), 404
data = {
"id": console.id,
"core": console.core,
"name": console.name,
"playable": True if console.playable else False
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/consoles/<int:console_id>/roms", methods=["GET"])
def get_console_roms(console_id):
session = setup_session()
console = session.query(Console).filter(Console.id == console_id).first()
if console is None:
close_session(session)
return flask.jsonify({"error": "console not found"}), 404
data = []
for rom in console.rom_files:
data.append({
"id": rom.id,
"name": rom.name,
"console_id": rom.console_id,
"extension_id": rom.extension_id,
"language_id": [language.id for language in rom.languages],
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/roms", methods=["GET"])
def get_roms():
session = setup_session()
data = []
for rom in session.query(RomFile).all():
data.append({
"id": rom.id,
"name": rom.name,
"console_id": rom.console_id,
"extension_id": rom.extension_id,
"language_id": [language.id for language in rom.languages],
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/roms/<int:rom_id>", methods=["GET"])
def get_rom(rom_id):
session = setup_session()
rom = session.query(RomFile).filter(RomFile.id == rom_id).first()
if rom is None:
close_session(session)
return flask.jsonify({"error": "rom not found"}), 404
if flask.request.args.get("romfile"):
return flask.send_file(rom.path), 200
else :
data = {
"id": rom.id,
"name": rom.name,
"console_id": rom.console_id,
"extension_id": rom.extension_id,
"categories": [category.id for category in rom.categories],
"language_id": [language.id for language in rom.languages],
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/categories", methods=["GET"])
def get_categories():
session = setup_session()
data = []
for category in session.query(Category).all():
data.append({
"id": category.id,
"name": category.name
})
close_session(session)
return flask.jsonify(data), 200
@app.route("/categories/<int:category_id>", methods=["GET"])
def get_category(category_id):
session = setup_session()
category = session.query(Category).filter(Category.id == category_id).first()
if category is None:
close_session(session)
return flask.jsonify({"error": "category not found"}), 404
data = {
"id": category.id,
"name": category.name
}
close_session(session)
return flask.jsonify(data), 200
@app.route("/emulator", methods=["GET"])
def get_emulator():
rom_id = flask.request.args.get("rom_id")
if rom_id is None:
return flask.jsonify({"error": "rom_id not found"}), 404
console_core = flask.request.args.get("console_core")
if console_core is None:
return flask.jsonify({"error": "console_core not found"}), 404
return flask.render_template("emulator.html",rom_id=rom_id,console_core=console_core), 200
app.run(host="0.0.0.0", port=5000, debug=True)