尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证hlima-dev/ConectFome
翻译准备中
取自仓库 README
正在加载完整 README。 以下为已保存的摘录。
Plataforma de doação e resgate de alimentos que conecta doadores (mercados, restaurantes, feiras) a receptores (ONGs e famílias em situação de vulnerabilidade), redistribuindo alimentos que seriam descartados. Projeto de faculdade baseado nos Objetivos de Desenvolvimento Sustentável da ONU.查看完整 README ↗
Plataforma de doação e resgate de alimentos que conecta doadores (mercados, restaurantes, feiras) a receptores (ONGs e famílias em situação de vulnerabilidade), redistribuindo alimentos que seriam descartados. Projeto de faculdade baseado nos Objetivos de Desenvolvimento Sustentável da ONU.
Todos os dias, mercados, restaurantes e feiras descartam alimentos em condições de consumo — só não vendáveis pelo padrão estético ou pelo prazo comercial, não pela segurança alimentar. Do outro lado, ONGs e famílias em vulnerabilidade enfrentam insegurança alimentar diária. O ConectFome existe para fechar essa distância: cadastro de doadores e receptores, agendamento de coleta com rotas e voluntários, e um relatório de quanto alimento foi efetivamente resgatado por mês.
ENTREGUE é comida que
chegou a quem precisava, em vez de ser descartada. O ciclo de status
da doação (abaixo) existe justamente para que essa entrega seja um
evento registrado e mensurável, não uma promessa./relatorios) é o indicador direto desse impacto, e o estado
VENCIDA existe para tornar visível, e não esconder, o que ainda se
perde antes da coleta.Monorepo com backend e frontend separados, mesma fundação de auth/ estrutura do projeto ATHLO (Node/Express/Prisma) e o mesmo raciocínio de modelagem de logística do PRODUCTION ERP (veículo/motorista/romaneio → aqui veículo/voluntário/rota de coleta), reimplementados em Prisma — não código copiado, já que os stacks de origem são diferentes.
conectfome/
├── backend/ # Node + Express + TypeScript + Prisma + PostgreSQL
│ ├── prisma/
│ │ ├── schema.prisma # 8 modelos, 6 enums
│ │ └── seed.ts # dados de exemplo (idempotente)
│ ├── src/
│ │ ├── config/ # env (Zod) e cliente Prisma
│ │ ├── controllers/ # validação (Zod) + chamada ao service
│ │ ├── services/ # regra de negócio
│ │ ├── middlewares/ # auth, CSRF, rate limit, erro
│ │ ├── routes/ # mapeamento REST
│ │ └── utils/ # AppError, JWT, cookies, paginação
│ └── tests/ # Vitest — services e middlewares
└── frontend/ # React + Vite + TypeScript + Tailwind
└── src/
├── components/ # DataTable, Modal, ConfirmDialog, StatusBadge
├── layouts/ # AppLayout (nav por papel)
├── routes/ # PrivateRoute, RoleRoute
├── services/ # chamadas à API (axios)
├── hooks/ # TanStack Query
├── pages/ # telas, organizadas por módulo
└── types/ # tipos e labels de cada domínio
Três papéis: ADMIN (nasce só via seed, nunca por cadastro público), DOADOR e RECEPTOR. Login em cookies httpOnly (access + refresh), proteção CSRF por dupla submissão, bloqueio de conta após 5 tentativas de senha erradas em 15 minutos, e mensagens de erro genéricas no login pra não vazar quais e-mails existem.
O cadastro público (/cadastro) cria o User e, na mesma transação, o
perfil Donor ou Recipient vinculado, conforme o papel escolhido.
DISPONÍVEL → RESERVADA → AGENDADA → COLETADA → ENTREGUE
│ │
└── CANCELADA ┘
└── VENCIDA ───┘
Cada estado é uma ação distinta e rastreável (quem fez, quando), em vez de um único campo "concluído" — é isso que permite ao relatório separar "resgatado" de "entregue" de "perdido".
| Módulo | O que faz | Quem acessa |
|---|---|---|
| Doadores / Receptores | Cadastro, edição e desativação (soft delete) | ADMIN (CRUD completo); o próprio dono vê/edita seu cadastro |
| Doações | Criar, casar com receptor, cancelar, marcar vencida, confirmar recebimento | DOADOR (as próprias), RECEPTOR (as suas), ADMIN (todas) |
| Voluntários / Veículos | Cadastro simples, com edição | ADMIN |
| Rotas de coleta | Criar, anexar/desanexar doação, iniciar, concluir, cancelar | ADMIN |
| Relatórios | Kg resgatado por mês, por doador, por receptor, resumo de KPIs | ADMIN |
Pré-requisitos: Node 20+, PostgreSQL 16+.
git clone https://github.com/hlima-dev/ConectFome.git
cd ConectFome
# banco de dados
sudo -u postgres psql -c "CREATE ROLE conectfome LOGIN PASSWORD 'conectfome';"
sudo -u postgres psql -c "CREATE DATABASE conectfome_db OWNER conectfome;"
# backend
cd backend
cp .env.example .env # ajuste DATABASE_URL/JWT_SECRET se preciso
npm install
npx prisma migrate dev
npm run db:seed
npm run dev # http://localhost:3333
# frontend (em outro terminal)
cd ../frontend
cp .env.example .env
npm install
npm run dev # http://localhost:5173
Senha de todas as contas: Conect@123
| Papel | Perfil | |
|---|---|---|
| ADMIN | [email protected] | — |
| DOADOR | [email protected] | Mercado Bom Preço |
| DOADOR | [email protected] | Restaurante Sabor Caseiro |
| RECEPTOR | [email protected] | ONG Mesa Solidária |
| RECEPTOR | [email protected] | Lar da Vovó Joana (família) |
O seed também cria 2 voluntários, 2 veículos e doações de exemplo em
DISPONÍVEL, RESERVADA, VENCIDA e uma já ENTREGUE no mês
anterior (pra o gráfico de relatório mostrar mais de um mês).
cd backend && npm run test # 81 testes — services e middlewares
cd frontend && npm run test # testes de componente (Login/Register)
Escopo deliberado: testes unitários com Prisma mockado (vi.mock),
sem integração com banco real — a mesma escolha do projeto ATHLO. A
consulta SQL crua do relatório mensal (ReportService.monthlyKg) foi
validada manualmente contra PostgreSQL real durante o desenvolvimento;
o teste unitário cobre o mapeamento da resposta, não a query em si.
VENCIDA é uma ação manual
(do doador ou do admin), não um job agendado. Evita a complexidade
operacional de um scheduler pra uma decisão que, na prática, alguém
vai querer confirmar de qualquer forma.Driver do projeto de referência (PRODUCTION ERP); no mundo real,
esse público tende a operar por telefone/WhatsApp, não por painel web.Fundação de autenticação, estrutura de camadas e padrão de testes adaptados do projeto ATHLO. Raciocínio de modelagem de logística (veículo/motorista/romaneio) adaptado do PRODUCTION ERP — em ambos os casos, o padrão foi reimplementado em Prisma/Express, não copiado (os projetos de origem usam Java/Spring).