Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/evans-costa/backend-servicequotes

Backend do sistema de gerenciamento de orçamento de serviços.
https://github.com/evans-costa/backend-servicequotes

asp-net-core aws-s3 azure dotnet entity-framework-core rest-api sql-server

Last synced: 19 days ago
JSON representation

Backend do sistema de gerenciamento de orçamento de serviços.

Awesome Lists containing this project

README

        






API Service Quotes



Projeto Service Quote API desenvolvido com ASP.NET Core, utilizando serviços da AWS S3 e hospedagem e banco de dados da Azure

[![Build and deploy Azure Web App](https://github.com/evans-costa/backend-servicequotes/actions/workflows/deploy.yml/badge.svg)](https://github.com/evans-costa/backend-servicequotes/actions/workflows/deploy.yml)

![.Net](https://img.shields.io/badge/.NET-5C2D91?style=for-the-badge&logo=.net&logoColor=white)
![MicrosoftSQLServer](https://img.shields.io/badge/Microsoft%20SQL%20Server-CC2927?style=for-the-badge&logo=microsoft%20sql%20server&logoColor=white)
![AWS](https://img.shields.io/badge/AWS-%23FF9900.svg?style=for-the-badge&logo=amazon-aws&logoColor=white)
![Azure](https://img.shields.io/badge/azure-%230072C6.svg?style=for-the-badge&logo=microsoftazure&logoColor=white)


Introdução
Funcionalidades
Motivação
Instalação
Configuração
Estrutura do Projeto
TODO / Melhorias
Licença

## Introdução

Essa é uma API desenvolvida para o projeto Service Quote, usando .NET 8.0 com ASP.NET Core e Entity Framework Core, que permite criar e gerenciar clientes, produtos e cotações de serviços, emitindo arquivos em PDF para envio do orçamento consolidado ao cliente. A aplicação segue os princípios da Clean Architecture para facilitar melhor manutenção e possível escalabilidade do sistema, além de garantir a correta separação de responsabilidades.

O projeto está em produção usando os serviços da Azure, porém com acesso restrito devido ao free tier não ser tão generoso, pretendo disponibilizá-lo para maior acesso, mas enquanto isso você pode conferir uma demo hospedada no YouTube aqui.

## Funcionalidades

- Criar cotações (orçamentos) de serviços
- Criar produtos e obter produtos cadastrados
- Criar clientes e obter clientes cadastrados
- Paginação de resultados de clientes e produtos
- Geração de PDF com o orçamento consolidado (um template do documento gerado pode ser visto aqui)
- Integração com o serviço S3 da Amazon para armazenar os documentos gerados

## Motivação

Meu grande objetivo com esse projeto foi criar algo que "tocasse" o mundo real e que resolvesse um problema que via diariamente, nesse caso, foi o gerenciamento de orçamentos para serviços de eletricista de um familiar, como ele fazia tudo manualmente, em papel, e por vezes a cotação de materiais utilizados, o contato do cliente e o valor do orçamento se perdia, desenvolvi esse sistema para ajudá-lo a organizar o seu trabalho. Além disso, serviu para aprender uma linguagem nova e conceitos e paradigmas que essa linguagem trás, como POO, SOLID e Clean Architecture.

## Instalação

- Para instalar o projeto, você precisará ter o [.NET 8.0](https://dotnet.microsoft.com/pt-br/download) instalado na sua máquina. Opcionalmente você pode instalar o [Docker](https://www.docker.com/get-started/) com [Docker Compose](https://docs.docker.com/compose/install/) para rodar o serviço de banco de dados localmente. Da sua linha de comando:

```sh
# Clone este repositório
$ git clone https://github.com/evans-costa/backend-servicequotes.git

# Entre na pasta do repositório clonado
$ cd backend-servicequotes
```

- Restaure as dependências do projeto
```sh
# Restaure as depedências
$ dotnet restore
```

## Configuração

- Configure as variáveis de ambiente necessárias no arquivo `appsettings.Development.json` ou `secrets.json`:

```appsettings.Development.json
// appsettings.Development.json
{
"ConnectionStrings": {
"DefaultConnection": "Server=localhost,1433;Database=;User Id=sa;Password=;TrustServerCertificate=True;"
},
"AWS": {
"BucketName": "",
"ProfileName": "",
"AccessKey": "",
"SecretKey": "",
"Region": ""
}
}
```

```sh
// secrets.json
dotnet user-secrets init

dotnet user-secrets set "ConnectionsStrings:DefaultConnection" "Server=localhost,1433;Database=;User Id=sa;Password=;TrustServerCertificate=True;"

dotnet user-secrets set "AWS:BucketName" ""
dotnet user-secrets set "AWS:ProfileName" ""
dotnet user-secrets set "AWS:AccessKey" ""
dotnet user-secrets set "AWS:SecretKey" ""
dotnet user-secrets set "AWS:Region" ""
```
> **📌 Nota:**
> Caso não tenha um usuário cadastrado na AWS para correta configuração dos perfis e resolução do usuário da AWS, por favor, siga a documentação do SDK para .NET [nesse link](https://docs.aws.amazon.com/sdk-for-net/v3/developer-guide/welcome.html).

- Se você está usando o Docker, rode o seguinte comando, não esquecendo de usar a mesma senha definida nas variáveis de ambiente no arquivo `docker-compose.yml`:

```sh
# Suba o container do SQL Server
$ docker compose up -d
```
> **📌 Nota:**
> Se você não estiver usando o Docker, precisará instalar e configurar o SQL Server Management disponível [nesse link](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16).

- Rode as migrações para criar o banco de dados e suas tabelas:

```sh
# Rode as migrações
$ dotnet ef database update
```

- Você agora está pronto para rodar o projeto, aperte F5 no teclado, caso esteja usando o Visual Studio 2022, ou use o comando:

```sh
# Rode o projeto
$ dotnet watch run --launch-profile https --project src\ServiceQuotes.API\
```

Isso irá abrir a interface do Swagger no seu navegador, onde você poderá consultar e testar os endpoints da aplicação, bem como ver os DTO's usados e os exemplos de requisição e resposta. Como alternativa, você pode testar usando seu cliente API REST favorito como o [Insomnia](https://insomnia.rest/download) ou [Postman](https://www.postman.com/).

## Estrutura do projeto

### Diagrama UML
![uml-diagram](https://github.com/user-attachments/assets/db1fda11-f831-42b6-8ed9-16db808e503f)

### Diagrama Banco de Dados
![db-diagram](https://github.com/user-attachments/assets/530ce4ee-f06e-4532-bf33-aa7b7386e85f)

## TODO / Melhorias

### Funcionalidades

- [ ] Criar endpoints para atualização e deleção de clientes, produtos e cotações
- [ ] Fazer autenticação do usuário

### Melhorias técnicas

- [ ] Escrever testes para a aplicação (em andamento)
- [ ] Script para rodar as migrações
- [ ] Seed do banco de dados para propósitos de desenvolvimento

### Infraestrutura

- [ ] Configurar CI/CD para rodar os testes

## Licença

The MIT License (MIT) 2024 - Evandro Costa. Por favor, dê uma olhada no arquivo LICENSE para mais detalhes.