Optimize user management api

This commit is contained in:
2023-11-29 10:55:44 +08:00
parent a0a6ce8f87
commit 7cf6b5cea2
8 changed files with 103 additions and 43 deletions

View File

@@ -9,6 +9,7 @@ import top.fatweb.api.param.authentication.LoginParam
import top.fatweb.api.param.authentication.UserAddParam
import top.fatweb.api.param.authentication.UserUpdateParam
import top.fatweb.api.vo.PageVo
import top.fatweb.api.vo.permission.UserWithInfoVo
import top.fatweb.api.vo.permission.UserWithPasswordRoleInfoVo
import top.fatweb.api.vo.permission.UserWithPowerInfoVo
import top.fatweb.api.vo.permission.UserWithRoleInfoVo
@@ -81,6 +82,24 @@ object UserConverter {
}
)
fun userToUserWithInfoVo(user: User) = UserWithInfoVo(
id = user.id,
username = user.username,
locking = user.locking?.let { it == 1 },
expiration = user.expiration,
credentialsExpiration = user.credentialsExpiration,
enable = user.enable?.let { it == 1 },
currentLoginTime = user.currentLoginTime,
currentLoginIp = user.currentLoginIp,
lastLoginTime = user.lastLoginTime,
lastLoginIp = user.lastLoginIp,
createTime = user.createTime,
updateTime = user.updateTime,
userInfo = user.userInfo?.let {
UserInfoConverter.userInfoToUserInfoVo(it)
}
)
fun userToUserWithPasswordRoleInfoVo(user: User) = UserWithPasswordRoleInfoVo(
id = user.id,
username = user.username,

View File

@@ -14,13 +14,13 @@ import top.fatweb.api.entity.permission.User
*/
@Mapper
interface UserMapper : BaseMapper<User> {
fun getOneWithPowerInfoByUsername(@Param("username")username: String): User?
fun selectOneWithPowerInfoByUsername(@Param("username")username: String): User?
fun selectPage(page: IPage<Long>, searchValue: String?, searchRegex: Boolean): IPage<Long>
fun getWithRoleInfoByList(userIds: List<Long>): List<User>?
fun selectListWithRoleInfoByIds(userIds: List<Long>): List<User>?
fun getOneWithRoleInfo(id: Long): User?
fun selectOneWithRoleInfoById(id: Long): User?
fun getListWithRoleInfo(): List<User>
fun selectListWithInfo(): List<User>
}

View File

@@ -7,6 +7,7 @@ import top.fatweb.api.param.authentication.UserDeleteParam
import top.fatweb.api.param.authentication.UserGetParam
import top.fatweb.api.param.authentication.UserUpdateParam
import top.fatweb.api.vo.PageVo
import top.fatweb.api.vo.permission.UserWithInfoVo
import top.fatweb.api.vo.permission.UserWithPasswordRoleInfoVo
import top.fatweb.api.vo.permission.UserWithPowerInfoVo
import top.fatweb.api.vo.permission.UserWithRoleInfoVo
@@ -18,7 +19,7 @@ import top.fatweb.api.vo.permission.UserWithRoleInfoVo
* @since 1.0.0
*/
interface IUserService : IService<User> {
fun getUserWithPower(username: String): User?
fun getUserWithPowerByUsername(username: String): User?
fun getInfo(): UserWithPowerInfoVo?
@@ -26,7 +27,7 @@ interface IUserService : IService<User> {
fun getOne(id: Long): UserWithRoleInfoVo?
fun getList(): List<UserWithRoleInfoVo>
fun getList(): List<UserWithInfoVo>
fun add(userAddParam: UserAddParam): UserWithPasswordRoleInfoVo?

View File

@@ -15,7 +15,7 @@ import top.fatweb.api.service.permission.IUserService
@Service
class UserDetailsServiceImpl(val userService: IUserService) : UserDetailsService {
override fun loadUserByUsername(username: String): UserDetails {
val user = userService.getUserWithPower(username)
val user = userService.getUserWithPowerByUsername(username)
user ?: let { throw Exception("Username not found") }
return LoginUser(user)

View File

@@ -41,8 +41,8 @@ class UserServiceImpl(
private val userRoleService: IUserRoleService,
private val userGroupService: IUserGroupService
) : ServiceImpl<UserMapper, User>(), IUserService {
override fun getUserWithPower(username: String): User? {
val user = baseMapper.getOneWithPowerInfoByUsername(username)
override fun getUserWithPowerByUsername(username: String): User? {
val user = baseMapper.selectOneWithPowerInfoByUsername(username)
user ?: let { return null }
if (user.id == 0L) {
@@ -56,7 +56,7 @@ class UserServiceImpl(
}
override fun getInfo() = WebUtil.getLoginUsername()
?.let { username -> getUserWithPower(username)?.let { UserConverter.userToUserWithPowerInfoVo(it) } }
?.let { username -> getUserWithPowerByUsername(username)?.let { UserConverter.userToUserWithPowerInfoVo(it) } }
override fun getPage(userGetParam: UserGetParam?): PageVo<UserWithRoleInfoVo> {
val userIdsPage = Page<Long>(userGetParam?.currentPage ?: 1, userGetParam?.pageSize ?: 20)
@@ -67,16 +67,16 @@ class UserServiceImpl(
baseMapper.selectPage(userIdsPage, userGetParam?.searchValue, userGetParam?.searchRegex ?: false)
val userPage = Page<User>(userIdsIPage.current, userIdsIPage.size, userIdsIPage.total)
if (userIdsIPage.total > 0) {
userPage.setRecords(baseMapper.getWithRoleInfoByList(userIdsIPage.records))
userPage.setRecords(baseMapper.selectListWithRoleInfoByIds(userIdsIPage.records))
}
return UserConverter.userPageToUserWithRoleInfoPageVo(userPage)
}
override fun getOne(id: Long) =
baseMapper.getOneWithRoleInfo(id)?.let { UserConverter.userToUserWithRoleInfoVo(it) }
baseMapper.selectOneWithRoleInfoById(id)?.let { UserConverter.userToUserWithRoleInfoVo(it) }
override fun getList() = baseMapper.getListWithRoleInfo().map { UserConverter.userToUserWithRoleInfoVo(it) }
override fun getList() = baseMapper.selectListWithInfo().map { UserConverter.userToUserWithInfoVo(it) }
@Transactional
override fun add(userAddParam: UserAddParam): UserWithPasswordRoleInfoVo? {

View File

@@ -0,0 +1,54 @@
package top.fatweb.api.vo.permission
import com.fasterxml.jackson.databind.annotation.JsonSerialize
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer
import io.swagger.v3.oas.annotations.media.Schema
import java.time.LocalDateTime
/**
* User with information value object
*
* @author FatttSnake, fatttsnake@gmail.com
* @since 1.0.0
*/
@Schema(description = "用户信息返回参数")
data class UserWithInfoVo(
@JsonSerialize(using = ToStringSerializer::class)
val id: Long?,
@Schema(description = "用户名", example = "User")
val username: String?,
@Schema(description = "是否锁定", example = "false")
val locking: Boolean?,
@Schema(description = "过期时间", example = "1900-01-01T00:00:00.000Z")
val expiration: LocalDateTime?,
@Schema(description = "认证过期时间", example = "1900-01-01T00:00:00.000Z")
val credentialsExpiration: LocalDateTime?,
@Schema(description = "是否启用", example = "true")
val enable: Boolean?,
@Schema(description = "当前登录时间", example = "1900-01-01T00:00:00.000Z")
val currentLoginTime: LocalDateTime?,
@Schema(description = "当前登录 IP", example = "1.1.1.1")
val currentLoginIp: String?,
@Schema(description = "最后登录时间", example = "1900-01-01T00:00:00.000Z")
val lastLoginTime: LocalDateTime?,
@Schema(description = "最后登录 IP", example = "1.1.1.1")
val lastLoginIp: String?,
@Schema(description = "创建时间", example = "1900-01-01T00:00:00.000Z")
val createTime: LocalDateTime?,
@Schema(description = "修改时间", example = "1900-01-01T00:00:00.000Z")
val updateTime: LocalDateTime?,
@Schema(description = "用户资料")
val userInfo: UserInfoVo?
)

View File

@@ -6,7 +6,7 @@ import io.swagger.v3.oas.annotations.media.Schema
import java.time.LocalDateTime
/**
* User with role information value object
* User with password role information value object
*
* @author FatttSnake, fatttsnake@gmail.com
* @since 1.0.0