Try It · flujo guiado

Probar API end-to-end en 8 pasos

Esta guía crea usuarios de prueba, registra un movimiento, lo aprueba y exporta ODS mensual. Requiere `curl` y `jq`.

0) Preparar variables base

export API_BASE="http://127.0.0.1:8080"
export ROOT_USER="root"
export ROOT_PASS="ChangeMeNow123"
export ADMIN_USER="admin_demo"
export ADMIN_PASS="AdminDemo123"
export PART_USER="member_demo"
export PART_PASS="MemberDemo123"

1) Bootstrap superadmin (solo ambiente nuevo)

curl -sS -X POST "$API_BASE/api/bootstrap/first-superadmin" \
  -H 'content-type: application/json' \
  -d '{
    "username":"root",
    "email":"root@local.test",
    "telefono":"+56000000000",
    "nombre":"Root Demo",
    "password":"ChangeMeNow123"
  }' | jq

2) Login root y obtener token

ROOT_TOKEN=$(curl -sS -X POST "$API_BASE/api/auth/login" \
  -H 'content-type: application/json' \
  -d "{\"username\":\"$ROOT_USER\",\"password\":\"$ROOT_PASS\"}" | jq -r '.access_token')

echo "$ROOT_TOKEN" | wc -c

3) Crear admin y miembro de prueba

curl -sS -X POST "$API_BASE/api/users" \
  -H "authorization: Bearer $ROOT_TOKEN" \
  -H 'content-type: application/json' \
  -d "{
    \"username\":\"$ADMIN_USER\",
    \"email\":\"admin_demo@local.test\",
    \"telefono\":\"+56000000001\",
    \"nombre\":\"Admin Demo\",
    \"role\":\"admin\",
    \"password\":\"$ADMIN_PASS\",
    \"cuota_base_clp\":25000
  }" | jq

curl -sS -X POST "$API_BASE/api/users" \
  -H "authorization: Bearer $ROOT_TOKEN" \
  -H 'content-type: application/json' \
  -d "{
    \"username\":\"$PART_USER\",
    \"email\":\"member_demo@local.test\",
    \"telefono\":\"+56000000002\",
    \"nombre\":\"Member Demo\",
    \"role\":\"participante\",
    \"password\":\"$PART_PASS\",
    \"cuota_base_clp\":25000
  }" | jq

4) Login admin/miembro y crear movimiento

ADMIN_TOKEN=$(curl -sS -X POST "$API_BASE/api/auth/login" \
  -H 'content-type: application/json' \
  -d "{\"username\":\"$ADMIN_USER\",\"password\":\"$ADMIN_PASS\"}" | jq -r '.access_token')

PART_TOKEN=$(curl -sS -X POST "$API_BASE/api/auth/login" \
  -H 'content-type: application/json' \
  -d "{\"username\":\"$PART_USER\",\"password\":\"$PART_PASS\"}" | jq -r '.access_token')

curl -sS -X POST "$API_BASE/api/accounting/entries" \
  -H "authorization: Bearer $PART_TOKEN" \
  -H 'content-type: application/json' \
  -d '{
    "entry_type":"ingreso",
    "source":"cuota",
    "category":"demo",
    "description":"pago de prueba comunitaria",
    "amount_clp":25000,
    "member_profile_id":null,
    "payment_method":"transferencia",
    "transaction_reference":"demo-tx-001"
  }' | jq

5) Aprobar primer pendiente (admin)

ENTRY_ID=$(curl -sS "$API_BASE/api/accounting/pending-entries?limit=1" \
  -H "authorization: Bearer $ADMIN_TOKEN" | jq -r '.[0].id')

curl -sS -X POST "$API_BASE/api/accounting/entries/$ENTRY_ID/approve" \
  -H "authorization: Bearer $ADMIN_TOKEN" | jq

6) Exportar ODS de un mes cerrado

El endpoint bloquea el mes actual por consistencia.

curl -sS "$API_BASE/api/reports/monthly.ods?year=2025&month=1" \
  -H "authorization: Bearer $PART_TOKEN" \
  -o cuentas-2025-01.ods

ls -lh cuentas-2025-01.ods

7) Notificaciones internas + ACK

curl -sS -X POST "$API_BASE/api/notifications/admin/send" \
  -H "authorization: Bearer $ADMIN_TOKEN" \
  -H 'content-type: application/json' \
  -d '{
    "title":"Cambio operativo",
    "message":"Desde hoy el cierre contable mensual será el día 28.",
    "level":"high",
    "audience":"members",
    "requires_ack":true
  }' | jq

curl -sS "$API_BASE/api/notifications/my" \
  -H "authorization: Bearer $PART_TOKEN" | jq

NOTIF_ID=$(curl -sS "$API_BASE/api/notifications/my" \
  -H "authorization: Bearer $PART_TOKEN" | jq -r '.[0].id')

curl -sS -X POST "$API_BASE/api/notifications/$NOTIF_ID/ack" \
  -H "authorization: Bearer $PART_TOKEN" | jq

8) Ver contrato y probar en Swagger

curl -sS "$API_BASE/api/docs/openapi.json" | jq '.info'
echo "$API_BASE/api/docs/swagger-ui"