|
|
|
|
@@ -182,7 +182,7 @@ else
|
|
|
|
|
"baseUrl": "http://localhost:8000/api",
|
|
|
|
|
"redirectUris": [
|
|
|
|
|
"http://localhost:8000/*",
|
|
|
|
|
"http://localhost:5180/*"
|
|
|
|
|
"http://localhost:5173/*"
|
|
|
|
|
],
|
|
|
|
|
"webOrigins": ["http://localhost:8000/api"],
|
|
|
|
|
"attributes": {
|
|
|
|
|
@@ -273,18 +273,11 @@ else
|
|
|
|
|
"baseUrl": "http://localhost:5173",
|
|
|
|
|
"redirectUris": [
|
|
|
|
|
"http://localhost:5173/*",
|
|
|
|
|
"http://localhost:3000/*",
|
|
|
|
|
"http://localhost:5180/*"
|
|
|
|
|
],
|
|
|
|
|
"postLogoutRedirectUris": [
|
|
|
|
|
"http://localhost:5173/*",
|
|
|
|
|
"http://localhost:3000/*",
|
|
|
|
|
"http://localhost:5180/*"
|
|
|
|
|
"http://localhost:3000/*"
|
|
|
|
|
],
|
|
|
|
|
"webOrigins": [
|
|
|
|
|
"http://localhost:5173",
|
|
|
|
|
"http://localhost:3000",
|
|
|
|
|
"http://localhost:5180"
|
|
|
|
|
"http://localhost:3000"
|
|
|
|
|
],
|
|
|
|
|
"attributes": {
|
|
|
|
|
"pkce.code.challenge.method": "S256"
|
|
|
|
|
@@ -292,6 +285,8 @@ else
|
|
|
|
|
}')
|
|
|
|
|
|
|
|
|
|
HTTP_CODE=$(echo "$CREATE_FRONTEND" | tail -n1)
|
|
|
|
|
RESPONSE_BODY=$(echo "$CREATE_FRONTEND" | head -n -1)
|
|
|
|
|
|
|
|
|
|
if [ "$HTTP_CODE" = "201" ]; then
|
|
|
|
|
echo -e "${GREEN}✓ Cliente Frontend creado${NC}"
|
|
|
|
|
# Obtener ID del cliente recién creado
|
|
|
|
|
@@ -301,6 +296,7 @@ else
|
|
|
|
|
FRONTEND_CLIENT_ID=$(echo "$FRONTEND_CLIENT_EXISTS" | grep -o '"id":"[^"]*' | head -1 | sed 's/"id":"//')
|
|
|
|
|
else
|
|
|
|
|
echo -e "${RED}✗ Error al crear cliente Frontend (HTTP ${HTTP_CODE})${NC}"
|
|
|
|
|
echo "Respuesta del servidor: $RESPONSE_BODY"
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
@@ -488,62 +484,66 @@ echo -e "\n${YELLOW}[8/8] Creando tenant y company en PostgreSQL...${NC}"
|
|
|
|
|
|
|
|
|
|
# Esperar a que PostgreSQL esté listo
|
|
|
|
|
echo "Esperando a que PostgreSQL esté disponible..."
|
|
|
|
|
MAX_PG_RETRIES=30
|
|
|
|
|
MAX_PG_RETRIES=60
|
|
|
|
|
PG_RETRY_COUNT=0
|
|
|
|
|
|
|
|
|
|
while [ $PG_RETRY_COUNT -lt $MAX_PG_RETRIES ]; do
|
|
|
|
|
if PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -c "SELECT 1;" > /dev/null 2>&1; then
|
|
|
|
|
# Usar docker exec para verificar pg_isready directamente
|
|
|
|
|
if docker exec anexo76-postgres-a76 pg_isready -h localhost -U "${POSTGRES_USER}" > /dev/null 2>&1; then
|
|
|
|
|
echo -e "${GREEN}✓ PostgreSQL está listo${NC}"
|
|
|
|
|
break
|
|
|
|
|
fi
|
|
|
|
|
PG_RETRY_COUNT=$((PG_RETRY_COUNT + 1))
|
|
|
|
|
echo "Intento $PG_RETRY_COUNT/$MAX_PG_RETRIES..."
|
|
|
|
|
sleep 2
|
|
|
|
|
sleep 1
|
|
|
|
|
done
|
|
|
|
|
|
|
|
|
|
if [ $PG_RETRY_COUNT -eq $MAX_PG_RETRIES ]; then
|
|
|
|
|
echo -e "${RED}✗ Error: PostgreSQL no está disponible${NC}"
|
|
|
|
|
echo -e "${RED}✗ Error: PostgreSQL no está disponible después de $MAX_PG_RETRIES intentos${NC}"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Insertar o actualizar tenant
|
|
|
|
|
PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" <<EOF
|
|
|
|
|
INSERT INTO a76.tenants (name, slug, type, keycloak_realm, contact_email, is_active, created_at, updated_at)
|
|
|
|
|
VALUES ('${TENANT_NAME}', '${TENANT_SLUG}', 'SHARED', '${KEYCLOAK_REALM}', '${DEMO_EMAIL}', true, now(), now())
|
|
|
|
|
ON CONFLICT (slug)
|
|
|
|
|
DO UPDATE SET
|
|
|
|
|
name = EXCLUDED.name,
|
|
|
|
|
contact_email = EXCLUDED.contact_email,
|
|
|
|
|
updated_at = CURRENT_TIMESTAMP;
|
|
|
|
|
EOF
|
|
|
|
|
echo "Insertando tenant en PostgreSQL..."
|
|
|
|
|
docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-a76 psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -c "INSERT INTO a76.tenants (name, slug, type, keycloak_realm, contact_email, is_active, created_at, updated_at) VALUES ('${TENANT_NAME}', '${TENANT_SLUG}', 'SHARED'::tenanttype, '${KEYCLOAK_REALM}', '${DEMO_EMAIL}', true, now(), now()) ON CONFLICT (slug) DO UPDATE SET name = EXCLUDED.name, contact_email = EXCLUDED.contact_email, updated_at = CURRENT_TIMESTAMP;" 2>&1
|
|
|
|
|
|
|
|
|
|
# Obtener el ID del tenant
|
|
|
|
|
TENANT_ID=$(PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -t -c "SELECT id FROM a76.tenants WHERE slug = '${TENANT_SLUG}';")
|
|
|
|
|
TENANT_ID=$(echo "$TENANT_ID" | xargs) # Trim whitespace
|
|
|
|
|
# Obtener el ID del tenant con mejor manejo de errores
|
|
|
|
|
echo "Obteniendo ID del tenant..."
|
|
|
|
|
TENANT_ID_RESULT=$(docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-a76 psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -t -c "SELECT id FROM a76.tenants WHERE slug = '${TENANT_SLUG}';" 2>&1)
|
|
|
|
|
|
|
|
|
|
if [ $? -ne 0 ]; then
|
|
|
|
|
echo -e "${RED}✗ Error al consultar el tenant:${NC}"
|
|
|
|
|
echo "$TENANT_ID_RESULT"
|
|
|
|
|
echo -e "${YELLOW}Verificando si la tabla existe...${NC}"
|
|
|
|
|
docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-a76 psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -c "\dt a76.tenants;"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
TENANT_ID=$(echo "$TENANT_ID_RESULT" | xargs) # Trim whitespace
|
|
|
|
|
|
|
|
|
|
if [ -z "$TENANT_ID" ]; then
|
|
|
|
|
echo -e "${RED}✗ Error: No se pudo obtener el ID del tenant${NC}"
|
|
|
|
|
echo "Resultado de la consulta: '$TENANT_ID_RESULT'"
|
|
|
|
|
echo -e "${YELLOW}Intentando ver todos los tenants...${NC}"
|
|
|
|
|
docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-a76 psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -c "SELECT id, slug FROM a76.tenants LIMIT 10;"
|
|
|
|
|
exit 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
echo -e "${GREEN}✓ Tenant ID: ${TENANT_ID}${NC}"
|
|
|
|
|
|
|
|
|
|
# Insertar company si no existe
|
|
|
|
|
COMPANY_EXISTS=$(PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -t -c "SELECT COUNT(*) FROM a76.company WHERE tenant_id = ${TENANT_ID};")
|
|
|
|
|
COMPANY_EXISTS=$(docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-a76 psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -t -c "SELECT COUNT(*) FROM a76.company WHERE tenant_id = ${TENANT_ID};")
|
|
|
|
|
COMPANY_EXISTS=$(echo "$COMPANY_EXISTS" | xargs)
|
|
|
|
|
|
|
|
|
|
if [ "$COMPANY_EXISTS" = "0" ]; then
|
|
|
|
|
PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" <<EOF
|
|
|
|
|
INSERT INTO a76.company (tenant_id, name, rfc, is_service_company, created_at, updated_at)
|
|
|
|
|
VALUES (${TENANT_ID}, '${COMPANY_NAME}', '${COMPANY_RFC}', false, now(), now());
|
|
|
|
|
EOF
|
|
|
|
|
docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-a76 psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -c "INSERT INTO a76.company (tenant_id, name, rfc, is_service_company, created_at, updated_at) VALUES (${TENANT_ID}, '${COMPANY_NAME}', '${COMPANY_RFC}', false, now(), now());" 2>&1
|
|
|
|
|
echo -e "${GREEN}✓ Company creada${NC}"
|
|
|
|
|
else
|
|
|
|
|
echo -e "${YELLOW}⚠ Company ya existe para este tenant${NC}"
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
# Obtener información de la company
|
|
|
|
|
COMPANY_INFO=$(PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -t -c "SELECT id, name FROM a76.company WHERE tenant_id = ${TENANT_ID} LIMIT 1;")
|
|
|
|
|
COMPANY_INFO=$(docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-a76 psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -t -c "SELECT id, name FROM a76.company WHERE tenant_id = ${TENANT_ID} LIMIT 1;")
|
|
|
|
|
|
|
|
|
|
echo -e "${GREEN}✓ Company: ${COMPANY_INFO}${NC}"
|
|
|
|
|
|
|
|
|
|
@@ -564,14 +564,7 @@ echo -e "${GREEN}✓ Atributo tenant_id asignado al usuario${NC}"
|
|
|
|
|
# Agregar relación usuario-tenant en la base de datos
|
|
|
|
|
echo -e "\n${YELLOW}Creando relación usuario-tenant en la base de datos...${NC}"
|
|
|
|
|
|
|
|
|
|
PGPASSWORD="${POSTGRES_PASSWORD}" psql -h "${POSTGRES_HOST}" -p "${POSTGRES_PORT}" -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" <<EOF
|
|
|
|
|
INSERT INTO a76.user_tenants (keycloak_user_id, tenant_id, company_id, role, is_active, created_at, updated_at)
|
|
|
|
|
VALUES ('${USER_ID}', ${TENANT_ID}, 1, 'admin', true, now(), now())
|
|
|
|
|
ON CONFLICT (keycloak_user_id, tenant_id, company_id)
|
|
|
|
|
DO UPDATE SET
|
|
|
|
|
is_active = true,
|
|
|
|
|
updated_at = CURRENT_TIMESTAMP;
|
|
|
|
|
EOF
|
|
|
|
|
docker exec -e PGPASSWORD="${POSTGRES_PASSWORD}" anexo76-postgres-a76 psql -h localhost -p 5432 -U "${POSTGRES_USER}" -d "${POSTGRES_DB}" -c "INSERT INTO a76.user_tenants (keycloak_user_id, tenant_id, company_id, role, is_active, created_at, updated_at) VALUES ('${USER_ID}', ${TENANT_ID}, 1, 'admin', true, now(), now()) ON CONFLICT (keycloak_user_id, tenant_id, company_id) DO UPDATE SET is_active = true, updated_at = CURRENT_TIMESTAMP;" 2>&1
|
|
|
|
|
|
|
|
|
|
echo -e "${GREEN}✓ Relación usuario-tenant creada en la base de datos${NC}"
|
|
|
|
|
|
|
|
|
|
@@ -609,5 +602,5 @@ echo -e "\n${YELLOW}Configuración del usuario demo:${NC}"
|
|
|
|
|
echo -e " ${GREEN}✓${NC} tenant_id actualizado al ID real: ${TENANT_ID}"
|
|
|
|
|
echo -e " ${GREEN}✓${NC} Relación usuario-tenant creada (rol: admin)"
|
|
|
|
|
echo -e "\n${YELLOW}Puedes acceder al sistema en:${NC}"
|
|
|
|
|
echo -e " ${GREEN}http://localhost:5180${NC}"
|
|
|
|
|
echo -e " ${GREEN}http://localhost:5173${NC}"
|
|
|
|
|
echo -e "\n${GREEN}════════════════════════════════════════════════════════${NC}\n"
|
|
|
|
|
|