@startuml !include title Component Diagram: API Backend — Persons & Family Graph Container(frontend, "Web Frontend", "SvelteKit") ContainerDb(db, "PostgreSQL", "PostgreSQL 16") System_Boundary(backend, "API Backend (Spring Boot)") { Component(personCtrl, "PersonController", "Spring MVC — /api/persons", "Lists and searches family members. Returns documents sent by or received by a person, correspondent suggestions, and person summary with document counts.") Component(relCtrl, "RelationshipController", "Spring MVC — /api/network, /api/persons/{id}/relationships", "CRUD for explicit person relationships and the full family network graph (nodes + edges) used by the Stammbaum view.") Component(personSvc, "PersonService", "Spring Service", "Person CRUD, alias management, and merge operations (reassigns all document sender/receiver references before deleting duplicate persons).") Component(relSvc, "RelationshipService", "Spring Service", "Manages explicit directional family relationships (PARENT_OF, SPOUSE_OF, SIBLING_OF, etc.) with optional date ranges and notes.") Component(relInference, "RelationshipInferenceService", "Spring Service", "Computes transitive family relationships from explicit edges to infer grandparent/grandchild, aunt/uncle, and other extended-family links for the network graph.") Component(personRepo, "PersonRepository", "Spring Data JPA", "Queries persons with name search (including aliases), correspondent discovery, person summaries with document counts, and merge/reassignment helpers.") Component(relRepo, "PersonRelationshipRepository", "Spring Data JPA", "Reads and writes PersonRelationship records. Supports lookup by person ID, by relation type, and existence checks for deduplication.") } Rel(frontend, personCtrl, "Person requests", "HTTP / JSON") Rel(frontend, relCtrl, "Relationship and graph requests", "HTTP / JSON") Rel(personCtrl, personSvc, "Delegates to") Rel(relCtrl, relSvc, "Delegates to") Rel(relCtrl, relInference, "Queries inferred graph") Rel(personSvc, personRepo, "Reads / writes persons") Rel(relSvc, relRepo, "Reads / writes relationships") Rel(relInference, relRepo, "Reads relationships for inference") Rel(personRepo, db, "SQL queries", "JDBC") Rel(relRepo, db, "SQL queries", "JDBC") @enduml