# backend-php ## Requisitos - PHP (recomendado 8.2+) e extensões comuns (ex: `pdo_pgsql`) - Composer - PostgreSQL - `psql` disponível no PATH ## Instalação ```bash composer install ``` ## Configuração do projeto - Copie o arquivo de exemplo: ```bash cp .env.example .env ``` - Preencha no `.env` (mínimo para banco): ```bash DB_HOST= DB_PORT= DB_NAME= DB_USER= DB_PASSWORD= ``` ## Criar usuário e banco no PostgreSQL (psql) Você pode criar manualmente o usuário e o banco antes de rodar o `bin/setup`. 1. Entre no `psql` com um usuário admin do Postgres (ex: `postgres`): ```bash psql -U postgres ``` 2. Crie o usuário e o banco (ajuste nomes/senha conforme seu `.env`): ```sql CREATE USER app_user WITH PASSWORD 'app_password'; CREATE DATABASE app_db OWNER app_user; GRANT ALL PRIVILEGES ON DATABASE app_db TO app_user; ``` 3. Saia: ```sql \q ``` ## (Opcional) Deletar um banco no PostgreSQL Se você quiser remover completamente o banco (isso **apaga todos os dados**), use `DROP DATABASE`. 1. Entre no `psql` com um usuário admin (ex: `postgres`): ```bash psql -U postgres ``` 2. Se não houver conexões ativas no banco: ```sql DROP DATABASE app_db; ``` 3. Se o Postgres recusar por haver conexões ativas: - Postgres 13+ (recomendado): ```sql DROP DATABASE app_db WITH (FORCE); ``` - Alternativa (encerrar conexões e depois dropar): ```sql SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = 'app_db' AND pid <> pg_backend_pid(); DROP DATABASE app_db; ``` Observação: se preferir, o `bin/setup` também consegue criar o banco quando ele não existe, desde que o usuário usado tenha permissão de `CREATE DATABASE` (por padrão ele usa `DB_USER` como “superuser”, a não ser que você defina `DB_SUPERUSER`, `DB_SUPERUSER_PASSWORD` e `DB_SUPERUSER_DB`). ## Rodar migrations e seed (`bin/setup`) O script `bin/setup`: - Verifica se o banco existe; se existir, **não recria** (não faz `DROP DATABASE`). - Cria (se necessário) a tabela `migrations_run`. - Aplica as migrations `.sql` em `migrations/`. - `migrations_v1.sql` é executada primeiro (se existir). - As demais são executadas em ordem alfabética do nome do arquivo. - Executa seeds (company/role/status/chain/commodities/wallet e usuário padrão). Execute: ```bash chmod +x bin/setup ./bin/setup ``` ## Subir a aplicação Existem **dois entrypoints**: - `public/index.php` (API) - `public/index_webhook.php` (webhooks) Você deve rodar **cada um em uma porta diferente**. Exemplo (2 terminais): Terminal 1 (API): ```bash PORT=8000 php public/index.php ``` Terminal 2 (Webhooks): ```bash PORT=8001 php public/index_webhook.php ``` Observação: o `FrameworkX` usa a variável de ambiente `PORT` para definir a porta do servidor. ## B3 (mTLS) Para rodar endpoints/funcionalidades relacionadas à B3, é necessário ter estes arquivos na **raiz do projeto**: - `319245319-320109623_PROD.cer` - `319245319-320109623_PROD.key`