# Prisma Configuration

## Overview

This directory contains the Prisma schema and migrations for the BFF application.

## Important: Docker Build Behavior

### Canonical schema path

Prisma embeds the schema path into the generated client. We regenerate the client in Docker using the production layout so the embedded path is `/app/prisma/schema.prisma`.

## Directory Structure

### Development (Monorepo)

```
/project-root/
├── apps/bff/
│   ├── prisma/
│   │   ├── schema.prisma    ← Schema here
│   │   └── migrations/
│   └── src/
└── packages/
```

### Production (Docker Container)

```
/app/
├── prisma/
│   ├── schema.prisma        ← Schema here (flattened)
│   └── migrations/
├── dist/
└── node_modules/
    └── .prisma/client/      ← Generated client
```

## Commands

| Command            | Description                                                |
| ------------------ | ---------------------------------------------------------- |
| `pnpm db:generate` | Regenerate Prisma client (`--schema=prisma/schema.prisma`) |
| `pnpm db:migrate`  | Run migrations (dev) with explicit schema path             |
| `pnpm db:studio`   | Open Prisma Studio with explicit schema path               |
| `pnpm db:reset`    | Reset database with explicit schema path                   |

## Binary Targets

The schema includes binary targets for both development and production:

```prisma
binaryTargets = ["native", "linux-musl-openssl-3.0.x"]
```

- `native`: For local development (macOS, Windows, Linux)
- `linux-musl-openssl-3.0.x`: For Alpine Linux in Docker

## Troubleshooting

### "Could not load schema from path" Error

This error occurs when the Prisma client was generated with a different schema path than what exists in the current environment.

**Solution**: Ensure the Dockerfile regenerates the Prisma client from the production-like directory structure (see above).

### Client Not Found

If you see "Prisma Client not found" errors:

1. Run `pnpm db:generate` locally
2. For Docker, ensure the Dockerfile includes the `prisma generate` step

## Migration Strategy

1. Create migrations locally: `pnpm db:migrate`
2. Commit the migration files
3. In production, the entrypoint runs: `prisma migrate deploy --schema=/app/prisma/schema.prisma`
