Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

74 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🛠️ Zelo

Projeto desenvolvido para a disciplina de Engenharia de Software II, uma aplicação web mobile-first que conecta clientes a profissionais de serviços locais (elétrica, hidráulica, pintura, marcenaria, jardinagem, entre outros).

📜 Descrição

O Zelo resolve um problema cotidiano: encontrar um profissional confiável para serviços domésticos costuma depender de indicação ou de listagens genéricas, sem forma clara de avaliar em quem confiar. O app centraliza esse processo, permitindo que o cliente navegue por categorias de serviço, veja o perfil de profissionais e inicie uma contratação em poucos passos.

O fluxo cobre a jornada completa de contratação:

  1. O cliente busca um profissional por tipo de serviço
  2. Abre uma solicitação de contratação (hire) e negocia por propostas (valor + rodada) até chegar a um acordo
  3. A proposta é aceita e o serviço é confirmado
  4. O pagamento é processado
  5. Cliente e profissional trocam mensagens em um chat vinculado à contratação

O backend expõe uma API REST responsável por usuários, profissionais (workers), tipos de serviço, contratações, propostas, mensagens, pagamentos e fotos, persistindo tudo em PostgreSQL via Drizzle ORM. O frontend consome essa API para oferecer uma experiência mobile-first com autenticação, busca de profissionais, chat e histórico de contratações.

O backend segue os princípios de Clean Architecture, com regra de dependência estrita: o domínio não depende de nada externo, a camada de aplicação (use cases) depende apenas do domínio, a infraestrutura implementa as interfaces do domínio e a apresentação (controllers HTTP) depende apenas dos use cases.

⚙️ Tecnologias Utilizadas

Back-end

  • Node.js + TypeScript
  • Fastify 5 — Servidor HTTP
  • Drizzle ORM — Acesso ao PostgreSQL (schema, migrations e queries tipadas)
  • PostgreSQL 18
  • JSON Web Tokens (access token + refresh token) — Autenticação
  • bcrypt — Hash de senhas
  • Zod — Validação de entrada
  • tsyringe — Injeção de dependências
  • Vitest — Testes unitários e de integração
  • Biome — Lint e formatação

Front-end

  • React 19 + Vite 8
  • React Router 7
  • Axios — Consumo da API
  • react-hot-toast — Notificações

Infraestrutura

  • Docker Compose — Orquestração do banco PostgreSQL e do back-end

🚀 Como Executar

Pré-requisitos

  • Node.js 20+ e Yarn
  • Docker e Docker Compose

1. Configure as variáveis de ambiente

Crie um arquivo .env na raiz do projeto com:

POSTGRES_USER=user
POSTGRES_PASSWORD=password
POSTGRES_DB=zelo
POSTGRES_HOST=localhost
POSTGRES_PORT=5432
HTTP_PORT=8000
NODE_ENV=development
MAX_SESSIONS=3
JWT_SECRET=uma-chave-secreta
FRONTEND_DOMAIN=http://localhost:5173

2. Suba o banco de dados e o back-end

docker compose up -d

A API sobe em http://localhost:8000.

Alternativamente, para desenvolver localmente sem Docker: cd back-end && yarn install && yarn dev (com o PostgreSQL já rodando e o .env configurado).

3. Execute o front-end

cd front-end
npm install
npm run dev

A aplicação fica disponível em http://localhost:5173.

4. Rodando os testes

cd back-end
yarn test

🏙️ Funcionalidades

  • 🔐 Autenticação Cadastro e login com JWT (access + refresh token) e renovação automática de sessão

  • 🧰 Profissionais e Tipos de Serviço Cadastro de profissionais (workers), associação a tipos de serviço e busca por categoria

  • 🤝 Contratação e Propostas Abertura de uma contratação (hire) e negociação por rodadas de propostas até o aceite

  • 💬 Chat Troca de mensagens entre cliente e profissional vinculada a cada contratação

  • 💳 Pagamentos Processamento de pagamento vinculado à contratação, com controle de status

  • 🖼️ Upload de Fotos Upload de foto de perfil do usuário e de fotos de portfólio do profissional

  • 📜 Histórico Listagem de contratações e de contratações anteriores por usuário

📄 Endpoints Principais

Recurso Rota base Descrição
Auth POST /sign-in, POST /sign-up, POST /renew-token Login, cadastro e renovação de token
Usuários PATCH /user, POST /user/photo Atualização de dados e foto de perfil
Profissionais /worker Cadastro de worker e associação de tipos de serviço
Fotos do Profissional /worker/photo Upload, listagem e remoção de fotos
Tipos de Serviço /service-type Criação e busca de categorias de serviço
Contratações /hire Criação, listagem e atualização de status
Propostas /proposal Envio, listagem e aceite de propostas por contratação
Mensagens /message Envio e listagem de mensagens do chat de uma contratação
Pagamentos /payment Processamento e consulta de pagamento

📁 Estrutura do Projeto

zelo/
│
├── back-end/                          # API REST (Fastify + TypeScript)
│   ├── src/
│   │   ├── domain/                    # Entidades, interfaces de repositório, erros de domínio
│   │   ├── app/use-cases/             # Regras de negócio (um caso de uso por ação)
│   │   ├── infra/                     # Conexão com o banco, schema Drizzle, repositórios e providers
│   │   ├── presentation/http/         # Controllers Fastify e middlewares
│   │   └── common/                    # Configuração de ambiente (env)
│   ├── tst/
│   │   ├── unit/                      # Testes unitários (entidades e use cases)
│   │   ├── integration/               # Testes de integração (ex.: ciclo de vida da contratação)
│   │   └── mocks/                     # Repositórios e providers em memória para testes
│   └── drizzle/                       # Migrations do banco de dados
│
├── front-end/                         # Aplicação web (React + Vite)
│   └── src/
│       ├── pages/                     # Telas: auth, home, workers, hire, profile
│       ├── api/                       # Client HTTP (Axios)
│       ├── context/                   # Contexto de autenticação e sessão
│       └── components/                # Componentes de UI compartilhados
│
├── docs/                              # Documentação do projeto (proposta, requisitos, diagramas, design)
│
└── docker-compose.yml                 # Orquestração do banco de dados e do back-end

About

Projeto desenvolvido durante a disciplina de Engenharia de software 2 no curso de Ciências da Computação - UEL

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages