12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- from typing import List
- from sqlmodel import Session, select
- from fastapi import FastAPI, HTTPException, status
- from .models import engine, Hero, create_tables
- from .serializers import HeroRead, HeroCreate, HeroUpdate
- app = FastAPI()
- @app.on_event("startup")
- def on_startup():
- create_tables(engine)
- @app.post("/heroes", response_model=HeroRead)
- def create_hero(data: HeroCreate):
- hero = Hero(**data.dict())
- with Session(engine) as session:
- session.add(hero)
- session.commit()
- session.refresh(hero)
- return hero
- @app.get("/heroes", response_model=List[HeroRead])
- def read_heroes():
- with Session(engine) as session:
- heroes = session.exec(select(Hero)).all()
- return heroes
- @app.get('/heroes/pk', response_model=HeroRead)
- def retrieve_hero(pk: int):
- with Session(engine) as session:
- instance = session.get(Hero, pk)
- if not instance:
- raise HTTPException(
- detail='Hero not found',
- status_code=status.HTTP_404_NOT_FOUND
- )
- return instance
- @app.patch('/heroes/{pk}', response_model=HeroRead)
- def update_hero(pk: int, data: HeroUpdate):
- with Session(engine) as session:
- instance = session.get(Hero, pk)
- if not instance:
- raise HTTPException(
- detail='Hero not found',
- status_code=status.HTTP_404_NOT_FOUND
- )
- hero_data = data.dict(exclude_unset=True)
- for key, value in hero_data.items():
- setattr(instance, key, value)
- session.add(instance)
- session.commit()
- session.refresh(instance)
- return instance
|