review: 修改 api 结构.

This commit is contained in:
lijiahangmax
2023-11-01 00:53:24 +08:00
parent 3fef9b8ae2
commit 0dfddf68ca
17 changed files with 284 additions and 113 deletions

View File

@@ -7,7 +7,6 @@ import com.orion.ops.framework.log.core.enums.IgnoreLogMode;
import com.orion.ops.framework.web.core.annotation.RestWrapper;
import com.orion.ops.module.infra.define.operator.AuthenticationOperatorType;
import com.orion.ops.module.infra.entity.request.user.UserLoginRequest;
import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest;
import com.orion.ops.module.infra.entity.vo.UserLoginVO;
import com.orion.ops.module.infra.service.AuthenticationService;
import io.swagger.v3.oas.annotations.Operation;
@@ -58,12 +57,4 @@ public class AuthenticationController {
return HttpWrapper.ok();
}
@OperatorLog(AuthenticationOperatorType.UPDATE_PASSWORD)
@Operation(summary = "修改密码")
@PutMapping("/update-password")
public HttpWrapper<?> updatePassword(@Validated @RequestBody UserUpdatePasswordRequest request) {
authenticationService.updatePassword(request);
return HttpWrapper.ok();
}
}

View File

@@ -0,0 +1,33 @@
### 查询当前用户信息
GET {{baseUrl}}/infra/mine/get-user
Authorization: {{token}}
### 更新当前用户信息
PUT {{baseUrl}}/infra/mine/update-user
Content-Type: application/json
Authorization: {{token}}
{
"nickname": "名称",
"mobile": "15555555555",
"email": "123@123.com"
}
### 修改当前用户密码
PUT {{baseUrl}}/infra/mine/update-password
Content-Type: application/json
Authorization: {{token}}
{
"beforePassword": "21232f297a57a5a743894a0e4a801fc3",
"password": "21232f297a57a5a743894a0e4a801fc3"
}
### 查询当前用户登录日志
GET {{baseUrl}}/infra/mine/login-history
Authorization: {{token}}
###

View File

@@ -0,0 +1,70 @@
package com.orion.ops.module.infra.controller;
import com.orion.lang.define.wrapper.HttpWrapper;
import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog;
import com.orion.ops.framework.log.core.annotation.IgnoreLog;
import com.orion.ops.framework.log.core.enums.IgnoreLogMode;
import com.orion.ops.framework.web.core.annotation.RestWrapper;
import com.orion.ops.module.infra.define.operator.AuthenticationOperatorType;
import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest;
import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest;
import com.orion.ops.module.infra.entity.vo.LoginHistoryVO;
import com.orion.ops.module.infra.entity.vo.SystemUserVO;
import com.orion.ops.module.infra.service.MineService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
/**
* 个人服务
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/1 0:19
*/
@Tag(name = "infra - 个人服务")
@Slf4j
@Validated
@RestWrapper
@RestController
@RequestMapping("/infra/mine")
@SuppressWarnings({"ELValidationInJSP", "SpringElInspection"})
public class MineController {
@Resource
private MineService mineService;
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/get-user")
@Operation(summary = "查询当前用户信息")
public SystemUserVO getCurrentUserInfo() {
return mineService.getCurrentUserInfo();
}
@PutMapping("/update-user")
@Operation(summary = "更新当前用户信息")
public Integer updateCurrentUser(@Validated @RequestBody SystemUserUpdateRequest request) {
return mineService.updateCurrentUser(request);
}
@OperatorLog(AuthenticationOperatorType.UPDATE_PASSWORD)
@Operation(summary = "修改当前用户密码")
@PutMapping("/update-password")
public HttpWrapper<?> updateCurrentUserPassword(@Validated @RequestBody UserUpdatePasswordRequest request) {
mineService.updateCurrentUserPassword(request);
return HttpWrapper.ok();
}
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/login-history")
@Operation(summary = "查询当前用户登录日志")
public List<LoginHistoryVO> getCurrentLoginHistory() {
return mineService.getCurrentLoginHistory();
}
}

View File

@@ -48,7 +48,6 @@ public class OperatorLogController {
}
// fixme 权限配置
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/login-history")
@Operation(summary = "查询用户登录日志")
@@ -56,13 +55,5 @@ public class OperatorLogController {
return operatorLogService.getLoginHistory(username);
}
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/current-login-history")
@Operation(summary = "查询当前用户登录日志")
public List<LoginHistoryVO> getCurrentLoginHistory() {
String username = SecurityUtils.getLoginUsername();
return operatorLogService.getLoginHistory(username);
}
}

