@startuml database "h2" as db { entity city { + id : BIGINT citycode : VARCHAR(255) cityname : VARCHAR(255) folder : VARCHAR(255) lng : VARCHAR(255) lat :VARCHAR(255) } entity site_user { + id : BIGINT active : BOOLEAN admin : BOOLEAN email : VARCHAR(255) password : VARCHAR(255) role :VARCHAR(255) username :VARCHAR(20) } } 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 } SiteUser .. site_user 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 - folder : String - lng : String - lat : String + setLng(BigDecimal) + setLat(BigDecimal) + setCoordinates(lng,lat) + getCoordinates() : Coordinates + toString() : String } City .. city class Coordinates { - lng : Double - lat : Double + toString() : String } City .> Coordinates class CityIndex { - site : String - list : List<City>[] } CityIndex *-- City interface CityRepository <<Repository>> { } 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