API REST desenvolvida em .NET 9 para gerenciamento de ordens de compra com fluxo de aprovação por cargos hierárquicos.
Sobre o projeto:
O sistema permite criar e gerenciar ordens de compra, submetê-las para aprovação e acompanhar todo o histórico de ações. O fluxo de aprovação é definido automaticamente com base no valor total do pedido, passando pelos cargos necessários até a aprovação final.
Níveis de aprovação por valor:
- Até R$ 100 → Suprimentos
- R$ 101 a R$ 1.000 → Suprimentos → Gerente
- Acima de R$ 1.000 → Suprimentos → Gerente → Diretor
Tecnologias
.NET 9 ASP.NET Core Web API Entity Framework Core 9 SQL Server Swagger
Pré-requisitos
.NET 9 SDK SQL Server (local ou remoto)
Como rodar
- Clone o repositório
git clone https://github.com/GuilhermeFC1/PurchaseOrderAPI.git cd PurchaseOrderAPI
- Configure a connection string
Edite o arquivo src/API/appsettings.json com os dados do seu SQL Server:
"ConnectionStrings": {
"DefaultConnection": "Server=SEU_SERVIDOR;Database=PurchaseOrderApiDb;Trusted_Connection=true;TrustServerCertificate=true;MultipleActiveResultSets=true"
}- Execute a aplicação
dotnet run --project src/API/PurchaseOrderAPI.csproj
As migrations são aplicadas automaticamente na primeira execução. O banco de dados PurchaseOrderApiDb será criado caso não exista.
- Acesse o Swagger
Testando com Insomnia
Importe o arquivo Postman_Collection.json para o Insomnia
Caso prefira criar as requisições manualmente, use os exemplos de body abaixo. Todas as requisições devem ter o header Content-Type: application/json.
Usuários
POST /api/users — Criar usuário
{
"fullName": "Coloque o nome",
"email": "Coloque um email",
"userRole": "Elaborator",
"department": "Compras"
}
Valores aceitos em `userRole`: `Elaborator`, `Manager`, `Director`, `Supplies`
PUT /api/users/{id} — Atualizar usuário
```json
{
"fullName": "João Silva Atualizado",
"department": "Financeiro"
}PUT /api/users/{id}/toggle-active — Ativar/desativar usuário
Sem body.
Ordens de Compra
POST /api/purchaseorders — Criar ordem
{
"elaboratorId": "Trocar pelo id que apareceu quando foi criado um usuário novo",
"orderNumber": "OC-001",
"description": "Compra de materiais de escritório"
}PUT /api/purchaseorders/{id} — Editar ordem (apenas status Draft)
{
"description": "Descrição atualizada"
}POST /api/purchaseorders/{id}/items — Adicionar item
{
"description": "Resma de papel A4",
"quantity": 10,
"unitPrice": 25.90
}POST /api/purchaseorders/{id}/submit — Submeter para aprovação
{
"elaboratorId": "Trocar pelo id que apareceu quando foi criado um usuário novo"
}POST /api/purchaseorders/{id}/approve — Aprovar
{
"approverId": "Trocar pelo id que apareceu quando foi criado um usuário novo",
"comments": "Aprovado conforme orçamento."
}POST /api/purchaseorders/{id}/reject — Rejeitar
{
"approverId": "Trocar pelo id que apareceu quando foi criado um usuário novo",
"reason": "Valor acima do orçamento disponível."
}POST /api/purchaseorders/{id}/request-revision — Solicitar revisão
{
"approverId": "Trocar pelo id que apareceu quando foi criado um usuário novo",
"reason": "Necessário ajustar a descrição dos itens."
}DELETE /api/purchaseorders/{id} — Cancelar ordem
{
"userId": "Trocar pelo id que apareceu quando foi criado um usuário novo",
"reason": "Compra não é mais necessária."
}Endpoints principais
Usuários — /api/users
POST - /api/users -> Criar usuário
GET - /api/users -> Listar todos
GET - /api/users/role/{role} -> Filtrar por função
PUT - /api/users/{id} -> Atualizar usuário
PUT - /api/users/{id}/toggle-active -> Ativar ou desativar
Ordens de Compra — /api/purchaseorders
POST - /api/purchaseorders -> Criar ordem
GET - /api/purchaseorders -> Listar todas
GET - /api/purchaseorders/status/{status} -> Filtrar por status
POST - /api/purchaseorders/{id}/items -> Adicionar item
POST - /api/purchaseorders/{id}/submit -> Submeter para aprovação
POST - /api/purchaseorders/{id}/approve -> Aprovar
POST - /api/purchaseorders/{id}/reject -> Rejeitar
POST - /api/purchaseorders/{id}/request-revision -> Solicitar revisão
GET - /api/purchaseorders/{id}/approvals -> Ver cadeia de aprovação
GET - /api/purchaseorders/{id}/history -> Ver histórico de auditoria