102 lines
2.7 KiB
Bash
Executable File
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!"
|