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

https://github.com/alysonsz/finance-api

Problem Situation: Difficulty in managing personal finances without a clear and simple view of income and expenses. This project provides a robust REST API, built with .NET and Clean Architecture, for tracking categorized financial transactions, enabling better financial control and insights.
https://github.com/alysonsz/finance-api

api blazor blazor-application blazor-client blazor-server blazor-webassembly csharp csharp-code database entityframework finance finance-application sqlserver webapi webapi-core webapiclient

Last synced: 3 months ago
JSON representation

Problem Situation: Difficulty in managing personal finances without a clear and simple view of income and expenses. This project provides a robust REST API, built with .NET and Clean Architecture, for tracking categorized financial transactions, enabling better financial control and insights.

Awesome Lists containing this project

README

          

# Finance API

### πŸ“Œ DescriΓ§Γ£o

A **Finance API** Γ© uma aplicaΓ§Γ£o completa para controle de transaΓ§Γ΅es financeiras, desenvolvida com .NET 8 e Blazor WebAssembly, estruturada com Clean Architecture para promover organizaΓ§Γ£o, reutilizaΓ§Γ£o e clareza entre suas camadas de domΓ­nio, aplicaΓ§Γ£o, infraestrutura, API e interface web.

---

### πŸš€ Funcionalidades

- Cadastro e gerenciamento de categorias
- Registro de receitas e despesas
- AutenticaΓ§Γ£o via JWT
- Interface web com Blazor integrada
- DocumentaΓ§Γ£o automΓ‘tica via Swagger
- Testes automatizados

---

### πŸ› οΈ Tecnologias

- Backend: .NETβ€―8, ASP.NET Core, Entity Framework Core
- Frontend: Blazor WebAssembly
- Arquitetura: Clean Architecture (Domain, Application, Infrastructure, API, Web)
- Banco de dados: SQL Server LocalDB (via EF Core Migrations)
- Ferramentas: AutoMapper, Swagger/OpenAPI
- Testes: XUnit

---

### πŸ“ Estrutura de DiretΓ³rios do Projeto

```
Finance/
β”œβ”€β”€ Finance.sln
β”‚
β”œβ”€β”€ Finance.Api/ # Camada de apresentaΓ§Γ£o (API)
β”‚ β”œβ”€β”€ Controllers/
β”‚ β”‚ β”œβ”€β”€ AuthController.cs
β”‚ β”‚ β”œβ”€β”€ CategoriesController.cs
β”‚ β”‚ └── TransactionController.cs
β”‚ β”œβ”€β”€ Properties/
β”‚ β”‚ β”œβ”€β”€ launchSettings.json
β”‚ β”‚ └── serviceDependencies.json
β”‚ β”œβ”€β”€ Extensions/
β”‚ β”‚ β”œβ”€β”€ ActionResultExtension.cs
β”‚ β”‚ └── BuilderExtension.cs
β”‚ β”œβ”€β”€ ApiConfiguration.cs
β”‚ β”œβ”€β”€ appsettings.json
β”‚ β”œβ”€β”€ Program.cs
β”‚ └── Finance.API.csproj
β”‚
β”œβ”€β”€ Finance.Application/ # Camada de aplicaΓ§Γ£o (handlers e claim do JWT)
β”‚ β”œβ”€β”€ Extensions/
β”‚ β”‚ └── ClaimsPrincipalExtension.cs
β”‚ β”œβ”€β”€ Handlers/
β”‚ β”‚ β”œβ”€β”€ CategoryHandler.cs
β”‚ β”‚ β”œβ”€β”€ TransactionHandler.cs
β”‚ β”‚ └── UserHandler.cs
β”‚ └── Finance.Application.csproj
β”‚
β”œβ”€β”€ Finance.Contracts/ # Camada de compartilhamento (interfaces, requests, responses)
β”‚ β”œβ”€β”€ Requests/
β”‚ β”‚ β”œβ”€β”€ Auth/
β”‚ β”‚ β”‚ β”œβ”€β”€ LoginRequest.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ RegisterRequest.cs
β”‚ β”‚ β”œβ”€β”€ └── UpdateUserProfileRequest.cs
β”‚ β”‚ β”œβ”€β”€ Categories/
β”‚ β”‚ β”‚ β”œβ”€β”€ CreateCategoryRequest.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ DeleteCategoryRequest.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ GetAllCategoriesRequest.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ GetCategoryByIdRequest.cs
β”‚ β”‚ β”œβ”€β”€ └── UpdateCategoryRequest.cs
β”‚ β”‚ β”œβ”€β”€ Transacations/
β”‚ β”‚ β”‚ β”œβ”€β”€ CreateTransactionRequest.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ DeleteTransactionRequest.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ GetTransactionByIdRequest.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ GetTransactionReportRequest.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ GetTransactionByPeriodRequest.cs
β”‚ β”‚ β”œβ”€β”€ └── UpdateTransactionRequest.cs
β”‚ β”‚ β”œβ”€β”€ PagedRequest.cs
β”‚ β”‚ └── Request.cs
β”‚ β”œβ”€β”€ Responses/
β”‚ β”‚ β”œβ”€β”€ Auth/
β”‚ β”‚ β”œβ”€β”€ └── UserProfileResponse.cs
β”‚ β”‚ β”œβ”€β”€ Categories/
β”‚ β”‚ β”œβ”€β”€ └── CategorySummaryResponse.cs
β”‚ β”‚ β”œβ”€β”€ Transacations/
β”‚ β”‚ β”œβ”€β”€ └── TransactionReportResponse.cs
β”‚ β”‚ β”œβ”€β”€ PagedResponse.cs
β”‚ β”‚ └── Response.cs
β”‚ β”œβ”€β”€ Interfaces/
β”‚ β”‚ β”œβ”€β”€ Handlers/
β”‚ β”‚ β”‚ β”œβ”€β”€ IAppPreferencesHandler.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ ICategoryHandler.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ ITransactionHandler.cs
β”‚ β”‚ β”œβ”€β”€ └── IUserHandler.cs
β”‚ β”‚ β”œβ”€β”€ Repositories/
β”‚ β”‚ β”‚ β”œβ”€β”€ ICategoryRepository.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ ITransactionRepository.cs
β”‚ β”œβ”€β”€ └── └── IUserRepository.cs
β”‚ └── Finance.Contracts.csproj
β”‚
β”œβ”€β”€ Finance.Domain/ # Camada de domΓ­nio (entidades e contratos)
β”‚ β”œβ”€β”€ Common/
β”‚ β”‚ └── DateTimeExtension.cs
β”‚ β”œβ”€β”€ Enums/
β”‚ β”‚ └── ETransactionType.cs
β”‚ β”œβ”€β”€ Models/
β”‚ β”‚ β”‚ β”œβ”€β”€ DTOs/
β”‚ β”‚ β”‚ β”‚ β”œβ”€β”€ CategoryDto.cs
β”‚ β”‚ β”‚ └── └── TransactionDto.cs
β”‚ β”‚ β”œβ”€β”€ Category.cs
β”‚ β”‚ β”œβ”€β”€ Transaction.cs
β”‚ β”‚ └── User.cs
β”‚ └── Finance.Domain.csproj
β”‚
β”œβ”€β”€ Finance.Infrastructure/ # Camada de infraestrutura (banco de dados e repositΓ³rios)
β”‚ β”œβ”€β”€ Data/
β”‚ β”‚ β”œβ”€β”€ Mappings/
β”‚ β”‚ β”‚ β”œβ”€β”€ CategoryMapping.cs
β”‚ β”‚ β”‚ β”œβ”€β”€ TransactionMapping.cs
β”‚ β”‚ └── └── UserMapping.cs
β”‚ └── FinanceDbContext.cs
β”‚ β”œβ”€β”€ Migrations/
β”‚ β”‚ β”œβ”€β”€ InitialCreate.cs
β”‚ β”‚ └── FinanceDbContextModelSnapshot.cs
β”‚ β”œβ”€β”€ Repositories/
β”‚ β”‚ β”œβ”€β”€ CategoryRepository.cs
β”‚ β”‚ β”œβ”€β”€ TransactionRepository.cs
β”‚ β”‚ └── UserRepository.cs
β”‚ └── Finance.Infrastructure.csproj
β”‚
β”œβ”€β”€ Finance.Web/ # Camada Web (Frontend Blazor Pages)
β”‚ β”œβ”€β”€ Authentication/
β”‚ β”‚ └── CustomAuthenticationStateProvider.cs
β”‚ β”œβ”€β”€ Handlers/
β”‚ β”‚ β”œβ”€β”€ AppPreferencesHandler.cs
β”‚ β”‚ β”œβ”€β”€ AppThemeHandler.cs
β”‚ β”‚ β”œβ”€β”€ AuthHandler.cs
β”‚ β”‚ β”œβ”€β”€ AuthMessageHandler.cs
β”‚ β”‚ β”œβ”€β”€ CategoryHandler.cs
β”‚ β”‚ └── TransactionHandler.cs
β”‚ β”œβ”€β”€ Layout/
β”‚ β”‚ β”œβ”€β”€ LoginLayout.razor
β”‚ β”‚ └── MainLayout.razor
β”‚ β”œβ”€β”€ Pages/
β”‚ β”‚ β”œβ”€β”€ Categories/
β”‚ β”‚ β”‚ β”œβ”€β”€ CreateCategory.razor
β”‚ β”‚ β”‚ β”œβ”€β”€ EditCategory.razor
β”‚ β”‚ β”‚ └── GetAllCategories.razor
β”‚ β”‚ β”‚ └── GetAllCategories.razor.cs
β”‚ β”‚ β”œβ”€β”€ Transactions/
β”‚ β”‚ β”‚ β”œβ”€β”€ CreateTransaction.razor
β”‚ β”‚ β”‚ β”œβ”€β”€ EditTransaction.razor
β”‚ β”‚ β”‚ └── GetAllTransactions.razor
β”‚ β”‚ β”‚ └── GetAllTransactions.razor.cs
β”‚ β”‚ β”œβ”€β”€ About.razor
β”‚ β”‚ β”œβ”€β”€ Home.razor
β”‚ β”‚ β”œβ”€β”€ Login.razor
β”‚ β”‚ β”œβ”€β”€ RedirectToLogin.razor
β”‚ β”‚ β”œβ”€β”€ Register.razor
β”‚ β”‚ β”œβ”€β”€ Reports.razor
β”‚ β”‚ └── Settings.razor
β”‚ β”œβ”€β”€ Shared/
β”‚ β”‚ β”œβ”€β”€ CategoryForm.razor
β”‚ β”‚ └── TransactionForm.razor
β”‚ β”œβ”€β”€ wwwroot/
β”‚ β”‚ └── css/
β”‚ β”‚ └── app.css
β”‚ β”œβ”€β”€ WebConfiguration.cs
β”‚ β”œβ”€β”€ Program.cs
β”‚ β”œβ”€β”€ App.razor
β”‚ β”œβ”€β”€ _Imports.razor
└── └── Finance.Web.csproj
```

---

### βœ… Como executar o projeto

#### 1. Clone o repositΓ³rio

```bash
git clone https://github.com/alysonsz/Finance-API.git
cd Finance-API
```

#### 2. Restaure os pacotes

```bash
dotnet restore
```

#### 3. Crie o banco de dados

```bash
dotnet ef database update --project Finance.Infrastructure --startup-project Finance.Api
```

#### 4. Execute a API + Front-end juntos

**Escolha conforme seu sistema operacional:**

- πŸͺŸ **Windows**
Execute o arquivo `start.bat` (clique duas vezes ou rode no terminal):

```bash
start.bat
```

- 🐧 **Linux / macOS / WSL**
DΓͺ permissΓ£o e execute o script:

```bash
chmod +x start.sh
./start.sh
```

> Isso iniciarΓ‘ automaticamente a API e o front-end Blazor WebAssembly.

---

### πŸ”— Endpoints ΓΊteis

- API: [https://localhost:7279/swagger](https://localhost:7279/swagger)
- Frontend (Blazor): aberto automaticamente ao executar o projeto

---

### πŸ‘¨β€πŸ’» Autor

- Alyson Souza Carregosa β€’ Back-end Developer

---

### πŸ“ LicenΓ§a

Este projeto estΓ‘ disponΓ­vel sob a licenΓ§a MIT.