@startuml DomainModel

class FriendInCrime
class User
class Profile
class Plan
class Atendee
class Name
class Conversation

FriendInCrime --> "2..n" User
User *--> Profile
User o--> Plan

Profile *--> Name

Plan --> Conversation
Plan "0..n" o-down-> Atendee

Atendee -up-|> User

@enduml

@startuml Domain Classes


class User {
  - id: Identifier
  - profile: Profile
  - ownedPlans: Plan[]
  + addPlan(plan: Plan): void
  + joinPlan(plan: Plan): void
}

class Profile {
  + name: string
  + image: Image
}

class Image {
  + source(): string
}

class Plan {
  - owner: User
  - attendees: User[]
  - feed: Feed
  + addAttendee(user: User): void
  + removeAttendee(user: User): void
  + postMessage(message: string, user: User): void
  + getAttendeesProfiles(): Profile[]
}

class Feed {
  - messages: Message[]
  + post(message: string): void
  + getMessages(): string[]
}

class Message {
  - from: User
  + content: string 
}


User *--> Profile
Profile --> Image
User o--> Plan
note on link
as owner
end note
User ..> Plan
note on link
joins
post on a wall
end note
Plan o--> User
note on link
as attendees
end note
Plan *--> Feed
Feed o--> Message
@enduml


