@startuml 'maybe for sneidc since he did videoshop:cahnge-password' skinparam linetype ortho skinparam groupInheritance 2 package Salespoint { interface UserAccountManagement interface DataInitalizer class UserAccount class AbstractAggregateRoot class Role } package Spring { class CrudRepository class Streamable } package catering.users { class User { - address : String + User(userAccount : UserAccount, address : String) + User() + getAddress() : String + setAddress(address:String) : String + getUsername() : String + setUsername(username:String) : boolean + getUserAccount() : UserAccount + getId() : UserIdentifier + isEnabled() : boolean + hasRole(role:String) : boolean } User ..> Role : "<>" User --> UserAccount : "-userAccount" User --|> AbstractAggregateRoot : <> class UserController { + UserController(userManagement: UserManagement) + unauthorized() : String + register() : String + register(form:RegistrationForm,result:Erros) : String + loginPage() : String + viewProfile(model:Model,userAccount:UserAccount) : String + editProfile(userAccount:UserAccount,username:String,password:String,address:String) : String + disableUser(userAccount:UserAccount) : String + getCustomer(model:Model) : String + removeCustomer(user:User,model:Model) : String + editCustomer(user:User,model:Model) : String + updateCustomer(user:User,username:String,address:String,model:Model) } UserController --> UserManagement : "-userManagement" UserController ..> User : "<>" UserController ..> UserAccount : "<>" UserController ..> Role : "<>" UserController ..> RegistrationForm : "<>" class UserManagement { + UserManagement(users:UserRepository,userAccounts:UserAccountManagement) + createCustomer(name:String, password:String, address:String) : User + createAdmin(name:String, password:String, address:String) : User + save(user:User) : User + getUsers() : UserRepository + disableUserAccount(userAccount:UserAccount) : void + getUserByAccount(userAccount:UserAccount) : Optional } UserManagement --> UserAccountManagement : "-userAccounts" UserManagement --> UserRepository : "-users" UserManagement ..> User : "<>" class UserDataInitalizer { - userManagement : UserManagement + UserDataInitalizer(userManagement : UserManagement) + initalize() : void } UserDataInitalizer --> UserManagement : "-userManagement" UserDataInitalizer ..|> DataInitalizer class UserRepository { + findAll() : Streamable } UserRepository --|> CrudRepository : <> UserRepository ..|> Streamable : <> UserRepository o-- User class RegistrationForm { - username: String - password: String - address: String + RegistrationForm(username:String,password:String,address:String) + getUsername() : String + getPassword() : String + getAddress() : String + validate(errors:Erros) : void } } @enduml