full reborn

This commit is contained in:
2021-11-24 13:52:27 +06:00
parent 0ac6b0a4df
commit 6a6a197041
246 changed files with 4327 additions and 6952 deletions

View File

@@ -0,0 +1,3 @@
package dev.inmo.postssystem.features.users.common
const val usersServerPathPart = "users"

View File

@@ -0,0 +1,46 @@
package dev.inmo.postssystem.features.users.common
import kotlinx.serialization.*
import kotlin.jvm.JvmInline
@Serializable
@JvmInline
value class UserId(val long: Long) {
override fun toString(): String = long.toString()
}
val Long.userId: UserId
get() = UserId(this)
@Serializable
@JvmInline
value class Username(val string: String) {
override fun toString(): String = string
}
val String.username: Username
get() = Username(this)
sealed interface NewUser {
val firstName: String
val lastName: String
val username: Username
}
@Serializable
sealed class User : NewUser {
abstract val id: UserId
}
@Serializable
data class DefaultUser(
override val id: UserId,
override val firstName: String,
override val lastName: String,
override val username: Username,
) : User()
@Serializable
data class DefaultNewUser(
override val firstName: String,
override val lastName: String,
override val username: Username,
) : NewUser

View File

@@ -0,0 +1,7 @@
package dev.inmo.postssystem.features.users.common
import dev.inmo.micro_utils.repos.*
interface ReadUsersStorage : ReadCRUDRepo<User, UserId>
interface WriteUsersStorage : WriteCRUDRepo<User, UserId, NewUser>
interface UsersStorage : ReadUsersStorage, WriteUsersStorage, CRUDRepo<User, UserId, NewUser>

View File

@@ -0,0 +1,51 @@
package dev.inmo.postssystem.features.users.common
import dev.inmo.micro_utils.repos.exposed.AbstractExposedCRUDRepo
import dev.inmo.micro_utils.repos.exposed.initTable
import org.jetbrains.exposed.sql.*
import org.jetbrains.exposed.sql.statements.InsertStatement
import org.jetbrains.exposed.sql.statements.UpdateStatement
class ExposedUsersStorage(override val database: Database) : UsersStorage, AbstractExposedCRUDRepo<User, UserId, NewUser>(
tableName = "Users"
) {
val userIdColumn = long("userid").autoIncrement()
val usernameColumn = text("username")
private val firstNameColumn = text("firstName")
private val lastNameColumn = text("lastName")
override val primaryKey: PrimaryKey = PrimaryKey(userIdColumn)
override val selectByIds: SqlExpressionBuilder.(List<UserId>) -> Op<Boolean> = { userIdColumn.inList(it.map { it.long }) }
override val selectById: SqlExpressionBuilder.(UserId) -> Op<Boolean> = { userIdColumn.eq(it.long) }
override val ResultRow.asObject: User
get() = DefaultUser(
get(userIdColumn).userId,
get(firstNameColumn),
get(lastNameColumn),
get(usernameColumn).username,
)
init {
initTable()
}
override fun insert(value: NewUser, it: InsertStatement<Number>) {
it[usernameColumn] = value.username.string
it[firstNameColumn] = value.firstName
it[lastNameColumn] = value.lastName
}
override fun update(id: UserId, value: NewUser, it: UpdateStatement) {
it[usernameColumn] = value.username.string
it[firstNameColumn] = value.firstName
it[lastNameColumn] = value.lastName
}
override fun InsertStatement<Number>.asObject(value: NewUser): User = DefaultUser(
get(userIdColumn).userId,
get(firstNameColumn),
get(lastNameColumn),
get(usernameColumn).username,
)
}

View File

@@ -0,0 +1 @@
<manifest package="dev.inmo.postssystem.features.users.common"/>