Skip to content

rodrigobsjava/mao-solidaria-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Mão Solidária

Sistema web para gestão de ações sociais, desenvolvido para auxiliar igrejas e organizações comunitárias no cadastro de famílias atendidas e no controle de entregas de doações e serviços sociais.

O projeto foi desenvolvido como uma aplicação full stack, utilizando Java com Spring Boot no backend e React com Vite no frontend.


Visão Geral

O Mão Solidária tem como objetivo registrar famílias atendidas por ações sociais e controlar entregas realizadas pela instituição.

A aplicação permite:

  • Realizar login no sistema
  • Cadastrar famílias atendidas
  • Listar famílias cadastradas
  • Editar dados de famílias
  • Visualizar detalhes de uma família
  • Registrar entregas para famílias
  • Registrar múltiplos itens em uma mesma entrega
  • Visualizar histórico de entregas
  • Acompanhar indicadores no dashboard

Arquitetura Geral do Projeto

A estrutura geral do projeto está organizada da seguinte forma:

mao-solidaria-system
│
├── backend
│   └── mao-solidaria-api
│
└── frontend
    └── mao-solidaria-web

Backend

O backend foi desenvolvido com Java 21 e Spring Boot, seguindo uma arquitetura em camadas.

Tecnologias Utilizadas

  • Java 21
  • Spring Boot
  • Spring Web
  • Spring Data JPA
  • PostgreSQL
  • Lombok
  • Bean Validation
  • OpenAPI / Swagger
  • Maven

Estrutura do Backend

mao-solidaria-api
│
├── config
│   └── CorsConfig
│
├── controller
│   ├── AuthController
│   ├── DashboardController
│   ├── EntregaController
│   └── FamiliaController
│
├── dto
│   ├── auth
│   │   ├── LoginRequestDTO
│   │   └── LoginResponseDTO
│   │
│   ├── common
│   │   └── ErrorResponseDTO
│   │
│   ├── dashboard
│   │   └── DashboardResponseDTO
│   │
│   ├── delivery
│   │   ├── EntregaRequestDTO
│   │   ├── EntregaResponseDTO
│   │   ├── ItemEntregaRequestDTO
│   │   └── ItemEntregaResponseDTO
│   │
│   └── family
│       ├── FamiliaRequestDTO
│       ├── FamiliaResponseDTO
│       └── FamiliaResumoDTO
│
├── entity
│   ├── BaseEntity
│   ├── Usuario
│   ├── Familia
│   ├── Entrega
│   ├── ItemEntrega
│   └── TipoItemEntrega
│
├── exception
│   ├── AuthenticationException
│   ├── GlobalExceptionHandler
│   └── ResourceNotFoundException
│
├── repository
│   ├── UsuarioRepository
│   ├── FamiliaRepository
│   └── EntregaRepository
│
├── service
│   ├── AuthService
│   ├── DashboardService
│   ├── EntregaService
│   └── FamiliaService
│
└── MaoSolidariaApiApplication

Camadas do Backend

Controller

Responsável por expor os endpoints REST da aplicação.

Exemplos:

  • AuthController
  • FamiliaController
  • EntregaController
  • DashboardController

Essa camada recebe as requisições HTTP, valida os dados de entrada e delega as regras de negócio para os services.


Service

Responsável pelas regras de negócio da aplicação.

Exemplos:

  • AuthService
  • FamiliaService
  • EntregaService
  • DashboardService

Nessa camada ficam operações como:

  • autenticação simples
  • cadastro de famílias
  • atualização de famílias
  • exclusão com validação de regra de negócio
  • registro de entregas
  • montagem dos dados do dashboard

Repository

Responsável pelo acesso ao banco de dados usando Spring Data JPA.

Exemplos:

  • UsuarioRepository
  • FamiliaRepository
  • EntregaRepository

DTO

Os DTOs são utilizados para separar os dados da API das entidades JPA.

Isso evita expor diretamente as entidades do banco para o frontend e melhora a organização do projeto.


Entity

As entidades representam as tabelas do banco de dados.

Principais entidades:

  • Usuario
  • Familia
  • Entrega
  • ItemEntrega

Modelagem do Domínio

A modelagem principal do sistema segue esta estrutura:

Familia
    │
    └── Entrega
            │
            ├── ItemEntrega
            ├── ItemEntrega
            └── ItemEntrega

Essa modelagem permite que uma mesma entrega possua vários itens ou serviços associados.

Exemplo:

Família: Maria Silva

Entrega:
Data: 01/06/2026
Observação: Ação social mensal

Itens entregues:
- 1 Cesta Básica
- 3 Roupas
- 1 Corte de Cabelo

Essa abordagem evita criar várias entregas separadas para uma mesma ação social realizada no mesmo momento.


Entidades

Usuario

Representa o usuário que acessa o sistema.

Campos principais:

id
nome
email
senha
criadoEm
atualizadoEm

Familia

Representa uma família atendida.

Campos principais:

id
nomeResponsavel
telefone
endereco
quantidadeMoradores
criadoEm
atualizadoEm

Relacionamento:

Familia 1:N Entrega

Entrega

Representa uma ação de entrega realizada para uma família.

Campos principais:

id
familia
dataEntrega
observacao
itens
criadoEm
atualizadoEm

Relacionamentos:

Entrega N:1 Familia
Entrega 1:N ItemEntrega

ItemEntrega

Representa cada item ou serviço entregue dentro de uma entrega.

Campos principais:

id
tipo
quantidade
entrega

TipoItemEntrega

Enum com os tipos possíveis de itens entregues:

CESTA_BASICA
ROUPA
CALCADO
KIT_ESCOLAR
BRINQUEDO
CORTE_CABELO
ATENDIMENTO_MEDICO
OUTRO

Endpoints da API

Autenticação

POST /auth/login

Exemplo de requisição:

{
  "email": "admin@igreja.com",
  "senha": "123456"
}

Exemplo de resposta:

{
  "token": "mock-token",
  "nome": "Administrador"
}

Dashboard

GET /dashboard

Exemplo de resposta:

{
  "totalFamilias": 3,
  "totalEntregas": 5
}

Famílias

GET /families
GET /families/{id}
POST /families
PUT /families/{id}
DELETE /families/{id}

Exemplo de cadastro:

{
  "nomeResponsavel": "Maria Silva",
  "telefone": "(92) 99999-9999",
  "endereco": "Rua das Flores, 123",
  "quantidadeMoradores": 4
}

Entregas

GET /deliveries
POST /deliveries

Exemplo de cadastro de entrega:

{
  "familiaId": 1,
  "dataEntrega": "2026-06-01",
  "observacao": "Entrega mensal",
  "itens": [
    {
      "tipo": "CESTA_BASICA",
      "quantidade": 1
    },
    {
      "tipo": "ROUPA",
      "quantidade": 3
    },
    {
      "tipo": "CORTE_CABELO",
      "quantidade": 1
    }
  ]
}

Tratamento de Erros

O backend possui tratamento global de exceções com GlobalExceptionHandler.

Exemplo de erro de validação:

{
  "timestamp": "2026-06-01T17:19:53",
  "status": 400,
  "error": "Bad Request",
  "message": "Nome do responsável obrigatório"
}

Exemplo de recurso não encontrado:

{
  "timestamp": "2026-06-01T17:19:53",
  "status": 404,
  "error": "Not Found",
  "message": "Família não encontrada"
}

Frontend

O frontend foi desenvolvido com React, Vite e Bulma CSS.

Tecnologias Utilizadas

  • React
  • Vite
  • JavaScript
  • React Router DOM
  • Axios
  • Bulma CSS
  • React Icons
  • CSS customizado

Estrutura do Frontend

mao-solidaria-web
│
├── src
│   ├── assets
│   │
│   ├── components
│   │   ├── common
│   │   │   ├── AlertMessage
│   │   │   ├── LoadingMessage
│   │   │   ├── Navbar
│   │   │   ├── PageLoading
│   │   │   ├── Sidebar
│   │   │   └── TableSkeleton
│   │   │
│   │   ├── dashboard
│   │   ├── delivery
│   │   └── family
│   │
│   ├── hooks
│   │
│   ├── layouts
│   │   └── MainLayout
│   │
│   ├── pages
│   │   ├── LoginPage
│   │   ├── DashboardPage
│   │   ├── FamilyListPage
│   │   ├── FamilyFormPage
│   │   ├── FamilyDetailsPage
│   │   └── DeliveryPage
│   │
│   ├── routes
│   │   ├── AppRoutes
│   │   └── PrivateRoute
│   │
│   ├── services
│   │   ├── api
│   │   ├── authService
│   │   ├── dashboardService
│   │   ├── deliveryService
│   │   └── familyService
│   │
│   ├── styles
│   │   └── global.css
│   │
│   ├── utils
│   │   └── errorUtils
│   │
│   ├── App.jsx
│   └── main.jsx

Páginas do Frontend

LoginPage

Tela de login do sistema.

