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

@@ -4,17 +4,17 @@ Monorepo de Gruperly. Consulta [stack.md](./stack.md) para arquitectura y especi
## Stack
- Runtime & package manager: [Bun](https://bun.sh/)
- Monorepo: Bun Workspaces + Turborepo
- Backend (`apps/api`): Bun + Hono + Prisma + PostgreSQL + Better Auth
- Package manager: [pnpm](https://pnpm.io/) 9
- Monorepo: pnpm workspaces + Turborepo
- Backend (`apps/backend`): Node + Hono (`@hono/node-server`) + Prisma + PostgreSQL + Better Auth
- Frontend (`apps/web`): React 19 + TypeScript + TanStack Router + TanStack Query + Tailwind v4
- Shared (`packages/shared`): esquemas Zod y tipos compartidos
- Shared (`packages/shared`): esquemas Zod, tipos, `Result` y Problem Details compartidos
## Estructura
```text
apps/
api/ # Backend (Bun + Hono + Prisma)
backend/ # Backend (Node + Hono + Prisma, tsx)
web/ # Frontend (React PWA)
packages/
shared/ # Esquemas Zod y tipos compartidos
@@ -24,13 +24,16 @@ packages/
## Comandos
```bash
bun install # Instala dependencias de todos los workspaces
bun run dev # Levanta la API y la web (vía Turborepo)
bun run db:push # Aplica el esquema de Prisma a la base de datos
bun run db:studio # Abre Prisma Studio
pnpm install # Instala dependencias de todos los workspaces
pnpm dev # Levanta la API (4000) y la web (6173) vía Turborepo
pnpm typecheck # tsc --noEmit en todos los paquetes
pnpm lint # biome check (backend y shared)
pnpm --filter @gruperly/backend test # vitest (backend)
pnpm --filter @gruperly/backend db:push # Aplica el esquema de Prisma a la base de datos
pnpm --filter @gruperly/backend db:studio # Abre Prisma Studio
```
## Setup de base de datos
1. Crea una base PostgreSQL y copia `apps/api/.env.example` → `apps/api/.env`, ajustando `DATABASE_URL`.
2. Ejecuta `bun run db:generate` y `bun run db:push` (o `bun run db:migrate` en desarrollo).
1. Crea una base PostgreSQL y copia `apps/backend/.env.example` → `apps/backend/.env`, ajustando `DATABASE_URL`.
2. Ejecuta `pnpm --filter @gruperly/backend db:generate` y `pnpm --filter @gruperly/backend db:push` (o `pnpm --filter @gruperly/backend db:migrate` en desarrollo).