from fastapi import FastAPI, status from sqlalchemy import create_engine from sqlalchemy.orm import clear_mappers, sessionmaker import backend.adapters.orm as orm from backend.api.model import TribeModel from backend.model.tribe import Tribe from backend.repository.tribe_sqlalchemy_repository import TribeSQLAlchemyRepository orm.start_mappers() engine = create_engine("sqlite:///:memory:") orm.metadata.create_all(engine) session = sessionmaker(bind=engine)() tribe_repo = TribeSQLAlchemyRepository(session) app = FastAPI() @app.put("/tribes", status_code=status.HTTP_201_CREATED, response_model=TribeModel) async def put_tribe(item: TribeModel): tribe = Tribe(**item.dict()) tribe_repo.add(tribe) session.commit() return tribe.to_dict() @app.get("/tribes", response_model=list[TribeModel]) async def list_tribes(): tribes = tribe_repo.list() return [t.to_dict() for t in tribes] @app.get("/tribes/{name}", response_model=TribeModel) async def get_tribe(name: str): tribe = tribe_repo.get(name) return tribe.to_dict()