package store import ( "context" "fmt" "time" ) // EvidencePackage ist das Ergebnis der Archivierung eines Beitrags: // Dossier-Pfad, Hash der kanonisierten Metadaten und RFC-3161-Token. // Append-only: siehe Migration. type EvidencePackage struct { ID string SubmissionID string DossierPath string SHA256 string TimestampToken []byte CreatedAt time.Time } // CreateEvidencePackage speichert ein EvidencePackage. func (s *Store) CreateEvidencePackage(ctx context.Context, submissionID, dossierPath, sha256Hex string, timestampToken []byte) (EvidencePackage, error) { var e EvidencePackage err := s.Pool.QueryRow(ctx, ` INSERT INTO evidence_package (submission_id, dossier_path, sha256, timestamp_token) VALUES ($1, $2, $3, $4) RETURNING id, submission_id, dossier_path, sha256, timestamp_token, created_at `, submissionID, dossierPath, sha256Hex, timestampToken).Scan( &e.ID, &e.SubmissionID, &e.DossierPath, &e.SHA256, &e.TimestampToken, &e.CreatedAt, ) if err != nil { return EvidencePackage{}, fmt.Errorf("store: create evidence package: %w", err) } return e, nil } // GetLatestEvidencePackage liefert das zuletzt erzeugte EvidencePackage // für einen Beitrag. func (s *Store) GetLatestEvidencePackage(ctx context.Context, submissionID string) (EvidencePackage, error) { var e EvidencePackage err := s.Pool.QueryRow(ctx, ` SELECT id, submission_id, dossier_path, sha256, timestamp_token, created_at FROM evidence_package WHERE submission_id = $1 ORDER BY created_at DESC LIMIT 1 `, submissionID).Scan( &e.ID, &e.SubmissionID, &e.DossierPath, &e.SHA256, &e.TimestampToken, &e.CreatedAt, ) if err != nil { return EvidencePackage{}, fmt.Errorf("store: get latest evidence package: %w", err) } return e, nil }