Start here. This is the direct spoken answer to practice first.
Overview
Uses separate Pydantic input and output models to prevent mass assignment and accidental data disclosure.
A request model defines what the client may submit, while a response model defines what the API may expose. I do not bind an ORM entity or one all-purpose user model in both directions. The create model omits server-owned fields such as role, tenant, price, and audit data. The response model omits secrets such as password hashes, internal flags, and provider tokens, and FastAPI filters returned data to that declared shape.