diff --git a/src/main/kotlin/fr/postgresjson/entity/Entity.kt b/src/main/kotlin/fr/postgresjson/entity/Entity.kt index 71e32d5..bb18ed1 100644 --- a/src/main/kotlin/fr/postgresjson/entity/Entity.kt +++ b/src/main/kotlin/fr/postgresjson/entity/Entity.kt @@ -36,6 +36,14 @@ interface EntityUpdatedAt { var updatedAt: DateTime? } +interface EntityDeletedAt { + var deletedAt: DateTime? + fun isDeleted(): Boolean { + val deletedAt = deletedAt + return deletedAt != null && deletedAt < DateTime.now() + } +} + class EntityCreatedAtImp: EntityCreatedAt { override var createdAt: DateTime? = null } @@ -44,6 +52,10 @@ class EntityUpdatedAtImp: EntityUpdatedAt { override var updatedAt: DateTime? = null } +class EntityDeletedAtImp: EntityDeletedAt { + override var deletedAt: DateTime? = null +} + /* Author */ interface EntityCreatedBy> { var createdBy: T? @@ -53,6 +65,10 @@ interface EntityUpdatedBy> { var updatedBy: T? } +interface EntityDeletedBy> { + var deletedBy: T? +} + class EntityCreatedByImp>( override var createdBy: UserT? ): EntityCreatedBy @@ -61,6 +77,28 @@ class EntityUpdatedByImp>( override var updatedBy: UserT? ): EntityUpdatedBy +class EntityDeletedByImp>( + override var deletedBy: UserT? +): EntityDeletedBy + +/* Mixed */ +class EntityDeletedImp>( + override var deletedBy: UserT? = null +): EntityDeletedBy, + EntityDeletedAt by EntityDeletedAtImp() + +class EntityUpdatedImp>( + override var updatedAt: DateTime? = null, + override var updatedBy: UserT? = null +): EntityUpdatedBy, + EntityUpdatedAt by EntityUpdatedAtImp() + +class EntityCreatedImp>( + override var createdAt: DateTime? = null, + override var createdBy: UserT? = null +): EntityCreatedBy, + EntityCreatedAt by EntityCreatedAtImp() + /* Published */ interface Published> { var publishedAt: DateTime? @@ -79,8 +117,10 @@ abstract class EntityImp>( ): Entity(), EntityCreatedAt by EntityCreatedAtImp(), EntityUpdatedAt by EntityUpdatedAtImp(), + EntityDeletedAt by EntityDeletedAtImp(), EntityCreatedBy by EntityCreatedByImp(updatedBy), - EntityUpdatedBy by EntityUpdatedByImp(updatedBy) + EntityUpdatedBy by EntityUpdatedByImp(updatedBy), + EntityDeletedBy by EntityDeletedByImp(updatedBy) abstract class UuidEntityExtended>( updatedBy: UserT?,