@startuml database "h2" as db { entity city { citycode : String cityname : String path : String lng : Double lat : Double } } note bottom of db : spring.datasource.url=jdbc:h2:./taskdb\nspring.jpa.hibernate.ddl-auto=update class SecurityConfig <<Configuration>> { - userDetailsService : UserDetailsService + passwordEncoder() : PasswordEncoder + configure(WebSecurity) configure(HttpSecurity) configure(AuthenticationManagerBuilder) } class UserDetailsServiceImpl <<Service>> { - userRepository : SiteUserRepository + loadUserByUsername(username) : UserDetails + createUserDetails(:SiteUser) : User } class SecurityController <<Controller>> { - userRepository : userRepository - passwordEncoder : PasswordEncoder + success() + showList(loginUser, model) } class SiteUser <<Entity>> { + id : Long - username : String - email : String@Email - admin : boolean - role : String - active : boolean } class UniqueLoginValidator<UniqueLogin> <<ConstraintValidator>> { - userRepository : SiteUserRepository + isValid(String, ConstraintValidatorContext) : boolean } class UniqueLogin <<Constraint>> { message() : String groups() : Class<?>[] payload() : Class<? extends Payload>[] } interface SiteUserRepository <<JpaRepository>> { findByUsername(String) existsByUsername(String) } SecurityConfig *-- UserDetailsServiceImpl UserDetailsServiceImpl *-- SiteUserRepository SecurityController *-- SiteUserRepository UniqueLoginValidator *-- SiteUserRepository UniqueLogin .. UniqueLoginValidator SiteUserRepository <|-- SiteUser class City <<Entity>> { + id : Long - citycode : String - cityname : String - path : String - lng : Double - lat : Double } City .. city interface CityRepository <<Repository>> { findByCitycode(String) deleteByCitycode(String) } class CityController <<Controller>> { - repository : CityRepository + showList(model) + addCity(city) + process(city, result) + editCity(id, model) + deleteCity(id) } interface CommandLineRunner class DataLoader <<Component>> { - repository : CityRepository + run() } CityRepository <|-- City DataLoader *-- CityRepository CommandLineRunner <|-- DataLoader CityController *-- CityRepository @enduml