From 02e33de5c8d4ef128b3742d7fe3be639fb38d832 Mon Sep 17 00:00:00 2001
From: MSuMshk <2039814060@qq.com>
Date: Fri, 5 Dec 2025 20:58:07 +0800
Subject: [PATCH] refactor: remove legacy roles controller routes
---
.../Controllers/RolesController.cs | 259 ------------------
1 file changed, 259 deletions(-)
delete mode 100644 src/Api/TakeoutSaaS.AdminApi/Controllers/RolesController.cs
diff --git a/src/Api/TakeoutSaaS.AdminApi/Controllers/RolesController.cs b/src/Api/TakeoutSaaS.AdminApi/Controllers/RolesController.cs
deleted file mode 100644
index 7c97263..0000000
--- a/src/Api/TakeoutSaaS.AdminApi/Controllers/RolesController.cs
+++ /dev/null
@@ -1,259 +0,0 @@
-using MediatR;
-using Microsoft.AspNetCore.Authorization;
-using Microsoft.AspNetCore.Mvc;
-using System.ComponentModel.DataAnnotations;
-using TakeoutSaaS.Application.Identity.Commands;
-using TakeoutSaaS.Application.Identity.Contracts;
-using TakeoutSaaS.Application.Identity.Queries;
-using TakeoutSaaS.Module.Authorization.Attributes;
-using TakeoutSaaS.Shared.Abstractions.Results;
-using TakeoutSaaS.Shared.Web.Api;
-
-namespace TakeoutSaaS.AdminApi.Controllers;
-
-///
-/// 角色管理。
-///
-[ApiVersion("1.0")]
-[Authorize]
-[Route("api/admin/v{version:apiVersion}/roles")]
-public sealed class RolesController(IMediator mediator) : BaseApiController
-{
- ///
- /// 获取预置角色模板列表。
- ///
- ///
- /// 示例:GET /api/admin/v1/roles/templates
- ///
- /// 角色模板列表。
- [HttpGet("templates")]
- [PermissionAuthorize("identity:role:read")]
- [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)]
- public async Task>> ListTemplates([FromQuery] bool? isActive, CancellationToken cancellationToken)
- {
- // 1. 查询模板列表
- var result = await mediator.Send(new ListRoleTemplatesQuery { IsActive = isActive }, cancellationToken);
-
- // 2. 返回模板集合
- return ApiResponse>.Ok(result);
- }
-
- ///
- /// 获取单个角色模板详情。
- ///
- ///
- /// 示例:GET /api/admin/v1/roles/templates/tenant-admin
- ///
- /// 角色模板详情。
- [HttpGet("templates/{templateCode}")]
- [PermissionAuthorize("identity:role:read")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status404NotFound)]
- public async Task> GetTemplate(string templateCode, CancellationToken cancellationToken)
- {
- // 1. 查询指定模板
- var result = await mediator.Send(new GetRoleTemplateQuery { TemplateCode = templateCode }, cancellationToken);
-
- // 2. 返回模板或 404
- return result is null
- ? ApiResponse.Error(StatusCodes.Status404NotFound, "角色模板不存在")
- : ApiResponse.Ok(result);
- }
-
- ///
- /// 创建角色模板。
- ///
- /// 创建的角色模板信息。
- [HttpPost("templates")]
- [PermissionAuthorize("role-template:create")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- public async Task> CreateTemplate([FromBody, Required] CreateRoleTemplateCommand command, CancellationToken cancellationToken)
- {
- // 1. 创建模板
- var result = await mediator.Send(command, cancellationToken);
-
- // 2. 返回创建结果
- return ApiResponse.Ok(result);
- }
-
- ///
- /// 更新角色模板。
- ///
- /// 更新后的角色模板信息。
- [HttpPut("templates/{templateCode}")]
- [PermissionAuthorize("role-template:update")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status404NotFound)]
- public async Task> UpdateTemplate(
- string templateCode,
- [FromBody, Required] UpdateRoleTemplateCommand command,
- CancellationToken cancellationToken)
- {
- // 1. 绑定模板编码
- command = command with { TemplateCode = templateCode };
-
- // 2. 执行更新
- var result = await mediator.Send(command, cancellationToken);
-
- // 3. 返回更新结果或 404
- return result is null
- ? ApiResponse.Error(StatusCodes.Status404NotFound, "角色模板不存在")
- : ApiResponse.Ok(result);
- }
-
- ///
- /// 删除角色模板。
- ///
- /// 删除结果。
- [HttpDelete("templates/{templateCode}")]
- [PermissionAuthorize("role-template:delete")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- public async Task> DeleteTemplate(string templateCode, CancellationToken cancellationToken)
- {
- // 1. 删除模板
- var result = await mediator.Send(new DeleteRoleTemplateCommand { TemplateCode = templateCode }, cancellationToken);
-
- // 2. 返回执行结果
- return ApiResponse.Ok(result);
- }
-
- ///
- /// 按模板复制角色并绑定权限。
- ///
- ///
- /// 示例:POST /api/admin/v1/roles/templates/store-manager/copy
- /// Body: { "roleName": "新区店长" }
- ///
- /// 创建的角色信息。
- [HttpPost("templates/{templateCode}/copy")]
- [PermissionAuthorize("identity:role:create")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- public async Task> CopyFromTemplate(
- string templateCode,
- [FromBody, Required] CopyRoleTemplateCommand command,
- CancellationToken cancellationToken)
- {
- // 1. 绑定模板编码
- command = command with { TemplateCode = templateCode };
-
- // 2. 复制模板并返回角色
- var result = await mediator.Send(command, cancellationToken);
- return ApiResponse.Ok(result);
- }
-
- ///
- /// 为当前租户批量初始化预置角色模板。
- ///
- ///
- /// 示例:POST /api/admin/v1/roles/templates/init
- /// Body: { "templateCodes": ["tenant-admin","store-manager","store-staff"] }
- ///
- /// 创建的角色列表。
- [HttpPost("templates/init")]
- [PermissionAuthorize("identity:role:create")]
- [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)]
- public async Task>> InitializeTemplates(
- [FromBody] InitializeRoleTemplatesCommand? command,
- CancellationToken cancellationToken)
- {
- // 1. 确保命令实例存在
- command ??= new InitializeRoleTemplatesCommand();
-
- // 2. 执行初始化
- var result = await mediator.Send(command, cancellationToken);
- return ApiResponse>.Ok(result);
- }
-
- ///
- /// 分页查询角色。
- ///
- ///
- /// 示例:
- /// GET /api/admin/v1/roles?keyword=ops&page=1&pageSize=20
- /// Header: Authorization: Bearer <JWT> + X-Tenant-Id
- ///
- /// 角色分页结果。
- [HttpGet]
- [PermissionAuthorize("identity:role:read")]
- [ProducesResponseType(typeof(ApiResponse>), StatusCodes.Status200OK)]
- public async Task>> Search([FromQuery] SearchRolesQuery query, CancellationToken cancellationToken)
- {
- // 1. 查询角色分页
- var result = await mediator.Send(query, cancellationToken);
-
- // 2. 返回分页数据
- return ApiResponse>.Ok(result);
- }
-
- ///
- /// 创建角色。
- ///
- /// 创建的角色信息。
- [HttpPost]
- [PermissionAuthorize("identity:role:create")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- public async Task> Create([FromBody, Required] CreateRoleCommand command, CancellationToken cancellationToken)
- {
- // 1. 创建角色
- var result = await mediator.Send(command, cancellationToken);
-
- // 2. 返回创建结果
- return ApiResponse.Ok(result);
- }
-
- ///
- /// 更新角色。
- ///
- /// 更新后的角色信息。
- [HttpPut("{roleId:long}")]
- [PermissionAuthorize("identity:role:update")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status404NotFound)]
- public async Task> Update(long roleId, [FromBody, Required] UpdateRoleCommand command, CancellationToken cancellationToken)
- {
- // 1. 绑定角色标识
- command = command with { RoleId = roleId };
-
- // 2. 执行更新
- var result = await mediator.Send(command, cancellationToken);
-
- // 3. 返回更新结果或 404
- return result is null
- ? ApiResponse.Error(StatusCodes.Status404NotFound, "角色不存在")
- : ApiResponse.Ok(result);
- }
-
- ///
- /// 删除角色。
- ///
- /// 删除结果。
- [HttpDelete("{roleId:long}")]
- [PermissionAuthorize("identity:role:delete")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- public async Task> Delete(long roleId, CancellationToken cancellationToken)
- {
- // 1. 构建删除命令
- var command = new DeleteRoleCommand { RoleId = roleId };
-
- // 2. 执行删除
- var result = await mediator.Send(command, cancellationToken);
- return ApiResponse.Ok(result);
- }
-
- ///
- /// 绑定角色权限(覆盖式)。
- ///
- /// 是否绑定成功。
- [HttpPut("{roleId:long}/permissions")]
- [PermissionAuthorize("identity:role:bind-permission")]
- [ProducesResponseType(typeof(ApiResponse), StatusCodes.Status200OK)]
- public async Task> BindPermissions(long roleId, [FromBody, Required] BindRolePermissionsCommand command, CancellationToken cancellationToken)
- {
- // 1. 绑定角色标识
- command = command with { RoleId = roleId };
-
- // 2. 执行覆盖式授权
- var result = await mediator.Send(command, cancellationToken);
- return ApiResponse.Ok(result);
- }
-}