# Playzer Monorepo

Este repositorio contiene:

- `apps/frontend`: React + Vite + TanStack Router/Query.
- `apps/backend`: Bun + Hono + Prisma + Better Auth.
- `packages/api-contract`: contratos Zod/tipos compartidos.

## Requisitos

- Bun reciente
- PostgreSQL disponible

## Setup rápido

1. Instalar dependencias:

```sh
bun install
```

2. Configurar backend:

```sh
cp apps/backend/.env.example apps/backend/.env
```

3. Configurar frontend:

```sh
cp apps/frontend/.env.example apps/frontend/.env
```

4. Ejecutar migraciones:

```sh
bun --filter backend prisma:migrate
```

## Variables de entorno

### Backend (`apps/backend/.env`)

- `DATABASE_URL`
- `BETTER_AUTH_SECRET`
- `BETTER_AUTH_URL`
- `APP_BASE_URL`
- `CORS_ORIGIN`

### Frontend (`apps/frontend/.env`)

- `VITE_API_BASE_URL`

## Desarrollo

Backend:

```sh
bun run dev:backend
```

Frontend:

```sh
bun run dev:frontend
```

Todo junto:

```sh
bun run dev
```

## Prisma

Regenerar cliente después de cambios de schema:

```sh
bun --filter backend prisma:generate
```

## Autenticación

El proyecto usa **Better Auth** con sesión por cookie.

- Backend: `c.get('user')` y `c.get('session')` en contexto Hono.
- Frontend: `authClient` con `fetchOptions.credentials = 'include'`.
- Frontend API: Axios con `withCredentials = true`.
- Backend CORS: `credentials: true`.

## Deploy (Docker)

- Build context: raíz del monorepo (`./`)
- Dockerfile: `./Dockerfile`
- Build args requeridos:
  - `DATABASE_URL`
  - `VITE_API_BASE_URL`
  - `BETTER_AUTH_SECRET`
  - `BETTER_AUTH_URL`

## Flujo recomendado de cambios de API

1. Actualizar contrato en `packages/api-contract`.
2. Implementar backend en `apps/backend`.
3. Consumir contrato desde frontend (`@repo/api-contract`).
