31 lines
2.3 KiB
Plaintext
31 lines
2.3 KiB
Plaintext
@startuml
|
|
!include <C4/C4_Component>
|
|
|
|
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
|