Files
familienarchiv/docs/architecture/db/db-relationships.puml
Marcel b9bed19610 feat(geschichte): bound title and JOURNEY intro at all three layers
Title: requireTitle() turns the VARCHAR(255) DB bound into a friendly 400
(GESCHICHTE_TITLE_TOO_LONG). JOURNEY intro: MAX_INTRO_LENGTH = 4000 in
bodyForType() plus a V75 CHECK as atomic backstop (defensive clamp first,
STORY bodies exempt) — GESCHICHTE_INTRO_TOO_LONG. Both codes wired through
ErrorCode.java, errors.ts, getErrorMessage and de/en/es. DB-layer boundary
pins added: exactly-2000 note insert (V74 CHECK) and 4000/4001 intro
inserts against real Postgres. Docs: error-code lists, db puml diagrams.

The matching maxlength attributes land with the component commits.

Review round 3: Markus (b), Nora (1), Sara (DB 2000 boundary).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-06-11 08:28:08 +02:00

4.4 KiB

AuthDocumentsPersonsTagsTranscriptionOCRSupportingapp_usersuser_groupsapp_users_groupsgroup_permissionspassword_reset_tokensinvite_tokensinvite_token_group_idsdocumentsdocument_receiversdocument_tagsdocument_versionsdocument_annotationsdocument_commentsdocument_training_labelscomment_mentionspersonsperson_name_aliasesperson_relationshipstagtranscription_blockstranscription_block_versionstranscription_block_mentioned_personsocr_jobsocr_job_documentsocr_training_runssender_modelsnotificationsaudit_loggeschichtengeschichten_personsjourney_itemspartial UNIQUE (geschichte_id, document_id)WHERE document_id IS NOT NULL (V74)CHECK length(body) <= 4000for type = JOURNEY (V75)app_user_idgroup_idgroup_idapp_user_idcreated_byinvite_token_idgroup_idsender_id (ON DELETE SET NULL)document_idperson_id (ON DELETE CASCADE)document_idtag_iddocument_ideditor_iddocument_idcreated_bydocument_idannotation_idblock_idauthor_idparent_iddocument_idcomment_idapp_user_idperson_idperson_idrelated_person_idparent_idannotation_iddocument_idcreated_byupdated_byblock_idchanged_byblock_idperson_id (ON DELETE CASCADE)job_iddocument_idtriggered_byperson_idperson_idrecipient_idactor_iddocument_idauthor_idgeschichte_idperson_idgeschichte_id (ON DELETE CASCADE)document_id (ON DELETE SET NULL)