@startuml
skinparam monochrome true
skinparam packageStyle rectangle
skinparam shadowing false

left to right direction

skinparam classAttributeIconSize 0

hide circle
hide methods

title Domain Model


class Owner {
    emailAddress
}

class Property {
    publicationDate
    area
    distanceCityCenter
    requestedPrice
    photographs
}

class Location{
    street
    city
    district
    state
    zipCode
}

class Apartment{

}

class House{
    existBasement
    inhabitableLoft
    sunExposure
}

class Agent{
}

class Commission{
    commissionValue
}


class Percentage{
}

class FixedAmount{
}

class Residence{
    numberBeds
    numberWC
    numberParkingSpaces
}

class Land{
}

class Offer{
}

class Equipment{
    nameEquipment
    quantityEquipment
    }

class PropertyType {
    designation
}



Owner "1" -- "*" Property: belongs to  <
Residence --up|> Property
House --up|> Residence
Apartment --up|> Residence
Equipment *- Residence
Property "*" -- "1" Agent: managed by >
Land --up|> Property
Offer "*" -- "1" Agent: publish  <
Offer "1"  -- "1" Property: about  >
Agent "1" -- "1" Commission:  set the >
Percentage ---up|> Commission
FixedAmount ---up|> Commission
Offer  "1" - "1" Commission: contains  >
Property "1" -> "1" Location: located at
Property "1" -> "1" PropertyType : has


@enduml