endpoints structure recactor

This commit is contained in:
zurdi zurdo
2023-04-17 09:56:32 +02:00
parent 60a92711ac
commit a820e4ac6e
7 changed files with 115 additions and 103 deletions

View File

@@ -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()}

View File

@@ -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'}

View File

@@ -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}

View File

@@ -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)

View File

@@ -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: