Ferramenta de cálculos online com interface web e API REST — construída com Laravel 13 e MySQL.
O Calculator Tools é uma ferramenta de cálculos online que oferece dois modos de uso: uma interface web via Blade para uso direto no navegador e endpoints REST em JSON para integração com outros sistemas — sem necessidade de autenticação em ambos os casos.
O projeto foi desenvolvido como portfólio para demonstrar conhecimentos em arquitetura MVC com Laravel, separação de responsabilidades com Services, reutilização de lógica entre controllers e registro de métricas no banco de dados.
| Calculadora | Descrição |
|---|---|
| Porcentagem | Calcula quanto um valor representa em porcentagem de outro |
| Regra de Três Simples | Resolve proporções do tipo C → B / A → X |
| Resto da Divisão | Retorna o resto de uma divisão com suporte a decimais |
| Calculadora | Fórmula |
|---|---|
| Círculo | π × r² |
| Quadrado | lado² |
| Retângulo | base × altura |
| Triângulo | (base × altura) / 2 |
| Calculadora | Descrição |
|---|---|
| Dias entre Datas | Conta o total de dias entre duas datas |
- PHP 8.5 + Laravel 13
- MySQL — armazena contagem de cálculos realizados
- Blade — template engine nativa do Laravel
- CSS puro — sem frameworks externos
- Eloquent ORM — mapeamento objeto-relacional
app/
├── Http/
│ └── Controllers/
│ ├── CalculadoraController.php # Controller web (Blade)
│ └── Api/
│ └── CalculadoraApiController.php # Controller API (JSON)
├── Models/
│ └── Calculo.php # Model para registro de métricas
└── Services/
└── CalculadoraService.php # Lógica e regras de validação
database/
└── migrations/
└── create_calculos_table.php # Tabela com enum de tipos
resources/views/
├── layouts/
│ └── app.blade.php # Layout base
├── calculadoras/
│ ├── _errors.blade.php # Partial de erros reutilizável
│ ├── porcentagem.blade.php
│ ├── regra_tres_simples.blade.php
│ ├── resto_da_divisao.blade.php
│ ├── area_circulo.blade.php
│ ├── area_quadrado.blade.php
│ ├── area_retangulo.blade.php
│ ├── area_triangulo.blade.php
│ └── dias_entre_datas.blade.php
└── home.blade.php
routes/
├── web.php # Rotas da interface Blade
└── api.php # Rotas da API REST
Fluxo de uma requisição web:
GET /calculadoras/{tipo} → CalculadoraController → Blade renderiza view
POST /calculadoras/{tipo} → CalculadoraController → CalculadoraService → Registra no banco → Retorna resultado
Fluxo de uma requisição API:
POST /api/calculadoras/{tipo} → CalculadoraApiController → CalculadoraService → Retorna JSON
calculos
├── id
├── tipo (enum: porcentagem, regra_tres_simples, resto_da_divisao,
│ area_circulo, area_quadrado, area_retangulo,
│ area_triangulo, dias_entre_datas)
└── timestamps
A tabela calculos registra cada operação realizada — permitindo análise de quais calculadoras são mais usadas e em quais dias.
A lógica dos cálculos e as regras de validação vivem no Service, permitindo que tanto o controller web (Blade) quanto o controller da API (JSON) a reutilizem sem duplicação de código. Isso segue o princípio DRY (Don't Repeat Yourself).
A ferramenta é pública — qualquer pessoa pode calcular sem criar conta, assim como calculadoras online convencionais. Autenticação adicionaria complexidade desnecessária para esse caso de uso.
O objetivo não é exibir histórico por usuário, mas registrar métricas de uso — quais calculadoras são mais acessadas e em quais dias. Isso permite análise de comportamento sem expor dados de usuários.
Para 8 operações simples, a legibilidade do switch supera a complexidade de criar uma classe por calculadora. Em um projeto maior, o padrão Strategy seria mais adequado — cada operação teria sua própria classe com uma interface comum.
Em vez de repetir o bloco de erros em todas as views, ele foi extraído para um partial reutilizável — uma mudança no estilo dos erros afeta todas as calculadoras de uma vez.
- PHP 8.3+
- Composer
- MySQL
# 1. Clone o repositório
git clone https://github.com/felipekauan1/calculator-tools-api.git
cd calculator-tools-api
# 2. Instale as dependências
composer install
# 3. Configure o ambiente
cp .env.example .env
php artisan key:generate
# 4. Configure o banco de dados no .env
DB_DATABASE=calculator_tools_api
DB_USERNAME=root
DB_PASSWORD=sua_senha
# 5. Crie o banco e rode as migrations
php artisan migratephp artisan serveAcesse http://localhost:8000/calculadoras no navegador.
| Método | URL | Descrição |
|---|---|---|
GET |
/calculadoras |
Lista todas as calculadoras |
GET |
/calculadoras/{tipo} |
Exibe o formulário de uma calculadora |
POST |
/calculadoras/{tipo} |
Processa o cálculo e retorna o resultado |
Base URL: http://localhost:8000/api
A API é pública e não requer autenticação. Todas as respostas são em JSON.
GET /api/calculadoras
Resposta (200):
{
"sucesso": true,
"tipos": [
"porcentagem",
"regra_tres_simples",
"resto_da_divisao",
"area_circulo",
"area_quadrado",
"area_retangulo",
"area_triangulo",
"dias_entre_datas"
]
}POST /api/calculadoras/{tipo}
Content-Type: application/json
Parâmetros por tipo:
porcentagem
{ "porcentagem": 5, "valor": 200 }regra_tres_simples
{ "a": 10, "b": 50, "c": 3 }resto_da_divisao
{ "dividendo": 17, "divisor": 5 }area_circulo
{ "raio": 7 }area_quadrado
{ "lado": 5 }area_retangulo
{ "base": 8, "altura": 5 }area_triangulo
{ "base": 6, "altura": 4 }dias_entre_datas
{ "data_inicio": "2024-01-01", "data_fim": "2024-12-31" }Resposta de sucesso (200):
{
"sucesso": true,
"dados": {
"porcentagem": "5",
"valor": "200"
},
"resultado": 10
}Erro de validação (422):
{
"message": "The porcentagem field is required.",
"errors": {
"porcentagem": ["The porcentagem field is required."]
}
}Tipo inválido (404):
{
"message": "Not Found"
}- Histórico de cálculos por sessão do usuário
- Dashboard de métricas com gráfico de uso por calculadora
- Novas calculadoras: IMC, juros compostos, conversão de unidades
- Testes automatizados com PHPUnit
- Padrão Strategy para organizar as operações em classes separadas
Desenvolvido por @felipekauan1
Este projeto está sob a licença MIT.

