网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
using Dpz.Core.Public.ViewModel.Request;
using Dpz.Core.Public.ViewModel.Response;

namespace Dpz.Core.WebApi.Controllers;

/// <summary>
/// 账号管理
/// </summary>
[ApiController, Route("api/[controller]"), Authorize(Policy = "System")]
public class AccountController(
    IAccountService accountService,
    IConfiguration configuration,
    IAccountTokenService accountTokenService,
    IUserHistoryService userHistoryService
) : ControllerBase
{
    /// <summary>
    /// 获取账号列表
    /// </summary>
    /// <returns></returns>
    [HttpGet]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType<List<VmUserInfo>>(StatusCodes.Status200OK)]
    public async Task<IActionResult> GetAccounts(
        [FromQuery] AccountQueryParameterDto parameter
    )
    {
        var list = await accountService.GetPageAsync(
            parameter.PageIndex,
            parameter.PageSize,
            parameter.Account
        );
        foreach (var item in list)
        {
            if (!item.Avatar.StartsWith("http", StringComparison.CurrentCultureIgnoreCase))
            {
                item.Avatar = configuration["WebHost"] + item.Avatar;
            }
        }

        list.AddPaginationMetadata(Response.Headers);
        return Ok(list);
    }

    /// <summary>
    /// 获取账号信息
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpGet("{id}")]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType<VmUserInfo>(StatusCodes.Status200OK)]
    public async Task<IActionResult> GetAccount(string id)
    {
        var account = await accountService.GetOneUserAsync(id);
        return Ok(account);
    }

    /// <summary>
    /// 启用或禁用账号
    /// </summary>
    /// <param name="id"></param>
    /// <returns></returns>
    [HttpPatch("{id}")]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType(StatusCodes.Status200OK)]
    public async Task<IActionResult> Enable(string id)
    {
        await accountService.ToEnableAsync(id);
        return NoContent();
    }

    /// <summary>
    /// 修改密码
    /// </summary>
    /// <param name="account"></param>
    /// <returns></returns>
    [HttpPatch("change-password")]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType(StatusCodes.Status200OK)]
    public async Task<IActionResult> ChangePassword([FromBody] AccountChangPasswordDto account)
    {
        await accountService.ChangePwdByAdminAsync(account.Account, account.Password);
        return NoContent();
    }

    /// <summary>
    /// 创建账号
    /// </summary>
    /// <param name="account"></param>
    /// <returns></returns>
    [HttpPost]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType(StatusCodes.Status200OK)]
    public async Task<IActionResult> CreateAccount([FromBody] AccountCreateDto account)
    {
        await accountService.CreateAccountAsync(account.Account, account.Name, account.Password);
        return NoContent();
    }

    /// <summary>
    /// 账号是否存在
    /// </summary>
    /// <param name="account"></param>
    /// <returns></returns>
    [HttpGet("exists/{account}")]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType<object>(StatusCodes.Status200OK)]
    public async Task<IActionResult> IsExists(string account)
    {
        var isExists = await accountService.IsExists(account);
        return Ok(new { isExists });
    }

    /// <summary>
    /// 获取刷新tokens (登录记录)
    /// </summary>
    /// <param name="account">账号</param>
    /// <param name="used">是否使用</param>
    /// <param name="pageIndex"></param>
    /// <param name="pageSize"></param>
    /// <returns></returns>
    [HttpGet("tokens")]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType<List<AccountTokenResponse>>(StatusCodes.Status200OK)]
    public async Task<IActionResult> GetTokens(
        [FromQuery] string account,
        [FromQuery] bool? used,
        [FromQuery] int pageIndex = 1,
        [FromQuery] int pageSize = 20
    )
    {
        var data = await accountTokenService.GetPageListAsync(account, used, pageIndex, pageSize);
        data.AddPaginationMetadata(Response.Headers);
        return Ok(data);
    }

    /// <summary>
    /// 获取更改过的属性
    /// </summary>
    /// <returns></returns>
    [HttpGet("history/properties")]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType<List<string>>(StatusCodes.Status200OK)]
    public async Task<IActionResult> ChangeProperties()
    {
        var data = await userHistoryService.GetChangedPropertiesAsync();
        return Ok(data);
    }

    /// <summary>
    /// 获取用户更改历史记录
    /// </summary>
    /// <param name="request"></param>
    /// <returns></returns>
    [HttpGet("history/user")]
    [ProducesResponseType(StatusCodes.Status401Unauthorized)]
    [ProducesResponseType<List<UserHistoryResponse>>(StatusCodes.Status200OK)]
    public async Task<IActionResult> GetUserHistory(
        [FromQuery] UserHistoryRequest request
    )
    {
        var data = await userHistoryService.GetPagedListAsync(request);
        data.AddPaginationMetadata(Response.Headers);
        return Ok(data);
    }
}
⚠⚠    以下内容为AI分析的结果,请根据实际情况进行判断。

