auth-system/
│
├── apps/
│ ├── api/ # Backend (Node + Express + MongoDB)
│ │ ├── src/
│ │ │ ├── app.ts
│ │ │ ├── routes/
│ │ │ │ └── index.ts
│ │ │ │
│ │ │ ├── config/
│ │ │ │ └── auth.ts # JWT config
│ │ │ │
│ │ │ ├── infra/
│ │ │ │ ├── server.ts # bootstrap
│ │ │ │ ├── db/
│ │ │ │ │ └── mongoose.ts
│ │ │ │ └── middleware/
│ │ │ │ └── auth.ts # JWT middleware
│ │ │ │
│ │ │ └── modules/
│ │ │ └── auth/
│ │ │ ├── controller.ts
│ │ │ ├── service.ts
│ │ │ ├── repository.ts
│ │ │ ├── model.ts
│ │ │ └── dto.ts
│ │ │
│ │ ├── .env
│ │ ├── package.json
│ │ └── tsconfig.json
│ │
│ └── web/ # Frontend (React + TypeScript)
│ ├── src/
│ │ ├── app/
│ │ │ ├── providers/
│ │ │ │ └── QueryProvider.tsx
│ │ │ │
│ │ │ └── routes/
│ │ │ ├── AppRouter.tsx
│ │ │ ├── Login.tsx
│ │ │ └── Welcome.tsx
│ │ │
│ │ ├── features/
│ │ │ └── auth/
│ │ │ ├── api/
│ │ │ │ └── login.ts
│ │ │ ├── hooks/
│ │ │ │ └── useLogin.ts
│ │ │ └── store/
│ │ │ └── authStore.ts
│ │ │
│ │ ├── main.tsx
│ │ └── vite.config.ts
│ │
│ ├── index.html
│ ├── package.json
│ └── tsconfig.json
│
├── packages/
│ └── shared/ # (prepared for future scale)
│ ├── types/
│ └── validation/
│
├── package.json # root workspace
├── pnpm-workspace.yaml
├── pnpm-lock.yaml
├── tsconfig.base.json
└── README.md
Controller → Service → Repository → Database:
Controller → Service → Repository → Database
| Camada | Função |
|---|---|
| Controller | HTTP (req/res) |
| Service | regra de negócio |
| Repository | acesso ao banco |
| Model | schema (Mongoose) |
| Middleware | autenticação (JWT) |
Feature-oriented architecture:
UI → Hooks → API → Backend
Responsibilities:
| Camada | Função |
|---|---|
| Routes | navigation |
| Hooks | state |
| API | HTTP communication |
| Store | global state(auth) |
[Register]
Frontend → POST /api/register → MongoDB
[Login]
Frontend → POST /api/login → JWT
[Auth]
Frontend → Authorization: Bearer <token> → /api/me
- Node.js
- Express
- MongoDB + Mongoose
- JWT (jsonwebtoken)
- bcrypt
- React + TypeScript
- Vite
- React Query
- Zustand
- pnpm (monorepo)
- TypeScript
- Root:
pnpm dev - Backend:
pnpm --filter api dev - Fronted:
pnpm --filter web dev