From 9ca22827d53d3a9d86e8b61cbf9093bf8f2db39f Mon Sep 17 00:00:00 2001 From: KP9lK Date: Mon, 23 Dec 2024 08:10:35 +0300 Subject: [PATCH] add role repo --- .../kotlin/com/college/data/DbSettings.kt | 4 +- .../kotlin/com/college/data/mapper/mappers.kt | 2 + .../data/repositorty/RoleRepository.kt | 9 ----- .../data/repositorty/UserRepository.kt | 13 ------ .../data/repositorty/role/RoleRepository.kt | 12 ++++++ .../repositorty/role/RoleRepositoryImpl.kt | 40 +++++++++++++++++++ .../data/repositorty/user/UserRepository.kt | 14 +++++++ .../{ => user}/UserRepositoryImpl.kt | 16 ++++---- .../com/college/data/table/UserUuidTable.kt | 1 + .../kotlin/com/college/domain/model/User.kt | 3 +- .../domain/request/role/RoleCreateRequest.kt | 3 ++ .../domain/request/role/RoleUpdateRequest.kt | 3 ++ .../domain/request/user/UpdateUserRequest.kt | 9 +++++ .../request/{ => user}/UserCreateRequest.kt | 2 +- .../com/college/domain/usecase/UserUseCase.kt | 7 ++++ .../college/domain/utils/PasswordManager.kt | 4 ++ 16 files changed, 108 insertions(+), 34 deletions(-) delete mode 100644 src/main/kotlin/com/college/data/repositorty/RoleRepository.kt delete mode 100644 src/main/kotlin/com/college/data/repositorty/UserRepository.kt create mode 100644 src/main/kotlin/com/college/data/repositorty/role/RoleRepository.kt create mode 100644 src/main/kotlin/com/college/data/repositorty/role/RoleRepositoryImpl.kt create mode 100644 src/main/kotlin/com/college/data/repositorty/user/UserRepository.kt rename src/main/kotlin/com/college/data/repositorty/{ => user}/UserRepositoryImpl.kt (74%) create mode 100644 src/main/kotlin/com/college/domain/request/role/RoleCreateRequest.kt create mode 100644 src/main/kotlin/com/college/domain/request/role/RoleUpdateRequest.kt create mode 100644 src/main/kotlin/com/college/domain/request/user/UpdateUserRequest.kt rename src/main/kotlin/com/college/domain/request/{ => user}/UserCreateRequest.kt (77%) create mode 100644 src/main/kotlin/com/college/domain/usecase/UserUseCase.kt create mode 100644 src/main/kotlin/com/college/domain/utils/PasswordManager.kt diff --git a/src/main/kotlin/com/college/data/DbSettings.kt b/src/main/kotlin/com/college/data/DbSettings.kt index 5acccaf..ccc3232 100644 --- a/src/main/kotlin/com/college/data/DbSettings.kt +++ b/src/main/kotlin/com/college/data/DbSettings.kt @@ -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 query(block: suspend () -> T): T = + suspend fun query(block: () -> Unit): T = newSuspendedTransaction { block() } } \ No newline at end of file diff --git a/src/main/kotlin/com/college/data/mapper/mappers.kt b/src/main/kotlin/com/college/data/mapper/mappers.kt index e5ff78a..70af3a9 100644 --- a/src/main/kotlin/com/college/data/mapper/mappers.kt +++ b/src/main/kotlin/com/college/data/mapper/mappers.kt @@ -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] diff --git a/src/main/kotlin/com/college/data/repositorty/RoleRepository.kt b/src/main/kotlin/com/college/data/repositorty/RoleRepository.kt deleted file mode 100644 index d38e58d..0000000 --- a/src/main/kotlin/com/college/data/repositorty/RoleRepository.kt +++ /dev/null @@ -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) -} \ No newline at end of file diff --git a/src/main/kotlin/com/college/data/repositorty/UserRepository.kt b/src/main/kotlin/com/college/data/repositorty/UserRepository.kt deleted file mode 100644 index 9a5797d..0000000 --- a/src/main/kotlin/com/college/data/repositorty/UserRepository.kt +++ /dev/null @@ -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? - suspend fun updateUser(userUuid: UUID, updatedUser: User): Boolean -} \ No newline at end of file diff --git a/src/main/kotlin/com/college/data/repositorty/role/RoleRepository.kt b/src/main/kotlin/com/college/data/repositorty/role/RoleRepository.kt new file mode 100644 index 0000000..28f72a8 --- /dev/null +++ b/src/main/kotlin/com/college/data/repositorty/role/RoleRepository.kt @@ -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 + suspend fun createRole(roleCreateRequest: RoleCreateRequest): Role + suspend fun removeRoleById(rolId: Int): Boolean + suspend fun updateRole(rolId: Int, roleUpdateRequest: RoleUpdateRequest): Boolean +} \ No newline at end of file diff --git a/src/main/kotlin/com/college/data/repositorty/role/RoleRepositoryImpl.kt b/src/main/kotlin/com/college/data/repositorty/role/RoleRepositoryImpl.kt new file mode 100644 index 0000000..5a6cc4d --- /dev/null +++ b/src/main/kotlin/com/college/data/repositorty/role/RoleRepositoryImpl.kt @@ -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 = 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 + } +} \ No newline at end of file diff --git a/src/main/kotlin/com/college/data/repositorty/user/UserRepository.kt b/src/main/kotlin/com/college/data/repositorty/user/UserRepository.kt new file mode 100644 index 0000000..4efd2f6 --- /dev/null +++ b/src/main/kotlin/com/college/data/repositorty/user/UserRepository.kt @@ -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 + suspend fun updateUser(userUuid: UUID, updateUserRequest: UpdateUserRequest): Boolean +} \ No newline at end of file diff --git a/src/main/kotlin/com/college/data/repositorty/UserRepositoryImpl.kt b/src/main/kotlin/com/college/data/repositorty/user/UserRepositoryImpl.kt similarity index 74% rename from src/main/kotlin/com/college/data/repositorty/UserRepositoryImpl.kt rename to src/main/kotlin/com/college/data/repositorty/user/UserRepositoryImpl.kt index 05414ad..6dbd360 100644 --- a/src/main/kotlin/com/college/data/repositorty/UserRepositoryImpl.kt +++ b/src/main/kotlin/com/college/data/repositorty/user/UserRepositoryImpl.kt @@ -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 diff --git a/src/main/kotlin/com/college/data/table/UserUuidTable.kt b/src/main/kotlin/com/college/data/table/UserUuidTable.kt index d6e615c..6f45f26 100644 --- a/src/main/kotlin/com/college/data/table/UserUuidTable.kt +++ b/src/main/kotlin/com/college/data/table/UserUuidTable.kt @@ -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) } \ No newline at end of file diff --git a/src/main/kotlin/com/college/domain/model/User.kt b/src/main/kotlin/com/college/domain/model/User.kt index 53908de..751ed31 100644 --- a/src/main/kotlin/com/college/domain/model/User.kt +++ b/src/main/kotlin/com/college/domain/model/User.kt @@ -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 ) diff --git a/src/main/kotlin/com/college/domain/request/role/RoleCreateRequest.kt b/src/main/kotlin/com/college/domain/request/role/RoleCreateRequest.kt new file mode 100644 index 0000000..91ecc9f --- /dev/null +++ b/src/main/kotlin/com/college/domain/request/role/RoleCreateRequest.kt @@ -0,0 +1,3 @@ +package com.college.domain.request.role + +data class RoleCreateRequest(val roleName: String) \ No newline at end of file diff --git a/src/main/kotlin/com/college/domain/request/role/RoleUpdateRequest.kt b/src/main/kotlin/com/college/domain/request/role/RoleUpdateRequest.kt new file mode 100644 index 0000000..c81b25b --- /dev/null +++ b/src/main/kotlin/com/college/domain/request/role/RoleUpdateRequest.kt @@ -0,0 +1,3 @@ +package com.college.domain.request.role + +data class RoleUpdateRequest(val roleName: String) \ No newline at end of file diff --git a/src/main/kotlin/com/college/domain/request/user/UpdateUserRequest.kt b/src/main/kotlin/com/college/domain/request/user/UpdateUserRequest.kt new file mode 100644 index 0000000..8227a99 --- /dev/null +++ b/src/main/kotlin/com/college/domain/request/user/UpdateUserRequest.kt @@ -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 +) \ No newline at end of file diff --git a/src/main/kotlin/com/college/domain/request/UserCreateRequest.kt b/src/main/kotlin/com/college/domain/request/user/UserCreateRequest.kt similarity index 77% rename from src/main/kotlin/com/college/domain/request/UserCreateRequest.kt rename to src/main/kotlin/com/college/domain/request/user/UserCreateRequest.kt index ec6ed1d..e1cba99 100644 --- a/src/main/kotlin/com/college/domain/request/UserCreateRequest.kt +++ b/src/main/kotlin/com/college/domain/request/user/UserCreateRequest.kt @@ -1,4 +1,4 @@ -package com.college.domain.request +package com.college.domain.request.user import com.college.domain.model.Role diff --git a/src/main/kotlin/com/college/domain/usecase/UserUseCase.kt b/src/main/kotlin/com/college/domain/usecase/UserUseCase.kt new file mode 100644 index 0000000..52628ea --- /dev/null +++ b/src/main/kotlin/com/college/domain/usecase/UserUseCase.kt @@ -0,0 +1,7 @@ +package com.college.domain.usecase + +import com.college.data.repositorty.user.UserRepository + +class UserUseCase(private val userRepository: UserRepository) { + fun re +} \ No newline at end of file diff --git a/src/main/kotlin/com/college/domain/utils/PasswordManager.kt b/src/main/kotlin/com/college/domain/utils/PasswordManager.kt new file mode 100644 index 0000000..ee36f43 --- /dev/null +++ b/src/main/kotlin/com/college/domain/utils/PasswordManager.kt @@ -0,0 +1,4 @@ +package com.college.domain.utils + +class PasswordManager { +} \ No newline at end of file