npm package: @juliobrim/prisma-shared
Description: Schema Prisma compartilhado entre projetos Sabcon
Author: Sabcon Team
Latest version: 1.0.54

# Prisma Shared Schema

Este repositório contém o schema Prisma compartilhado entre os projetos Sabcon, disponível como pacote npm privado.

## Projetos que utilizam este schema

- **sabcon-platform** - Frontend/Web App
- **sabcon-backend-mqtt** - Backend para monitoramento MQTT
- **sabcon-api** - API REST

## Estrutura

```
prisma-shared/
├── schema.prisma          # Schema principal
├── migrations/            # Migrations do banco
├── package.json          # Configuração do pacote npm
├── .npmignore           # Arquivos excluídos do pacote
└── README.md            # Este arquivo
```

## Como usar em um projeto

### Opção 1: Pacote NPM Privado (Recomendado)

#### Configuração inicial

1. **Configurar o registro npm privado**:
   ```bash
   # Para GitHub Packages (recomendado - gratuito para privados)
   npm config set @sabcon:registry https://npm.pkg.github.com
   npm login --scope=@sabcon --registry=https://npm.pkg.github.com
   
   # Para npmjs.com (requer conta paga para pacotes privados)
   npm login
   ```

2. **Instalar o pacote**:
   ```bash
   npm install @juliobrim/prisma-shared
   ```

#### Configuração nos projetos

Adicione estes scripts no `package.json` dos projetos:

```json
{
  "scripts": {
    "prisma:generate": "prisma generate --schema=./node_modules/@juliobrim/prisma-shared/schema.prisma",
    "prisma:migrate": "prisma migrate deploy --schema=./node_modules/@juliobrim/prisma-shared/schema.prisma",
    "prisma:studio": "prisma studio --schema=./node_modules/@juliobrim/prisma-shared/schema.prisma",
    "prisma:format": "prisma format --schema=./node_modules/@juliobrim/prisma-shared/schema.prisma",
    "prisma:validate": "prisma validate --schema=./node_modules/@juliobrim/prisma-shared/schema.prisma"
  }
}
```

#### Configuração do Prisma Client

No `package.json` do projeto que usa o pacote:

```json
{
  "dependencies": {
    "@prisma/client": "^5.0.0",
    "@juliobrim/prisma-shared": "^1.0.0"
  }
}
```

#### Configuração do schema.prisma local

Crie um arquivo `schema.prisma` no seu projeto que importe o schema compartilhado:

```prisma
// Importar o schema compartilhado
import "node_modules/@juliobrim/prisma-shared/schema.prisma"

// Configurações específicas do projeto (se necessário)
generator client {
  provider = "prisma-client-js"
  // O cliente será gerado no local padrão: node_modules/.prisma/client
}

datasource db {
  provider = "postgresql"
  url      = env("DATABASE_URL")
}
```

### Opção 2: Git Submodule (Legado)

```bash
# Adicionar como submodule
git submodule add <url-do-repo> prisma-shared

# Atualizar submodule
git submodule update --remote prisma-shared

# Inicializar submodule (primeira vez)
git submodule init
git submodule update
```

## Scripts disponíveis

```bash
# Gerar cliente Prisma
npm run generate

# Executar migrations
npm run migrate:deploy

# Validar schema
npm run validate

# Formatar schema
npm run format
```

## Workflow de desenvolvimento

### Para desenvolvedores do pacote

1. **Fazer alterações no schema:**
   ```bash
   # Editar schema.prisma
   # Executar migration
   npm run migrate:dev --name "nome_da_migration"
   ```

2. **Testar localmente:**
   ```bash
   npm run validate
   npm run format
   ```

3. **Publicar nova versão:**
   ```bash
   # Incrementar versão
   npm version patch|minor|major
   
   # Publicar
   npm publish
   ```

### Para projetos que usam o pacote

1. **Atualizar para nova versão:**
   ```bash
   npm update @juliobrim/prisma-shared
   ```

2. **Regenerar cliente Prisma:**
   ```bash
   npm run prisma:generate
   ```

3. **Executar migrations:**
   ```bash
   npm run prisma:migrate
   ```

## Vantagens do pacote npm

- ✅ **Versionamento semântico**: Controle de versões mais preciso
- ✅ **Dependências explícitas**: npm/yarn gerenciam automaticamente
- ✅ **Build mais confiável**: Sem problemas de submodules
- ✅ **CI/CD mais simples**: Instalação automática via npm
- ✅ **Rollback fácil**: Voltar para versão anterior é trivial
- ✅ **Documentação integrada**: README e metadados no pacote

## Configuração de CI/CD

### GitHub Actions (exemplo)

```yaml
name: Build and Deploy
on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-node@v3
        with:
          node-version: '18'
          registry-url: 'https://npm.pkg.github.com'
      
      - run: npm ci
      - run: npm install @juliobrim/prisma-shared
      - run: npm run prisma:generate
      - run: npm run build
```

## Variáveis de ambiente

### Para desenvolvimento do pacote

Para testar o schema localmente, crie um arquivo `.env`:

```env
DATABASE_URL="postgresql://username:password@localhost:5432/sabcon_db"
```

### Para projetos que usam o pacote

Certifique-se de que cada projeto tenha a variável `DATABASE_URL` configurada corretamente em seu arquivo `.env`.

### ⚠️ Usando Prisma 7?

Se você está usando **Prisma 7**, consulte o arquivo [PRISMA_7_SETUP.md](./PRISMA_7_SETUP.md) para instruções específicas de configuração, pois o Prisma 7 requer configuração adicional via `prisma.config.ts`.

## Troubleshooting

### Problemas comuns

1. **Erro de acesso ao pacote privado**:
   ```bash
   npm login
   npm config set @sabcon:registry https://npm.pkg.github.com
   ```

2. **Schema não encontrado**:
   ```bash
   # Verificar se o pacote foi instalado
   ls node_modules/@juliobrim/prisma-shared/
   
   # Reinstalar se necessário
   npm install @juliobrim/prisma-shared
   ```

3. **Migrations não aplicadas**:
   ```bash
   # Verificar status das migrations
   npx prisma migrate status --schema=./node_modules/@juliobrim/prisma-shared/schema.prisma
   
   # Aplicar migrations pendentes
   npm run prisma:migrate
   ```

## Contribuição

1. Faça suas alterações no schema
2. Teste as migrations localmente
3. Incremente a versão do pacote
4. Publique a nova versão
5. Atualize os projetos que usam o pacote

## Suporte

Para dúvidas ou problemas, entre em contato com a equipe de desenvolvimento.