Kern-Entitaeten (Dokument, Datei-Revision, Ordner, Tag, Metadatenfeld) als tenant-scoped SQL-Migration (Modell C, keine tenant_id-Spalte), FK auf users(id) aus Core IAM-01 (Auth bleibt vollstaendig in Core). Eigener, minimaler Migrations-Runner (internal/migrate, kein ORM) mit schema_migrations-Tracking fuer Idempotenz. Seed-Skript fuer Entwicklung. Auf 192.168.1.131 verifiziert: Migration auf leerer+bestehender DB, Rollback stellt Vorzustand wieder her, 4 FK-Negativtests, Seed-Skript end-to-end gegen frische DB. go.sum committet (Lock-Datei-Lehre aus dem Ticket). build/vet/lint/test clean. Siehe dms/docs/FDN-02-PRUEFPROTOKOLL.md fuer alle Pruefungsergebnisse. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HhgFcLS8tYMhDJpP74C6AQ
44 lines
2.0 KiB
SQL
44 lines
2.0 KiB
SQL
-- Entwicklungs-Seed (Akzeptanzkriterium 3): legt einen Beispielordner, ein
|
|
-- Beispieldokument mit einer Revision, ein Tag und ein Metadatenfeld an.
|
|
-- Setzt voraus, dass mindestens ein Benutzer existiert (Core IAM-01 legt
|
|
-- users an, DMS tut das nicht selbst - siehe "Nicht Bestandteil" in
|
|
-- FDN-02) - schlaegt sonst absichtlich mit einer sprechenden Fehlermeldung
|
|
-- fehl statt einen Platzhalter-Benutzer anzulegen, den DMS gar nicht
|
|
-- verwalten darf.
|
|
DO $$
|
|
DECLARE
|
|
seed_user_id UUID;
|
|
seed_folder_id UUID;
|
|
seed_document_id UUID;
|
|
BEGIN
|
|
SELECT id INTO seed_user_id FROM users ORDER BY created_at LIMIT 1;
|
|
IF seed_user_id IS NULL THEN
|
|
RAISE EXCEPTION 'dev_seed.sql: keine Zeile in users gefunden - zuerst Core-Seed (IAM-01) ausfuehren';
|
|
END IF;
|
|
|
|
INSERT INTO folders (name, created_by) VALUES ('Beispielordner', seed_user_id)
|
|
RETURNING id INTO seed_folder_id;
|
|
|
|
INSERT INTO documents (folder_id, title, created_by) VALUES (seed_folder_id, 'Beispieldokument', seed_user_id)
|
|
RETURNING id INTO seed_document_id;
|
|
|
|
INSERT INTO file_revisions (document_id, revision_number, storage_key, checksum_sha256, size_bytes, mime_type, created_by)
|
|
VALUES (seed_document_id, 1, 'dev-seed/beispiel.pdf', repeat('0', 64), 12345, 'application/pdf', seed_user_id);
|
|
|
|
UPDATE documents SET current_revision_id = (
|
|
SELECT id FROM file_revisions WHERE document_id = seed_document_id AND revision_number = 1
|
|
) WHERE id = seed_document_id;
|
|
|
|
INSERT INTO tags (name) VALUES ('Beispiel-Tag')
|
|
ON CONFLICT (name) DO NOTHING;
|
|
|
|
INSERT INTO document_tags (document_id, tag_id)
|
|
SELECT seed_document_id, id FROM tags WHERE name = 'Beispiel-Tag';
|
|
|
|
INSERT INTO metadata_fields (field_key, label, field_type) VALUES ('rechnungsnummer', 'Rechnungsnummer', 'text')
|
|
ON CONFLICT (field_key) DO NOTHING;
|
|
|
|
INSERT INTO document_metadata_values (document_id, field_id, value)
|
|
SELECT seed_document_id, id, 'RE-2026-0001' FROM metadata_fields WHERE field_key = 'rechnungsnummer';
|
|
END $$;
|