refactor: migrate backend to pnpm monorepo with Hono module architecture

- Replace Bun with pnpm 9 + Turborepo + tsx; apps/api renamed to apps/backend
- Split backend into http/, modules/, lib/ layers mirroring tai-specguard
- Add use-case + Result pattern, Problem Details RFC 7807, basePath /api/v1
- Mount Better Auth at /api/v1/auth, keep session-auth whitelist
- Split Prisma schema into prisma/models/*, generate into generated/
- Rework packages/shared into lib/ + schemas/ with pagination DTOs
- Implement health, groups, students, payments, waitlist modules
- Add vitest suite with prisma mocks (21 tests), biome lint
- Point web client to /api/v1/auth and /api/v1/groups/from-organization
This commit is contained in:
Jose Selesan
2026-09-14 09:18:40 -03:00
parent b41fffa40a
commit 4b1f356fab
101 changed files with 7152 additions and 1456 deletions

View File

@@ -7,11 +7,12 @@ Este documento define la arquitectura, convenciones y especificaciones del stack
## 1. Stack Tecnológico Principal
### Runtime & Monorepo Manager
* **Runtime / Package Manager:** [Bun](https://bun.sh/) (última versión estable)
* **Monorepo Tooling:** Bun Workspaces (opcionalmente orquestado con Turborepo)
* **Runtime:** Node.js (>=20)
* **Package Manager:** [pnpm](https://pnpm.io/) 9
* **Monorepo Tooling:** pnpm workspaces + Turborepo
### Backend (`apps/api`)
* **Framework:** [Hono](https://hono.dev/) (para Bun)
### Backend (`apps/backend`)
* **Framework:** [Hono](https://hono.dev/) (servido con `@hono/node-server`, ejecutado con `tsx`)
* **ORM:** [Prisma](https://www.prisma.io/)
* **Base de Datos:** PostgreSQL
* **Autenticación:** [Better Auth](https://www.better-auth.com/)
@@ -36,21 +37,24 @@ Este documento define la arquitectura, convenciones y especificaciones del stack
```text
gruperly/
├── apps/
│ ├── api/ # Servicio Backend (Bun + Hono)
│ ├── backend/ # Servicio Backend (Node + Hono + tsx)
│ │ ├── src/
│ │ │ ├── db/ # Cliente e inicialización de Prisma
│ │ │ ├── lib/ # Instancia de Better Auth y helpers
│ │ │ ├── routes/ # Endpoints modularizados de Hono
│ │ │ │ ├── auth.ts
│ │ │ │ ├── groups.ts
│ │ │ │ ├── students.ts
│ │ │ │ ├── payments.ts
│ │ │ │ └── waitlist.ts
│ │ │ └── index.ts # Entry point de la API
│ │ │ ├── http/ # Infraestructura HTTP (validate, problem-details, session-auth, ...)
│ │ │ ├── lib/ # Prisma (cliente + UnitOfWork), pagination, email, helpers
│ │ │ ├── modules/ # Módulos: health-check, auth, groups, students, payments, waitlist
│ │ │ │ └── <módulo>/
│ │ │ │ ├── routes.ts
│ │ │ │ └── features/<accion>/{route,use-case}.ts
│ │ │ ├── app.ts # Monta basePath('/api/v1') + rutas + notFound/onError (RFC 7807)
│ │ │ ├── server.ts # Entry point (serve de @hono/node-server)
│ │ │ └── logger.ts # pino + pino-pretty
│ │ ├── prisma/
│ │ │ ├── schema.prisma # Definición del modelo de datos
│ │ │ └── generated/ # Cliente generado de Prisma (gitignoreado)
│ │ ├── prisma.config.ts # Config de Prisma CLI (datasource URL, migrations)
│ │ │ ├── schema.prisma # Generator + datasource simple
│ │ │ ├── models/ # Modelos multi-archivo (auth.prisma, domain.prisma)
│ │ │ └── migrations/
│ │ ├── generated/ # Cliente generado de Prisma (gitignoreado, alias @generated/*)
│ │ ├── prisma.config.ts # Config de Prisma CLI (datasource URL, migrations)
│ │ ├── test/ # Tests vitest
│ │ ├── tsconfig.json
│ │ └── package.json
│ │