main.py 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. import json
  2. import os
  3. from fastapi import FastAPI
  4. from fastapi.middleware.cors import CORSMiddleware
  5. app = FastAPI()
  6. origins = [
  7. "http://drafter.cadelwatson.com",
  8. "https://drafter.cadelwatson.com",
  9. "http://localhost",
  10. "http://localhost:1234",
  11. ]
  12. app.add_middleware(
  13. CORSMiddleware,
  14. allow_origins=origins,
  15. allow_credentials=True,
  16. allow_methods=["*"],
  17. allow_headers=["*"],
  18. )
  19. def discover_sets():
  20. # find all set directories
  21. sets = []
  22. for root, dirs, files in os.walk("data/sets"):
  23. for dir in dirs:
  24. sets.append(dir)
  25. return sets
  26. @app.get("/api/sets")
  27. def read_sets():
  28. sets = discover_sets()
  29. return {"sets": sets}
  30. @app.get("/api/sets/{set_name}/cards")
  31. def read_item(set_name: str):
  32. if set_name not in discover_sets():
  33. return {"error": "Set not found"}
  34. card_data_path = os.path.join("data", "sets", set_name, "card-data.json")
  35. with open(card_data_path) as f:
  36. card_data = json.load(f)
  37. return {"data": card_data}
  38. @app.get("/api/sets/{set_name}/ratings")
  39. def read_item(set_name: str):
  40. if set_name not in discover_sets():
  41. return {"error": "Set not found"}
  42. card_ratings_path = os.path.join("data", "sets", set_name, "card-ratings-all.json")
  43. with open(card_ratings_path) as f:
  44. card_data = json.load(f)
  45. return {"data": card_data}
  46. @app.get("/api/sets/{set_name}")
  47. def read_item(set_name: str):
  48. if set_name not in discover_sets():
  49. return {"error": "Set not found"}
  50. card_data_path = os.path.join("data", "sets", set_name, "card-data.json")
  51. with open(card_data_path) as f:
  52. card_data = json.load(f)
  53. card_ratings_path = os.path.join("data", "sets", set_name, "card-ratings-all.json")
  54. with open(card_ratings_path) as f:
  55. ratings_data = json.load(f)
  56. return {"code": set_name, "data": {"cards": card_data, "ratings": ratings_data}}