42 lines
2.8 KiB
Plaintext
42 lines
2.8 KiB
Plaintext
@startuml
|
|
!include <C4/C4_Component>
|
|
|
|
title Component Diagram: API Backend — Users, Groups & Administration
|
|
|
|
Container(frontend, "Web Frontend", "SvelteKit")
|
|
ContainerDb(db, "PostgreSQL", "PostgreSQL 16")
|
|
|
|
System_Boundary(backend, "API Backend (Spring Boot)") {
|
|
Component(userCtrl, "UserController", "Spring MVC — /api/users", "Returns current user (/me), creates and deletes users (requires ADMIN_USER), supports user search and profile updates.")
|
|
Component(groupCtrl, "GroupController", "Spring MVC — /api/groups", "Lists and manages permission groups.")
|
|
Component(tagCtrl, "TagController", "Spring MVC — /api/tags", "Lists tags for typeahead, supports tag merge, tree structure, and subtree deletion.")
|
|
Component(inviteCtrl, "InviteController", "Spring MVC — /api/auth/invite", "Creates invite codes and validates them at registration time. Rate-limited via WebConfig interceptor.")
|
|
Component(authCtrl, "AuthController", "Spring MVC — /api/auth", "Handles user registration (POST /register) and password reset token endpoints (/forgot-password, /reset-password).")
|
|
Component(userSvc, "UserService", "Spring Service", "User CRUD with BCrypt password encoding, group assignment, and audit logging. Orchestrates invite-based registration and password reset tokens.")
|
|
Component(tagSvc, "TagService", "Spring Service", "Tag CRUD with name search, hierarchical tree structure, merge/reparent operations, and recursive subtree deletion.")
|
|
Component(dataInit, "DataInitializer", "CommandLineRunner", "On startup: creates default admin user and groups if none exist. Seeds test data if DB is empty.")
|
|
Component(userRepo, "AppUserRepository", "Spring Data JPA", "Finds users by email. Supports search by email or display name.")
|
|
Component(groupRepo, "UserGroupRepository", "Spring Data JPA", "Manages permission groups.")
|
|
Component(tagRepo, "TagRepository", "Spring Data JPA", "Finds or creates tags by name (case-insensitive). Supports recursive ancestor/descendant CTE queries and merge/reparent helpers.")
|
|
}
|
|
|
|
Rel(frontend, userCtrl, "User requests", "HTTP / JSON")
|
|
Rel(frontend, groupCtrl, "Group requests", "HTTP / JSON")
|
|
Rel(frontend, tagCtrl, "Tag requests", "HTTP / JSON")
|
|
Rel(frontend, inviteCtrl, "Invite validation", "HTTP / JSON")
|
|
Rel(frontend, authCtrl, "Registration and password reset", "HTTP / JSON")
|
|
Rel(userCtrl, userSvc, "Delegates to")
|
|
Rel(groupCtrl, userSvc, "Delegates to")
|
|
Rel(tagCtrl, tagSvc, "Delegates to")
|
|
Rel(tagSvc, tagRepo, "Reads / writes tags")
|
|
Rel(inviteCtrl, userSvc, "Creates and validates invites")
|
|
Rel(authCtrl, userSvc, "Registers users, resets passwords")
|
|
Rel(userSvc, userRepo, "Reads / writes users")
|
|
Rel(userSvc, groupRepo, "Assigns groups")
|
|
Rel(dataInit, db, "Seeds initial data", "JDBC")
|
|
Rel(userRepo, db, "SQL queries", "JDBC")
|
|
Rel(groupRepo, db, "SQL queries", "JDBC")
|
|
Rel(tagRepo, db, "SQL queries", "JDBC")
|
|
|
|
@enduml
|