@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 <<JpaRepository>> { deleteByCitycode(String) findByCitycode(String) : Object } 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