fix: Entity CreatedBy

This commit is contained in:
2019-07-30 23:02:25 +02:00
parent 7346c85f95
commit 1f9636960d
2 changed files with 20 additions and 21 deletions

View File

@@ -47,47 +47,45 @@ class EntityCreatedAtImp: EntityCreatedAt {
class EntityUpdatedAtImp: EntityUpdatedAt { class EntityUpdatedAtImp: EntityUpdatedAt {
override var updatedAt: DateTime? = null override var updatedAt: DateTime? = null
} }
interface User<T>: EntityI<T> { interface User<T>: EntityI<T> {
fun isValid(): Boolean
} }
/* Author */ /* Author */
interface CreatedBy<T> { interface CreatedBy<T: User<*>> {
var createdBy: User<T>? var createdBy: T?
} }
interface UpdatedBy<T> { interface UpdatedBy<T: User<*>> {
var updatedBy: User<T>? var updatedBy: T?
} }
class EntityCreatedByImp<T>: CreatedBy<T> { class EntityCreatedByImp<UserT: User<*>>: CreatedBy<UserT> {
override var createdBy: User<T>? = null override var createdBy: UserT? = null
} }
class EntityUpdatedByImp<T>: UpdatedBy<T> { class EntityUpdatedByImp<UserT: User<*>>: UpdatedBy<UserT> {
override var updatedBy: User<T>? = null override var updatedBy: UserT? = null
} }
/* Published */ /* Published */
interface Published<UserT> { interface Published<UserT: User<*>> {
var publishedAt: DateTime? var publishedAt: DateTime?
var publishedBy: User<UserT>? var publishedBy: UserT?
} }
class EntityPublishedImp<UserT>: Published<UserT> { class EntityPublishedImp<UserT: User<*>>: Published<UserT> {
override var publishedAt: DateTime? = null override var publishedAt: DateTime? = null
override var publishedBy: User<UserT>? = null override var publishedBy: UserT? = null
} }
/* Implementation */ /* Implementation */
abstract class EntityImp<T, UserT>: Entity<T>(), abstract class EntityImp<T, UserT: User<*>>: Entity<T>(),
EntityCreatedAt by EntityCreatedAtImp(), EntityCreatedAt by EntityCreatedAtImp(),
EntityUpdatedAt by EntityUpdatedAtImp(), EntityUpdatedAt by EntityUpdatedAtImp(),
CreatedBy<UserT> by EntityCreatedByImp(), CreatedBy<UserT> by EntityCreatedByImp(),
UpdatedBy<UserT> by EntityUpdatedByImp() UpdatedBy<UserT> by EntityUpdatedByImp()
abstract class EntityExtended<T, UserT>: abstract class EntityExtended<T, UserT: User<*>>:
EntityImp<T, UserT>(), EntityImp<T, UserT>(),
EntityVersioningIncrement by EntityVersioningIncrementImp(), EntityVersioningIncrement by EntityVersioningIncrementImp(),
Published<UserT> by EntityPublishedImp() Published<UserT> by EntityPublishedImp()

View File

@@ -7,18 +7,19 @@ import org.junit.jupiter.api.TestInstance
@TestInstance(TestInstance.Lifecycle.PER_CLASS) @TestInstance(TestInstance.Lifecycle.PER_CLASS)
class EntityTest() { class EntityTest() {
private class ObjTest(var name: String): EntityExtended<Int?, Int?>() private class User(override var id: Int?): fr.postgresjson.entity.User<Int?>
private class ObjTest(var name: String): EntityExtended<Int?, User>()
@Test @Test
fun getObject() { fun getObject() {
val obj: ObjTest? = ObjTest("plop") val obj: ObjTest? = ObjTest("plop")
assertTrue(obj is ObjTest) assertTrue(obj is ObjTest)
assertTrue(obj is EntityExtended<Int?, Int?>) assertTrue(obj is EntityExtended<Int?, User>)
assertTrue(obj is EntityI<Int?>) assertTrue(obj is EntityI<Int?>)
assertTrue(obj is Entity<Int?>) assertTrue(obj is Entity<Int?>)
assertTrue(obj is Published<Int?>) assertTrue(obj is Published<User>)
assertTrue(obj is CreatedBy<Int?>) assertTrue(obj is CreatedBy<User>)
assertTrue(obj is UpdatedBy<Int?>) assertTrue(obj is UpdatedBy<User>)
assertTrue(obj is EntityCreatedAt) assertTrue(obj is EntityCreatedAt)
assertTrue(obj is EntityUpdatedAt) assertTrue(obj is EntityUpdatedAt)
} }