package fr.dcproject.entity import fr.postgresjson.entity.* import org.joda.time.DateTime import java.util.* class CommentForView( id: UUID = UUID.randomUUID(), override val createdBy: C, override val target: T, override var content: String, override val parent: CommentParent? = null, val childrenCount: Int? = null, override val deletedAt: DateTime? = null ) : ExtraI, CommentForUpdate(id, createdBy, target, content, parent, deletedAt), CommentWithTargetI, EntityCreatedBy by EntityCreatedByImp(createdBy), EntityUpdatedAt by EntityUpdatedAtImp(), EntityDeletedAt by EntityDeletedAtImp(), Votable by VotableImp(), TargetI { constructor( createdBy: C, parent: CommentParent, content: String ) : this( createdBy = createdBy, parent = parent, target = parent.target, content = content ) } open class CommentForUpdate( override val id: UUID = UUID.randomUUID(), override val createdBy: C, override val target: T, open var content: String, open val parent: CommentParent? = null, override val deletedAt: DateTime? = null ) : CommentParent(id, deletedAt, target), ExtraI, CommentWithTargetI, EntityCreatedAt by EntityCreatedAtImp(), EntityCreatedBy, EntityDeletedAt, TargetI { constructor( createdBy: C, parent: CommentParent, content: String ) : this( createdBy = createdBy, parent = parent, target = parent.target, content = content ) } open class CommentParent( override val id: UUID, override val deletedAt: DateTime?, override val target: T ) : CommentRef(id), CommentParentI interface CommentParentI : CommentI, EntityDeletedAt, CommentWithTargetI interface CommentWithTargetI : CommentI, TargetI, AsTarget open class CommentRef(id: UUID = UUID.randomUUID()) : CommentI, TargetRef(id) interface CommentI : EntityI