87 lines
2.5 KiB
Python
87 lines
2.5 KiB
Python
import csv
|
|
import datetime
|
|
import logging
|
|
from fastapi import APIRouter, Depends, Request, UploadFile
|
|
from fastapi.responses import HTMLResponse
|
|
from sqlalchemy.orm import Session
|
|
|
|
from ..templates import jinja_templates
|
|
from ..sql import crud, schemas
|
|
from ..sql.database import get_db
|
|
|
|
|
|
LOGGER = logging.getLogger(__name__)
|
|
|
|
api_router = APIRouter(prefix="/seed", tags=["seed"])
|
|
html_router = APIRouter(
|
|
prefix="/seed", include_in_schema=False, default_response_class=HTMLResponse
|
|
)
|
|
|
|
|
|
@api_router.post("/players")
|
|
def seed_players(file: UploadFile, db: Session = Depends(get_db)):
|
|
file_contents = file.file.read().decode("utf-8").split("\n")
|
|
reader = csv.reader(file_contents, delimiter=",")
|
|
for row in reader:
|
|
if not row:
|
|
continue
|
|
player_name = row[1]
|
|
crud.create_player(db=db, player=schemas.PlayerCreate(name=player_name))
|
|
return "OK!"
|
|
|
|
|
|
@api_router.post("/decks")
|
|
def seed_decks(file: UploadFile, db: Session = Depends(get_db)):
|
|
file_contents = file.file.read().decode("utf-8").split("\n")
|
|
reader = csv.DictReader(file_contents, delimiter=",")
|
|
for row in reader:
|
|
if not row:
|
|
continue
|
|
crud.create_deck(
|
|
db=db,
|
|
deck=schemas.DeckCreate(
|
|
**{key: row[key] for key in ["name", "description", "owner_id"]}
|
|
),
|
|
)
|
|
return "OK!"
|
|
|
|
|
|
@api_router.post("/games")
|
|
def seed_games(file: UploadFile, db: Session = Depends(get_db)):
|
|
file_contents = file.file.read().decode("utf-8").split("\n")
|
|
reader = csv.DictReader(file_contents, delimiter=",")
|
|
for row in reader:
|
|
if not row:
|
|
continue
|
|
args = {
|
|
key: row[key]
|
|
for key in [
|
|
"deck_id_1",
|
|
"deck_id_2",
|
|
"winning_deck_id",
|
|
"number_of_turns",
|
|
"first_player_out_turn",
|
|
"win_type_id",
|
|
"description",
|
|
]
|
|
}
|
|
args["date"] = datetime.datetime.strptime(row["date"], "%Y-%m-%d")
|
|
|
|
for deck_id_num in ["deck_id_3", "deck_id_4", "deck_id_5", "deck_id_6"]:
|
|
if deck_id := row[deck_id_num]:
|
|
LOGGER.error(f"{deck_id_num} is {deck_id}")
|
|
args[deck_id_num] = deck_id
|
|
crud.create_game(
|
|
db=db,
|
|
game=schemas.GameCreate(**args),
|
|
)
|
|
return "OK!"
|
|
|
|
|
|
@html_router.get("/")
|
|
def main(request: Request, db=Depends(get_db)):
|
|
return jinja_templates.TemplateResponse(
|
|
request,
|
|
"/seed.html",
|
|
)
|