edh-elo/NOTES.md
Jack Jackson e4ea529fbe Cosmetic and final-basic functionality
At this point it _should_ be just about usable for folks to poke-around
in, though ugly as sin.
2024-06-09 09:45:56 -07:00

2.5 KiB

Development plan

  • Basic Player Definition
  • Basic Deck Definition
  • Figure out how to return JSON or html (render_template)
  • Basic testing
  • ruff
  • GitHub Actions for tests and linters
  • Basic List pages for entities
  • Swagger API
  • Local development tool to clear/seed database
  • CRUD APIs for Games
  • HTML Page to Create Game
    • Mostly done, just need to implement actual submission, (if desired) deck-creation in-page, and non-deck metadata (who won, turn count, etc.).
  • Load Game-history from file
  • Favicon
  • Configuration per-stage (including different welcome screen)
  • More content on Home Page
  • About Page
  • "Display components" like "a tables of games" that can be inserted into multiple pages
    • Oh no, did I just re-invent React? :P
    • Data presentation methods like "translating a list of Deck IDs into Deck Names" ...
  • Authentication (will need to link user table to player) ...
  • Helm chart including an initContainer to create the database if it doesn't exist already
  • GroupId (i.e. so I can host other people's data? That's probably a YAGNI - see if there's demand!) ...
  • Comments/chats on Games?

Database Migrations

https://flask-sqlalchemy.palletsprojects.com/en/3.1.x/quickstart/#create-the-tables

Authentication

https://www.digitalocean.com/community/tutorials/how-to-add-authentication-to-your-app-with-flask-login

Things to learn/fix/understand

  • How to use an existing Python class as the spec in a Swagger API definition? (See, for instance, responses.200.content.application/json.schema.id under get_player). Perhaps it's not possible just by name, which would be understandable (the context of a Docstring probably doesn't include the context of imported code) - but, in that case, at least I'd like to be able to specify `definitions`` in a way that is independent of a method.
  • How to specify the content-type that should be sent with a Swagger request without needing to use requestBody (and thus, implying that there should be a body)?
    • Fixed by using FastApi instead of Flask
  • How to abstract out the standard-definitions of routers/* and sql/crud.py?

Known bugs/QA issues

  • It's possible to select the same player twice for a game
  • Can submit a game in the future
    • ELO calculation assumes that games are submitted in chronological order
  • "Turn First Player Out" can be more than "Number Of Turns"
  • No validation that you've actually selected a deck for a player.
  • 404 pages are not friendly