This website requires JavaScript.
Component Diagram: API Backend â Timeline (Zeitstrahl) Component Diagram: API Backend â Timeline (Zeitstrahl) API Backend (Spring Boot) [system] «component» TimelineEventRepository [Spring Data JPA] Reads and writes TimelineEvent rows and their persons/documents join tables (timeline_event_persons, timeline_event_documents). «component» TimelineEventService [Spring Service] Owns curated-event CRUD: assembles TimelineEventView inside the transaction (lazy ManyToMany + open-in-view=false, ADR-036/ADR-040), populates createdBy/updatedBy from the session principal, and translates optimistic-lock conflicts to DomainException.conflict. Also exposes assembleDerivedEvents(): computes Geburt/Tod/Heirat TimelineEntryDTOs on read from Person/PersonRelationship data â never persisted (ADR-043). «component» TimelineEventController [Spring MVC] Exposes /api/timeline/events reads (READ_ALL) and writes (WRITE_ALL). createdBy/updatedBy are never bound from request bodies (CWE-639). «component» TimelineService [Spring Service] Assembles GET /api/timeline response: merges curated TimelineEvent rows, derived life-events (via TimelineEventService), and archive letters (via DocumentService) into a year-bucketed TimelineDTO. Applies personId, 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 optional query params: personId, generation (@Min(0)), type (EventType enum), fromYear, toYear. @Validated on class for constraint enforcement. «container» PostgreSQL [PostgreSQL 16] «external_system» Document domain Provides DatePrecision (shared value type), Document references for linked letters, and getAllForTimeline() bulk fetch «external_system» Person domain Provides Person references (PersonService.findAllFamilyMembers, getPersonsByGeneration, getById) and SPOUSE_OF edges (RelationshipService.findAllSpouseEdges) for derived-event assembly and generation filtering SQL queries [JDBC] Reads / writes events Delegates to References persons via join table References documents via join table findAllFamilyMembers() + findAllSpouseEdges() for derived-event assembly Delegates to findAll() for curated events assembleDerivedEvents() for derived life-events getPersonsByGeneration(), getById() for generation/personId filters getAllForTimeline(), getDocumentsBySender(), getDocumentsByReceiver() for letter layer