diff --git a/server/src/index.ts b/server/src/index.ts index e45751f..39f4dca 100644 --- a/server/src/index.ts +++ b/server/src/index.ts @@ -34,14 +34,17 @@ app.listen(server.port, () => { console.log(' NocoDB: configured'); console.log(' POST /api/etl/sync?mode=full|incremental'); // Ensure Users table has permission fields - discoverTableIds().then(tables => { - if (tables['Users']) { - return ensureTableFields(tables['Users'], [ - { title: 'AllowedMuseums', uidt: 'LongText' }, - { title: 'AllowedChannels', uidt: 'LongText' }, - ]); - } - }).catch(err => console.warn(' NocoDB migration warning:', err.message)); + // Delay slightly to ensure NocoDB is fully ready before migrating + setTimeout(() => { + discoverTableIds().then(tables => { + if (tables['Users']) { + return ensureTableFields(tables['Users'], [ + { title: 'AllowedMuseums', uidt: 'LongText' }, + { title: 'AllowedChannels', uidt: 'LongText' }, + ]); + } + }).catch(err => console.warn(' NocoDB migration warning:', err.message)); + }, 3000); } else { console.log(' NocoDB: WARNING — not configured'); } diff --git a/server/src/services/nocodbClient.ts b/server/src/services/nocodbClient.ts index c97bb57..1981ae5 100644 --- a/server/src/services/nocodbClient.ts +++ b/server/src/services/nocodbClient.ts @@ -126,13 +126,14 @@ export async function fetchAllRecords(tableId: string): Promise { } export async function ensureTableFields(tableId: string, fields: Array<{ title: string; uidt: string }>): Promise { - const json = await fetchJson( - `${nocodb.url}/api/v2/tables/${tableId}/fields` - ) as { list: Array<{ title: string }> }; - const existing = new Set(json.list.map(f => f.title)); + // GET /api/v2/meta/tables/{id} returns table with columns array + const table = await fetchJson( + `${nocodb.url}/api/v2/meta/tables/${tableId}` + ) as { columns: Array<{ title: string }> }; + const existing = new Set((table.columns || []).map(f => f.title)); for (const field of fields) { if (!existing.has(field.title)) { - await fetchJson(`${nocodb.url}/api/v2/tables/${tableId}/fields`, { + await fetchJson(`${nocodb.url}/api/v2/meta/tables/${tableId}/columns`, { method: 'POST', body: JSON.stringify(field), });