Building Block View

1. Whitebox Overall System

Architectural Overview
@startuml building-block-overview


together {
  rectangle "client" <<SCS>> as clients {
    component "client-scs" <<external>> as otherscs
    database "scs-db" <<external>> as db

    component "kp-users-client" <<Library>> as client
    component "kp-users-model" <<Library>> as model
    component "kp-users-store" <<Library>> as store
    component "kp-users-messaging" <<Library>> as messaging
  }
  component "amqp-broker" <<external>> as broker
  component "identity-provider" <<external>> as idp
}

rectangle "user-scs" <<SCS>> as userscs {
  component "kp-users-scs" <<SCS>> as scs

  component "kp-users-model" <<Library>> as authmodel
  component "kp-users-store" <<Library>> as authstore
  component "kp-users-messaging" <<Library>> as authmessaging

  database "auth-db" <<external>> as authdb
}


scs --> authstore : uses
scs --> authmessaging : uses
authstore --> authmodel : uses
authmessaging --> authmodel : uses


client --> store : uses
client --> messaging : uses
client ..> idp : uses
store --> model : uses
messaging --> model : uses

otherscs --> client : uses
otherscs --> db : owns

authmessaging <..> broker : communicates
messaging <..> broker : communicates

authstore --> authdb : owns
scs ..> idp : uses
store <..> db : uses

otherscs ..> scs : transcludes
otherscs ..> client : transcludes (fallback)

@enduml
Motivation

The system tries to separate the concerns of messaging, data storage and data model.

1.1. Contained Building Blocks

kp-users-model [ Level 1 | Level 2 | Level 3 ]
  • the data model

kp-users-store [ Level 1 | Level 2 | Level 3 ]
  • the data store

kp-users-messaging [ Level 1 | Level 2 | Level 3 ]
  • the messaging system between the SCS

kp-users-client [ Level 1 | Level 2 | Level 3 ]
  • the client to be used in all SCS

  • integration into Spring Boot Security as AuthenticationProvider

kp-users-scs [ Level 1 | Level 2 | Level 3 ]
  • management UI

  • authoritative data source for the system.

1.2. Important Interfaces

IDs

IDs throughout the system are UUID, not the simple numbers used by other systems. Reason is, that the ID should be generated on first creation of an object and UUID is a nice way to handle that distribution.