80 lines
2.6 KiB
Bash
Executable File
80 lines
2.6 KiB
Bash
Executable File
#!/bin/bash
|
|
# Attach a file to a gantt board task
|
|
# Usage: ./attach-file.sh <task-id> <file-path>
|
|
|
|
SUPABASE_URL="https://qnatchrjlpehiijwtreh.supabase.co"
|
|
SERVICE_KEY="eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InFuYXRjaHJqbHBlaGlpand0cmVoIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc3MTY0MDQzNiwiZXhwIjoyMDg3MjE2NDM2fQ.rHoc3NfL59S4lejU4-ArSzox1krQkQG-TnfXb6sslm0"
|
|
|
|
HEADERS=(-H "apikey: $SERVICE_KEY" -H "Authorization: Bearer $SERVICE_KEY" -H "Content-Type: application/json")
|
|
|
|
TASK_ID="$1"
|
|
FILE_PATH="$2"
|
|
|
|
if [[ -z "$TASK_ID" || -z "$FILE_PATH" ]]; then
|
|
echo "Usage: $0 <task-id> <file-path>"
|
|
exit 1
|
|
fi
|
|
|
|
if [[ ! -f "$FILE_PATH" ]]; then
|
|
echo "Error: File not found: $FILE_PATH"
|
|
exit 1
|
|
fi
|
|
|
|
FILENAME=$(basename "$FILE_PATH")
|
|
# Determine MIME type based on extension
|
|
EXTENSION="${FILENAME##*.}"
|
|
case "$EXTENSION" in
|
|
md|markdown) MIME_TYPE="text/markdown" ;;
|
|
txt) MIME_TYPE="text/plain" ;;
|
|
json) MIME_TYPE="application/json" ;;
|
|
pdf) MIME_TYPE="application/pdf" ;;
|
|
png) MIME_TYPE="image/png" ;;
|
|
jpg|jpeg) MIME_TYPE="image/jpeg" ;;
|
|
gif) MIME_TYPE="image/gif" ;;
|
|
*) MIME_TYPE="application/octet-stream" ;;
|
|
esac
|
|
|
|
# Convert file to base64 data URL
|
|
BASE64_CONTENT=$(base64 -i "$FILE_PATH" | tr -d '\n')
|
|
DATA_URL="data:$MIME_TYPE;base64,$BASE64_CONTENT"
|
|
|
|
# Generate attachment ID and timestamp
|
|
ATTACHMENT_ID=$(uuidgen | tr '[:upper:]' '[:lower:]')
|
|
NOW=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
|
|
FILE_SIZE=$(stat -f%z "$FILE_PATH")
|
|
|
|
# Get current task attachments
|
|
echo "Fetching current task..."
|
|
CURRENT_ATTACHMENTS=$(curl -s "$SUPABASE_URL/rest/v1/tasks?id=eq.$TASK_ID&select=attachments" "${HEADERS[@]}" | jq 'if type == "array" then .[0].attachments // [] else .attachments // [] end')
|
|
|
|
# Create new attachment object (field names must match UI expectations)
|
|
NEW_ATTACHMENT=$(jq -n \
|
|
--arg id "$ATTACHMENT_ID" \
|
|
--arg name "$FILENAME" \
|
|
--arg type "$MIME_TYPE" \
|
|
--argjson size "$FILE_SIZE" \
|
|
--arg dataUrl "$DATA_URL" \
|
|
--arg uploadedAt "$NOW" \
|
|
'{
|
|
id: $id,
|
|
name: $name,
|
|
type: $type,
|
|
size: $size,
|
|
dataUrl: $dataUrl,
|
|
uploadedAt: $uploadedAt
|
|
}')
|
|
|
|
# Merge with existing attachments
|
|
UPDATED_ATTACHMENTS=$(echo "$CURRENT_ATTACHMENTS" | jq --argjson new "$NEW_ATTACHMENT" '. + [$new]')
|
|
|
|
# Update task
|
|
echo "Attaching file to task..."
|
|
curl -s -X PATCH "$SUPABASE_URL/rest/v1/tasks?id=eq.$TASK_ID" \
|
|
"${HEADERS[@]}" \
|
|
-d "{\"attachments\": $UPDATED_ATTACHMENTS, \"updated_at\": \"$NOW\"}" | jq '.'
|
|
|
|
echo ""
|
|
echo "✅ Attached: $FILENAME"
|
|
echo " Size: $FILE_SIZE bytes"
|
|
echo " Type: $MIME_TYPE"
|