Öffnungszeiten: Index idx_feature für die Erinnerungsmerker

Task 9 löscht die Merker einer Funktion per featureId; Appwrite verlangt dafür einen Index.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-04 23:26:30 +00:00
1 parent 4b4cd1058f
commit 2314f7d940
2 files changed
+12 -4

No files matched your search

+2 -2
View File
@@ -40,10 +40,10 @@ export const ZEITEN_COLLECTIONS = {
// Erinnerungsmerker der Feiertags-Mail; Dokument-ID = sha1(featureId|datum) gekuerzt (anlegen mit 409 = schon
// erinnert). datum = Kalendertag 'YYYY-MM-DD' (Berliner Zeit); der Tagesjob loescht Merker, deren Datum > 30 Tage
// zurueckliegt (idx_datum).
// zurueckliegt (idx_datum); idx_feature: Loeschung der Merker einer Funktion (Kunden-Loeschen).
zeitenErinnerungen: {
attributes: [str('featureId', 64), str('datum', 10), dt('createdAt')],
indexes: [index('idx_datum', 'datum')],
indexes: [index('idx_datum', 'datum'), index('idx_feature', 'featureId')],
},
}
+10 -2
View File
@@ -113,7 +113,11 @@ test('zeitenErinnerungen: featureId, datum, createdAt', () => {
assert.deepEqual(byKey.featureId, { key: 'featureId', type: 'string', size: 64, required: false })
assert.deepEqual(byKey.datum, { key: 'datum', type: 'string', size: 10, required: false })
assert.deepEqual(byKey.createdAt, { key: 'createdAt', type: 'datetime', required: false })
assert.deepEqual(ZEITEN_COLLECTIONS.zeitenErinnerungen.indexes, [{ key: 'idx_datum', type: 'key', attributes: ['datum'] }])
assert.deepEqual(ZEITEN_COLLECTIONS.zeitenErinnerungen.indexes, [
{ key: 'idx_datum', type: 'key', attributes: ['datum'] },
// Task 9 loescht die Merker einer Funktion per featureId (Appwrite verlangt dafuer einen Index)
{ key: 'idx_feature', type: 'key', attributes: ['featureId'] },
])
})
test('portalFeatures bekommt unlockedBy(8), aboEndeAt, einbau(12), behaltenSessionId(128), k24At', () => {
@@ -193,6 +197,7 @@ test('main legt auf leerer Datenbank 2 Collections, alle Attribute und Indizes a
assert.deepEqual([...client.calls.indexes].sort(), [...expectedIndexes].sort())
assert.ok(client.calls.indexes.includes('oeffnungszeiten.idx_customer'))
assert.ok(client.calls.indexes.includes('zeitenErinnerungen.idx_datum'))
assert.ok(client.calls.indexes.includes('zeitenErinnerungen.idx_feature'))
assert.equal(result.missing.length, expectedAttrs.length)
assert.deepEqual(result.missingCollections, NAMES)
assert.equal(result.missingIndexes.length, expectedIndexes.length)
@@ -221,7 +226,10 @@ test('main legt nur fehlende Attribute und Indizes einer vorhandenen Collection
await main({ client, log: quiet })
assert.ok(!client.calls.collections.some((c) => c.id === 'zeitenErinnerungen'))
assert.deepEqual(client.calls.attrs.filter((k) => k.startsWith('zeitenErinnerungen.')), ['zeitenErinnerungen.createdAt'])
assert.deepEqual(client.calls.indexes.filter((k) => k.startsWith('zeitenErinnerungen.')), ['zeitenErinnerungen.idx_datum'])
assert.deepEqual(
client.calls.indexes.filter((k) => k.startsWith('zeitenErinnerungen.')),
['zeitenErinnerungen.idx_datum', 'zeitenErinnerungen.idx_feature'],
)
assert.deepEqual(
client.calls.attrs.filter((k) => k.startsWith(`${featuresId}.`)),
[`${featuresId}.aboEndeAt`, `${featuresId}.behaltenSessionId`, `${featuresId}.k24At`],