full reborn
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
package dev.inmo.postssystem.features.users.common
|
||||
|
||||
const val usersServerPathPart = "users"
|
@@ -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
|
@@ -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>
|
@@ -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,
|
||||
)
|
||||
}
|
1
features/users/common/src/main/AndroidManifest.xml
Normal file
1
features/users/common/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1 @@
|
||||
<manifest package="dev.inmo.postssystem.features.users.common"/>
|
Reference in New Issue
Block a user