@startuml
!pragma layout smetana

class ru.dankoy.hw19.core.domain.Author {
- String id
- String name
- LocalDateTime birthDate
- LocalDateTime deathDate
}
class ru.dankoy.hw19.core.domain.AuditMetadata {
- LocalDateTime dateCreated
- LocalDateTime dateModified
- User createdByUser
- User modifiedByUser
}
class ru.dankoy.hw19.core.domain.Note {
- String id
- Edition edition
- String text
}
class ru.dankoy.hw19.core.domain.UserRole {
- {static} long serialVersionUID
- String id
- String role
}
class ru.dankoy.hw19.core.domain.User {
- String id
- String username
- String password
- boolean enabled
- boolean accountNonLocked
- boolean accountNonExpired
- boolean credentialsNonExpired
- Set<UserRole> roles
+ Collection<? extends GrantedAuthority> getAuthorities()
+ void addRole(UserRole)
}
class ru.dankoy.hw19.core.domain.Genre {
- String name
}
class ru.dankoy.hw19.core.domain.Publisher {
- String id
- String name
}
class ru.dankoy.hw19.core.domain.Work {
- String id
- String name
- String description
- Set<Author> authors
- Set<Genre> genres
- Set<Edition> editions
}
class ru.dankoy.hw19.core.domain.Edition {
- String id
- Work work
- String name
- String description
- LocalDateTime datePublished
- String language
- long pages
- Publisher publisher
- byte cover
- String isbn10
- String isbn13
}
class ru.dankoy.hw19.core.domain.Shelf {
- String id
- String name
- Set<Edition> editions
}
class ru.dankoy.hw19.core.domain.Commentary {
- String id
- String text
- Work work
}


ru.dankoy.hw19.core.domain.AuditMetadata <|-- ru.dankoy.hw19.core.domain.Author
ru.dankoy.hw19.core.domain.AuditMetadata <|-- ru.dankoy.hw19.core.domain.Note
java.io.Serializable <|.. ru.dankoy.hw19.core.domain.UserRole
org.springframework.security.core.userdetails.UserDetails <|.. ru.dankoy.hw19.core.domain.User
ru.dankoy.hw19.core.domain.AuditMetadata <|-- ru.dankoy.hw19.core.domain.Publisher
ru.dankoy.hw19.core.domain.AuditMetadata <|-- ru.dankoy.hw19.core.domain.Work
ru.dankoy.hw19.core.domain.AuditMetadata <|-- ru.dankoy.hw19.core.domain.Edition
ru.dankoy.hw19.core.domain.AuditMetadata <|-- ru.dankoy.hw19.core.domain.Shelf
ru.dankoy.hw19.core.domain.AuditMetadata <|-- ru.dankoy.hw19.core.domain.Commentary
@enduml