26. 【.NET 8 实战--孢子记账--从单体到微服务】--需求更新--用户注销、修改用户名、安全设置

在实际开发过程中,项目需求的变更和增加是常见的情况,因此这篇文章我们就模拟一下项目需求新增的情况。

一、需求

项目经理今天提出了新的功能,需要增加重置密码、安全设置、修改用户名、注销账户这四个功能,这四个功能必须是独立的(别问为什么用"必须",有些产品经理就这么离谱),经过讨论整理出了如下大的需求。

编号 需求 说明
1 重置密码 1. 输入旧密码、新密码和确认密码;2. 旧密码需要验证。
2 安全设置 1. 更新邮箱和手机
3 修改用户名 1. 修改的用户名不能重复
4 注销账户 1. 注销账户是逻辑删除;2. 标记为不能删除的账户不能注销

二、功能编写

按照需求以及我们已有的代码来分析,现在需要增加四个接口:重置密码、安全设置、修改用户名、注销账户。下面以注销账户的需求为例来一起实现这个功能,剩下的功能自己手动实现,然后对比github上的代码看看有什么不一样。

在SysUserController 控制器中添加LogoutUser Action,代码如下:

csharp 复制代码
/// <summary>
/// 注销用户
/// </summary>
/// <returns></returns>
[HttpDelete]
[Route("LogoutUser")]
public ActionResult<ResponseData<bool>> LogoutUser()
{
    try
    {
        string userId = GetUserId();
        bool canDeleted = _sysUserServer.CanDelete(userId);
        if (!canDeleted)
        {
            return Ok(new ResponseData<bool>(HttpStatusCode.Conflict, $"用户不可删除", false));
        }

        _sysUserServer.Delete(userId);
        return Ok(new ResponseData<bool>(HttpStatusCode.OK, data: true));
    }
    catch (Exception ex)
    {
        return Ok(new ResponseData<bool>(HttpStatusCode.InternalServerError, "服务端异常", false));
    }
}

这段代码实现了一个注销用户的API接口,通过HttpDelete方法处理用户注销请求。LogoutUser方法首先获取当前用户的ID,然后调用_sysUserServer.CanDelete(userId)判断用户是否可以被删除。如果用户不可删除,返回一个带有冲突状态码(HttpStatusCode.Conflict)的响应,提示用户不可删除。若用户可以删除,则调用_sysUserServer.Delete(userId)执行删除操作,并返回成功状态码(HttpStatusCode.OK)。如果在处理过程中出现异常,捕获异常并返回服务器内部错误状态码(HttpStatusCode.InternalServerError),提示"服务端异常"。整个方法以ActionResult<ResponseData<bool>>类型返回,包含操作结果和相应的状态信息。

三、总结

这篇文章模拟了项目需求新增的情况,展示了如何根据新需求增加功能接口。项目经理提出的新增功能包括重置密码、安全设置、修改用户名和注销账户,要求各功能独立实现。文章详细列出了每个功能的需求说明,并以注销账户为例进行了代码示例。通过添加LogoutUser方法,处理用户注销请求,验证用户是否可删除,并根据情况返回相应的状态和消息。整个过程展示了如何应对需求变更,确保功能扩展的可行性和独立性。

相关推荐
严谨的麻辣烫1 分钟前
Python HTTP 连接池怎么用?从连接复用到请求异常排查
开发语言·python·http·requests·网络排查
万联WANFLOW2 分钟前
LiteLLM 1.107.0 投毒排查实战:依赖、Docker、CI 环境分别怎么查?
安全·docker·llm
码林鼠6 分钟前
flutter状态管理入门教程-Riverpod
开发语言·javascript·flutter
system_error_x42 分钟前
C++ 编程基础入门教程
开发语言·c++
Amos_Web1 小时前
Markdonw语法
开发语言·前端·javascript
hz567891 小时前
企业视频会议系统方案:总部与分支机构高效协同如何落地?
运维·服务器·网络·安全·实时音视频·信息与通信
Wang's Blog1 小时前
Java 项目实战: 交友项目 - 回顾和今日内容介绍
java·开发语言·交友
三垣网安1 小时前
漏洞实战|高校虚拟实验平台报错型 SQL 注入漏洞复现
网络·经验分享·sql·安全·web安全·网络安全·水平越权
sun153690275721 小时前
露天矿边坡滑坡怎么预警?QY-19GNSS 自动化地表位移监测系统介绍
运维·安全·自动化
长不大的杨瑞杰2 小时前
给 OpenCode v2 接入大模型:Provider、模型选择与 API Key 安全配置实战
人工智能·安全·ai·语言模型