using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Authorization;
using LingAdmin.AuthorizationService.Services;
using LingAdmin.Shared.DTOs;
namespace LingAdmin.AuthorizationService.Controllers;
///
/// 角色管理控制器
///
[ApiController]
[Route("api/[controller]")]
[Authorize(Roles = "Admin,SuperAdmin")]
public class RolesController : ControllerBase
{
private readonly IRoleService _roleService;
private readonly ILogger _logger;
public RolesController(IRoleService roleService, ILogger logger)
{
_roleService = roleService;
_logger = logger;
}
///
/// 获取所有角色
///
[HttpGet]
public async Task>>> GetRoles()
{
var roles = await _roleService.GetAllRolesAsync();
return Ok(ApiResponse>.Ok(roles));
}
///
/// 获取单个角色
///
[HttpGet("{id}")]
public async Task>> GetRole(int id)
{
var role = await _roleService.GetRoleByIdAsync(id);
if (role == null)
{
return NotFound(ApiResponse.NotFound("Role not found"));
}
return Ok(ApiResponse.Ok(role));
}
///
/// 创建角色
///
[HttpPost]
public async Task>> CreateRole([FromBody] CreateRoleRequest request)
{
try
{
// Check if code already exists
var existing = await _roleService.GetRoleByCodeAsync(request.Code);
if (existing != null)
{
return BadRequest(ApiResponse.Error("Role with this code already exists"));
}
var role = await _roleService.CreateRoleAsync(request);
return CreatedAtAction(nameof(GetRole), new { id = role.Id },
ApiResponse.Created(role, "Role created successfully"));
}
catch (Exception ex)
{
_logger.LogError(ex, "Error creating role");
return StatusCode(500, ApiResponse.Error("Failed to create role", 500));
}
}
///
/// 更新角色
///
[HttpPut("{id}")]
public async Task>> UpdateRole(int id, [FromBody] UpdateRoleRequest request)
{
try
{
var role = await _roleService.UpdateRoleAsync(id, request);
if (role == null)
{
return NotFound(ApiResponse.NotFound("Role not found"));
}
return Ok(ApiResponse.Ok(role, "Role updated successfully"));
}
catch (InvalidOperationException ex)
{
return BadRequest(ApiResponse.Error(ex.Message));
}
catch (Exception ex)
{
_logger.LogError(ex, "Error updating role");
return StatusCode(500, ApiResponse.Error("Failed to update role", 500));
}
}
///
/// 删除角色
///
[HttpDelete("{id}")]
[Authorize(Roles = "SuperAdmin")]
public async Task>> DeleteRole(int id)
{
try
{
var result = await _roleService.DeleteRoleAsync(id);
if (!result)
{
return NotFound(ApiResponse