10 UMLClass 50 60 210 240 DBUser -- id: Long nick: String name: String chats: Set<DBChat> status: UserStatus created: Instant lastSeen: Instant deleted: Boolean avatar: DBAvatar passwordHash: String authToken: String authTokenExpiration: Instant -- +toCommon(): User UMLClass 380 330 290 160 DBMessage -- id: Long sender: DBUser forwarded: Boolean deleted: Boolean statuses: Map<DBUser, DBMessageStatus> text: String attachment: DBAttachment -- +toCommon(): Message UMLClass 770 320 210 100 DBMessageStatus -- id: Long status: MessageStatus timestamp: Instant -- +toCommon(): MessageStatus UMLClass 770 440 180 120 DBAttachment -- id: Long name: String type: AttachmentType url: String -- +toCommon(): Attachment UMLClass 510 70 200 180 DBChat -- id: Long name: String members: Set<DBUser> admins: Set<DBUser> messages: Set<DBMessage> avatar: DBAvatar allowJoining: Boolean allowAttachments: Boolean -- +toCommon(): Chat Relation 250 100 280 40 lt=<-> m1=0..n m2=0..n 10.0;10.0;260.0;10.0 Relation 600 240 50 110 lt=-> m2=0..n 10.0;10.0;10.0;90.0 Relation 660 360 130 40 lt=-> m2=0..n 10.0;10.0;110.0;10.0 Relation 660 470 130 40 lt=-> m2=0..1 10.0;10.0;110.0;10.0 Relation 140 290 260 150 lt=<- m1=0..n 10.0;10.0;10.0;130.0;240.0;130.0 UMLPackage 10 0 1010 590 envoy.server.data -- bg=#CCCCCC UMLClass 90 680 170 130 User -- id: long nick: String name: String status: UserStatus created: Instant deleted: boolean UMLClass 340 680 190 100 UserStatus -- _+ONLINE: UserStatus_ _+AWAY: UserStatus_ _+BUSY: UserStatus_ _+OFFLINE: UserStatus_ Relation 250 730 110 30 lt=<- 90.0;10.0;10.0;10.0 UMLClass 340 150 100 80 DBAvatar -- id: Long edited: Instant url: String layer=1 Relation 250 190 110 40 lt=<- m1=0..1 90.0;10.0;10.0;10.0 Relation 430 190 100 40 lt=<- m1=0..1 10.0;10.0;80.0;10.0 UMLClass 610 680 180 130 Chat -- id: long name: String deceased: boolean members: Set<User> admins: Set<User> messages: List<Message>