Add Helper Entity

This commit is contained in:
2019-06-06 15:18:27 +02:00
parent f20d349c3d
commit ed87175b3f
8 changed files with 106 additions and 7 deletions

View File

@@ -1,4 +1,4 @@
package fr.postgresjson.serializer
package fr.postgresjson
import com.fasterxml.jackson.core.JsonParser
import com.fasterxml.jackson.core.JsonProcessingException

View File

@@ -3,8 +3,8 @@ package fr.postgresjson.connexion
import com.github.jasync.sql.db.pool.ConnectionPool
import com.github.jasync.sql.db.postgresql.PostgreSQLConnection
import com.github.jasync.sql.db.postgresql.PostgreSQLConnectionBuilder
import fr.postgresjson.Serializer
import fr.postgresjson.entity.EntityI
import fr.postgresjson.serializer.Serializer
import java.io.File

View File

@@ -1,16 +1,90 @@
package fr.postgresjson.entity
import org.joda.time.DateTime
import java.util.*
/* ID */
interface EntityI<T> {
var id: T?
}
abstract class Entity<T>(override var id: T? = null) : EntityI<T?>
abstract class UuidEntity(override var id: UUID? = UUID.randomUUID()) : Entity<UUID?>(id)
abstract class IdEntity(override var id: Int? = null) : Entity<Int?>(id)
/* Version */
interface EntityVersioning<T> {
var version: T
}
interface EntityVersioningIncrement : EntityVersioning<Int>
interface EntityVersioningIncrement : EntityVersioning<Int?>
class EntityVersioningIncrementImp() : EntityVersioningIncrement {
override var version: Int? = null
}
interface EntityVersioningDate : EntityVersioning<DateTime?>
class EntityVersioningDateImp() : EntityVersioningDate {
override var version: DateTime? = null
}
/* Dates */
interface EntityCreatedAt {
var createdAt: DateTime?
}
interface EntityUpdatedAt {
var updatedAt: DateTime?
}
class EntityCreatedAtImp : EntityCreatedAt {
override var createdAt: DateTime? = null
}
class EntityUpdatedAtImp : EntityUpdatedAt {
override var updatedAt: DateTime? = null
}
interface User<T> : EntityI<T> {
fun isValid(): Boolean
}
/* Author */
interface CreatedBy<T> {
var createdBy: User<T>?
}
interface UpdatedBy<T> {
var updatedBy: User<T>?
}
class EntityCreatedByImp<T> : CreatedBy<T> {
override var createdBy: User<T>? = null
}
class EntityUpdatedByImp<T> : UpdatedBy<T> {
override var updatedBy: User<T>? = null
}
/* Published */
interface Published<UserT> {
var publishedAt: DateTime?
var publishedBy: User<UserT>?
}
class EntityPublishedImp<UserT> : Published<UserT> {
override var publishedAt: DateTime? = null
override var publishedBy: User<UserT>? = null
}
/* Implementation */
abstract class EntityImp<T, UserT> : Entity<T>(),
EntityCreatedAt by EntityCreatedAtImp(),
EntityUpdatedAt by EntityUpdatedAtImp(),
CreatedBy<UserT> by EntityCreatedByImp(),
UpdatedBy<UserT> by EntityUpdatedByImp()
abstract class EntityExtended<T, UserT> :
EntityImp<T, UserT>(),
EntityVersioningIncrement by EntityVersioningIncrementImp(),
Published<UserT> by EntityPublishedImp()

View File

@@ -2,9 +2,9 @@ package fr.postgresjson.repository
import com.github.jasync.sql.db.pool.ConnectionPool
import com.github.jasync.sql.db.postgresql.PostgreSQLConnection
import fr.postgresjson.Serializer
import fr.postgresjson.entity.EntityCollection
import fr.postgresjson.entity.EntityI
import fr.postgresjson.serializer.Serializer
interface RepositoryI<T, E : EntityI<T>>