package fr.dcproject.entity import fr.postgresjson.entity.immutable.* import fr.postgresjson.entity.mutable.EntityDeletedAt import fr.postgresjson.entity.mutable.EntityDeletedAtImp import java.util.* class Constitution( id: UUID = UUID.randomUUID(), title: String, anonymous: Boolean = true, titles: MutableList> = mutableListOf(), draft: Boolean = false, lastVersion: Boolean = false, override val createdBy: CitizenSimple ) : ConstitutionSimple>( id, title = title, anonymous = anonymous, titles = titles, draft = draft, lastVersion = lastVersion, createdBy = createdBy ) { class Title( id: UUID = UUID.randomUUID(), name: String, rank: Int? = null, override val articles: MutableList = mutableListOf() ) : ConstitutionSimple.TitleSimple(id, name, rank) } open class ConstitutionSimple>( id: UUID = UUID.randomUUID(), var title: String, var anonymous: Boolean = true, open var titles: MutableList = mutableListOf(), var draft: Boolean = false, var lastVersion: Boolean = false, override val createdBy: Cr, versionId: UUID = UUID.randomUUID() ) : ConstitutionRef(id), EntityVersioning by UuidEntityVersioning(versionId = versionId), EntityCreatedAt by EntityCreatedAtImp(), EntityCreatedBy by EntityCreatedByImp(createdBy), EntityDeletedAt by EntityDeletedAtImp() { init { titles.forEachIndexed { index, title -> title.rank = index } } open class TitleSimple( id: UUID = UUID.randomUUID(), var name: String, var rank: Int? = null, open val articles: MutableList = mutableListOf() ) : TitleRef(id) } open class ConstitutionRef(id: UUID = UUID.randomUUID()) : ConstitutionS(id) { open class TitleRef( id: UUID = UUID.randomUUID() ) : UuidEntity(id) } sealed class ConstitutionS(id: UUID = UUID.randomUUID()) : TargetRef(id), TargetI