Initial commit
This commit is contained in:
184
README.md
Normal file
184
README.md
Normal file
@@ -0,0 +1,184 @@
|
||||
# Monorepo (Frontend + Backend + Contrato API)
|
||||
|
||||
Este repositorio contiene:
|
||||
|
||||
- `apps/frontend`: app web en React + Vite + TanStack Router/Query.
|
||||
- `apps/backend`: API en Bun + Hono + Prisma + Supabase Auth.
|
||||
- `packages/api-contract`: contratos compartidos (schemas/types/rutas) entre frontend y backend.
|
||||
|
||||
## Objetivo de este README
|
||||
|
||||
Dejarte productivo/a en pocos minutos para que puedas:
|
||||
|
||||
1. Levantar frontend y backend en local.
|
||||
2. Configurar variables de entorno.
|
||||
3. Ejecutar migraciones de base de datos.
|
||||
4. Entender la estructura y el flujo de trabajo del proyecto.
|
||||
|
||||
## Stack técnico
|
||||
|
||||
- Runtime/package manager: `bun`
|
||||
- Frontend: `React 19`, `Vite`, `TanStack Router`, `TanStack Query`
|
||||
- Backend: `Bun`, `Hono`, `Prisma`, `PostgreSQL`
|
||||
- Auth: `Supabase Auth` (token Bearer validado en backend)
|
||||
- Validación de contratos: `zod` en `@repo/api-contract`
|
||||
|
||||
## Prerrequisitos
|
||||
|
||||
- `bun` instalado (versión reciente).
|
||||
- `PostgreSQL` corriendo localmente (o accesible remotamente).
|
||||
- Proyecto de `Supabase` para autenticación (URL + anon key).
|
||||
|
||||
## Setup rápido
|
||||
|
||||
1. Instalar dependencias desde la raíz:
|
||||
|
||||
```sh
|
||||
bun install
|
||||
```
|
||||
|
||||
2. Configurar variables de entorno del backend:
|
||||
|
||||
```sh
|
||||
cp apps/backend/.env.example apps/backend/.env
|
||||
```
|
||||
|
||||
3. Configurar variables de entorno del frontend:
|
||||
|
||||
```sh
|
||||
cp apps/frontend/.env.example apps/frontend/.env
|
||||
```
|
||||
|
||||
4. Revisar/editar valores en ambos `.env` según tu entorno.
|
||||
|
||||
## Variables de entorno
|
||||
|
||||
### Backend (`apps/backend/.env`)
|
||||
|
||||
Variables esperadas:
|
||||
|
||||
- `SUPABASE_URL`
|
||||
- `SUPABASE_ANON_KEY`
|
||||
- `CORS_ORIGIN` (por defecto local frontend)
|
||||
- `LOG_LEVEL`
|
||||
- `DATABASE_URL` (PostgreSQL)
|
||||
|
||||
Notas:
|
||||
|
||||
- El backend también acepta `VITE_SUPABASE_URL` y `VITE_SUPABASE_ANON_KEY` como fallback.
|
||||
- Si falta `DATABASE_URL`, Prisma no puede inicializarse.
|
||||
|
||||
### Frontend (`apps/frontend/.env`)
|
||||
|
||||
Variables esperadas:
|
||||
|
||||
- `VITE_SUPABASE_URL`
|
||||
- `VITE_SUPABASE_ANON_KEY`
|
||||
- `VITE_API_BASE_URL` (por defecto: `http://localhost:3000`)
|
||||
|
||||
## Base de datos (Prisma)
|
||||
|
||||
Antes de arrancar backend por primera vez, corré migraciones:
|
||||
|
||||
```sh
|
||||
bun --filter backend prisma:migrate
|
||||
```
|
||||
|
||||
Si cambiás el schema, regenerá cliente:
|
||||
|
||||
```sh
|
||||
bun --filter backend prisma:generate
|
||||
```
|
||||
|
||||
## Ejecutar en desarrollo
|
||||
|
||||
Terminal 1 (backend):
|
||||
|
||||
```sh
|
||||
bun run dev:backend
|
||||
```
|
||||
|
||||
Terminal 2 (frontend):
|
||||
|
||||
```sh
|
||||
bun run dev:frontend
|
||||
```
|
||||
|
||||
Puertos por defecto:
|
||||
|
||||
- Frontend: `http://localhost:5173`
|
||||
- Backend: `http://localhost:3000`
|
||||
|
||||
## Scripts útiles
|
||||
|
||||
Desde la raíz:
|
||||
|
||||
- `bun run dev:frontend`
|
||||
- `bun run dev:backend`
|
||||
- `bun run build:frontend`
|
||||
- `bun run lint:frontend`
|
||||
|
||||
Desde `apps/backend`:
|
||||
|
||||
- `bun run dev`
|
||||
- `bun run start`
|
||||
- `bun run prisma:migrate`
|
||||
- `bun run prisma:generate`
|
||||
|
||||
## Estructura del repo
|
||||
|
||||
```txt
|
||||
.
|
||||
├─ apps/
|
||||
│ ├─ frontend/ # UI y navegación
|
||||
│ └─ backend/ # API, auth middleware, acceso a DB
|
||||
└─ packages/
|
||||
└─ api-contract/ # Schemas/tipos/rutas compartidos
|
||||
```
|
||||
|
||||
## Flujo de autenticación (resumen)
|
||||
|
||||
1. Frontend autentica con Supabase.
|
||||
2. Frontend guarda el access token y lo envía como `Authorization: Bearer ...` al backend.
|
||||
3. Backend valida token con Supabase (`requireAuth` middleware).
|
||||
4. Si el token es válido, habilita rutas protegidas (`/api/user/*`, `/api/tenants/*`).
|
||||
|
||||
## Endpoints principales
|
||||
|
||||
- `GET /api/user/profile`
|
||||
- `POST /api/tenants`
|
||||
- `GET /api/tenants/:id`
|
||||
- `PATCH /api/tenants/:id`
|
||||
|
||||
## Convenciones recomendadas para el equipo
|
||||
|
||||
- Mantener contratos de API en `packages/api-contract` (evitar duplicar tipos).
|
||||
- Si agregás/cambiás endpoint:
|
||||
1. Actualizá schema/tipos en `api-contract`.
|
||||
2. Implementá handler/ruta en backend.
|
||||
3. Consumí el contrato desde frontend.
|
||||
- Validar payloads con Zod tanto en contrato como en rutas.
|
||||
- Mantener PRs chicos y enfocados.
|
||||
|
||||
## Troubleshooting rápido
|
||||
|
||||
- Error de CORS:
|
||||
- Revisar `CORS_ORIGIN` en backend y que incluya `http://localhost:5173`.
|
||||
- `403 Missing bearer token`:
|
||||
- Verificar login en frontend y envío del header `Authorization`.
|
||||
- Error de Supabase env vars:
|
||||
- Confirmar `SUPABASE_URL`/`SUPABASE_ANON_KEY` (backend) y `VITE_*` (frontend).
|
||||
- Error de Prisma/DB:
|
||||
- Confirmar `DATABASE_URL`, conectividad a PostgreSQL y migraciones aplicadas.
|
||||
|
||||
## Primer día sugerido para onboarding
|
||||
|
||||
1. Levantar backend y frontend en local.
|
||||
2. Crear usuario o iniciar sesión desde la pantalla de onboard.
|
||||
3. Crear un tenant de prueba.
|
||||
4. Probar lectura/edición de tenant.
|
||||
5. Revisar `packages/api-contract` para entender cómo se comparten tipos y rutas.
|
||||
|
||||
---
|
||||
|
||||
Si te trabás en el setup, empezá verificando `.env`, estado de PostgreSQL y que ambos procesos (`dev:backend` y `dev:frontend`) estén corriendo.
|
||||
Reference in New Issue
Block a user