{"id":50117827,"url":"https://github.com/luccati/db-api-template","last_synced_at":"2026-05-23T16:04:24.974Z","repository":{"id":356306817,"uuid":"1230875633","full_name":"LuccaTi/DB-API-Template","owner":"LuccaTi","description":"An API template designed for implementing CRUD operations on databases.","archived":false,"fork":false,"pushed_at":"2026-05-07T12:55:05.000Z","size":31,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-07T14:41:15.094Z","etag":null,"topics":["api-rest","asp-net-core","crud-api","csharp","entity-framework-core","logging","net-core","webapi"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/LuccaTi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-05-06T12:06:12.000Z","updated_at":"2026-05-07T12:55:10.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/LuccaTi/DB-API-Template","commit_stats":null,"previous_names":["luccati/db-api-template"],"tags_count":null,"template":true,"template_full_name":"LuccaTi/Web-API-Template","purl":"pkg:github/LuccaTi/DB-API-Template","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuccaTi%2FDB-API-Template","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuccaTi%2FDB-API-Template/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuccaTi%2FDB-API-Template/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuccaTi%2FDB-API-Template/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/LuccaTi","download_url":"https://codeload.github.com/LuccaTi/DB-API-Template/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/LuccaTi%2FDB-API-Template/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33402175,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-23T04:15:53.637Z","status":"ssl_error","status_checked_at":"2026-05-23T04:15:53.242Z","response_time":53,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api-rest","asp-net-core","crud-api","csharp","entity-framework-core","logging","net-core","webapi"],"created_at":"2026-05-23T16:04:16.173Z","updated_at":"2026-05-23T16:04:24.968Z","avatar_url":"https://github.com/LuccaTi.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# DB API Template .NET 8\n\n## Visão geral\n\nEste repositório contém um template de API REST orientada a banco de dados construída com ASP.NET Core (.NET 8). O projeto já vem estruturado com injeção de dependência, logging com Serilog, configuração via appsettings.json, persistência de dados utilizando Entity Framework Core e Swagger opcional para documentação e testes.\n\nO propósito é criar um \"esqueleto\" de APIs especializado em operações CRUD e acesso direto a banco de dados, servindo como padrão de implementação limpa e escalável.\n\nEndpoints de exemplo disponíveis (Entidade Product):\n\n- GET /api/v1/Products: Retorna uma lista de todos os produtos do banco de dados.\n- GET /api/v1/Products/{id}: Retorna um produto específico pelo seu ID.\n- POST /api/v1/Products: Insere um novo produto.\n- PUT /api/v1/Products/{id}: Atualiza um produto existente.\n- DELETE /api/v1/Products/{id}: Remove um produto pelo seu ID.\n\n## Tecnologias e bibliotecas essenciais\n\n- .NET 8 (ASP.NET Core)\n- Entity Framework Core: ORM responsável pela persistência e consultas no banco de dados.\n- Mapster: Biblioteca de alta performance para mapear objetos de domínio para DTOs (adotada no lugar do AutoMapper para maior escalabilidade comercial).\n- FluentValidation: Biblioteca para construção de regras de validação consistentes e fortemente tipadas para os DTOs.\n- Swashbuckle.AspNetCore (Swagger/OpenAPI)\n- Microsoft.Extensions.Configuration: Leitura de configurações.\n- Serilog: Escrita estruturada em arquivos e console de Log.\n\n## Estrutura do projeto\n\nO projeto divide suas responsabilidades da seguinte forma:\n\n- src/DBAPITemplate.Api:\n  - Responsabilidade: Camada de Apresentação e ponto de entrada (Program.cs, .exe). Centraliza a injeção de dependências e expõe os endpoints via Controllers. Usa os projetos Application e Infrastructure como referência.\n\n- src/DBAPITemplate.Application:\n  - Responsabilidade: Casos de uso da aplicação. Contém abstrações de serviços, validações fluentes (FluentValidation), métodos de extensão, Mappers (Mapster) e DTOs de transporte que fluem de e para a API. Usa o projeto Domain como referência.\n\n- src/DBAPITemplate.Domain:\n  - Responsabilidade: Entidades de núcleo (como Product), regras de negócio absolutas e exceções de uso geral (NotFoundException, ConflictException, etc).\n\n- src/DBAPITemplate.Infrastructure:\n  - Responsabilidade: Implementação dos contratos e persistência (AppDbContext, EF Core). Usa o projeto Application como referência.\n\n- tests/DBAPITemplate.Application.Tests:\n  - Responsabilidade: Garantir a integridade da lógica de negócios e casos de uso através de testes de unidade automatizados (utilizando xUnit).\n\n## Endpoints (Products)\n\n- GET /api/v1/Products\n  - Resposta 200: Lista de produtos\n- GET /api/v1/Products/{id}\n  - Resposta 200: Produto específico\n  - Resposta 404: Erro devidamente formatado se não encontrado\n- POST /api/v1/Products\n  - Corpo da Requisição: Dados do produto\n  - Resposta 201: Produto criado e rota no cabeçalho Location\n- PUT /api/v1/Products/{id}\n  - Corpo da Requisição: Dados atualizados do produto\n  - Resposta 204: No Content (Sucesso)\n- DELETE /api/v1/Products/{id}\n  - Resposta 204: No Content (Sucesso)\n\n## Configuração\n\n### appsettings.json\n\nConfigurações principais da aplicação e log:\n\n- Serilog: Configuração de níveis mínimo e saídas de log.\n- UseSwaggerProduction: (\"true\" | \"false\") habilita/desabilita o uso do swagger em produção.\n\n### appsettings.Production.json\n\nConfiguração específica para ambiente de produção:\n\n- Define o Kestrel para escutar HTTPS na porta 443 (padrão web).\n- Usado quando ASPNETCORE_ENVIRONMENT=Production.\n\n### Perfis de execução (local)\n\nDefinidos em src/DBAPITemplate.Api/Properties/launchSettings.json.\n\n## Uso da API\n\nA API pode ser usada via console ao compilar o código e rodar o .exe, ou diretamente no Visual Studio com F5.\n\n## 🗄️ Como alterar do Banco em Memória para o SQL Server:\n\nEste template vem configurado por padrão com o Entity Framework Core InMemory, visando facilitar testes rápidos e estudos sem a necessidade de infraestrutura pesada. Quando for evoluir a API para um projeto real que exige persistência de dados no disco, siga os passos abaixo para conectar a um banco SQL Server:\n\n1. Pré-Requisito: Ter um Servidor SQL rodando  \nPara que essa conexão funcione, é necessário ter uma instância do SQL Server instalada:  \n\n• SQL Server Developer / Express: O programa tradicional do SQL Server instalado na sua máquina (onde usa-se o SQL Server Management Studio).\n\n2. Instalação dos Pacotes (NuGet)  \nSerá preciso instalar pacotes específicos em dois projetos diferentes: \n\n• No projeto DBAPITemplate.Infrastructure instale o pacote Microsoft.EntityFrameworkCore.SqlServer. (Lembre-se de remover o pacote InMemory).  \n\n• No projeto DBAPITemplate.Api instale o pacote Microsoft.EntityFrameworkCore.Tools. (Esse pacote é quem permite que o console do Visual Studio entenda os comandos de Migrations).\n\n3. Configurar a Connection String (Appsettings)  \nA string de conexão define onde o banco está e qual usuário e senha devem ser usados. A melhor prática comercial é separar por ambiente:  \n\n• No appsettings.json (Base / Default):  \nPode deixar vazio ou apontar para um banco local genérico:\n\n```json\n\"ConnectionStrings\": {\n      \"DefaultConnection\": \"Server=(localdb)\\\\mssqllocaldb;Database=DB_Template;Trusted_Connection=True;MultipleActiveResultSets=true\"\n    }\n```  \n• No appsettings.Development.json (Ambiente de Desenvolvimento):  \nAqui geralmente fica o banco da própria máquina (LocalDB ou seu SQL Express). Os testes rodam mirando aqui.  \n\n• No appsettings.Production.json (Ambiente de Produção):  \nGeralmente não se coloca senhas cruas aqui por segurança! Em produção, a string vem através de variáveis de ambiente no Docker/Linux ou pelo Azure KeyVault.\n\n4. Atualizar o Program.cs  \n\nVá no projeto da API, abra o Program.cs e localize aonde o contexto está sendo registrado em memória. Mude isto:\n\n```csharp\nbuilder.Services.AddDbContext\u003cAppDbContext\u003e(options =\u003e\n    options.UseInMemoryDatabase(\"DB_Template_Local\"));\n```  \n\nPara isto:\n\n```csharp\nbuilder.Services.AddDbContext\u003cAppDbContext\u003e(options =\u003e\n    options.UseSqlServer(builder.Configuration.GetConnectionString(\"DefaultConnection\")));\n```\n5. Executar as Migrations  \nComo o SQL Server é um banco de dados relacional e fixo, não basta o código existir; o banco físico precisa ter as tabelas criadas exatamente como suas entidades do projeto Domain. É aí que entram as Migrations.  \n\nAs migrations são arquivos de código que funcionam como um sistema de controle de versão para o esquema do banco de dados, permitindo criar, atualizar e reverter tabelas e colunas de forma automatizada e sincronizada com o código da aplicação. Elas traduzem as classes C# para comandos SQL, garantindo que o banco de dados evolua junto com o seu software sem a necessidade de intervenção manual direta no banco.\n\nCada detalhe da classe C# é mapeado para uma estrutura correspondente no SQL:\n- A Classe: Vira a Tabela.\n- As Propriedades: Viram as Colunas.\n- O Tipo de Dado (int, string, bool): Vira o Tipo de Campo (INT, VARCHAR, BIT).\n- A Propriedade Id: Geralmente é traduzida automaticamente como a Primary Key (Chave Primária).\n\n### Como fazer:\nAbra o Package Manager Console (Console do Gerenciador de Pacotes) no Visual Studio:\n\n1. Certifique-se de que o Projeto de Inicialização lá em cima seja o DBAPITemplate.Api.\n\n2. Mude o escopo da janela do console (Default project) para DBAPITemplate.Infrastructure (pois é lá que o AppDbContext mora).\n\n3. Execute os comandos:  \n\nComando 1: Add-Migration InitialCreate  \n-  O que faz?  \nO Entity Framework lê o AppDbContext e suas entidades (ex: Product), vê quais tabelas faltam e escreve um arquivo C# (Translation) contendo as instruções SQL necessárias para gerá-las. Esse comando não toca no banco ainda. É o planejamento.  \n\nComando 2: Update-Database  \n- O que faz?  \nEle \"aperta o botão verde\". Ele pega todas as migrations que você gerou, conecta no seu SQL Server usando aquela ConnectionString que configuramos, cria o banco e cria as tabelas fisicamente.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluccati%2Fdb-api-template","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fluccati%2Fdb-api-template","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fluccati%2Fdb-api-template/lists"}