Fluxo CRUD de Carros
sequenceDiagram
participant U as Usuário
participant A as API
participant V as Validação
participant DB as Banco de Dados
participant S as Sistema de Segurança
U->>A: Solicita criação de carro
A->>S: Verifica autenticação (token JWT)
S-->>A: Token válido
A->>V: Valida dados de entrada
V-->>A: Dados válidos
A->>DB: Verifica existência de marca
DB-->>A: Marca existe
A->>DB: Verifica existência de proprietário
DB-->>A: Proprietário existe
A->>DB: Verifica unicidade da placa
DB-->>A: Placa disponível
A->>DB: Cria novo registro de carro
DB-->>A: Carro criado com sucesso
A-->>U: Retorna dados do carro criado
U->>A: Solicita lista de carros
A->>S: Verifica autenticação
S-->>A: Token válido
A->>DB: Busca carros do proprietário
DB-->>A: Retorna lista de carros
A-->>U: Retorna lista de carros
U->>A: Solicita detalhes de carro específico
A->>S: Verifica autenticação
S-->>A: Token válido
A->>DB: Busca carro por ID
DB-->>A: Retorna dados do carro
A->>S: Verifica propriedade do carro
S-->>A: Usuário é proprietário
A-->>U: Retorna detalhes do carro
U->>A: Solicita atualização de carro
A->>S: Verifica autenticação
S-->>A: Token válido
A->>DB: Busca carro por ID
DB-->>A: Retorna dados do carro
A->>S: Verifica propriedade do carro
S-->>A: Usuário é proprietário
A->>V: Valida dados de atualização
V-->>A: Dados válidos
A->>DB: Atualiza registro do carro
DB-->>A: Carro atualizado com sucesso
A-->>U: Retorna dados do carro atualizado
U->>A: Solicita exclusão de carro
A->>S: Verifica autenticação
S-->>A: Token válido
A->>DB: Busca carro por ID
DB-->>A: Retorna dados do carro
A->>S: Verifica propriedade do carro
S-->>A: Usuário é proprietário
A->>DB: Exclui registro do carro
DB-->>A: Carro excluído com sucesso
A-->>U: Confirmação de exclusão (204 No Content)
Descrição do Fluxo CRUD
1. Criação (CREATE)
- O usuário envia uma requisição para criar um novo carro
- A API verifica a autenticação do usuário via token JWT
- Os dados são validados usando esquemas Pydantic
- A API verifica se a marca e o proprietário existem
- A API verifica se a placa é única
- O novo carro é criado no banco de dados
- Os dados do carro criado são retornados ao usuário
2. Leitura (READ) - Listagem
- O usuário solicita a lista de carros
- A API verifica a autenticação do usuário
- A API busca apenas os carros pertencentes ao usuário autenticado
- A lista de carros é retornada ao usuário
3. Leitura (READ) - Detalhe Individual
- O usuário solicita detalhes de um carro específico
- A API verifica a autenticação do usuário
- A API busca o carro pelo ID
- A API verifica se o usuário é o proprietário do carro
- Os detalhes do carro são retornados ao usuário
4. Atualização (UPDATE)
- O usuário envia uma requisição para atualizar um carro existente
- A API verifica a autenticação do usuário
- A API busca o carro pelo ID
- A API verifica se o usuário é o proprietário do carro
- Os dados de atualização são validados
- O carro é atualizado no banco de dados
- Os dados atualizados do carro são retornados ao usuário
5. Exclusão (DELETE)
- O usuário solicita a exclusão de um carro
- A API verifica a autenticação do usuário
- A API busca o carro pelo ID
- A API verifica se o usuário é o proprietário do carro
- O carro é excluído do banco de dados
- A API confirma a exclusão com status 204 No Content
Controles de Segurança
- Autenticação: Cada operação requer um token JWT válido
- Autorização: Somente o proprietário pode acessar, modificar ou excluir seus carros
- Validação: Todos os dados são validados antes de serem processados
- Integridade: Verificações de unicidade e existência são realizadas antes de operações de escrita
Componentes Envolvidos
- Usuário: Entidade que realiza as operações CRUD
- API: Coordena todo o processo de manipulação de dados
- Validação: Garante que os dados atendam aos critérios estabelecidos
- Banco de Dados: Armazena e recupera os dados dos carros
- Sistema de Segurança: Gerencia autenticação e verificação de propriedade