Skip to content

Latest commit

History

8 Commits

Folders and files

NameName
Last commit message
Last commit date

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 /familiesGET /families/{id}POST /familiesPUT /families/{id}DELETE /families/{id}

Exemplo de cadastro:

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

Entregas

GET /deliveriesPOST /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:

constapi=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

Packages

Contributors

Languages