0
respostas

[Projeto] Resposta do Desafio - código completo

Código completo com todas as rotas. O enunciado poderia ser um pouco mais elaborado, principalmente em relação ao schema, já que não cobrimos isso em aula.

# main.py
import models
import schemas
from fastapi import FastAPI, Depends, HTTPException
from sqlalchemy.orm import Session
from typing import List
from database import SessionLocal, engine

models.Base.metadata.create_all(bind=engine)
app = FastAPI()

def get_db():
    db = SessionLocal()
    try:
        yield db
    finally:
        db.close()

@app.get('/students/', response_model=List[schemas.ResponseStudent])
def read_students(db: Session = Depends(get_db)):
    students = db.query(models.Student).all()
    return students

@app.get('/enrollments/', response_model=List[schemas.ResponseEnrollment])
def read_enrollment(db: Session = Depends(get_db)):
    enrollments = db.query(models.Enrollment).all()
    return enrollments

@app.get('/students/{student_id}', response_model=schemas.ResponseStudent)
def get_student(student_id: int, db: Session = Depends(get_db)):
    student = db.query(models.Student).filter(models.Student.id == student_id).first()
    
    if student is None:
        raise HTTPException(status_code=404, detail="Estudante não encontrado")

    return student

@app.post('/students/', response_model=schemas.ResponseStudent)
def create_student(
        student: schemas.CreateStudent,
        db: Session = Depends(get_db)
    ):
    student_db = models.Student(**student.model_dump())
    db.add(student_db)
    db.commit()
    db.refresh(student_db)
    return student_db

@app.post('/enrollments/', response_model=schemas.ResponseEnrollment)
def create_enrollment(
        enrollment: schemas.CreateEnrollment,
        db: Session = Depends(get_db)
    ):
    enrollment_db = models.Enrollment(**enrollment.model_dump())
    db.add(enrollment_db)
    db.commit()
    db.refresh(enrollment_db)
    return enrollment_db
# schemas.py
from pydantic import BaseModel, Field

class BaseStudent(BaseModel):
    name: str = Field(min_length=3, max_length=100)
    age: int = Field(gt=18, lt=100)

class CreateStudent(BaseStudent):
    pass

class ResponseStudent(BaseStudent):
    id: int
    class Config:
        from_attributes = True

class BaseEnrollment(BaseModel):
    student_id: int
    subject_name: str

class CreateEnrollment(BaseEnrollment):
    pass

class ResponseEnrollment(BaseEnrollment):
    id: int
    class Config:
        from_attributes = True