Services: Admin-Compliance, Backend-Compliance, AI-Compliance-SDK, Consent-SDK, Developer-Portal, PCA-Platform, DSMS Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
68 lines
2.4 KiB
TypeScript
68 lines
2.4 KiB
TypeScript
// =============================================================================
|
|
// TOM Generator Evidence Store
|
|
// Shared in-memory storage for evidence documents
|
|
// =============================================================================
|
|
|
|
import { EvidenceDocument, DocumentType } from './types'
|
|
|
|
interface StoredEvidence {
|
|
tenantId: string
|
|
documents: EvidenceDocument[]
|
|
}
|
|
|
|
class InMemoryEvidenceStore {
|
|
private store: Map<string, StoredEvidence> = new Map()
|
|
|
|
async getAll(tenantId: string): Promise<EvidenceDocument[]> {
|
|
const stored = this.store.get(tenantId)
|
|
return stored?.documents || []
|
|
}
|
|
|
|
async getById(tenantId: string, documentId: string): Promise<EvidenceDocument | null> {
|
|
const stored = this.store.get(tenantId)
|
|
return stored?.documents.find((d) => d.id === documentId) || null
|
|
}
|
|
|
|
async add(tenantId: string, document: EvidenceDocument): Promise<EvidenceDocument> {
|
|
const stored = this.store.get(tenantId) || { tenantId, documents: [] }
|
|
stored.documents.push(document)
|
|
this.store.set(tenantId, stored)
|
|
return document
|
|
}
|
|
|
|
async update(tenantId: string, documentId: string, updates: Partial<EvidenceDocument>): Promise<EvidenceDocument | null> {
|
|
const stored = this.store.get(tenantId)
|
|
if (!stored) return null
|
|
|
|
const index = stored.documents.findIndex((d) => d.id === documentId)
|
|
if (index === -1) return null
|
|
|
|
stored.documents[index] = { ...stored.documents[index], ...updates }
|
|
this.store.set(tenantId, stored)
|
|
return stored.documents[index]
|
|
}
|
|
|
|
async delete(tenantId: string, documentId: string): Promise<boolean> {
|
|
const stored = this.store.get(tenantId)
|
|
if (!stored) return false
|
|
|
|
const initialLength = stored.documents.length
|
|
stored.documents = stored.documents.filter((d) => d.id !== documentId)
|
|
this.store.set(tenantId, stored)
|
|
return stored.documents.length < initialLength
|
|
}
|
|
|
|
async getByType(tenantId: string, type: DocumentType): Promise<EvidenceDocument[]> {
|
|
const stored = this.store.get(tenantId)
|
|
return stored?.documents.filter((d) => d.documentType === type) || []
|
|
}
|
|
|
|
async getByStatus(tenantId: string, status: string): Promise<EvidenceDocument[]> {
|
|
const stored = this.store.get(tenantId)
|
|
return stored?.documents.filter((d) => d.status === status) || []
|
|
}
|
|
}
|
|
|
|
// Singleton instance for the application
|
|
export const evidenceStore = new InMemoryEvidenceStore()
|