@startuml
namespace domain {
    class BaseString << (S,Aquamarine) >> {
        + ID primitive.ObjectID
        + SourceLanguage *Language
        + Identifier string
        + Group *Group
        + Author *User
        + Active bool
        + Translations []Translation

    }
    class Group << (S,Aquamarine) >> {
        + ID primitive.ObjectID
        + Name string
        + Owner *User
        + Permissions []Permission
        + Active bool
        + Public bool

    }
    class Language << (S,Aquamarine) >> {
        + ID primitive.ObjectID
        + IsoCode string
        + Description string
        + Active bool

    }
    class Permission << (S,Aquamarine) >> {
        + User *User
        + CanWrite bool

    }
    class Stage << (S,Aquamarine) >> {
        + ID primitive.ObjectID
        + Name string
        + Active bool

    }
    class Translation << (S,Aquamarine) >> {
        + Content string
        + Language *Language
        + Version int
        + Active bool
        + Author *User
        + Date time.Time
        + Stage *Stage

    }
    class User << (S,Aquamarine) >> {
        + ID primitive.ObjectID
        + Email string
        + Password string
        + Admin bool
        + Active bool

        + ClearPassword() 

    }
}


"domain.BaseString" o-- "domain.Group"
"domain.BaseString" o-- "domain.Language"
"domain.BaseString" o-- "domain.Translation"
"domain.BaseString" o-- "domain.User"
"domain.Group" o-- "domain.Permission"
"domain.Group" o-- "domain.User"
"domain.Permission" o-- "domain.User"
"domain.Translation" o-- "domain.Language"
"domain.Translation" o-- "domain.Stage"
"domain.Translation" o-- "domain.User"

@enduml
