Files
net/complete-schema-setup.sh

102 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
# Spark Platform - Complete Schema Setup Script
# Usage: ./complete-schema-setup.sh [DIRECTUS_URL] [TOKEN]
# Defaults to hardcoded values if not provided
DIRECTUS_URL=${1:-"https://spark.jumpstartscaling.com"}
TOKEN=${2:-"oGn-0AZjenB900pfzQYH8zCbFwGw7flU"}
SCHEMA_FILE="unified_schema.json"
echo "🚀 Starting Complete Schema Setup..."
echo "Target: $DIRECTUS_URL"
echo ""
if [ ! -f "$SCHEMA_FILE" ]; then
echo "❌ Error: $SCHEMA_FILE not found!"
exit 1
fi
# Dependency check
if ! command -v jq &> /dev/null; then
echo "❌ Error: jq is required but not installed."
exit 1
fi
# Function to create a collection
create_collection() {
local name=$1
local meta=$2
echo "📦 Checking collection: $name"
# Construct payload
local payload=$(jq -n \
--arg name "$name" \
--argjson meta "$meta" \
'{collection: $name, meta: $meta, schema: {}}')
# Try to create
response=$(curl -s -k -x POST "$DIRECTUS_URL/collections" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "$payload")
if echo "$response" | grep -q "errors"; then
echo " → Exists or Error: $(echo $response | jq -r '.errors[0].message')"
else
echo " → Created successfully"
fi
}
# Function to create a field
create_field() {
local collection=$1
local field_name=$2
local field_def=$3
echo " 🔹 Field: $field_name"
response=$(curl -s -k -X POST "$DIRECTUS_URL/fields/$collection" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d "$field_def")
if echo "$response" | grep -q "errors"; then
# Ignore "field already exists" errors silently-ish
err=$(echo $response | jq -r '.errors[0].message')
if [[ "$err" != *"already exists"* ]]; then
echo " ⚠️ Error: $err"
fi
else
echo " → Created"
fi
}
# Main Loop over JSON
count=$(jq '. | length' $SCHEMA_FILE)
for ((i=0; i<$count; i++)); do
# Get collection details
name=$(jq -r ".[$i].collection" $SCHEMA_FILE)
meta=$(jq ".[$i].meta" $SCHEMA_FILE)
# Create Collection
create_collection "$name" "$meta"
# Get fields count
field_count=$(jq ".[$i].fields | length" $SCHEMA_FILE)
for ((j=0; j<$field_count; j++)); do
field_name=$(jq -r ".[$i].fields[$j].field" $SCHEMA_FILE)
field_def=$(jq ".[$i].fields[$j]" $SCHEMA_FILE)
# Create Field
create_field "$name" "$field_name" "$field_def"
done
echo ""
done
echo "✅ Schema Setup Complete!"