All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
This project uses famous football coaches as release codenames, following an A-Z naming pattern.
| Letter | Coach Name | Country/Notable Era | Tag Name |
|---|---|---|---|
| A | Ancelotti (Carlo) | Italy | ancelotti |
| B | Bielsa (Marcelo) | Argentina | bielsa |
| C | Capello (Fabio) | Italy | capello |
| D | Del Bosque (Vicente) | Spain | delbosque |
| E | Eriksson (Sven-Göran) | Sweden | eriksson |
| F | Ferguson (Alex) | Scotland | ferguson |
| G | Guardiola (Pep) | Spain | guardiola |
| H | Heynckes (Jupp) | Germany | heynckes |
| I | Inzaghi (Simone) | Italy | inzaghi |
| J | Klopp (Jürgen) | Germany | klopp |
| K | Kovač (Niko) | Croatia | kovac |
| L | Löw (Joachim) | Germany | low |
| M | Mourinho (José) | Portugal | mourinho |
| N | Nagelsmann (Julian) | Germany | nagelsmann |
| O | Ottmar Hitzfeld | Germany/Switzerland | ottmar |
| P | Pochettino (Mauricio) | Argentina | pochettino |
| Q | Queiroz (Carlos) | Portugal | queiroz |
| R | Ranieri (Claudio) | Italy | ranieri |
| S | Simeone (Diego) | Argentina | simeone |
| T | Tuchel (Thomas) | Germany | tuchel |
| U | Unai Emery | Spain | unai |
| V | Van Gaal (Louis) | Netherlands | vangaal |
| W | Wenger (Arsène) | France | wenger |
| X | Xavi Hernández | Spain | xavi |
| Y | Yozhef Sabo | Ukraine | yozhef |
| Z | Zeman (Zdeněk) | Czech Republic | zeman |
- UUID v4 primary key for the
playerstable, replacing the previous integer PK (#66) PlayerRequestModelPydantic model for POST/PUT request bodies (noidfield) (#66)PlayerResponseModelPydantic model for GET/POST response bodies (includesid: UUID) (#66)tools/seed_001_starting_eleven.py: standalone seed script populating 11 starting-eleven players with deterministic UUID v5 PKs (#66)tools/seed_002_substitutes.py: standalone seed script populating 14 substitute players with deterministic UUID v5 PKs (#66)HyphenatedUUIDcustomTypeDecoratorinschemas/player_schema.pystoring UUIDs as hyphenatedCHAR(36)strings in SQLite, returninguuid.UUIDobjects in Python (#66)
PlayerModelsplit intoPlayerRequestModelandPlayerResponseModelinmodels/player_model.py(#66)- All route path parameters and service function signatures updated from
inttouuid.UUID(#66) - POST conflict detection changed from ID lookup to
squad_numberuniqueness check (#66) tests/player_stub.pyupdated with UUID-based test fixtures (#66)tests/test_main.pyupdated to assert UUID presence and format in API responses (#66)PlayerResponseModelredeclared withidas first field to control JSON serialization order (#66)HyphenatedUUIDmethods now have full type annotations and Google-style docstrings; unuseddialectparams renamed to_dialect(#66)- Service logger changed from
getLogger("uvicorn")togetLogger("uvicorn.error"), aligned withmain.py(#66) logger.error(f"...")replaced withlogger.exception("...: %s", error)in allSQLAlchemyErrorhandlers (#66)- EN dashes replaced with ASCII hyphens in
seed_002log and argparse strings (#66) logger.errorreplaced withlogger.exceptioninsqlite3.Errorhandlers inseed_001andseed_002(#66)
- POST/PUT/DELETE routes now raise
HTTP 500on DB failure instead of silently returning success (#66) - Cache cleared only after confirmed successful create, update, or delete (#66)
- DELETE test is now self-contained; no longer depends on POST test having run first (#66)
- UUID assertion in GET all test replaced with explicit
_is_valid_uuid()validator (#66) - Emiliano Martínez
middleNamecorrected from""toNoneinseed_001(#66)
1.0.0 - Ancelotti - 2026-01-24
Initial release. See README.md for complete feature list and documentation.
To create a new release, follow these steps in order:
Move items from the [Unreleased] section to a new release section using the template format provided at the bottom of this file (see the commented template).
Important: Commit and push this change before creating the tag.
git tag -a vX.Y.Z-coach -m "Release X.Y.Z - Coach"
git push origin vX.Y.Z-coachExample:
git tag -a v1.0.0-ancelotti -m "Release 1.0.0 - Ancelotti"
git push origin v1.0.0-ancelottiThe CD workflow automatically:
- ✅ Validates the coach name against the A-Z list
- ✅ Builds and tests the project with coverage
- ✅ Publishes Docker images to GHCR with three tags (
:X.Y.Z,:coach,:latest) - ✅ Creates a GitHub Release with auto-generated notes from commits
- CHANGELOG.md updated with release notes
- CHANGELOG.md changes committed and pushed
- Tag created with correct format:
vX.Y.Z-coach - Coach name is valid (A-Z from table above)
- Tag pushed to trigger CD workflow