Generate a FastAPI project with SQLAlchemy and SQLite. Follow the REFERENCE IMPLEMENTATION exactly. Generate these 4 files with === markers: === models.py === === schemas.py === === main.py === === test_main.py === Key patterns (copy from reference): - class Base(DeclarativeBase): pass - Mapped[str] = mapped_column(String(255)) - Mapped[str | None] = mapped_column(Text, default=None) - model_config = ConfigDict(from_attributes=True) - model_dump() not dict() - POST 201, GET list, GET by id 404, PUT, DELETE 204 FOREIGN KEYS (when spec has relationships): - Child entity gets parent_id field: Mapped[int] = mapped_column(ForeignKey("parents.id")) - Import: from sqlalchemy import ForeignKey (NOT from sqlalchemy.orm!) - Create schema includes parent_id: int - Test creates parent FIRST, then child with parent's id Example FK pattern in models.py: ``` class Author(Base): __tablename__ = "authors" id: Mapped[int] = mapped_column(primary_key=True, index=True) name: Mapped[str] = mapped_column(String(255)) class Post(Base): __tablename__ = "posts" id: Mapped[int] = mapped_column(primary_key=True, index=True) title: Mapped[str] = mapped_column(String(255)) author_id: Mapped[int] = mapped_column(ForeignKey("authors.id")) ``` Example FK test patterns: ``` def test_create_post(): author = client.post("/authors/", json={"name": "Kirjailija"}).json() response = client.post("/posts/", json={"title": "Artikkeli", "author_id": author["id"]}) assert response.status_code == 201 def test_update_post(): author = client.post("/authors/", json={"name": "Päivittäjä"}).json() created = client.post("/posts/", json={"title": "Vanha", "author_id": author["id"]}).json() response = client.put(f"/posts/{created['id']}", json={"title": "Uusi", "author_id": author["id"]}) assert response.status_code == 201 ``` CRITICAL: - Use ONLY fields from the JSON spec — no created_at or extra fields - Generate EXACTLY 6 tests per entity: create, list, get_by_id, not_found, update, delete - No search, filter, or other extra tests - test_list: assert len(response.json()) >= 1, NEVER assert == 1 (database is shared between tests) - test_create for child entities: create parent FIRST, use parent's id - No markdown fences in output