|
|
@@ -0,0 +1,143 @@
|
|
|
+# 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`
|