Aplicativo mobile para gerenciamento de hábitos, ajudando usuários a construir rotinas saudáveis e superar problemas modernos de estilo de vida.
Ultimate/
├── apps/
│ ├── mobile/ ← App Expo (React Native + TypeScript)
│ └── api/ ← Backend NestJS (TypeScript + Prisma)
├── docker-compose.yml ← PostgreSQL + API (dev)
├── .env.example
└── README.md
| Camada | Tecnologia |
|---|---|
| Plataforma | Expo ~55 (iOS + Android) |
| Linguagem | TypeScript 5.9 (strict) |
| Navegação | Expo Router (file-based) |
| UI | NativeWind 4 (TailwindCSS para RN) |
| Estado global | Zustand 5 |
| HTTP | Axios |
| Armazenamento seguro | expo-secure-store |
| Testes | Jest 30 + ts-jest |
| Camada | Tecnologia |
|---|---|
| Framework | NestJS 11 (Fastify adapter) |
| Linguagem | TypeScript 5.8 (strict) |
| ORM | Prisma 6 |
| Banco de dados | PostgreSQL 16 |
| Autenticação | JWT (access 15 min + refresh 30 dias) |
| Hash de senha | bcrypt (12 rounds) |
| Validação | class-validator + class-transformer |
git clone <repo-url>
cd Ultimate
# Instala dependências do mobile e da API
npm install --prefix apps/mobile
npm install --prefix apps/api# Raiz (Docker)
cp .env.example .env
# API
cp apps/api/.env.example apps/api/.env
# Mobile
cp apps/mobile/.env.example apps/mobile/.envEdite os arquivos .env conforme necessário. Variáveis principais:
| Variável | Descrição |
|---|---|
POSTGRES_PASSWORD |
Senha do banco PostgreSQL |
JWT_ACCESS_SECRET |
Secret do token de acesso JWT |
JWT_REFRESH_SECRET |
Secret do token de refresh JWT |
EXPO_PUBLIC_API_URL |
URL da API consumida pelo mobile |
# Sobe PostgreSQL + API com hot reload
docker-compose up -d
# Primeira vez: rode as migrations
docker-compose exec api npx prisma migrate dev --name initcd apps/mobile
npm startEscaneie o QR Code com o Expo Go ou pressione a (Android) / i (iOS).
npm run mobile # Inicia o dev server do Expo
npm run api # Inicia a API com hot reload
npm run db # Sobe apenas o PostgreSQL
npm run docker:up # Sobe todos os serviços Docker
npm run docker:down # Para todos os serviços Docker
npm run docker:logs # Acompanha os logs dos containersnpm start # Dev server Expo
npm run android # Abre no emulador Android
npm run ios # Abre no simulador iOS
npm test # Executa os testes (Jest)
npm run test:watch # Testes em modo watch
npm run typecheck # Verificação de tipos (tsc --noEmit)npm run start:dev # Dev com hot reload
npm run build # Build de produção
npm run migrate # prisma migrate dev
npm run migrate:prod # prisma migrate deploy
npm run generate # prisma generate
npm run studio # Abre o Prisma StudioO app mobile segue Clean Architecture + DDD:
Presentation → Application → Domain ← (interfaces apenas)
↑ ↑
Infrastructure ──────────────────────────→ (implementa interfaces do Domain)
src/
├── domain/ ← Entidades, repositórios (interfaces), erros — puro TS
├── application/ ← Use cases + DTOs
├── infrastructure/ ← HttpClient, repositórios concretos, TokenStorage
└── presentation/ ← Stores Zustand, hooks, componentes React Native
| Alias | Resolve para |
|---|---|
@domain/* |
src/domain/* |
@application/* |
src/application/* |
@infrastructure/* |
src/infrastructure/* |
@presentation/* |
src/presentation/* |
@shared/* |
src/shared/* |
Todos os endpoints protegidos requerem header Authorization: Bearer <token>.
| Endpoint | Método | Auth | Descrição |
|---|---|---|---|
/auth/register |
POST | — | Cria conta → retorna tokens |
/auth/login |
POST | — | Autentica → retorna tokens |
/habits |
GET | JWT | Lista hábitos do usuário |
/habits |
POST | JWT | Cria um novo hábito |
/habits/:id |
GET | JWT | Busca hábito por ID |
/habits/:id |
PUT | JWT | Atualiza hábito |
/habits/:id |
DELETE | JWT | Remove hábito |
/habits/:id/entries |
GET | JWT | Histórico (?from=&to=) |
/habits/:id/entries |
POST | JWT | Registra conclusão |
Schema gerenciado pelo Prisma. Modelos principais:
- User — conta do usuário (nome, e-mail, senha hasheada)
- Habit — hábito com frequência, tipo, cor, emoji e lembretes
- HabitEntry — registro de conclusão de um hábito em uma data
# Visualizar e editar dados via GUI
cd apps/api && npm run studio# Build da imagem de produção
# O CMD executa migrate deploy automaticamente antes de iniciar
docker build --target production -t ultimate-api ./apps/api
docker run -p 3000:3000 \
-e DATABASE_URL=<url> \
-e JWT_ACCESS_SECRET=<secret> \
-e JWT_REFRESH_SECRET=<secret> \
ultimate-apiOs testes cobrem as camadas Domain e Application:
cd apps/mobile
npm test # Todos os testes
npm run test:watch # Modo interativo- Domain: sem mocks (regras puras de negócio)
- Application: repositórios mockados com
jest.fn() - Arquivos
.spec.tsficam na mesma pasta do arquivo testado
Projeto privado — todos os direitos reservados.