Files
portfolio/scripts/master-setup-book-reviews.js
denshooter 931843a5c6
Some checks failed
Dev Deployment (Zero Downtime) / deploy-dev (push) Has been cancelled
fix: add missing readBooks translations
2026-02-16 00:37:34 +01:00

47 lines
2.9 KiB
JavaScript

#!/usr/bin/env node
require('dotenv').config();
const DIRECTUS_URL = process.env.DIRECTUS_URL || 'https://cms.dk0.dev';
const DIRECTUS_TOKEN = process.env.DIRECTUS_STATIC_TOKEN;
async function api(endpoint, method = 'GET', body = null) {
const url = `${DIRECTUS_URL}/${endpoint}`;
const options = {
method,
headers: { 'Authorization': `Bearer ${DIRECTUS_TOKEN}`, 'Content-Type': 'application/json' }
};
if (body) options.body = JSON.stringify(body);
const response = await fetch(url, options);
const data = await response.json();
return { ok: response.ok, data };
}
async function masterSetup() {
console.log('🚀 Starte Master-Setup...');
await api('collections', 'POST', { collection: 'book_reviews', meta: { icon: 'import_contacts', display_template: '{{book_title}}' } });
await api('fields/book_reviews', 'POST', { field: 'id', type: 'integer', schema: { is_primary_key: true, has_auto_increment: true }, meta: { hidden: true } });
const fields = [
{ field: 'status', type: 'string', meta: { interface: 'select-dropdown', options: { choices: [{text: 'Published', value: 'published'}, {text: 'Draft', value: 'draft'}] } }, schema: { default_value: 'draft' } },
{ field: 'book_title', type: 'string', meta: { interface: 'input' } },
{ field: 'book_author', type: 'string', meta: { interface: 'input' } },
{ field: 'book_image', type: 'string', meta: { interface: 'input' } },
{ field: 'rating', type: 'integer', meta: { interface: 'rating' } },
{ field: 'hardcover_id', type: 'string', meta: { interface: 'input' }, schema: { is_unique: true } },
{ field: 'finished_at', type: 'date', meta: { interface: 'datetime' } }
];
for (const f of fields) await api('fields/book_reviews', 'POST', f);
await api('collections', 'POST', { collection: 'book_reviews_translations', meta: { hidden: true } });
await api('fields/book_reviews_translations', 'POST', { field: 'id', type: 'integer', schema: { is_primary_key: true, has_auto_increment: true }, meta: { hidden: true } });
await api('fields/book_reviews_translations', 'POST', { field: 'book_reviews_id', type: 'integer' });
await api('fields/book_reviews_translations', 'POST', { field: 'languages_code', type: 'string' });
await api('fields/book_reviews_translations', 'POST', { field: 'review', type: 'text', meta: { interface: 'input-rich-text-html' } });
await api('relations', 'POST', { collection: 'book_reviews_translations', field: 'book_reviews_id', related_collection: 'book_reviews', meta: { one_field: 'translations' } });
await api('relations', 'POST', { collection: 'book_reviews_translations', field: 'languages_code', related_collection: 'languages' });
await api('fields/book_reviews', 'POST', { field: 'translations', type: 'alias', meta: { interface: 'translations', special: ['translations'] } });
console.log('✨ Setup abgeschlossen! Bitte lade Directus neu und setze die Public-Permissions.');
}
masterSetup().catch(console.error);