Sign inSign up

pedrozulian/mouts-sales-api

By pedrozulian

•Updated 3 months ago

API REST de vendas — CRUD, cancelamento lógico e desconto progressivo por quantidade (.NET 8).

Image
Languages & frameworks
API management
0

269

pedrozulian/mouts-sales-api repository overview

⁠Descrição curta

API REST de vendas — CRUD, cancelamento lógico e desconto progressivo por quantidade (.NET 8).

⁠Categoria

Application Frameworks (secundária opcional: API Management)

⁠Overview

⁠mouts-sales-api

API REST para registro e consulta de vendas: CRUD completo, cancelamento lógico — da venda inteira ou de um item individual — e desconto progressivo por quantidade calculado automaticamente. Requer um PostgreSQL com o schema já aplicado pela imagem complementar mouts-sales-api-migrator⁠.

Repositório: github.com/pedrozulian/mouts-sales-api⁠

⁠Uso

docker run -d -p 8080:8080 \
  --platform linux/amd64 \
  -e ConnectionStrings__DefaultConnection="Host=<host>;Port=5432;Database=<db>;Username=<user>;Password=<senha>" \
  pedrozulian/mouts-sales-api:latest

Aplique o schema antes de subir a API, usando a imagem mouts-sales-api-migrator da mesma versão contra o mesmo banco.

Sem ConnectionStrings__DefaultConnection, o container encerra imediatamente na inicialização com erro nomeando a variável ausente — nunca sobe apontando para um endereço padrão.

⁠Plataforma

Imagem publicada apenas para linux/amd64. Se sua máquina é de outra arquitetura (ex.: Apple Silicon / arm64), inclua --platform linux/amd64 no docker run — sem essa flag o Docker pode recusar a execução ou emitir um aviso de incompatibilidade de plataforma antes de rodar via emulação.

Isso só se aplica ao rodar a imagem publicada diretamente. Ao usar docker compose a partir do código-fonte do repositório no GitHub⁠ (que builda a imagem localmente em vez de baixar do Docker Hub), a imagem é gerada nativamente para a arquitetura da sua máquina — por isso a flag não aparece nem é necessária nesse fluxo.

⁠Rede — conectando ao PostgreSQL

Host=postgres (o nome usado nos exemplos do projeto) só resolve dentro do Docker Compose do repositório, onde o Compose cria uma rede própria e registra cada serviço pelo nome. Rodando com docker run isolado, esse nome não existe — aponte para um endereço que o container realmente alcance:

  • PostgreSQL em outro container Docker: crie uma rede e coloque os dois containers nela; a API então resolve o banco pelo nome dado com --name:

    docker network create sales-net
    docker run -d --name sales-db --network sales-net \
      -e POSTGRES_DB=salesapi -e POSTGRES_USER=salesapi -e POSTGRES_PASSWORD=salesapi \
      postgres:16
    
    docker run -d -p 8080:8080 --network sales-net --platform linux/amd64 \
      -e ConnectionStrings__DefaultConnection="Host=sales-db;Port=5432;Database=salesapi;Username=salesapi;Password=salesapi" \
      pedrozulian/mouts-sales-api:latest
    
  • PostgreSQL rodando na sua máquina (fora de container): localhost de dentro do container aponta para o próprio container, não para o host. Use o hostname especial host.docker.internal — disponível por padrão no Docker Desktop (Mac/Windows); no Linux, é necessário adicionar --add-host=host.docker.internal:host-gateway ao docker run.

    docker run -d -p 8080:8080 --platform linux/amd64 \
      --add-host=host.docker.internal:host-gateway \
      -e ConnectionStrings__DefaultConnection="Host=host.docker.internal;Port=5432;Database=salesapi;Username=salesapi;Password=salesapi" \
      pedrozulian/mouts-sales-api:latest
    

    (--add-host é ignorado no Docker Desktop, onde o hostname já resolve nativamente, mas não atrapalha deixá-lo.)

  • PostgreSQL em outro servidor: use o host/IP real diretamente em Host=, sem necessidade de rede ou flag adicional.

⁠Configuração

VariávelObrigatórioDefault
ConnectionStrings__DefaultConnectionSim—
ASPNETCORE_ENVIRONMENTNãoProduction

⁠Endpoints

Porta 8080. Documentação interativa (/swagger) disponível também em produção, por decisão deliberada deste projeto.

MétodoRotaDescrição
POST/api/salesRegistrar venda
GET/api/sales/{id}Consultar venda
GET/api/salesListar vendas (paginado)
PUT/api/sales/{id}Alterar venda
DELETE/api/sales/{id}Cancelar venda
DELETE/api/sales/{id}/items/{itemId}Cancelar item da venda
GET/healthHealth check

⁠Versionamento

Publicada com as tags X.Y.Z e latest, sempre geradas a partir do mesmo commit que mouts-sales-api-migrator:X.Y.Z — use a mesma tag nas duas imagens.

CHANGELOG⁠ · Releases⁠

Tag summary

Content type

Image

Digest

sha256:35461bf98…

Size

96 MB

Last updated

3 months ago

docker pull pedrozulian/mouts-sales-api