diff --git a/server/services/unterkunft/schema.js b/server/services/unterkunft/schema.js index f3b7085..5f4a0b3 100644 --- a/server/services/unterkunft/schema.js +++ b/server/services/unterkunft/schema.js @@ -73,9 +73,9 @@ export const UNTERKUNFT_COLLECTIONS = { str('bis', 10), int('personen'), str('status', 12), - str('gast', 3000), + str('gast', 20000), str('rechnungsadresse', 1500), - str('posten', 8000), + str('posten', 20000), str('summen', 1000), str('nachrichtVermieter', 2000), dt('fristAt'), @@ -87,7 +87,7 @@ export const UNTERKUNFT_COLLECTIONS = { str('stripePaymentIntentId', 100), int('erstattetCent'), str('stornoGrund', 500), - str('stornobedingungenText', 5000), + str('stornobedingungenText', 20000), str('rechtstexteFassung', 20), str('ipHash', 16), dt('freigegebenAt'), diff --git a/test/unterkunftSetup.test.js b/test/unterkunftSetup.test.js index 6c47479..1785217 100644 --- a/test/unterkunftSetup.test.js +++ b/test/unterkunftSetup.test.js @@ -101,9 +101,9 @@ test('Schema: Typen und Groessen', () => { ukPreise: { unterkunftId: 36, staffeln: 2000, steuerart: 20, stornobedingungen: 5000 }, ukSperren: { von: 10, bis: 10, quelle: 60, notiz: 200 }, ukAnfragen: { - nummer: 12, status: 12, gast: 3000, rechnungsadresse: 1500, posten: 8000, summen: 1000, nachrichtVermieter: 2000, + nummer: 12, status: 12, gast: 20000, rechnungsadresse: 1500, posten: 20000, summen: 1000, nachrichtVermieter: 2000, tokenHash: 64, zahlart: 8, bezahltVia: 8, stripeSessionId: 100, stripePaymentIntentId: 100, stornoGrund: 500, - stornobedingungenText: 5000, rechtstexteFassung: 20, ipHash: 16, rechnungId: 36, + stornobedingungenText: 20000, rechtstexteFassung: 20, ipHash: 16, rechnungId: 36, }, ukRechnungen: { art: 8, nummer: 24, datum: 10, inhalt: 20000 }, ukEinstellungen: { @@ -200,7 +200,7 @@ test('main legt auf leerer Datenbank 6 Collections, alle Attribute und Indizes a assert.deepEqual(result.missingCollections, NAMES) assert.equal(result.missingIndexes.length, expectedIndexes.length) assert.deepEqual(client.state.get('ukAnfragen').attrs.get('fristAt'), { key: 'fristAt', type: 'datetime', required: false }) - assert.deepEqual(client.state.get('ukAnfragen').attrs.get('gast'), { key: 'gast', type: 'string', size: 3000, required: false }) + assert.deepEqual(client.state.get('ukAnfragen').attrs.get('gast'), { key: 'gast', type: 'string', size: 20000, required: false }) }) test('main: zweiter Lauf legt nichts mehr an', async () => { @@ -252,3 +252,14 @@ test('main: fehlendes termineOutbox.anhang wird gemeldet (--check, Exit-relevant assert.ok(hinweise.some((l) => l.includes('termine-setup'))) assert.ok(!r.missing.some((a) => a.key === 'anhang')) }) + +test('Schema: jede Collection bleibt unter der Zeilenbreite von Appwrite/MariaDB', async () => { + // Appwrite legt Strings bis 16381 Zeichen als VARCHAR (4 Byte je Zeichen) an; die Zeile darf 65535 Byte nicht + // überschreiten, dazu kommen interne Spalten. Längere Strings werden TEXT und zählen nicht mit. + const { UNTERKUNFT_COLLECTIONS } = await import('../server/services/unterkunft/schema.js') + for (const [name, c] of Object.entries(UNTERKUNFT_COLLECTIONS)) { + let breite = 0 + for (const a of c.attributes) breite += a.type === 'string' ? (a.size > 16381 ? 0 : a.size * 4) : 8 + assert.ok(breite <= 56000, `${name}: Zeilenbreite ${breite} Byte zu groß`) + } +})