/** * Legt nur den Storage-Bucket für Kommentar-Anhänge an (ohne komplettes Setup). * Benötigt .env mit APPWRITE_ENDPOINT, VITE_APPWRITE_PROJECT_ID, APPWRITE_API_KEY. */ import { Client, Storage, Permission, Role } from 'node-appwrite'; import { readFileSync } from 'fs'; import { resolve, dirname } from 'path'; import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); function loadEnv() { const envPath = resolve(__dirname, '..', '.env'); const lines = readFileSync(envPath, 'utf-8').split('\n'); for (const line of lines) { const trimmed = line.trim(); if (!trimmed || trimmed.startsWith('#')) continue; const eqIdx = trimmed.indexOf('='); if (eqIdx === -1) continue; const key = trimmed.slice(0, eqIdx).trim(); const value = trimmed.slice(eqIdx + 1).trim(); process.env[key] = value; } } loadEnv(); const ENDPOINT = process.env.APPWRITE_ENDPOINT; const PROJECT_ID = process.env.VITE_APPWRITE_PROJECT_ID; const API_KEY = process.env.APPWRITE_API_KEY; const BUCKET_ID = process.env.VITE_APPWRITE_ATTACHMENTS_BUCKET_ID || 'defekttrack_anhaenge'; if (!ENDPOINT || !PROJECT_ID || !API_KEY) { console.error('Bitte APPWRITE_ENDPOINT, VITE_APPWRITE_PROJECT_ID und APPWRITE_API_KEY in .env setzen.'); process.exit(1); } const client = new Client().setEndpoint(ENDPOINT).setProject(PROJECT_ID).setKey(API_KEY); const storageService = new Storage(client); async function main() { try { await storageService.createBucket({ bucketId: BUCKET_ID, name: 'DefektTrack Kommentar-Anhänge', permissions: [Permission.read(Role.users()), Permission.create(Role.users())], fileSecurity: false, enabled: true, maximumFileSize: 15 * 1024 * 1024, allowedFileExtensions: ['jpg', 'jpeg', 'png', 'gif', 'webp', 'pdf'], }); console.log(`Bucket erstellt: ${BUCKET_ID}`); } catch (err) { if (err.code === 409) { console.log(`Bucket existiert bereits: ${BUCKET_ID}`); } else { console.error('Fehler:', err.message || err); process.exit(1); } } } main();