Analyse: Freischalten, Abschalten, Abo-Pruefung

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-01 10:10:39 +00:00
1 parent 9e66f55c2c
commit f0eee196ed
10 files changed
+540 -32

No files matched your search

+4 -3
View File
@@ -45,7 +45,7 @@ function assertKey(key) {
}
/** state und enabled werden immer zusammen geschrieben. */
function stateFields(state) {
export function stateFields(state) {
return { state, enabled: state === 'active' }
}
@@ -71,7 +71,7 @@ export async function assertOwnProject(customerId, projectId) {
}
/** Dokument holen oder mit state 'off' und dauerhaftem siteKey anlegen. */
async function ensureFeatureDoc(customerId, projectId, key) {
export async function ensureFeatureDoc(customerId, projectId, key) {
const existing = await getFeatureDoc(customerId, projectId, key)
if (existing) return existing
try {
@@ -310,7 +310,7 @@ export async function adminActivate(customerId, projectId, key, { by, adminNote
/** Alle 'setup'-Funktionen (optional nur eines Kunden), deren Ticket 'Closed' ist, werden 'active'. */
export async function activateClosedTickets({ now = new Date(), customerId = null } = {}) {
const queries = [Query.equal('state', 'setup'), Query.limit(1000)]
const queries = [Query.equal('featureKey', 'news'), Query.equal('state', 'setup'), Query.limit(1000)]
if (customerId) queries.push(Query.equal('customerId', customerId))
const pending = await listDocuments(config.collections.portalFeatures, queries)
const activated = []
@@ -343,6 +343,7 @@ export async function findActiveBySiteKey(siteKey) {
if (!/^[a-z2-7]{16}$/.test(String(siteKey || ''))) return null
const [doc] = await listDocuments(config.collections.portalFeatures, [
Query.equal('siteKey', siteKey),
Query.equal('featureKey', 'news'),
Query.equal('state', 'active'),
Query.limit(1),
])