entity Customer { number Integer required unique min(10000) max(99999), prefix String required unique pattern(/[a-z][a-z0-9]+/), } filter Customer paginate Customer with infinite-scroll service Customer with serviceClass dto Customer with mapstruct entity Contact { firstName String required maxlength(80), lastName String required maxlength(80), email String required maxlength(80) } filter Contact paginate Contact with infinite-scroll service Contact with serviceClass dto Contact with mapstruct enum CustomerContactRole { CONTRACTUAL, TECHNICAL, FINANCIAL } entity CustomerContact { role CustomerContactRole required } service CustomerContact with serviceClass dto CustomerContact with mapstruct entity Membership { sinceDate LocalDate required, untilDate LocalDate } service Membership with serviceClass dto Membership with mapstruct enum ShareAction { SUBSCRIPTION, CANCELLATION } entity Share { date LocalDate required, action ShareAction required, quantity Integer required, comment String maxlength(160) } enum AssetAction { PAYMENT, HANDOVER, ADOPTION, LOSS, CLEARING, PAYBACK } entity Asset { date LocalDate required, action AssetAction required, amount BigDecimal required, comment String maxlength(160) } relationship OneToMany { Customer to Membership{customer(prefix)}, Membership to Share{member}, Membership to Asset{member} } relationship ManyToOne { CustomerContact{contact(email) required} to Contact{role}, CustomerContact{customer(prefix) required} to Customer{role} }