Funcionalidades:

  • Envio de email e senha para o backend
  • Armazenamento do token no localStorage
  • Redirecionamento para o dashboard após login
  • Exibição de mensagens de erro

DashboardPage

Tela principal do sistema.

Exibe:

  • Total de famílias
  • Total de entregas
  • Últimas entregas registradas

FamilyListPage

Tela de listagem de famílias.

Funcionalidades:

  • Listar famílias cadastradas
  • Buscar família pelo nome do responsável
  • Acessar detalhes
  • Editar cadastro
  • Excluir família

FamilyFormPage

Tela utilizada para cadastro e edição de famílias.

Funcionalidades:

  • Cadastro de nova família
  • Edição de família existente
  • Validação de campos obrigatórios
  • Integração com API

FamilyDetailsPage

Tela de detalhes da família.

Exibe:

  • Responsável
  • Telefone
  • Endereço
  • Quantidade de moradores
  • Ações rápidas

DeliveryPage

Tela de registro e histórico de entregas.

Funcionalidades:

  • Selecionar família
  • Informar data da entrega
  • Adicionar observação
  • Adicionar múltiplos itens entregues
  • Remover itens antes de salvar
  • Registrar entrega
  • Exibir histórico de entregas

Serviços do Frontend

A comunicação com o backend é feita por meio do Axios.

api.js

Configura a URL base da API:

const api = axios.create({
  baseURL: "http://localhost:8080"
});

authService.js

Responsável pelo login.


dashboardService.js

Responsável por buscar os dados do dashboard.


familyService.js

Responsável pelas operações de famílias.


deliveryService.js

Responsável pelas operações de entregas.


Rotas do Frontend

/login
/dashboard
/families
/families/new
/families/edit/:id
/families/:id
/deliveries

As rotas internas são protegidas por PrivateRoute, que verifica se existe token salvo no localStorage.


Fluxo Principal do Sistema

Login
  ↓
Dashboard
  ↓
Famílias
  ↓
Cadastro de Família
  ↓
Registro de Entrega
  ↓
Histórico de Entregas

Regras de Negócio Implementadas

Cadastro de Família

Uma família deve possuir:

  • nome do responsável
  • quantidade de moradores maior ou igual a 1

Exclusão de Família

Uma família que possui entregas registradas não deve ser excluída.

Essa regra preserva o histórico social da instituição.


Registro de Entrega

Uma entrega deve possuir:

  • família vinculada
  • data da entrega
  • pelo menos um item entregue

Itens da Entrega

Cada item entregue deve possuir:

  • tipo
  • quantidade maior ou igual a 1

Como Executar o Projeto

Pré-requisitos

  • Java 21
  • Maven
  • PostgreSQL
  • Node.js
  • npm

Executar Backend

Acesse a pasta do backend:

cd backend/mao-solidaria-api

Execute:

./mvnw spring-boot:run

A API estará disponível em:

http://localhost:8080

Swagger:

http://localhost:8080/swagger-ui/index.html

Executar Frontend

Acesse a pasta do frontend:

cd frontend/mao-solidaria-web

Instale as dependências:

npm install

Execute:

npm run dev

O frontend estará disponível em:

http://localhost:5173

Banco de Dados

O projeto utiliza PostgreSQL.

Exemplo de usuário inicial para teste:

INSERT INTO usuarios
(
    nome,
    email,
    senha
)
VALUES
(
    'Administrador',
    'admin@igreja.com',
    '123456'
);

Status do Projeto

Funcionalidades concluídas:

  • Login
  • Rotas protegidas
  • Dashboard
  • Cadastro de famílias
  • Listagem de famílias
  • Edição de famílias
  • Detalhes da família
  • Exclusão de famílias com regra de negócio
  • Registro de entregas
  • Registro de múltiplos itens por entrega
  • Histórico de entregas
  • Tratamento global de erros
  • Responsividade
  • Integração frontend/backend

Melhorias Futuras

Possíveis evoluções do projeto:

  • Cadastro e gerenciamento de usuários
  • Perfis de acesso
  • Autenticação com JWT
  • Criptografia de senhas
  • Recuperação de senha
  • Relatórios por período
  • Filtro de entregas por família
  • Histórico de entregas dentro da tela de detalhes da família
  • Exportação de dados em PDF
  • Deploy em ambiente cloud
  • Dockerização do projeto
  • Testes automatizados no backend
  • Testes automatizados no frontend

Autor

Desenvolvido por Rodrigo Barbosa Sousa.

Projeto acadêmico desenvolvido com foco em boas práticas de desenvolvimento full stack, arquitetura em camadas, API REST, integração frontend/backend e modelagem de domínio.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors