using Microsoft.AspNetCore.Mvc; using MediatR; using Microsoft.Extensions.Logging; using CellularManagement.Application.Features.RolePermissions.Commands.AddRolePermissions; using CellularManagement.Application.Features.RolePermissions.Commands.DeleteRolePermissions; using CellularManagement.Application.Features.RolePermissions.Queries.GetRolePermissions; using CellularManagement.Application.Common; using Microsoft.AspNetCore.Http; using CellularManagement.Presentation.Abstractions; using CellularManagement.Domain.Common; namespace CellularManagement.Presentation.Controllers; /// /// 角色权限控制器 /// 提供角色权限管理相关的 API 接口,包括添加、删除和查询角色权限功能 /// public class RolePermissionController : ApiController { private readonly ILogger _logger; /// /// 初始化角色权限控制器 /// /// MediatR 中介者,用于处理命令和查询 /// 日志记录器 public RolePermissionController( IMediator mediator, ILogger logger) : base(mediator) { _logger = logger; } /// /// 获取角色权限 /// /// /// 示例请求: /// /// GET /api/role-permissions/{roleId}?includeDetails=true /// /// /// 角色ID /// 是否包含权限详情 /// /// 角色权限信息,包含: /// - 角色基本信息 /// - 权限列表 /// /// 获取成功,返回角色权限信息 /// 获取失败,返回错误信息 [HttpGet("{roleId}")] [ProducesResponseType(typeof(OperationResult), StatusCodes.Status200OK)] [ProducesResponseType(typeof(OperationResult), StatusCodes.Status400BadRequest)] public async Task>> GetRolePermissions( string roleId, [FromQuery] bool includeDetails = true) { try { var query = new GetRolePermissionsQuery { RoleId = roleId, IncludeDetails = includeDetails }; var result = await mediator.Send(query); if (result.IsSuccess) { _logger.LogInformation( "成功获取角色 {RoleId} 的权限信息,共 {Count} 个权限", roleId, result.Data?.Permissions.Count()); } else { _logger.LogWarning( "获取角色 {RoleId} 的权限信息失败: {Error}", roleId, result.ErrorMessages?.FirstOrDefault()); } return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "获取角色 {RoleId} 的权限信息时发生异常", roleId); return StatusCode(StatusCodes.Status500InternalServerError, OperationResult.CreateFailure("系统错误,请稍后重试")); } } /// /// 添加角色权限 /// /// /// 示例请求: /// /// POST /api/role-permissions /// { /// "roleId": "角色ID", /// "permissionIds": ["权限ID1", "权限ID2"] /// } /// /// /// 添加角色权限命令 /// /// 添加结果,包含: /// - 成功:返回添加成功的权限ID列表 /// - 失败:返回错误信息 /// /// 添加成功,返回添加结果 /// 添加失败,返回错误信息 [HttpPost] [ProducesResponseType(typeof(OperationResult), StatusCodes.Status200OK)] [ProducesResponseType(typeof(OperationResult), StatusCodes.Status400BadRequest)] public async Task>> AddRolePermissions( [FromBody] AddRolePermissionsCommand command) { try { var result = await mediator.Send(command); if (result.IsSuccess) { _logger.LogInformation( "成功为角色 {RoleId} 添加权限,添加成功:{SuccessCount},添加失败:{FailedCount}", command.RoleId, result.Data?.AddedPermissionIds.Count(), result.Data?.FailedPermissionIds.Count()); } else { _logger.LogWarning( "为角色 {RoleId} 添加权限失败: {Error}", command.RoleId, result.ErrorMessages?.FirstOrDefault()); } return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "为角色 {RoleId} 添加权限时发生异常", command.RoleId); return StatusCode(StatusCodes.Status500InternalServerError, OperationResult.CreateFailure("系统错误,请稍后重试")); } } /// /// 删除角色权限 /// /// /// 示例请求: /// /// DELETE /api/role-permissions /// { /// "roleId": "角色ID", /// "permissionIds": ["权限ID1", "权限ID2"] /// } /// /// /// 删除角色权限命令 /// /// 删除结果,包含: /// - 成功:返回删除的权限数量 /// - 失败:返回错误信息 /// /// 删除成功,返回删除结果 /// 删除失败,返回错误信息 [HttpDelete] [ProducesResponseType(typeof(OperationResult), StatusCodes.Status200OK)] [ProducesResponseType(typeof(OperationResult), StatusCodes.Status400BadRequest)] public async Task>> DeleteRolePermissions( [FromBody] DeleteRolePermissionsCommand command) { try { var result = await mediator.Send(command); if (result.IsSuccess) { _logger.LogInformation( "成功从角色 {RoleId} 删除权限,删除数量:{DeletedCount},删除失败:{FailedCount}", command.RoleId, result.Data?.DeletedCount, result.Data?.FailedPermissionIds.Count()); } else { _logger.LogWarning( "从角色 {RoleId} 删除权限失败: {Error}", command.RoleId, result.ErrorMessages?.FirstOrDefault()); } return Ok(result); } catch (Exception ex) { _logger.LogError(ex, "从角色 {RoleId} 删除权限时发生异常", command.RoleId); return StatusCode(StatusCodes.Status500InternalServerError, OperationResult.CreateFailure("系统错误,请稍后重试")); } } }