From a820e4ac6e5c13bc1694de5b1aba5db02a7e0753 Mon Sep 17 00:00:00 2001 From: zurdi zurdo Date: Mon, 17 Apr 2023 09:56:32 +0200 Subject: [PATCH] endpoints structure recactor --- backend/src/endpoints/platform.py | 12 ++++ backend/src/endpoints/platforms.py | 0 backend/src/endpoints/rom.py | 65 ++++++++++++++++++ backend/src/endpoints/roms.py | 0 backend/src/endpoints/search.py | 24 +++++++ backend/src/main.py | 103 ++++------------------------- backend/src/utils/fastapi.py | 14 ---- 7 files changed, 115 insertions(+), 103 deletions(-) create mode 100644 backend/src/endpoints/platform.py delete mode 100644 backend/src/endpoints/platforms.py create mode 100644 backend/src/endpoints/rom.py delete mode 100644 backend/src/endpoints/roms.py diff --git a/backend/src/endpoints/platform.py b/backend/src/endpoints/platform.py new file mode 100644 index 000000000..ccd9028a2 --- /dev/null +++ b/backend/src/endpoints/platform.py @@ -0,0 +1,12 @@ +from fastapi import APIRouter + +from handler import dbh + +router = APIRouter() + + +@router.get("/platforms") +def platforms() -> dict: + """Returns platforms data""" + + return {'data': dbh.get_platforms()} diff --git a/backend/src/endpoints/platforms.py b/backend/src/endpoints/platforms.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/backend/src/endpoints/rom.py b/backend/src/endpoints/rom.py new file mode 100644 index 000000000..323f37f01 --- /dev/null +++ b/backend/src/endpoints/rom.py @@ -0,0 +1,65 @@ +from fastapi import APIRouter, Request + +from logger.logger import log, COLORS +from handler import igdbh, dbh +from utils import fs + +router = APIRouter() + + +@router.get("/platforms/{p_slug}/roms/{file_name}") +def rom(p_slug: str, file_name: str) -> dict: + """Returns one rom data of the desired platform""" + + return {'data': dbh.get_rom(p_slug, file_name)} + + +@router.get("/platforms/{p_slug}/roms") +def roms(p_slug: str) -> dict: + """Returns all roms of the desired platform""" + + return {'data': dbh.get_roms(p_slug)} + + +@router.patch("/platforms/{p_slug}/roms") +async def updateRom(req: Request, p_slug: str) -> dict: + """Updates rom details""" + + data: dict = await req.json() + rom: dict = data['rom'] + updatedRom: dict = data['updatedRom'] + log.info(f"Updating {COLORS['orange']}{updatedRom['file_name']}{COLORS['reset']} details") + r_igdb_id, file_name_no_tags, r_slug, r_name, summary, url_cover = igdbh.get_rom_details(updatedRom['file_name'], rom['p_igdb_id'], updatedRom['r_igdb_id']) + path_cover_s, path_cover_l, has_cover = fs.get_cover_details(True, p_slug, updatedRom['file_name'], url_cover) + updatedRom['file_name_no_tags'] = file_name_no_tags + updatedRom['r_igdb_id'] = r_igdb_id + updatedRom['p_igdb_id'] = rom['p_igdb_id'] + updatedRom['r_slug'] = r_slug + updatedRom['p_slug'] = p_slug + updatedRom['name'] = r_name + updatedRom['summary'] = summary + updatedRom['path_cover_s'] = path_cover_s + updatedRom['path_cover_l'] = path_cover_l + updatedRom['has_cover'] = has_cover + updatedRom['file_path'] = rom['file_path'] + updatedRom['file_size'] = rom['file_size'] + updatedRom['multi'] = rom['multi'] + updatedRom['file_extension'] = fs.get_file_extension(updatedRom) + reg, rev, other_tags = fs.parse_tags(updatedRom['file_name']) + updatedRom.update({'region': reg, 'revision': rev, 'tags': other_tags}) + if 'url_cover' in updatedRom.keys(): del updatedRom['url_cover'] + fs.rename_rom(p_slug, rom['file_name'], updatedRom['file_name']) + dbh.update_rom(p_slug, rom['file_name'], updatedRom) + return {'data': updatedRom} + + +@router.delete("/platforms/{p_slug}/roms/{file_name}") +def remove_rom(p_slug: str, file_name: str, filesystem: bool=False) -> dict: + """Detele rom from filesystem and database""" + + log.info(f"Deleting {file_name} from database") + dbh.delete_rom(p_slug, file_name) + if filesystem: + log.info(f"Removing {file_name} from filesystem") + fs.remove_rom(p_slug, file_name) + return {'msg': 'success'} diff --git a/backend/src/endpoints/roms.py b/backend/src/endpoints/roms.py deleted file mode 100644 index e69de29bb..000000000 diff --git a/backend/src/endpoints/search.py b/backend/src/endpoints/search.py index e69de29bb..306f6f89b 100644 --- a/backend/src/endpoints/search.py +++ b/backend/src/endpoints/search.py @@ -0,0 +1,24 @@ +from fastapi import APIRouter, Request +import emoji + +from logger.logger import log, COLORS +from handler import igdbh + +router = APIRouter() + + +@router.put("/search/roms/igdb") +async def search_rom_igdb(req: Request, igdb_id: str=None) -> dict: + """Get all the roms matched from igdb.""" + + data: dict = await req.json() + log.info(emoji.emojize(":magnifying_glass_tilted_right: IGDB Searching")) + if igdb_id: + log.info(f"Searching by id: {igdb_id}") + matched_roms = igdbh.get_matched_roms_by_id(igdb_id) + else: + log.info(emoji.emojize(f":video_game: {data['rom']['p_slug']}: {COLORS['orange']}{data['rom']['file_name']}{COLORS['reset']}")) + matched_roms = igdbh.get_matched_roms(data['rom']['file_name'], data['rom']['p_igdb_id'], data['rom']['p_slug']) + log.info("Results:") + [log.info(f"\t - {COLORS['blue']}{rom['name']}{COLORS['reset']}") for rom in matched_roms] + return {'data': matched_roms} diff --git a/backend/src/main.py b/backend/src/main.py index 2db8c2298..65a22bb9b 100644 --- a/backend/src/main.py +++ b/backend/src/main.py @@ -1,17 +1,24 @@ -from fastapi import FastAPI, Request +from fastapi import FastAPI +from fastapi.middleware.cors import CORSMiddleware import uvicorn -import emoji -from logger.logger import log, COLORS -from handler import igdbh, dbh from config import DEV_PORT, DEV_HOST -from utils import fs, fastapi +from utils import fastapi -from endpoints import scan +from endpoints import scan, search, platform, rom app = FastAPI() +app.add_middleware( + CORSMiddleware, + allow_origins=["*"], + allow_credentials=True, + allow_methods=["*"], + allow_headers=["*"], +) app.include_router(scan.router) -fastapi.allow_cors(app) +app.include_router(search.router) +app.include_router(platform.router) +app.include_router(rom.router) @app.on_event("startup") @@ -20,87 +27,5 @@ def startup() -> None: pass -@app.get("/platforms") -def platforms() -> dict: - """Returns platforms data""" - - return {'data': dbh.get_platforms()} - - -@app.get("/platforms/{p_slug}/roms/{file_name}") -def rom(p_slug: str, file_name: str) -> dict: - """Returns one rom data of the desired platform""" - - return {'data': dbh.get_rom(p_slug, file_name)} - - -@app.get("/platforms/{p_slug}/roms") -def roms(p_slug: str) -> dict: - """Returns all roms of the desired platform""" - - return {'data': dbh.get_roms(p_slug)} - - -@app.patch("/platforms/{p_slug}/roms") -async def updateRom(req: Request, p_slug: str) -> dict: - """Updates rom details""" - - data: dict = await req.json() - rom: dict = data['rom'] - updatedRom: dict = data['updatedRom'] - log.info(f"Updating {COLORS['orange']}{updatedRom['file_name']}{COLORS['reset']} details") - r_igdb_id, file_name_no_tags, r_slug, r_name, summary, url_cover = igdbh.get_rom_details(updatedRom['file_name'], rom['p_igdb_id'], updatedRom['r_igdb_id']) - path_cover_s, path_cover_l, has_cover = fs.get_cover_details(True, p_slug, updatedRom['file_name'], url_cover) - updatedRom['file_name_no_tags'] = file_name_no_tags - updatedRom['r_igdb_id'] = r_igdb_id - updatedRom['p_igdb_id'] = rom['p_igdb_id'] - updatedRom['r_slug'] = r_slug - updatedRom['p_slug'] = p_slug - updatedRom['name'] = r_name - updatedRom['summary'] = summary - updatedRom['path_cover_s'] = path_cover_s - updatedRom['path_cover_l'] = path_cover_l - updatedRom['has_cover'] = has_cover - updatedRom['file_path'] = rom['file_path'] - updatedRom['file_size'] = rom['file_size'] - updatedRom['multi'] = rom['multi'] - updatedRom['file_extension'] = fs.get_file_extension(updatedRom) - reg, rev, other_tags = fs.parse_tags(updatedRom['file_name']) - updatedRom.update({'region': reg, 'revision': rev, 'tags': other_tags}) - if 'url_cover' in updatedRom.keys(): del updatedRom['url_cover'] - fs.rename_rom(p_slug, rom['file_name'], updatedRom['file_name']) - dbh.update_rom(p_slug, rom['file_name'], updatedRom) - return {'data': updatedRom} - - -@app.delete("/platforms/{p_slug}/roms/{file_name}") -def remove_rom(p_slug: str, file_name: str, filesystem: bool=False) -> dict: - """Detele rom from filesystem and database""" - - log.info(f"Deleting {file_name} from database") - dbh.delete_rom(p_slug, file_name) - if filesystem: - log.info(f"Removing {file_name} from filesystem") - fs.remove_rom(p_slug, file_name) - return {'msg': 'success'} - - -@app.put("/search/roms/igdb") -async def search_rom_igdb(req: Request, igdb_id: str=None) -> dict: - """Get all the roms matched from igdb.""" - - data: dict = await req.json() - log.info(emoji.emojize(":magnifying_glass_tilted_right: IGDB Searching")) - if igdb_id: - log.info(f"Searching by id: {igdb_id}") - matched_roms = igdbh.get_matched_roms_by_id(igdb_id) - else: - log.info(emoji.emojize(f":video_game: {data['rom']['p_slug']}: {COLORS['orange']}{data['rom']['file_name']}{COLORS['reset']}")) - matched_roms = igdbh.get_matched_roms(data['rom']['file_name'], data['rom']['p_igdb_id'], data['rom']['p_slug']) - log.info("Results:") - [log.info(f"\t - {COLORS['blue']}{rom['name']}{COLORS['reset']}") for rom in matched_roms] - return {'data': matched_roms} - - if __name__ == '__main__': uvicorn.run("main:app", host=DEV_HOST, port=DEV_PORT, reload=True) diff --git a/backend/src/utils/fastapi.py b/backend/src/utils/fastapi.py index a0eff8327..a260e5c9c 100644 --- a/backend/src/utils/fastapi.py +++ b/backend/src/utils/fastapi.py @@ -1,21 +1,7 @@ -from fastapi import FastAPI -from fastapi.middleware.cors import CORSMiddleware - from handler import igdbh from utils import fs from models.platform import Platform from models.rom import Rom -from logger.logger import log - - -def allow_cors(app: FastAPI) -> None: - app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], - ) def scan_platform(p_slug: str) -> Platform: