Przeglądaj źródła

migration fixes (duplicate columns), setup reedo (now deletes database and creates a new one)

EduLascala 2 tygodni temu
rodzic
commit
ee0a402a2b
8 zmienionych plików z 104 dodań i 81 usunięć
  1. 1 3
      README.md
  2. 13 17
      bin/setup
  3. 3 3
      composer.lock
  4. 29 18
      migrations/migrations_v1.sql
  5. 7 2
      models/CompanyModel.php
  6. 6 4
      routes.md
  7. 45 34
      test/cpr_create.sh
  8. 0 0
      test/fetch_jwt.sh

+ 1 - 3
README.md

@@ -1,8 +1,6 @@
 1. run ```./bin/setup``` 
 
-(cria banco de dados e aplica migrations; 
-NOTA: company não está sendo seedada no setup, deve ser criado um usuario junto com a company com a rota /companyWithUser/create)
-
+(deleta o banco existente, cria o banco de dados com as credenciais do ENV e aplica migrations)
 2. run ```composer install (instala dependencias)```
 
 3. run ```X_LISTEN=127.0.0.1:8000 php public/index.php (inicia servidor)```

+ 13 - 17
bin/setup

@@ -16,11 +16,11 @@ if [[ -f "${ROOT_DIR}/.env" ]]; then
 fi
 
 # Configurações de conexão (PostgreSQL)
-DB_HOST=${DB_HOST:-localhost}
-DB_PORT=${DB_PORT:-5432}
-DB_NAME=${DB_NAME:-tooeasy}
-DB_USER=${DB_USER:-postgres}
-DB_PASSWORD=${DB_PASSWORD:-}
+DB_HOST=${DB_HOST}
+DB_PORT=${DB_PORT}
+DB_NAME=${DB_NAME}
+DB_USER=${DB_USER}
+DB_PASSWORD=${DB_PASSWORD}
 
 echo "[setup] Host=${DB_HOST} Port=${DB_PORT} DB=${DB_NAME} User=${DB_USER}"
 
@@ -29,14 +29,10 @@ if [[ ! -f "${MIGRATIONS_FILE}" ]]; then
   exit 1
 fi
 
-# 1) Cria o banco de dados se não existir
-echo "[setup] Verificando se o banco '${DB_NAME}' existe..."
-if ! PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d postgres -tAc "SELECT 1 FROM pg_database WHERE datname='${DB_NAME}'" | grep -q 1; then
-  echo "[setup] Criando banco de dados '${DB_NAME}'..."
-  PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d postgres -c "CREATE DATABASE \"${DB_NAME}\";"
-else
-  echo "[setup] Banco '${DB_NAME}' já existe."
-fi
+echo "[setup] Resetando banco '${DB_NAME}' (DROP/CREATE)..."
+PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d postgres -v ON_ERROR_STOP=1 -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='${DB_NAME}' AND pid <> pg_backend_pid();"
+PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d postgres -v ON_ERROR_STOP=1 -c "DROP DATABASE IF EXISTS \"${DB_NAME}\";"
+PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d postgres -v ON_ERROR_STOP=1 -c "CREATE DATABASE \"${DB_NAME}\";"
 
 # 2) Executa migração (schema) somente se ainda não existir
 echo "[setup] Verificando schema..."
@@ -51,8 +47,8 @@ fi
 echo "[setup] Inserindo dados iniciais (seed)..."
 
 PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -v ON_ERROR_STOP=1 -c "
