@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 class CityIndex { - site : String - list : List<City>[] } CityIndex *-- City interface CityRepository <<Repository>> { findByCitycode(String) deleteByCitycode(String) } CityRepository <|-- City class CityController <<Controller>> { - repository : CityRepository + showList(model) + addCity(city) + process(city, result) + editCity(id, model) + deleteCity(id) } CityController ..> CityRepository class CityIndexController <<Controller>> { - repository : CityIndexRepository + show(model) + addCity(city) + process(city, result) + deleteCity(id) } CityIndexController ..> CityIndexRepository interface CommandLineRunner class DataLoader <<Component>> { - repository : CityRepository + run() } DataLoader ..> CityRepository CommandLineRunner <|-- DataLoader @enduml