上述代码是一个 ASP.NET Core Web API 控制器,名为 AccountController,用于管理用户账号的相关操作。以下是该控制器中各个方法的功能解释:

1. 控制器概述

  • 命名空间: Dpz.Core.WebApi.Controllers
  • 特性:
    • ApiController: 指定该类是一个 API 控制器。
    • Route("api/[controller]"): 定义路由模板,[controller] 会被替换为控制器的名称(即 Account)。
    • Authorize(Policy = "System"): 该控制器的所有操作都需要通过名为 "System" 的授权策略进行身份验证。

2. 方法功能

2.1 GetAccounts

  • 功能: 获取账号列表。
  • HTTP 方法: GET
  • 参数: AccountQueryParameterDto,用于分页和过滤。
  • 返回: 返回账号列表,并在响应头中添加分页元数据。

2.2 GetAccount

  • 功能: 获取特定账号的信息。
  • HTTP 方法: GET
  • 参数: id,账号的唯一标识符。
  • 返回: 返回指定账号的详细信息。

2.3 Enable

  • 功能: 启用或禁用指定的账号。
  • HTTP 方法: PATCH
  • 参数: id,账号的唯一标识符。
  • 返回: 返回204 No Content,表示操作成功。

2.4 ChangePassword

  • 功能: 修改指定账号的密码。
  • HTTP 方法: PATCH
  • 参数: AccountChangPasswordDto,包含账号和新密码。
  • 返回: 返回204 No Content,表示操作成功。

2.5 CreateAccount

  • 功能: 创建一个新的账号。
  • HTTP 方法: POST
  • 参数: AccountCreateDto,包含账号、名称和密码。
  • 返回: 返回204 No Content,表示操作成功。

2.6 IsExists

  • 功能: 检查指定账号是否存在。
  • HTTP 方法: GET
  • 参数: account,要检查的账号。
  • 返回: 返回一个对象,指示账号是否存在。

2.7 GetTokens

  • 功能: 获取指定账号的刷新 tokens(登录记录)。
  • HTTP 方法: GET
  • 参数: account(账号)、used(是否使用)、pageIndex(页码)、pageSize(每页大小)。
  • 返回: 返回账号的登录记录,并在响应头中添加分页元数据。

2.8 ChangeProperties

  • 功能: 获取更改过的属性列表。
  • HTTP 方法: GET
  • 返回: 返回一个字符串列表,表示已更改的属性。

2.9 GetUserHistory

  • 功能: 获取用户的更改历史记录。
  • HTTP 方法: GET
  • 参数: UserHistoryRequest,包含查询条件。
  • 返回: 返回用户的更改历史记录,并在响应头中添加分页元数据。

总结

该控制器提供了一系列与用户账号管理相关的 API 接口,包括获取账号列表、获取账号信息、启用/禁用账号、修改密码、创建账号、检查账号是否存在、获取登录记录、获取更改过的属性和获取用户更改历史记录等功能。所有操作都需要经过身份验证,确保安全性。

loading