add role repo

This commit is contained in:
KP9lK 2024-12-23 08:10:35 +03:00
parent a39dd6978c
commit 9ca22827d5
16 changed files with 108 additions and 34 deletions

View File

@ -1,7 +1,5 @@
package com.college.data
import io.ktor.server.application.*
import io.ktor.server.engine.*
import org.jetbrains.exposed.sql.Database
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction
@ -14,7 +12,7 @@ object DbSettings {
)
}
suspend fun <T> query(block: suspend () -> T): T =
suspend fun <T> query(block: () -> Unit): T =
newSuspendedTransaction { block() }
}

View File

@ -18,6 +18,7 @@ fun resultRowToUser(result: ResultRow):User {
uuid = result[UserUuidTable.id].value,
login = result[UserUuidTable.login],
password = result[UserUuidTable.password],
isApproved = result[UserUuidTable.isApproved]
)
}
@ -26,6 +27,7 @@ fun resultRowToUserWithJoinRole(result: ResultRow):User{
uuid = result[UserUuidTable.id].value,
login = result[UserUuidTable.login],
password = result[UserUuidTable.password],
isApproved = result[UserUuidTable.isApproved],
role = Role (
result[RoleIdTable.id].value,
result[RoleIdTable.role]

View File

@ -1,9 +0,0 @@
package com.college.data.repositorty
import com.college.domain.model.Role
interface RoleRepository {
suspend fun getAllRoles():Role
suspend fun removeRoleById(rolId: Int): Boolean
suspend fun changeName(rolId: Int, nameRole:String)
}

View File

@ -1,13 +0,0 @@
package com.college.data.repositorty
import com.college.domain.model.User
import com.college.domain.request.UserCreateRequest
import java.util.UUID
interface UserRepository {
suspend fun getUserByUuid(userUuid: UUID): User?
suspend fun removeUserByUuid(userUuid: UUID): Boolean
suspend fun addUser(userCreateRequest: UserCreateRequest): User
suspend fun getAllUsers(): List<User>?
suspend fun updateUser(userUuid: UUID, updatedUser: User): Boolean
}

View File

@ -0,0 +1,12 @@
package com.college.data.repositorty.role
import com.college.domain.model.Role
import com.college.domain.request.role.RoleCreateRequest
import com.college.domain.request.role.RoleUpdateRequest
interface RoleRepository {
suspend fun getAllRoles():List<Role>
suspend fun createRole(roleCreateRequest: RoleCreateRequest): Role
suspend fun removeRoleById(rolId: Int): Boolean
suspend fun updateRole(rolId: Int, roleUpdateRequest: RoleUpdateRequest): Boolean
}

View File

@ -0,0 +1,40 @@
package com.college.data.repositorty.role
import com.college.data.DbSettings
import com.college.data.mapper.resultRowToRole
import com.college.data.table.RoleIdTable
import com.college.domain.model.Role
import com.college.domain.request.role.RoleCreateRequest
import com.college.domain.request.role.RoleUpdateRequest
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.insertReturning
import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.update
class RoleRepositoryImpl(private val dbSettings: DbSettings): RoleRepository {
override suspend fun getAllRoles(): List<Role> = dbSettings.query {
RoleIdTable.selectAll().map(::resultRowToRole)
}
override suspend fun createRole(roleCreateRequest: RoleCreateRequest): Role = dbSettings.query {
val result = RoleIdTable.insertReturning {
it[role] = roleCreateRequest.roleName
}
result.map(::resultRowToRole).first()
}
override suspend fun removeRoleById(rolId: Int): Boolean = dbSettings.query {
val result = RoleIdTable.deleteWhere {
RoleIdTable.id eq rolId
}
result > 0
}
override suspend fun updateRole(rolId: Int, roleUpdateRequest: RoleUpdateRequest): Boolean = dbSettings.query {
val result = RoleIdTable.update({RoleIdTable.id eq rolId}){
it[role] = roleUpdateRequest.roleName
}
result > 0
}
}

View File

@ -0,0 +1,14 @@
package com.college.data.repositorty.user
import com.college.domain.model.User
import com.college.domain.request.user.UpdateUserRequest
import com.college.domain.request.user.UserCreateRequest
import java.util.UUID
interface UserRepository {
suspend fun getUserByUuid(userUuid: UUID): User?
suspend fun removeUserByUuid(userUuid: UUID): Boolean
suspend fun addUser(userCreateRequest: UserCreateRequest): User
suspend fun getAllUsers(): List<User>
suspend fun updateUser(userUuid: UUID, updateUserRequest: UpdateUserRequest): Boolean
}

View File

@ -1,4 +1,4 @@
package com.college.data.repositorty
package com.college.data.repositorty.user
import com.college.data.DbSettings
import com.college.data.mapper.resultRowToUser
@ -6,7 +6,8 @@ import com.college.data.mapper.resultRowToUserWithJoinRole
import com.college.data.table.RoleIdTable
import com.college.data.table.UserUuidTable
import com.college.domain.model.User
import com.college.domain.request.UserCreateRequest
import com.college.domain.request.user.UpdateUserRequest
import com.college.domain.request.user.UserCreateRequest
import org.jetbrains.exposed.sql.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.insertReturning
@ -14,7 +15,7 @@ import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.update
import java.util.*
class UserRepositoryImpl(val database: DbSettings): UserRepository {
class UserRepositoryImpl(private val database: DbSettings): UserRepository {
override suspend fun getUserByUuid(userUuid: UUID): User? = database.query {
(UserUuidTable innerJoin RoleIdTable).selectAll().where {
UserUuidTable.id eq userUuid
@ -45,11 +46,12 @@ class UserRepositoryImpl(val database: DbSettings): UserRepository {
.map(::resultRowToUserWithJoinRole)
}
override suspend fun updateUser(userUuid: UUID, updatedUser: User): Boolean = database.query{
override suspend fun updateUser(userUuid: UUID, updateUserRequest: UpdateUserRequest): Boolean = database.query{
val result = UserUuidTable.update({UserUuidTable.id eq userUuid}){ oldUser ->
oldUser[login] = updatedUser.login
oldUser[password] = updatedUser.password
val newRole = checkNotNull(updatedUser.role)
oldUser[login] = updateUserRequest.login
oldUser[password] = updateUserRequest.password
oldUser[isApproved] = updateUserRequest.isApproved
val newRole = checkNotNull(updateUserRequest.role)
oldUser[role] = newRole.id
}
result > 0

View File

@ -6,4 +6,5 @@ object UserUuidTable:UUIDTable(name = "users") {
val password = text(name = "user_password")
val login = text(name = "user_login")
val role = reference("role_id", RoleIdTable)
val isApproved = bool("user_is_approved").default(false)
}

View File

@ -6,5 +6,6 @@ data class User(
val uuid: UUID,
val login:String,
val password:String,
val role: Role? = null
val role: Role? = null,
val isApproved: Boolean
)

View File

@ -0,0 +1,3 @@
package com.college.domain.request.role
data class RoleCreateRequest(val roleName: String)

View File

@ -0,0 +1,3 @@
package com.college.domain.request.role
data class RoleUpdateRequest(val roleName: String)

View File

@ -0,0 +1,9 @@
package com.college.domain.request.user
import com.college.domain.model.Role
data class UpdateUserRequest(val login:String,
val password:String,
val role: Role,
val isApproved: Boolean
)

View File

@ -1,4 +1,4 @@
package com.college.domain.request
package com.college.domain.request.user
import com.college.domain.model.Role

View File

@ -0,0 +1,7 @@
package com.college.domain.usecase
import com.college.data.repositorty.user.UserRepository
class UserUseCase(private val userRepository: UserRepository) {
fun re
}

View File

@ -0,0 +1,4 @@
package com.college.domain.utils
class PasswordManager {
}