-INSERT INTO \"company\" (company_name, company_flag)
-SELECT 'LumyonTech', 'a'
+INSERT INTO \"company\" (company_name, company_flag, company_cnpj)
+SELECT 'LumyonTech', 'a', '${COMPANY_CNPJ:-00000000000000}'
 WHERE NOT EXISTS (SELECT 1 FROM \"company\" WHERE company_name = 'LumyonTech');
 "
 
@@ -68,8 +64,8 @@ WHERE c.company_name = 'LumyonTech'
 
 PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -v ON_ERROR_STOP=1 -c "
 INSERT INTO \"status\" (status_status)
-SELECT 'OPEN'
-WHERE NOT EXISTS (SELECT 1 FROM \"status\" WHERE status_status = 'OPEN');
+SELECT 'PENDING'
+WHERE NOT EXISTS (SELECT 1 FROM \"status\" WHERE status_status = 'PENDING');
 "
 
 PGPASSWORD="${DB_PASSWORD}" psql -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -v ON_ERROR_STOP=1 -c "

+ 3 - 3
composer.lock

@@ -1550,10 +1550,10 @@
     "packages-dev": [],
     "aliases": [],
     "minimum-stability": "stable",
-    "stability-flags": {},
+    "stability-flags": [],
     "prefer-stable": false,
     "prefer-lowest": false,
-    "platform": {},
-    "platform-dev": {},
+    "platform": [],
+    "platform-dev": [],
     "plugin-api-version": "2.6.0"
 }

+ 29 - 18
migrations/migrations_v1.sql

@@ -48,7 +48,6 @@ CREATE TABLE "cpr" (
     "cpr_collateral_type_name" TEXT NOT NULL,
     "cpr_constitution_process_indicator" TEXT NOT NULL,
     "cpr_otc_bondsman_account_code" TEXT NOT NULL,
-    "cpr_document_number" TEXT NOT NULL,
     "cpr_product_name" TEXT NOT NULL,
     "cpr_product_class_name" TEXT NOT NULL,
     "cpr_product_harvest" TEXT NOT NULL,
@@ -59,15 +58,15 @@ CREATE TABLE "cpr" (
     "cpr_product_status_code" TEXT NOT NULL,
     "cpr_production_type_code" TEXT NOT NULL,
     "cpr_issuer_name" TEXT NOT NULL,
-    "cpr_document_number" TEXT NOT NULL,
-    "cpr_person_type_acronym" TEXT NOT NULL,
-    "cpr_state_acronym" TEXT NOT NULL,
-    "cpr_city_name" TEXT NOT NULL,
-    "cpr_ibge_code" TEXT NOT NULL,
+    "cpr_collaterals_document_number" TEXT NOT NULL,
+    "cpr_issuers_person_type_acronym" TEXT NOT NULL,
+    "cpr_issuers_state_acronym" TEXT NOT NULL,
+    "cpr_issuers_city_name" TEXT NOT NULL,
+    "cpr_issuers_ibge_code" TEXT NOT NULL,
     "cpr_issuer_legal_nature_code" TEXT NOT NULL,
     "cpr_otc_favored_account_code" TEXT NOT NULL,
-    "cpr_document_number" TEXT NOT NULL,
-    "cpr_person_type_acronym" TEXT NOT NULL,
+    "cpr_issuers_document_number" TEXT NOT NULL,
+    "cpr_deposit_person_type_acronym" TEXT NOT NULL,
     "cpr_self_number" TEXT NOT NULL,
     "cpr_settlement_modality_type_code" TEXT NOT NULL,
     "cpr_otc_settlement_bank_account_code" TEXT NOT NULL,
@@ -84,18 +83,18 @@ CREATE TABLE "cpr" (
     "cpr_interest_payment_value" TEXT NOT NULL,
     "cpr_interest_payment_frequency_code" TEXT NOT NULL,
     "cpr_interest_months_quantity" TEXT NOT NULL,
-    "cpr_time_unit_type_code" TEXT NOT NULL,
-    "cpr_deadline_type_code" TEXT NOT NULL,
+    "cpr_interestPaymentFlow_time_unit_type_code" TEXT NOT NULL,
+    "cpr_interestPaymentFlow_deadline_type_code" TEXT NOT NULL,
     "cpr_payment_start_date" DATE NOT NULL,
     "cpr_amortization_type_code" TEXT NOT NULL,
     "cpr_amortization_months_quantity" TEXT NOT NULL,
-    "cpr_time_unit_type_code" TEXT NOT NULL,
-    "cpr_deadline_type_code" TEXT NOT NULL,
+    "cpr_amortizationPaymentFlow_time_unit_type_code" TEXT NOT NULL,
+    "cpr_amortizationPaymentFlow_deadline_type_code" TEXT NOT NULL,
     "cpr_amortization_start_date" DATE NOT NULL,
     "cpr_scr_type_code" TEXT NOT NULL,
     "cpr_scr_customer_detail" TEXT NOT NULL,
-    "cpr_person_type_acronym" TEXT NOT NULL,
-    "cpr_document_number" TEXT NOT NULL,
+    "cpr_scr_person_type_acronym" TEXT NOT NULL,
+    "cpr_deposit_document_number" TEXT NOT NULL,
     "cpr_contract_code" TEXT NOT NULL,
     "cpr_operation_modality_type_code" TEXT NOT NULL,
     "cpr_bacen_reference_code" TEXT NOT NULL,
@@ -109,7 +108,8 @@ CREATE TABLE "cpr" (
     "cpr_adjustment_pro_rata_type_code" TEXT NOT NULL,
     "cpr_adjustment_type_code" TEXT NOT NULL,
     "cpr_creditor_name" TEXT NOT NULL,
-    "cpr_document_number" TEXT NOT NULL,
+    "cpr_scr_document_number" TEXT NOT NULL,
+    "cpr_creditor_document_number" TEXT NOT NULL,
     "cpr_ballast_type_code" TEXT NOT NULL,
     "cpr_lot_number" TEXT NOT NULL,
     "cpr_ballast_quantity" TEXT NOT NULL,
@@ -141,9 +141,9 @@ CREATE TABLE "cpr" (
     "cpr_green_cpr_declaration_indicator" TEXT NOT NULL,
     "cpr_document_deadline_days_number" TEXT NOT NULL,
     "cpr_place_name" TEXT NOT NULL,
-    "cpr_state_acronym" TEXT NOT NULL,
-    "cpr_city_name" TEXT NOT NULL,
-    "cpr_ibge_code" TEXT NOT NULL,
+    "cpr_deliveryPlace_state_acronym" TEXT NOT NULL,
+    "cpr_deliveryPlace_city_name" TEXT NOT NULL,
+    "cpr_deliveryPlace_ibge_code" TEXT NOT NULL,
     "cpr_guarantee_limit_type_code" TEXT NOT NULL,
     "cpr_mother_code" TEXT NOT NULL,
     "cpr_children_codes" TEXT NOT NULL, -- text array
@@ -260,3 +260,14 @@ CREATE TABLE "orderbook" (
     FOREIGN KEY ("currency_id") REFERENCES "currency" ("currency_id"),
     FOREIGN KEY ("chain_id") REFERENCES "chain" ("chain_id")
 );
+
+CREATE TABLE payment (
+    "payment_id" SERIAL PRIMARY KEY,
+    "status_id" INTEGER NOT NULL,
+    "user_id" INTEGER NOT NULL,
+    "payment_ts" INTEGER NOT NULL,
+    "payment_e2e" TEXT NOT NULL,
+    "payment_flag" TEXT NOT NULL,
+    FOREIGN KEY ("status_id") REFERENCES "status" ("status_id"),
+    FOREIGN KEY ("user_id") REFERENCES "user" ("user_id")
+);

+ 7 - 2
models/CompanyModel.php

@@ -17,8 +17,13 @@ class CompanyModel
 
     public function createCompany(string $name, string $cnpj, string $flag = 'a'): int
     {
-        $stmt = $this->pdo->prepare('INSERT INTO "company" (company_name, company_cnpj, company_flag) VALUES (:name, :flag) RETURNING company_id');
-        $stmt->execute(['name' => $name, 'flag' => $flag]);
+        $stmt = $this->pdo->prepare('INSERT INTO "company" (company_name, company_cnpj, company_flag) VALUES (:name, :cnpj, :flag) RETURNING company_id');
+        $stmt->execute([
+            'name' => $name,
+            'cnpj' => $cnpj,
+            'flag' => $flag
+        ]);
+        
         return (int)$stmt->fetchColumn();
     }
 

+ 6 - 4
routes.md

@@ -165,7 +165,7 @@ Creates a company, a user linked to it, and a wallet (address/publicKey/privateK
 
 ### **Endpoint**
 
-`POST /companyWithUser/create`
+`POST /company/user/create`
 
 ### **Headers**
 
@@ -187,14 +187,15 @@ Creates a company, a user linked to it, and a wallet (address/publicKey/privateK
   "country": "BR",
   "kyc": 1,
   "birthdate": 631152000,
-  "cpf": "123.456.789-00"
+  "cpf": "123.456.789-00",
+  "cnpj": "00000000000001"
 }
 ```
 
 ### **cURL Example**
 
 ```bash
-curl --location 'http://localhost:8000/companyWithUser/create' \
+curl --location 'http://localhost:8000/company/user/create' \
   -H 'Content-Type: application/json' \
   --data '{
     "company_name": "Acme Corp",
@@ -209,7 +210,8 @@ curl --location 'http://localhost:8000/companyWithUser/create' \
     "country": "BR",
     "kyc": 1,
     "birthdate": 631152000,
-    "cpf": "123.456.789-00"
+    "cpf": "123.456.789-00",
+    "cnpj": "00000000000001"
   }'
 ```
 

+ 45 - 34
test/cpr_create.sh

@@ -55,7 +55,7 @@ else
   "cpr_collateral_type_name": "Collateral",
   "cpr_constitution_process_indicator": "MANUAL",
   "cpr_otc_bondsman_account_code": "BOND-001",
-  "cpr_document_number": "DOC123456",
+  "cpr_collaterals_document_number": "DOC-COLL-123",
   "cpr_product_name": "Soy",
   "cpr_product_class_name": "Grain",
   "cpr_product_harvest": "2024",
@@ -66,39 +66,6 @@ else
   "cpr_product_status_code": "READY",
   "cpr_production_type_code": "AGR",
   "cpr_issuer_name": "Issuer Name",
-  "cpr_person_type_acronym": "PJ",
-  "cpr_state_acronym": "SP",
-  "cpr_city_name": "São Paulo",
-  "cpr_ibge_code": "3550308",
-  "cpr_issuer_legal_nature_code": "2046",
-  "cpr_otc_favored_account_code": "FAV-001",
-  "cpr_self_number": "SELF-001",
-  "cpr_settlement_modality_type_code": "CASH",
-  "cpr_otc_settlement_bank_account_code": "SET-001",
-  "cpr_deposit_quantity": "100",
-  "cpr_deposit_unit_price_value": "5000",
-  "cpr_payment_method_code": "PIX",
-  "cpr_index_code": "CDI",
-  "cpr_index_short_name": "CDI",
-  "cpr_vcp_indicator_type_code": "VAR",
-  "cpr_indexador_percentage_value": "10",
-  "cpr_interest_rate_spread_percentage": "2",
-  "cpr_interest_rate_criteria_type_code": "SIMPLE",
-  "cpr_interest_payment_date": "2024-07-01",
-  "cpr_interest_payment_value": "10000",
-  "cpr_interest_payment_frequency_code": "ANNUAL",
-  "cpr_interest_months_quantity": "12",
-  "cpr_time_unit_type_code": "MONTH",
-  "cpr_deadline_type_code": "FIXED",
-  "cpr_payment_start_date": "2024-02-01",
-  "cpr_amortization_type_code": "LINEAR",
-  "cpr_amortization_months_quantity": "12",
-  "cpr_amortization_start_date": "2024-03-01",
-  "cpr_scr_type_code": "SCR",
-  "cpr_scr_customer_detail": "Customer detail",
-  "cpr_contract_code": "CON-001",
-  "cpr_operation_modality_type_code": "CRED",
-  "cpr_bacen_reference_code": "12345",
   "cpr_finality_code": "FIN",
   "cpr_ipoc_code": "IPO-001",
   "cpr_calculation_type_code": "SIMPLE",
@@ -142,6 +109,50 @@ else
   "cpr_place_name": "São Paulo",
   "cpr_guarantee_limit_type_code": "GLT",
   "cpr_mother_code": "MOM-001",
+  "cpr_issuers_person_type_acronym": "PJ",
+  "cpr_issuers_state_acronym": "SP",
+  "cpr_issuers_city_name": "São Paulo",
+  "cpr_issuers_ibge_code": "3550308",
+  "cpr_issuer_legal_nature_code": "2046",
+  "cpr_otc_favored_account_code": "FAV-001",
+  "cpr_issuers_document_number": "12345678000199",
+  "cpr_deposit_person_type_acronym": "PJ",
+  "cpr_self_number": "SELF-001",
+  "cpr_settlement_modality_type_code": "CASH",
+  "cpr_otc_settlement_bank_account_code": "SET-001",
+  "cpr_deposit_quantity": "100",
+  "cpr_deposit_unit_price_value": "5000",
+  "cpr_payment_method_code": "PIX",
+  "cpr_index_code": "CDI",
+  "cpr_index_short_name": "CDI",
+  "cpr_vcp_indicator_type_code": "VAR",
+  "cpr_indexador_percentage_value": "10",
+  "cpr_interest_rate_spread_percentage": "2",
+  "cpr_interest_rate_criteria_type_code": "SIMPLE",
+  "cpr_interest_payment_date": "2024-07-01",
+  "cpr_interest_payment_value": "10000",
+  "cpr_interest_payment_frequency_code": "ANNUAL",
+  "cpr_interest_months_quantity": "12",
+  "cpr_interestPaymentFlow_time_unit_type_code": "MONTH",
+  "cpr_interestPaymentFlow_deadline_type_code": "FIXED",
+  "cpr_payment_start_date": "2024-02-01",
+  "cpr_amortization_type_code": "LINEAR",
+  "cpr_amortization_months_quantity": "12",
+  "cpr_amortizationPaymentFlow_time_unit_type_code": "MONTH",
+  "cpr_amortizationPaymentFlow_deadline_type_code": "FIXED",
+  "cpr_amortization_start_date": "2024-03-01",
+  "cpr_scr_type_code": "SCR",
+  "cpr_scr_customer_detail": "Customer detail",
+  "cpr_scr_person_type_acronym": "PJ",
+  "cpr_deposit_document_number": "DEP-123456",
+  "cpr_scr_document_number": "SCR-123456",
+  "cpr_creditor_document_number": "CRED-123456",
+  "cpr_contract_code": "CON-001",
+  "cpr_operation_modality_type_code": "CRED",
+  "cpr_bacen_reference_code": "12345",
+  "cpr_deliveryPlace_state_acronym": "SP",
+  "cpr_deliveryPlace_city_name": "São Paulo",
+  "cpr_deliveryPlace_ibge_code": "3550308",
   "cpr_children_codes": ["CHD-001", "CHD-002"]
 }
 JSON

+ 0 - 0
test/fetch_jwt.sh