Tema
Produtos
API-075 — Listar Todos Produtos
GET /api/products
GET /api/produtos
Finalidade: Listar Todos Produtos.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:41 — ProdutoController.listarTodosProdutos.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
page | query | Integer | Não | — |
size | query | Integer | Não | — |
search | query | String | Não | — |
status | query | String | Não | — |
categoria | query | String | Não | — |
nome | query | String | Não | — |
name | query | String | Não | — |
codigo | query | String | Não | — |
codigoSistemaWester | query | String | Não | — |
cor | query | String | Não | — |
descricao | query | String | Não | — |
sort | query | String | Não | — |
direction | query | String | Não | — |
Corpo: não declarado; não enviar corpo.
Resposta de sucesso: ProdutoListaVariavel. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
{}Códigos HTTP: 200, 401, 403. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Validações e erros identificados na cadeia local do serviço:
- Categoria inválida: [mensagem pode receber complemento dinâmico]
Regras de negócio e dependências: ProdutoService.shouldUsePaginatedListing, ProdutoService.listarTodosProdutos, ProdutoService.listarProdutosPaginados. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X GET "${BASE_URL}/api/products" -H "Authorization: Bearer ${TOKEN}"API-076 — Buscar Produto Por Id
GET /api/products/{id}
GET /api/produtos/{id}
Finalidade: Buscar Produto Por Id.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:79 — ProdutoController.buscarProdutoPorId.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
id | path | Long | Sim | — |
Corpo: não declarado; não enviar corpo.
Resposta de sucesso: Produto. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
{
"id": 1,
"codigoSistemaWester": "Exemplo",
"nomeModelo": "Exemplo",
"cor": "Exemplo",
"descricao": "Exemplo",
"ativo": false,
"estoqueMinimo": 1,
"estoqueMaximo": 1,
"categoria": {
"id": 1,
"codigo": "Exemplo",
"descricao": "Exemplo"
}
}Códigos HTTP: 200, 401, 403, 404. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Regras de negócio e dependências: ProdutoService.buscarProdutoPorId. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X GET "${BASE_URL}/api/products/1" -H "Authorization: Bearer ${TOKEN}"API-077 — Buscar Por Codigo Wester
GET /api/products/codigo/{codigoWester}
GET /api/produtos/codigo/{codigoWester}
Finalidade: Buscar Por Codigo Wester.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:88 — ProdutoController.buscarPorCodigoWester.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
codigoWester | path | String | Sim | — |
Corpo: não declarado; não enviar corpo.
Resposta de sucesso: Produto. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
{
"id": 1,
"codigoSistemaWester": "Exemplo",
"nomeModelo": "Exemplo",
"cor": "Exemplo",
"descricao": "Exemplo",
"ativo": false,
"estoqueMinimo": 1,
"estoqueMaximo": 1,
"categoria": {
"id": 1,
"codigo": "Exemplo",
"descricao": "Exemplo"
}
}Códigos HTTP: 200, 401, 403, 404. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Regras de negócio e dependências: ProdutoService.buscarPorCodigoWester. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X GET "${BASE_URL}/api/products/codigo/1" -H "Authorization: Bearer ${TOKEN}"API-078 — Criar Produto
POST /api/products
POST /api/produtos
Finalidade: Criar Produto.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:98 — ProdutoController.criarProduto.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') and hasRole('FULL_ACCESS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado. Content-Type: application/json para o corpo.
Parâmetros:
Sem query parameters, path variables ou headers de negócio declarados.
Corpo da requisição: ProdutoUpsertRequestDTO; obrigatório. Validação Jakarta ativada por @Valid. Consulte os campos e restrições em Modelos.
Exemplo sintético (IDs devem existir e versões devem vir de consulta):
json
{
"codigoSistemaWester": "DOC-001",
"nomeModelo": "Produto de exemplo",
"cor": "Preto",
"descricao": "Exemplo documental",
"ativo": true,
"estoqueMinimo": 10,
"estoqueMaximo": 100
}Resposta de sucesso: Produto. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
{
"id": 1,
"codigoSistemaWester": "Exemplo",
"nomeModelo": "Exemplo",
"cor": "Exemplo",
"descricao": "Exemplo",
"ativo": false,
"estoqueMinimo": 1,
"estoqueMaximo": 1,
"categoria": {
"id": 1,
"codigo": "Exemplo",
"descricao": "Exemplo"
}
}Códigos HTTP: 201, 400, 401, 403, 500. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Validações e erros identificados na cadeia local do serviço:
- Código Wester já existe: [mensagem pode receber complemento dinâmico]
- Informe ao menos o código ou o nome do produto.
- Estoque máximo não pode ser menor que o estoque mínimo.
Regras de negócio e dependências: ProdutoService.salvarProduto. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X POST "${BASE_URL}/api/products" -H "Authorization: Bearer ${TOKEN}" -H 'Content-Type: application/json' --data '{"codigoSistemaWester":"DOC-001","nomeModelo":"Produto de exemplo","cor":"Preto","descricao":"Exemplo documental","ativo":true,"estoqueMinimo":10,"estoqueMaximo":100}'API-079 — Atualizar Produto
PUT /api/products/{id}
PUT /api/produtos/{id}
Finalidade: Atualizar Produto.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:113 — ProdutoController.atualizarProduto.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') and hasRole('FULL_ACCESS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado. Content-Type: application/json para o corpo.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
id | path | Long | Sim | — |
Corpo da requisição: ProdutoUpsertRequestDTO; obrigatório. Validação Jakarta ativada por @Valid. Consulte os campos e restrições em Modelos.
Exemplo sintético (IDs devem existir e versões devem vir de consulta):
json
{
"codigoSistemaWester": "DOC-001",
"nomeModelo": "Produto de exemplo",
"cor": "Preto",
"descricao": "Exemplo documental",
"ativo": true,
"estoqueMinimo": 10,
"estoqueMaximo": 100
}Resposta de sucesso: Produto. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
{
"id": 1,
"codigoSistemaWester": "Exemplo",
"nomeModelo": "Exemplo",
"cor": "Exemplo",
"descricao": "Exemplo",
"ativo": false,
"estoqueMinimo": 1,
"estoqueMaximo": 1,
"categoria": {
"id": 1,
"codigo": "Exemplo",
"descricao": "Exemplo"
}
}Códigos HTTP: 200, 400, 401, 403, 404, 500. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Validações e erros identificados na cadeia local do serviço:
- Código Wester já existe: [mensagem pode receber complemento dinâmico]
- Informe ao menos o código ou o nome do produto.
- Estoque máximo não pode ser menor que o estoque mínimo.
Regras de negócio e dependências: ProdutoService.atualizarProduto. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X PUT "${BASE_URL}/api/products/1" -H "Authorization: Bearer ${TOKEN}" -H 'Content-Type: application/json' --data '{"codigoSistemaWester":"DOC-001","nomeModelo":"Produto de exemplo","cor":"Preto","descricao":"Exemplo documental","ativo":true,"estoqueMinimo":10,"estoqueMaximo":100}'API-080 — Deletar Produto
DELETE /api/products/{id}
DELETE /api/produtos/{id}
Finalidade: Deletar Produto.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:133 — ProdutoController.deletarProduto.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') and hasRole('FULL_ACCESS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
id | path | Long | Sim | — |
Corpo: não declarado; não enviar corpo.
Resposta de sucesso: sem corpo quando 204.
Códigos HTTP: 204, 401, 403, 404, 500. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Regras de negócio e dependências: ProdutoService.deletarProduto. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X DELETE "${BASE_URL}/api/products/1" -H "Authorization: Bearer ${TOKEN}"API-081 — Ativar Produto
PATCH /api/products/{id}/activate; POST /api/products/{id}/activate
PATCH /api/products/{id}/ativar; POST /api/products/{id}/ativar
PATCH /api/produtos/{id}/activate; POST /api/produtos/{id}/activate
PATCH /api/produtos/{id}/ativar; POST /api/produtos/{id}/ativar
Finalidade: Ativar Produto.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:151 — ProdutoController.ativarProduto.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') and hasRole('FULL_ACCESS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
id | path | Long | Sim | — |
Corpo: não declarado; não enviar corpo.
Resposta de sucesso: Produto. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
{
"id": 1,
"codigoSistemaWester": "Exemplo",
"nomeModelo": "Exemplo",
"cor": "Exemplo",
"descricao": "Exemplo",
"ativo": false,
"estoqueMinimo": 1,
"estoqueMaximo": 1,
"categoria": {
"id": 1,
"codigo": "Exemplo",
"descricao": "Exemplo"
}
}Códigos HTTP: 200, 401, 403. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Regras de negócio e dependências: ProdutoService.ativarProduto. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X PATCH "${BASE_URL}/api/products/1/activate" -H "Authorization: Bearer ${TOKEN}"API-082 — Inativar Produto
PATCH /api/products/{id}/inactivate; POST /api/products/{id}/inactivate
PATCH /api/products/{id}/inativar; POST /api/products/{id}/inativar
PATCH /api/produtos/{id}/inactivate; POST /api/produtos/{id}/inactivate
PATCH /api/produtos/{id}/inativar; POST /api/produtos/{id}/inativar
Finalidade: Inativar Produto.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:162 — ProdutoController.inativarProduto.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') and hasRole('FULL_ACCESS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
id | path | Long | Sim | — |
Corpo: não declarado; não enviar corpo.
Resposta de sucesso: Produto. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
{
"id": 1,
"codigoSistemaWester": "Exemplo",
"nomeModelo": "Exemplo",
"cor": "Exemplo",
"descricao": "Exemplo",
"ativo": false,
"estoqueMinimo": 1,
"estoqueMaximo": 1,
"categoria": {
"id": 1,
"codigo": "Exemplo",
"descricao": "Exemplo"
}
}Códigos HTTP: 200, 401, 403. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Validações e erros identificados na cadeia local do serviço:
- Não é possível inativar o produto porque ele possui itens em estoque.
- Não é possível inativar o produto porque ele está alocado em uma ou mais posições.
Regras de negócio e dependências: ProdutoService.inativarProduto. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X PATCH "${BASE_URL}/api/products/1/inactivate" -H "Authorization: Bearer ${TOKEN}"API-083 — Listar produtos ativos com busca opcional por código ou nome
GET /api/products/ativos
GET /api/produtos/ativos
Finalidade: Listar produtos ativos com busca opcional por código ou nome.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:168 — ProdutoController.listarAtivos.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
search | query | String | Não | — |
Corpo: não declarado; não enviar corpo.
Resposta de sucesso: List<Produto>. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
[]Códigos HTTP: 200, 401, 403. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Regras de negócio e dependências: ProdutoService.buscarAtivos. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X GET "${BASE_URL}/api/products/ativos" -H "Authorization: Bearer ${TOKEN}"API-084 — Buscar Produtos
GET /api/products/buscar
GET /api/produtos/buscar
Finalidade: Buscar Produtos.
Fonte: src/main/java/com/wester/storage/controller/ProdutoController.java:177 — ProdutoController.buscarProdutos.
Autenticação, autorização e perfis: hasAuthority('SCREEN_PRODUCTS') Consulte a correspondência entre autoridades e perfis em Autenticação.
Headers: Authorization: Bearer <TOKEN>. Accept: application/json recomendado.
Parâmetros:
| Nome | Local | Tipo | Obrigatório | Padrão |
|---|---|---|---|---|
nomeModelo | query | String | Não | — |
cor | query | String | Não | — |
Corpo: não declarado; não enviar corpo.
Resposta de sucesso: List<Produto>. Campos em Modelos.
Exemplo estrutural sintético, sem afirmar valores de produção:
json
[]Códigos HTTP: 200, 401, 403. Códigos de segurança dependem da cadeia de filtros; falhas não capturadas podem chegar ao tratamento global descrito em Erros.
Regras de negócio e dependências: ProdutoService.buscarPorNomeModeloContendo, ProdutoService.buscarPorCor, ProdutoService.listarTodosProdutos. Consulte documento interno de regras de negócio para efeitos persistentes e validações compartilhadas.
cURL (Bash):
bash
curl -X GET "${BASE_URL}/api/products/buscar" -H "Authorization: Bearer ${TOKEN}"