Skip to content

Latest commit

 

History

History
142 lines (96 loc) · 5.12 KB

File metadata and controls

142 lines (96 loc) · 5.12 KB

Processador Assíncrono

Este repositório implementa uma aplicação .NET 10 baseada em Clean Architecture, com foco em processamento assíncrono em lote utilizando BackgroundService e Channel<Aprovacao>, com persistência no SQL Server via Dapper.


Badges

GitHub repo size .NET 10 Dapper SQL Server BackgroundService Channel<Aprovacao> Minimal APIs xUnit Moq Shouldly Build Status License: MIT


Estrutura do Projeto

ProcessadorAssincrono/
├── ProcessadorAssincrono.slnx
├── global.json                          → SDK 10.0.112
├── docker-compose.yml                   → SQL Server, criação do banco e API
├── docker/init-db.sql                   → banco Processador e tabela Aprovacoes
├── src/ProcessadorAssincrono.API        → Minimal APIs
├── src/ProcessadorAssincrono.Application
├── src/ProcessadorAssincrono.Domain
├── src/ProcessadorAssincrono.Infrastructure
└── tests/ProcessadorAssincrono.Tests    → xUnit, Shouldly e Moq

Tecnologias Utilizadas

  • .NET 10
  • Dapper
  • SQL Server
  • BackgroundService
  • Channel<Guid>
  • Minimal APIs
  • Polly

Componentes Principais

BackgroundService com Channel<Aprovacao>

Enfileira solicitações para processamento em segundo plano, desacoplando a chamada HTTP da persistência.

AprovacaoService com Dapper

Realiza a atualização da entidade Aprovacao no banco SQL Server, marcando como aprovada.

Minimal API

Método Rota Efeito
PUT /api/solicitacoes/{id}/inserir Grava a solicitação no SQL Server
PUT /api/solicitacoes/{id}/aprovar Enfileira uma solicitação
POST /aprovar-em-lote Enfileira várias solicitações

Como executar

O global.json fixa o SDK 10.0.112 com rollForward: latestPatch. Um SDK 10.0.4xx instalado na máquina não atende esse pin.

Docker Compose

Sobe o SQL Server, cria o banco Processador e a tabela Aprovacoes, e inicia a API.

docker compose up --build -d
docker compose down

O volume sqlserver-data preserva o banco entre as execuções. O script docker/init-db.sql só cria o banco e a tabela quando eles ainda não existem.

Na máquina local

Com o SQL Server já acessível em localhost,1433 (por exemplo, docker compose up -d sqlserver db-init):

$env:PATH = "$env:LOCALAPPDATA\Microsoft\dotnet;" + $env:PATH
dotnet run --project src/ProcessadorAssincrono.API --launch-profile http

Swagger local: http://localhost:5085/swagger.

A connection string padrão está em src/ProcessadorAssincrono.API/appsettings.json. No Compose, a API usa o host sqlserver em vez de localhost.

Testes

dotnet test ProcessadorAssincrono.slnx

Collection

A collection do Insomnia está em docs/Files/ProcessadorAssincrono_Insomnia_2025-12-12.yaml.

Arquitetura

Contexto

Diagrama de Contexto

Sequência do BackgroundService

Diagrama de Sequencia

Banco de dados

O Compose aplica docker/init-db.sql. O schema resultante é:

CREATE TABLE Aprovacoes (
    Id UNIQUEIDENTIFIER NOT NULL PRIMARY KEY,
    Projeto NVARCHAR(100) NOT NULL,
    ComentariosAdicionais NVARCHAR(MAX) NULL,
    DataAprovacao DATETIME2 NOT NULL
);

Licença

Este projeto está licenciado sob a Licença MIT