Código criado. Sugiro utilizar a IA do gemini ou gpt no modo aprendizado guiado para entender todo o ciclo do código e o que cada linha significa:
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
import models
import schemas
from database import SessionLocal, engine
# Cria as tabelas no PostgresSQL (Caso não existam)
models.Base.metadata.create_all(bind=engine)
app = FastAPI()
def get_db():
db = SessionLocal()
try:
yield db
finally:
db.close()
@app.post('/estudantes/', response_model=schemas.RespostaEstudante)
def criar_estudante(estudante: schemas.CriarEstudante, db: Session=Depends(get_db)):
db_estudante = models.Estudante(**estudante.model_dump())
db.add(db_estudante)
db.commit()
db.refresh(db_estudante)
return db_estudante
@app.get('/estudantes/', response_model=List[schemas.RespostaEstudante])
def ler_estudantes(db: Session = Depends(get_db)):
estudantes = db.query(models.Estudante).all()
return estudantes
# Cria uma rota do tipo GET para buscar um estudante pelo ID
@app.get('/estudantes/{id_estudante}', # recebe o id informado no endereço: /estudantes/1/;
response_model=schemas.RespostaEstudante # Qual será o formato da resposta / conforme schemas, recebe as informações de ID, nome, idade.
)
def ler_estudante(id_estudante: int, db: Session = Depends(get_db)): # Cria a função que será executada quando a rota for acessada
estudante = (db.query(models.Estudante)
.filter(models.Estudante.id == id_estudante)
.first())
if estudante is None:
raise HTTPException(
status_code=404,
detail="Item not found"
)
else:
return estudante