Bom dia Diego, tudo bem?
Em uma estrutura maior que envolva diferentes contextos, como produtos e clientes, o ideal é definir schemas separados para cada tipo de dado. Isso ajuda a manter a organização e a responsabilidade de cada entidade bem delimitada. Cada schema representaria uma parte específica do domínio, como um para produtos e outro para clientes, com seus respectivos campos e regras de validação.
A transação dos dados aconteceria de forma independente para cada schema, mas, se fosse necessário relacionar essas informações, você poderia realizar operações que combinassem dados de ambos, mantendo cada entidade bem encapsulada. Dessa forma, a arquitetura se torna mais modular, facilitando a manutenção e a expansão do sistema.
Exemplo:
from pydantic import BaseModel, Field, EmailStr
from typing import List
# Schema para Produto
class ProdutoSchema(BaseModel):
nome: str = Field(..., min_length=2, max_length=100)
slug: str
preco: float = Field(..., gt=0)
# Schema para Cliente
class ClienteSchema(BaseModel):
nome: str = Field(..., min_length=2, max_length=100)
email: EmailStr
produtos_comprados: List[ProdutoSchema] = []
# Exemplo de uso
produto1 = ProdutoSchema(nome="Camiseta", slug="camiseta-branca", preco=59.90)
produto2 = ProdutoSchema(nome="Tênis", slug="tenis-nike", preco=399.90)
cliente = ClienteSchema(
nome="João Silva",
email="joao@email.com",
produtos_comprados=[produto1, produto2]
)
print(cliente)
Cada entidade (Produto e Cliente) tem seu próprio schema, definindo suas propriedades e validações.
O schema ClienteSchema tem uma lista de produtos comprados, que usa o ProdutoSchema como tipo.
A validação é feita separadamente para cada schema.
Isso facilita a manutenção e permite que cada entidade evolua de forma independente.
Se em algum momento for necessário adicionar mais detalhes aos produtos ou clientes, basta atualizar apenas o schema correspondente, sem impactar o outro.
Espero tê-lo ajudado, bons estudos!