Files
familienarchiv/docs/architecture/c4/l3-backend-timeline.puml
Marcel 1de314f49b
All checks were successful
CI / Unit & Component Tests (pull_request) Successful in 3m42s
CI / OCR Service Tests (pull_request) Successful in 23s
CI / Backend Unit Tests (pull_request) Successful in 4m47s
CI / Semgrep Security Scan (pull_request) Successful in 22s
CI / fail2ban Regex (pull_request) Successful in 47s
CI / Compose Bucket Idempotency (pull_request) Successful in 1m6s
SDD Gate / RTM Check (pull_request) Successful in 14s
SDD Gate / Contract Validate (pull_request) Successful in 24s
SDD Gate / Constitution Impact (pull_request) Successful in 16s
docs(timeline): RTM, CLAUDE.md, and C4 updates for #777 assembly endpoint
- Add 20 REQ-NNN rows for issue #777 (all Done) to .specify/rtm.md
- Update CLAUDE.md timeline package description with TimelineService/TimelineController
- Extend l3-backend-timeline.puml with TimelineService/TimelineController components
  and their edges to PersonService and DocumentService

Refs #777
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-13 16:46:24 +02:00

3.0 KiB

Component Diagram: API Backend — Timeline (Zeitstrahl)Component Diagram: API Backend — Timeline (Zeitstrahl)API Backend (Spring Boot)[system]«component»TimelineEventRepository[Spring Data JPA] Reads and writesTimelineEvent rows andtheir persons/documentsjoin tables(timeline_event_persons,timeline_event_documents).«component»TimelineEventService[Spring Service] Owns curated-event CRUD:assemblesTimelineEventView insidethe transaction (lazyManyToMany +open-in-view=false,ADR-036/ADR-040),populatescreatedBy/updatedBy fromthe session principal, andtranslates optimistic-lockconflicts toDomainException.conflict.Also exposesassembleDerivedEvents():computesGeburt/Tod/HeiratTimelineEntryDTOs on readfromPerson/PersonRelationshipdata â€” never persisted(ADR-043).«component»TimelineEventController[Spring MVC] Exposes/api/timeline/events reads(READ_ALL) and writes(WRITE_ALL).createdBy/updatedBy arenever bound from requestbodies (CWE-639).«component»TimelineService[Spring Service] Assembles GET /api/timelineresponse: merges curatedTimelineEvent rows, derivedlife-events (viaTimelineEventService), andarchive letters (viaDocumentService) into ayear-bucketedTimelineDTO. AppliespersonId, generation, type,fromYear/toYear filters.WITHIN_BAND_ORDER:precision rank desc â†’date asc â†’ title alpha â†’id tiebreak.«component»TimelineController[Spring MVC] Exposes GET /api/timeline(READ_ALL). Five optionalquery params: personId,generation (@Min(0)), type(EventType enum),fromYear, toYear.@Validated on class forconstraint enforcement.«container»PostgreSQL[PostgreSQL 16]«external_system»Document domain Provides DatePrecision(shared value type),Document references forlinked letters, andgetAllForTimeline() bulkfetch«external_system»Person domain Provides Person references(PersonService.findAllFamilyMembers,getPersonsByGeneration,getById) and SPOUSE_OFedges(RelationshipService.findAllSpouseEdges)for derived-event assemblyand generation filteringSQL queries[JDBC]Reads / writes eventsDelegates toReferences personsvia join tableReferencesdocuments via jointablefindAllFamilyMembers()+findAllSpouseEdges()for derived-eventassemblyDelegates tofindAll() for curatedeventsassembleDerivedEvents()for derivedlife-eventsgetPersonsByGeneration(),getById() forgeneration/personIdfiltersgetAllForTimeline(),getDocumentsBySender(),getDocumentsByReceiver()for letter layer