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 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.Database
import org.jetbrains.exposed.sql.transactions.experimental.newSuspendedTransaction 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() } newSuspendedTransaction { block() }
} }

View File

@ -18,6 +18,7 @@ fun resultRowToUser(result: ResultRow):User {
uuid = result[UserUuidTable.id].value, uuid = result[UserUuidTable.id].value,
login = result[UserUuidTable.login], login = result[UserUuidTable.login],
password = result[UserUuidTable.password], password = result[UserUuidTable.password],
isApproved = result[UserUuidTable.isApproved]
) )
} }
@ -26,6 +27,7 @@ fun resultRowToUserWithJoinRole(result: ResultRow):User{
uuid = result[UserUuidTable.id].value, uuid = result[UserUuidTable.id].value,
login = result[UserUuidTable.login], login = result[UserUuidTable.login],
password = result[UserUuidTable.password], password = result[UserUuidTable.password],
isApproved = result[UserUuidTable.isApproved],
role = Role ( role = Role (
result[RoleIdTable.id].value, result[RoleIdTable.id].value,
result[RoleIdTable.role] 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.DbSettings
import com.college.data.mapper.resultRowToUser 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.RoleIdTable
import com.college.data.table.UserUuidTable import com.college.data.table.UserUuidTable
import com.college.domain.model.User 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.SqlExpressionBuilder.eq
import org.jetbrains.exposed.sql.deleteWhere import org.jetbrains.exposed.sql.deleteWhere
import org.jetbrains.exposed.sql.insertReturning import org.jetbrains.exposed.sql.insertReturning
@ -14,7 +15,7 @@ import org.jetbrains.exposed.sql.selectAll
import org.jetbrains.exposed.sql.update import org.jetbrains.exposed.sql.update
import java.util.* 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 { override suspend fun getUserByUuid(userUuid: UUID): User? = database.query {
(UserUuidTable innerJoin RoleIdTable).selectAll().where { (UserUuidTable innerJoin RoleIdTable).selectAll().where {
UserUuidTable.id eq userUuid UserUuidTable.id eq userUuid
@ -45,11 +46,12 @@ class UserRepositoryImpl(val database: DbSettings): UserRepository {
.map(::resultRowToUserWithJoinRole) .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 -> val result = UserUuidTable.update({UserUuidTable.id eq userUuid}){ oldUser ->
oldUser[login] = updatedUser.login oldUser[login] = updateUserRequest.login
oldUser[password] = updatedUser.password oldUser[password] = updateUserRequest.password
val newRole = checkNotNull(updatedUser.role) oldUser[isApproved] = updateUserRequest.isApproved
val newRole = checkNotNull(updateUserRequest.role)
oldUser[role] = newRole.id oldUser[role] = newRole.id
} }
result > 0 result > 0

View File

@ -6,4 +6,5 @@ object UserUuidTable:UUIDTable(name = "users") {
val password = text(name = "user_password") val password = text(name = "user_password")
val login = text(name = "user_login") val login = text(name = "user_login")
val role = reference("role_id", RoleIdTable) 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 uuid: UUID,
val login:String, val login:String,
val password: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 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 {
}