{"id":31542079,"url":"https://github.com/01rian/backend-consorcio","last_synced_at":"2025-10-04T11:30:11.185Z","repository":{"id":316482333,"uuid":"1055145117","full_name":"01Rian/backend-consorcio","owner":"01Rian","description":"API de Gerenciamento de Consórcios","archived":false,"fork":false,"pushed_at":"2025-09-24T20:34:55.000Z","size":112,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"dev","last_synced_at":"2025-09-24T22:29:00.912Z","etag":null,"topics":["backend","csharp","docker-compose","entity-framework","sql-server"],"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/01Rian.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":"2025-09-11T20:48:25.000Z","updated_at":"2025-09-24T20:34:59.000Z","dependencies_parsed_at":"2025-09-24T22:29:05.354Z","dependency_job_id":null,"html_url":"https://github.com/01Rian/backend-consorcio","commit_stats":null,"previous_names":["01rian/backend-consorcio"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/01Rian/backend-consorcio","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/01Rian%2Fbackend-consorcio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/01Rian%2Fbackend-consorcio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/01Rian%2Fbackend-consorcio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/01Rian%2Fbackend-consorcio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/01Rian","download_url":"https://codeload.github.com/01Rian/backend-consorcio/tar.gz/refs/heads/dev","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/01Rian%2Fbackend-consorcio/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":278305387,"owners_count":25965172,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-04T02:00:05.491Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"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":["backend","csharp","docker-compose","entity-framework","sql-server"],"created_at":"2025-10-04T11:30:05.990Z","updated_at":"2025-10-04T11:30:11.163Z","avatar_url":"https://github.com/01Rian.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"# API de Gerenciamento de Consórcios\n\nEsta é uma API construída com ASP.NET Core para gerenciar consórcios, cotas e usuários, seguindo princípios de arquitetura limpa e boas práticas de desenvolvimento.\n\n## Índice\n\n- [Visão Geral da Arquitetura](#-visão-geral-da-arquitetura)\n- [Tecnologias Utilizadas](#-tecnologias-utilizadas)\n- [Como Executar o Projeto](#-como-executar-o-projeto)\n  - [Pré-requisitos](#pré-requisitos)\n  - [Opção 1: Executando com Docker (Recomendado)](#opção-1-executando-com-docker-recomendado)\n  - [Opção 2: Executando Localmente](#opção-2-executando-localmente)\n- [Executando os Testes](#-executando-os-testes)\n- [Documentação da API](#-documentação-da-api)\n  - [Exemplos de Uso](#exemplos-de-uso)\n  - [Endpoints](#endpoints)\n\n---\n\n## 🏛️ Visão Geral da Arquitetura\n\nO projeto utiliza uma **Arquitetura em Camadas**, refletida na estrutura de pastas, para garantir a separação de responsabilidades, manutenibilidade e testabilidade do código.\n\n```\n└── Src/\n    ├── Controllers/      # Camada de Apresentação (API Endpoints)\n    │   ├── Consorcio/\n    │   ├── Cotas/\n    │   └── Usuario/\n    ├── Data/             # Camada de Acesso a Dados\n    │   ├── Context/\n    │   ├── Migrations/\n    │   └── Repositories/\n    ├── Models/           # Entidades do Domínio\n    │   └── Entities/\n    └── Services/         # Camada de Lógica de Negócio\n        ├── Implementations/\n        └── Interfaces/\n```\n\n-   **Controllers**: Responsáveis por receber as requisições HTTP, validar os DTOs e retornar as respostas.\n-   **Services**: Contêm a lógica de negócio da aplicação, orquestrando as operações e interagindo com os repositórios.\n-   **Repositories**: Abstraem o acesso ao banco de dados, centralizando as operações de persistência.\n-   **Models/Entities**: Representam as estruturas de dados e tabelas do banco de dados.\n\n---\n\n## ✨ Tecnologias Utilizadas\n\n-   **Framework**: [.NET 8](https://dotnet.microsoft.com/download/dotnet/8.0)\n-   **Web API**: ASP.NET Core 8\n-   **ORM**: Entity Framework Core 8\n-   **Banco de Dados**: SQL Server\n-   **Autenticação**: JWT (JSON Web Tokens)\n-   **Documentação**: Swagger\n-   **Testes**: xUnit, Moq, Bogus\n-   **Containerização**: Docker\n-   **Variáveis de Ambiente**: DotNetEnv\n\n---\n\n## 🚀 Como Executar o Projeto\n\n### Pré-requisitos\n\n-   [.NET 8 SDK](https://dotnet.microsoft.com/download/dotnet/8.0)\n-   [Docker](https://www.docker.com/products/docker-desktop/) (para a Opção 1)\n-   Um cliente de API, como [Postman](https://www.postman.com/) ou a extensão [REST Client](https://marketplace.visualstudio.com/items?itemName=humao.rest-client) do VS Code.\n\n### Opção 1: Executando com Docker (Recomendado)\n\nEsta abordagem utiliza o Docker para executar o banco de dados SQL Server, simplificando a configuração do ambiente.\n\n1.  **Clone o repositório:**\n    ```bash\n    git clone \u003cURL\u003e\n    cd rian-p01-back\n    ```\n\n2.  **Crie o arquivo de ambiente:**\n    Copie o arquivo de exemplo `.env.example` para um novo arquivo chamado `.env`.\n    ```bash\n    # No Windows (Command Prompt)\n    copy .env.example .env\n\n    # No Linux ou Windows (PowerShell/Git Bash)\n    cp .env.example .env\n    ```\n    *Certifique-se de que a variável `DB_SERVER` no arquivo `.env` está como `localhost` e revise a senha `DB_PASSWORD` se necessário.*\n\n3.  **Inicie o container do banco de dados:**\n    Execute o comando abaixo para iniciar o container do SQL Server em segundo plano.\n    ```bash\n    docker-compose up -d\n    ```\n\n4.  **Restaure as dependências e aplique as migrations:**\n    ```bash\n    dotnet restore\n    dotnet ef database update\n    ```\n\n5.  **Execute a aplicação:**\n    ```bash\n    dotnet run\n    ```\n    A API estará disponível em `https://localhost:7103` ou `http://localhost:5297`.\n\n### Opção 2: Executando Localmente\n\nEsta abordagem requer uma instância do SQL Server rodando em sua máquina local.\n\n1.  **Clone o repositório** (se ainda não o fez).\n\n2.  **Configure o Banco de Dados:**\n    - Abra o arquivo `appsettings.Development.json`.\n    - Altere a string de conexão `DefaultConnection` para apontar para a sua instância local do SQL Server.\n\n3.  **Aplique as Migrations:**\n    ```bash\n    dotnet ef database update\n    ```\n\n4.  **Restaure as dependências e execute:**\n    ```bash\n    dotnet restore\n    dotnet run\n    ```\n\n---\n\n## ✅ Executando os Testes\n\nPara executar a suíte de testes unitários do projeto, utilize o seguinte comando na raiz do repositório:\n\n```bash\ndotnet test\n```\n\n---\n\n## 📖 Documentação da API\n\nA documentação completa dos endpoints está disponível via Swagger quando a aplicação está em execução, no endpoint `/swagger`.\n\n### Exemplos de Uso\n\nA seguir, alguns exemplos de requisições baseados nos arquivos `.http` do projeto.\n\n#### Criar um novo usuário\n\n**`POST /api/Usuario`**\n\n**Request Body:**\n```json\n{\n  \"nome\": \"Carlos Pereira\",\n  \"email\": \"carlos.pereira@exemplo.com\",\n  \"senha\": \"senhaSegura789\",\n  \"cpf\": \"321.654.987-00\",\n  \"telefone\": \"(31) 5678-1234\",\n  \"celular\": \"(31) 98765-4321\",\n  \"dataNascimento\": \"1988-08-20\",\n  \"endereco\": {\n    \"logradouro\": \"Rua das Palmeiras, 123\",\n    \"numero\": \"123\",\n    \"complemento\": \"Apto 202\",\n    \"bairro\": \"Centro\",\n    \"cidade\": \"Belo Horizonte\",\n    \"estado\": \"MG\",\n    \"cep\": \"30110-050\"\n  },\n  \"ativo\": true\n}\n```\n\n#### Autenticar um usuário\n\n**`POST /api/Usuario/login`**\n\n**Request Body:**\n```json\n{\n  \"email\": \"carlos.pereira@exemplo.com\",\n  \"senha\": \"senhaSegura789\"\n}\n```\n\n#### Criar um novo consórcio\n\n**`POST /api/Consorcio`** (Requer autenticação)\n\n**Request Body:**\n```json\n{\n  \"nome\": \"Consórcio Imóvel Premium\",\n  \"codigo\": \"IMP2024\",\n  \"valorBem\": 250000.00,\n  \"quantidadeCotas\": 1,\n  \"prazoMeses\": 60,\n  \"taxaAdministracao\": 15.00,\n  \"fundoReserva\": 2500.00,\n  \"dataInicio\": \"2025-01-01T00:00:00\"\n}\n```\n\n### Endpoints\n\nA seguir estão os endpoints disponíveis na API. A maioria das rotas requer autenticação via token JWT Bearer.\n\n---\n\n#### 🏛️ **ConsorcioController** (`api/Consorcio`)\n\n| Método HTTP | Rota | Descrição |\n| :--- | :--- | :--- |\n| `POST` | `/` | Cria um novo consórcio. |\n| `GET` | `/` | Obtém todos os consórcios (ativos e inativos). |\n| `GET` | `/{id}` | Obtém um consórcio pelo ID. |\n| `GET` | `/{id}/with-cotas` | Obtém um consórcio com suas cotas. |\n| `GET` | `/active` | Obtém todos os consórcios ativos. |\n| `GET` | `/{id}/available-cotas` | Obtém as cotas disponíveis de um consórcio. |\n| `POST` | `/{id}/cotas` | Adiciona novas cotas a um consórcio. |\n| `POST` | `/assign-cota` | Atribui uma cota a um usuário. |\n| `PUT` | `/{id}` | Atualiza um consórcio existente. |\n| `DELETE` | `/{id}` | Deleta um consórcio. |\n\n---\n\n#### 📑 **CotasController** (`api/Cotas`)\n\n| Método HTTP | Rota | Descrição |\n| :--- | :--- | :--- |\n| `GET` | `/{id}` | Obtém uma cota pelo ID. |\n| `GET` | `/{id}/detailed` | Obtém os detalhes de uma cota. |\n| `GET` | `/by-consorcio/{consorcioId}` | Obtém todas as cotas de um consórcio específico. |\n| `GET` | `/by-user/{usuarioId}` | Obtém todas as cotas de um usuário específico. |\n| `GET` | `/active` | Obtém todas as cotas ativas. |\n| `GET` | `/contemplated` | Obtém todas as cotas contempladas. |\n| `POST` | `/{id}/contemplate` | Marca uma cota como contemplada. |\n| `POST` | `/{id}/register-payment` | Registra um pagamento para uma cota. |\n| `PUT` | `/{id}/update-status` | Atualiza o status de uma cota (ativa, suspensa, etc.). |\n| `DELETE` | `/{id}/remove-user` | Remove o usuário associado a uma cota. |\n\n---\n\n#### 👤 **UsuarioController** (`api/Usuario`)\n\n| Método HTTP | Rota | Descrição | Autenticação |\n| :--- | :--- | :--- | :--- |\n| `POST` | `/` | Cria um novo usuário. | Não requer |\n| `POST` | `/login` | Autentica um usuário e retorna um token. | Não requer |\n| `GET` | `/` | Obtém todos os usuários. | Requer |\n| `GET` | `/{id}` | Obtém um usuário pelo ID. | Requer |\n| `GET` | `/email/{email}` | Obtém um usuário pelo e-mail. | Requer |\n| `GET` | `/cpf/{cpf}` | Obtém um usuário pelo CPF. | Requer |\n| `PUT` | `/{id}` | Atualiza um usuário existente. | Requer |\n| `DELETE` | `/{id}` | Deleta um usuário. | Requer |","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F01rian%2Fbackend-consorcio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2F01rian%2Fbackend-consorcio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2F01rian%2Fbackend-consorcio/lists"}