View File

@@ -7,7 +7,6 @@ import com.orion.ops.framework.biz.operator.log.core.annotation.OperatorLog;
import com.orion.ops.framework.common.validator.group.Page;
import com.orion.ops.framework.log.core.annotation.IgnoreLog;
import com.orion.ops.framework.log.core.enums.IgnoreLogMode;
import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.framework.web.core.annotation.RestWrapper;
import com.orion.ops.module.infra.define.operator.SystemUserOperatorType;
import com.orion.ops.module.infra.entity.request.user.*;
@@ -96,20 +95,6 @@ public class SystemUserController {
return HttpWrapper.ok();
}
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/get-current")
@Operation(summary = "查询当前用户信息")
public SystemUserVO getCurrentUserInfo() {
return systemUserService.getSystemUserById(SecurityUtils.getLoginUserId());
}
@PutMapping("/update-current")
@Operation(summary = "更新当前用户信息")
public Integer updateCurrentUser(@Validated @RequestBody SystemUserUpdateRequest request) {
request.setId(SecurityUtils.getLoginUserId());
return systemUserService.updateSystemUserById(request);
}
@IgnoreLog(IgnoreLogMode.RET)
@GetMapping("/get")
@Operation(summary = "通过 id 查询用户")

View File

@@ -3,7 +3,6 @@ package com.orion.ops.module.infra.service;
import com.orion.ops.framework.common.security.LoginUser;
import com.orion.ops.module.infra.entity.dto.LoginTokenDTO;
import com.orion.ops.module.infra.entity.request.user.UserLoginRequest;
import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest;
import com.orion.ops.module.infra.entity.vo.UserLoginVO;
import javax.servlet.http.HttpServletRequest;
@@ -43,13 +42,6 @@ public interface AuthenticationService {
*/
void logout(HttpServletRequest servletRequest);
/**
* 修改密码
*
* @param request request
*/
void updatePassword(UserUpdatePasswordRequest request);
/**
* 获取登录用户信息
*

View File

@@ -0,0 +1,48 @@
package com.orion.ops.module.infra.service;
import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest;
import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest;
import com.orion.ops.module.infra.entity.vo.LoginHistoryVO;
import com.orion.ops.module.infra.entity.vo.SystemUserVO;
import java.util.List;
/**
* 个人服务
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/1 0:25
*/
public interface MineService {
/**
* 获取当前登录用户信息
*
* @return user
*/
SystemUserVO getCurrentUserInfo();
/**
* 更新当前登录用户信息
*
* @param request request
* @return effect
*/
Integer updateCurrentUser(SystemUserUpdateRequest request);
/**
* 修改当前用户密码
*
* @param request request
*/
void updateCurrentUserPassword(UserUpdatePasswordRequest request);
/**
* 获取当前用户登录日志
*
* @return 登录日志
*/
List<LoginHistoryVO> getCurrentLoginHistory();
}

View File

@@ -24,8 +24,6 @@ import com.orion.ops.module.infra.entity.domain.SystemRoleDO;
import com.orion.ops.module.infra.entity.domain.SystemUserDO;
import com.orion.ops.module.infra.entity.dto.LoginTokenDTO;
import com.orion.ops.module.infra.entity.request.user.UserLoginRequest;
import com.orion.ops.module.infra.entity.request.user.UserResetPasswordRequest;
import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest;
import com.orion.ops.module.infra.entity.vo.UserLoginVO;
import com.orion.ops.module.infra.enums.LoginTokenStatusEnum;
import com.orion.ops.module.infra.enums.UserStatusEnum;
@@ -60,9 +58,6 @@ public class AuthenticationServiceImpl implements AuthenticationService {
@Resource
private SystemUserRoleDAO systemUserRoleDAO;
@Resource
private SystemUserService systemUserService;
@Resource
private PermissionService permissionService;
@@ -127,22 +122,6 @@ public class AuthenticationServiceImpl implements AuthenticationService {
redisTemplate.delete(Lists.of(loginKey, refreshKey));
}
@Override
public void updatePassword(UserUpdatePasswordRequest request) {
Long userId = SecurityUtils.getLoginUserId();
// 查询用户信息
SystemUserDO record = systemUserDAO.selectById(userId);
Valid.notNull(record, ErrorMessage.USER_ABSENT);
// 对比原始密码
String beforePassword = Signatures.md5(request.getBeforePassword());
Valid.eq(beforePassword, record.getPassword(), ErrorMessage.BEFORE_PASSWORD_ERROR);
// 重置密码
UserResetPasswordRequest reset = new UserResetPasswordRequest();
reset.setId(userId);
reset.setPassword(request.getPassword());
systemUserService.resetPassword(reset);
}
@Override
public LoginUser getLoginUser(Long id) {
String userInfoKey = UserCacheKeyDefine.USER_INFO.format(id);

View File

@@ -0,0 +1,76 @@
package com.orion.ops.module.infra.service.impl;
import com.orion.lang.utils.crypto.Signatures;
import com.orion.ops.framework.common.constant.ErrorMessage;
import com.orion.ops.framework.common.utils.Valid;
import com.orion.ops.framework.security.core.utils.SecurityUtils;
import com.orion.ops.module.infra.dao.SystemUserDAO;
import com.orion.ops.module.infra.entity.domain.SystemUserDO;
import com.orion.ops.module.infra.entity.request.user.SystemUserUpdateRequest;
import com.orion.ops.module.infra.entity.request.user.UserResetPasswordRequest;
import com.orion.ops.module.infra.entity.request.user.UserUpdatePasswordRequest;
import com.orion.ops.module.infra.entity.vo.LoginHistoryVO;
import com.orion.ops.module.infra.entity.vo.SystemUserVO;
import com.orion.ops.module.infra.service.MineService;
import com.orion.ops.module.infra.service.OperatorLogService;
import com.orion.ops.module.infra.service.SystemUserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
* 个人服务实现
*
* @author Jiahang Li
* @version 1.0.0
* @since 2023/11/1 0:25
*/
@Slf4j
@Service
public class MineServiceImpl implements MineService {
@Resource
private SystemUserService systemUserService;
@Resource
private OperatorLogService operatorLogService;
@Resource
private SystemUserDAO systemUserDAO;
@Override
public SystemUserVO getCurrentUserInfo() {
return systemUserService.getSystemUserById(SecurityUtils.getLoginUserId());
}
@Override
public Integer updateCurrentUser(SystemUserUpdateRequest request) {
request.setId(SecurityUtils.getLoginUserId());
return systemUserService.updateSystemUserById(request);
}
@Override
public void updateCurrentUserPassword(UserUpdatePasswordRequest request) {
Long userId = SecurityUtils.getLoginUserId();
// 查询用户信息
SystemUserDO record = systemUserDAO.selectById(userId);
Valid.notNull(record, ErrorMessage.USER_ABSENT);
// 对比原始密码
String beforePassword = Signatures.md5(request.getBeforePassword());
Valid.eq(beforePassword, record.getPassword(), ErrorMessage.BEFORE_PASSWORD_ERROR);
// 重置密码
UserResetPasswordRequest reset = new UserResetPasswordRequest();
reset.setId(userId);
reset.setPassword(request.getPassword());
systemUserService.resetPassword(reset);
}
@Override
public List<LoginHistoryVO> getCurrentLoginHistory() {
String username = SecurityUtils.getLoginUsername();
return operatorLogService.getLoginHistory(username);
}
}

View File

@@ -53,19 +53,19 @@ axios.interceptors.response.use(
});
}
// 业务判断
if (
[401, 700, 701, 702].includes(code) &&
response.config.url !== '/infra/auth/login'
) {
if ([401, 700, 701, 702].includes(code)) {
Notification.error({
closable: true,
content: res.msg,
});
setTimeout(async () => {
// 登出
await useUserStore().logout();
window.location.reload();
});
// 非登录页面跳转登录页面
if (response.config.url !== '/infra/auth/login') {
setTimeout(async () => {
// 登出
await useUserStore().logout();
window.location.reload();
});
}
}
return Promise.reject(new Error(res.msg || 'Error'));
},

View File

@@ -15,14 +15,6 @@ export interface LoginResponse {
token: string;
}
/**
* 修改密码请求
*/
export interface UserUpdatePasswordRequest {
beforePassword?: string;
password?: string;
}
/**
* 登录
*/
@@ -37,13 +29,6 @@ export function logout() {
return axios.get('/infra/auth/logout');
}
/**
* 修改密码
*/
export function updatePassword(request: UserUpdatePasswordRequest) {
return axios.put('/infra/auth/update-password', request);
}
/**
* 获取用户信息
*/

View File

@@ -0,0 +1,40 @@
import type { LoginHistoryQueryResponse } from './operator-log';
import type { UserQueryResponse, UserUpdateRequest } from './user';
import axios from 'axios';
/**
* 修改密码请求
*/
export interface UserUpdatePasswordRequest {
beforePassword?: string;
password?: string;
}
/**
* 修改当前用户密码
*/
export function updateCurrentUserPassword(request: UserUpdatePasswordRequest) {
return axios.put('/infra/mine/update-password', request);
}
/**
* 查询当前用户
*/
export function getCurrentUser() {
return axios.get<UserQueryResponse>('/infra/mine/get-user');
}
/**
* 更新当前用户
*/
export function updateCurrentUser(request: UserUpdateRequest) {
return axios.put('/infra/mine/update-user', request);
}
/**
* 查询当前用户登录日志
*/
export function getCurrentLoginHistory() {
return axios.get<LoginHistoryQueryResponse[]>('/infra/mine/login-history');
}

View File

@@ -66,10 +66,3 @@ export function getOperatorLogPage(request: OperatorLogQueryRequest) {
export function getLoginHistory(username: string) {
return axios.get<LoginHistoryQueryResponse[]>('/infra/operator-log/login-history', { params: { username } });
}
/**
* 查询当前用户登录日志
*/
export function getCurrentLoginHistory() {
return axios.get<LoginHistoryQueryResponse[]>('/infra/operator-log/current-login-history');
}

View File

@@ -91,20 +91,6 @@ export function resetUserPassword(request: UserUpdateRequest) {
return axios.put('/infra/system-user/reset-password', request);
}
/**
* 查询当前用户
*/
export function getCurrentUser() {
return axios.get<UserQueryResponse>('/infra/system-user/get-current');
}
/**
* 更新当前用户
*/
export function updateCurrentUser(request: UserUpdateRequest) {
return axios.put('/infra/system-user/update-current', request);
}
/**
* 通过 id 查询用户
*/

View File

@@ -40,13 +40,13 @@
</script>
<script lang="ts" setup>
import type { UserUpdatePasswordRequest } from '@/api/user/auth';
import type { UserUpdatePasswordRequest } from '@/api/user/mine';
import { ref } from 'vue';
import useLoading from '@/hooks/loading';
import useVisible from '@/hooks/visible';
import { Message } from '@arco-design/web-vue';
import { md5 } from '@/utils';
import { updatePassword } from '@/api/user/auth';
import { updateCurrentUserPassword } from '@/api/user/mine';
const emits = defineEmits(['updated']);
@@ -102,7 +102,7 @@
return false;
}
// 修改
await updatePassword({
await updateCurrentUserPassword({
beforePassword: md5(formModel.value.beforePassword as string),
password: md5(formModel.value.password as string)
});

View File

@@ -47,7 +47,7 @@
import { ref, onMounted } from 'vue';
import { useUserStore } from '@/store';
import { ResultStatus } from '../types/const';
import { getCurrentLoginHistory } from '@/api/user/operator-log';
import { getCurrentLoginHistory } from '@/api/user/mine';
import { dateFormat } from '@/utils';
const list = ref<LoginHistoryQueryResponse[]>([]);

View File

@@ -53,8 +53,9 @@
import { computed, ref, onMounted } from 'vue';
import formRules from '../../user/types/form.rules';
import { useUserStore } from '@/store';
import { getCurrentUser, updateCurrentUser } from '@/api/user/user';
import { getCurrentUser, updateCurrentUser } from '@/api/user/mine';
import { pick } from 'lodash';
import { Message } from '@arco-design/web-vue';
const userStore = useUserStore();
const { loading, setLoading } = useLoading();
@@ -71,6 +72,7 @@
try {
await updateCurrentUser(formModel.value);
userStore.nickname = formModel.value.nickname;
Message.success('保存成功');
} catch (e) {
} finally {
setLoading(false);
@@ -82,7 +84,7 @@
setLoading(true);
try {
const { data } = await getCurrentUser();
formModel.value = pick(data, 'id', 'username', 'nickname', 'mobile', 'email');
formModel.value = pick(data, 'username', 'nickname', 'mobile', 'email');
} catch (e) {
} finally {
setLoading(false);