Buchungskalender: große Felder als TEXT (Zeilenbreite in Appwrite)
ukAnfragen überschritt mit gast/posten/stornobedingungenText als VARCHAR die MariaDB-Zeilenbreite von 65535 Byte; das Setup brach in Produktion nach 22 Attributen ab. Test sichert die Breite aller Collections ab. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
69df9e7046
commit
b264d7f734
2 files changed
+17
-6
No files matched your search
@@ -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'),
|
||||
|
||||
@@ -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ß`)
|
||||
}
|
||||
})
|
||||
Reference in new issue
Block a user