diff --git a/src/main/kotlin/top/fatweb/api/config/InitConfig.kt b/src/main/kotlin/top/fatweb/api/config/InitConfig.kt
index d902e38..9eab4ca 100644
--- a/src/main/kotlin/top/fatweb/api/config/InitConfig.kt
+++ b/src/main/kotlin/top/fatweb/api/config/InitConfig.kt
@@ -43,7 +43,7 @@ class InitConfig(
}
val userInfo = UserInfo().apply {
userId = 0
- nickName = AdminProperties.nickName
+ nickname = AdminProperties.nickname
email = AdminProperties.email
}
diff --git a/src/main/kotlin/top/fatweb/api/controller/permission/UserController.kt b/src/main/kotlin/top/fatweb/api/controller/permission/UserController.kt
index eff2ae6..7892f00 100644
--- a/src/main/kotlin/top/fatweb/api/controller/permission/UserController.kt
+++ b/src/main/kotlin/top/fatweb/api/controller/permission/UserController.kt
@@ -6,7 +6,8 @@ import org.springframework.web.bind.annotation.RestController
import top.fatweb.api.converter.permission.UserConverter
import top.fatweb.api.entity.common.ResponseResult
import top.fatweb.api.service.permission.IUserService
-import top.fatweb.api.vo.permission.UserWithInfoVo
+import top.fatweb.api.vo.permission.UserWithPowerInfoVo
+import top.fatweb.api.vo.permission.UserWithRoleInfoVo
/**
*
@@ -22,10 +23,16 @@ class UserController(
private val userService: IUserService
) {
@GetMapping("info")
- fun getInfo(): ResponseResult {
+ fun getInfo(): ResponseResult {
userService.getInfo()?.let {
- return ResponseResult.databaseSuccess(data = UserConverter.userToUserInfoVo(it))
+ return ResponseResult.databaseSuccess(data = UserConverter.userToUserWithPowerInfoVo(it))
} ?: let { return ResponseResult.databaseFail() }
}
+
+ @GetMapping
+ fun get(): ResponseResult> {
+ return ResponseResult.databaseSuccess(
+ data = userService.getList().map { UserConverter.userToUserWithRoleInfoVo(it) })
+ }
}
diff --git a/src/main/kotlin/top/fatweb/api/converter/permission/UserConverter.kt b/src/main/kotlin/top/fatweb/api/converter/permission/UserConverter.kt
index d2a3c23..4453481 100644
--- a/src/main/kotlin/top/fatweb/api/converter/permission/UserConverter.kt
+++ b/src/main/kotlin/top/fatweb/api/converter/permission/UserConverter.kt
@@ -14,7 +14,7 @@ object UserConverter {
return user
}
- fun userToUserInfoVo(user: User) = UserWithInfoVo(
+ fun userToUserWithPowerInfoVo(user: User) = UserWithPowerInfoVo(
id = user.id,
username = user.username,
locking = user.locking?.let { it == 1 },
@@ -30,7 +30,7 @@ object UserConverter {
userInfo = user.userInfo?.let { UserInfoVo(
id = it.id,
userId = it.userId,
- nickName = it.nickName,
+ nickname = it.nickname,
avatar = it.avatar,
email = it.email,
createTime = it.createTime,
@@ -71,4 +71,42 @@ object UserConverter {
)
}
)
+
+ fun userToUserWithRoleInfoVo(user: User) = UserWithRoleInfoVo(
+ 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 { UserInfoVo(
+ id = it.id,
+ userId = it.userId,
+ nickname = it.nickname,
+ avatar = it.avatar,
+ email = it.email,
+ createTime = it.createTime,
+ updateTime = it.updateTime
+ ) },
+ roles = user.roles?.map {
+ RoleVo(
+ id = it.id,
+ name = it.name,
+ enable = it.enable == 1
+ )
+ },
+ groups = user.groups?.map {
+ GroupVo(
+ id = it.id,
+ name = it.name,
+ enable = it.enable == 1
+ )
+ }
+ )
}
\ No newline at end of file
diff --git a/src/main/kotlin/top/fatweb/api/entity/permission/UserInfo.kt b/src/main/kotlin/top/fatweb/api/entity/permission/UserInfo.kt
index 6030c50..dfe59f4 100644
--- a/src/main/kotlin/top/fatweb/api/entity/permission/UserInfo.kt
+++ b/src/main/kotlin/top/fatweb/api/entity/permission/UserInfo.kt
@@ -24,8 +24,8 @@ class UserInfo : Serializable {
/**
* 昵称
*/
- @TableField("nick_name")
- var nickName: String? = null
+ @TableField("nickname")
+ var nickname: String? = null
/**
* 头像
@@ -60,6 +60,6 @@ class UserInfo : Serializable {
var version: Int? = null
override fun toString(): String {
- return "UserInfo(id=$id, userId=$userId, nickName=$nickName, avatar=$avatar, email=$email, createTime=$createTime, updateTime=$updateTime, deleted=$deleted, version=$version)"
+ return "UserInfo(id=$id, userId=$userId, nickname=$nickname, avatar=$avatar, email=$email, createTime=$createTime, updateTime=$updateTime, deleted=$deleted, version=$version)"
}
}
diff --git a/src/main/kotlin/top/fatweb/api/mapper/permission/UserMapper.kt b/src/main/kotlin/top/fatweb/api/mapper/permission/UserMapper.kt
index fd2cd6c..4d237cc 100644
--- a/src/main/kotlin/top/fatweb/api/mapper/permission/UserMapper.kt
+++ b/src/main/kotlin/top/fatweb/api/mapper/permission/UserMapper.kt
@@ -15,5 +15,7 @@ import top.fatweb.api.entity.permission.User
*/
@Mapper
interface UserMapper : BaseMapper {
- fun getOneWithPowerByUsername(@Param("username")username: String): User?
+ fun getOneWithPowerInfoByUsername(@Param("username")username: String): User?
+
+ fun getListWithRoleInfo(): List
}
diff --git a/src/main/kotlin/top/fatweb/api/properties/AdminProperties.kt b/src/main/kotlin/top/fatweb/api/properties/AdminProperties.kt
index 1ac9989..a14e079 100644
--- a/src/main/kotlin/top/fatweb/api/properties/AdminProperties.kt
+++ b/src/main/kotlin/top/fatweb/api/properties/AdminProperties.kt
@@ -8,6 +8,6 @@ import org.springframework.stereotype.Component
object AdminProperties {
var username = "admin"
var password: String? = null
- var nickName = "Administrator"
+ var nickname = "Administrator"
var email = "admin@fatweb.top"
}
\ No newline at end of file
diff --git a/src/main/kotlin/top/fatweb/api/service/permission/IUserService.kt b/src/main/kotlin/top/fatweb/api/service/permission/IUserService.kt
index 0a7ce40..a0b29c3 100644
--- a/src/main/kotlin/top/fatweb/api/service/permission/IUserService.kt
+++ b/src/main/kotlin/top/fatweb/api/service/permission/IUserService.kt
@@ -15,4 +15,6 @@ interface IUserService : IService {
fun getUserWithPower(username: String): User?
fun getInfo(): User?
+
+ fun getList(): List
}
diff --git a/src/main/kotlin/top/fatweb/api/service/permission/impl/UserServiceImpl.kt b/src/main/kotlin/top/fatweb/api/service/permission/impl/UserServiceImpl.kt
index c78179a..34e4b43 100644
--- a/src/main/kotlin/top/fatweb/api/service/permission/impl/UserServiceImpl.kt
+++ b/src/main/kotlin/top/fatweb/api/service/permission/impl/UserServiceImpl.kt
@@ -23,7 +23,7 @@ class UserServiceImpl(
private val operationService: IOperationService
) : ServiceImpl(), IUserService {
override fun getUserWithPower(username: String): User? {
- val user = baseMapper.getOneWithPowerByUsername(username)
+ val user = baseMapper.getOneWithPowerInfoByUsername(username)
user ?: let { return null }
if (user.id == 0L) {
@@ -38,4 +38,5 @@ class UserServiceImpl(
override fun getInfo() = WebUtil.getLoginUsername()?.let { getUserWithPower(it) } ?: let { null }
+ override fun getList() = baseMapper.getListWithRoleInfo()
}
diff --git a/src/main/kotlin/top/fatweb/api/vo/permission/GroupVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/GroupVo.kt
new file mode 100644
index 0000000..9f4b666
--- /dev/null
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/GroupVo.kt
@@ -0,0 +1,17 @@
+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
+
+@Schema(description = "用户组返回参数")
+data class GroupVo(
+ @JsonSerialize(using = ToStringSerializer::class)
+ val id: Long?,
+
+ @Schema(description = "用户组名", example = "Group")
+ val name: String?,
+
+ @Schema(description = "启用", example = "true")
+ val enable: Boolean?
+)
diff --git a/src/main/kotlin/top/fatweb/api/vo/permission/RoleVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/RoleVo.kt
new file mode 100644
index 0000000..2b89961
--- /dev/null
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/RoleVo.kt
@@ -0,0 +1,17 @@
+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
+
+@Schema(description = "角色返回参数")
+data class RoleVo(
+ @JsonSerialize(using = ToStringSerializer::class)
+ val id: Long?,
+
+ @Schema(description = "角色名", example = "Role")
+ val name: String?,
+
+ @Schema(description = "启用", example = "true")
+ val enable: Boolean?
+)
diff --git a/src/main/kotlin/top/fatweb/api/vo/permission/TokenVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/TokenVo.kt
index 94668b9..05e8dbe 100644
--- a/src/main/kotlin/top/fatweb/api/vo/permission/TokenVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/TokenVo.kt
@@ -2,7 +2,7 @@ package top.fatweb.api.vo.permission
import io.swagger.v3.oas.annotations.media.Schema
-@Schema(description = "Token")
+@Schema(description = "Token 返回参数")
data class TokenVo(
@Schema(
description = "Token",
diff --git a/src/main/kotlin/top/fatweb/api/vo/permission/UserInfoVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/UserInfoVo.kt
index b66de9b..d78c21f 100644
--- a/src/main/kotlin/top/fatweb/api/vo/permission/UserInfoVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/UserInfoVo.kt
@@ -15,7 +15,7 @@ data class UserInfoVo(
val userId: Long?,
@Schema(description = "昵称", example = "User")
- val nickName: String?,
+ val nickname: String?,
@Schema(description = "头像")
val avatar: String?,
diff --git a/src/main/kotlin/top/fatweb/api/vo/permission/UserWithInfoVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/UserWithPowerInfoVo.kt
similarity index 95%
rename from src/main/kotlin/top/fatweb/api/vo/permission/UserWithInfoVo.kt
rename to src/main/kotlin/top/fatweb/api/vo/permission/UserWithPowerInfoVo.kt
index 170f27b..010c446 100644
--- a/src/main/kotlin/top/fatweb/api/vo/permission/UserWithInfoVo.kt
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/UserWithPowerInfoVo.kt
@@ -5,8 +5,8 @@ import com.fasterxml.jackson.databind.ser.std.ToStringSerializer
import io.swagger.v3.oas.annotations.media.Schema
import java.time.LocalDateTime
-@Schema(description = "获取用户信息返回参数")
-data class UserWithInfoVo(
+@Schema(description = "用户权限信息返回参数")
+data class UserWithPowerInfoVo(
@JsonSerialize(using = ToStringSerializer::class)
val id: Long?,
diff --git a/src/main/kotlin/top/fatweb/api/vo/permission/UserWithRoleInfoVo.kt b/src/main/kotlin/top/fatweb/api/vo/permission/UserWithRoleInfoVo.kt
new file mode 100644
index 0000000..87369b0
--- /dev/null
+++ b/src/main/kotlin/top/fatweb/api/vo/permission/UserWithRoleInfoVo.kt
@@ -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
+
+@Schema(description = "用户角色信息返回参数")
+data class UserWithRoleInfoVo(
+ @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?,
+
+ @Schema(description = "角色列表")
+ val roles: List?,
+
+ @Schema(description = "用户组列表")
+ val groups: List?
+)
\ No newline at end of file
diff --git a/src/main/resources/application-config-template.yml b/src/main/resources/application-config-template.yml
index d589902..3b7ddd0 100644
--- a/src/main/resources/application-config-template.yml
+++ b/src/main/resources/application-config-template.yml
@@ -2,7 +2,7 @@ app:
admin:
# username: admin # Username of administrator
# password: admin # Default password of administrator
-# nick-name: Administrator # Nickname of administrator
+# nickname: Administrator # Nickname of administrator
# email: admin@fatweb.top # Email of administrator
security:
# header-string: "Authorization" # The key of head to get token
diff --git a/src/main/resources/db/migration/V1_0_0_231104__Add_table_'t_user_info'.sql b/src/main/resources/db/migration/V1_0_0_231104__Add_table_'t_user_info'.sql
index 6a329de..0231a70 100644
--- a/src/main/resources/db/migration/V1_0_0_231104__Add_table_'t_user_info'.sql
+++ b/src/main/resources/db/migration/V1_0_0_231104__Add_table_'t_user_info'.sql
@@ -4,8 +4,8 @@ create table if not exists t_user_info
(
id bigint not null primary key,
user_id bigint not null comment '用户ID',
- nick_name varchar(50) null comment '昵称',
- avatar varchar(500) null comment '头像',
+ nickname varchar(50) null comment '昵称',
+ avatar text null comment '头像',
email varchar(100) null comment '邮箱',
create_time datetime not null default (utc_timestamp()) comment '创建时间',
update_time datetime not null default (utc_timestamp()) comment '修改时间',
diff --git a/src/main/resources/mapper/permission/UserMapper.xml b/src/main/resources/mapper/permission/UserMapper.xml
index 11d27ff..1102e10 100644
--- a/src/main/resources/mapper/permission/UserMapper.xml
+++ b/src/main/resources/mapper/permission/UserMapper.xml
@@ -1,7 +1,7 @@
-
diff --git a/src/test/kotlin/top/fatweb/api/FatWebApiApplicationTests.kt b/src/test/kotlin/top/fatweb/api/FatWebApiApplicationTests.kt
index 1b203ca..9b97a3b 100644
--- a/src/test/kotlin/top/fatweb/api/FatWebApiApplicationTests.kt
+++ b/src/test/kotlin/top/fatweb/api/FatWebApiApplicationTests.kt
@@ -1,5 +1,6 @@
package top.fatweb.api
+import com.talanlabs.avatargenerator.GitHubAvatar
import org.junit.jupiter.api.Assertions.assertEquals
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.extension.ExtendWith
@@ -9,6 +10,9 @@ import org.springframework.test.context.junit.jupiter.SpringExtension
import top.fatweb.api.properties.SecurityProperties
import top.fatweb.api.util.ByteUtil
import top.fatweb.api.util.JwtUtil
+import kotlin.io.encoding.Base64
+import kotlin.io.encoding.ExperimentalEncodingApi
+
@ExtendWith(SpringExtension::class)
class FatWebApiApplicationTests {
@@ -39,4 +43,12 @@ class FatWebApiApplicationTests {
assertEquals("512KiB", ByteUtil.formatByteSize(512 * 1024))
assertEquals("1.5MiB", ByteUtil.formatByteSize(1 * 1024 * 1024 + 512 * 1024))
}
+
+ @OptIn(ExperimentalEncodingApi::class)
+ @Test
+ fun name() {
+ val avatar = GitHubAvatar.newAvatarBuilder(396, 5).build()
+ val bytes = avatar.createAsPngBytes(1232132134543L)
+ logger.info(Base64.encode(bytes))
+ }
}