193 lines
6.0 KiB
Python
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)
|