using HoneyBox.Admin.Filters;
using HoneyBox.Admin.Models.AdminUser;
using HoneyBox.Admin.Models.Common;
using HoneyBox.Admin.Models.Department;
using HoneyBox.Admin.Services;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Mvc;
namespace HoneyBox.Admin.Controllers;
///
/// 部门管理控制器
///
[ApiController]
[Route("api/admin/departments")]
[Authorize]
public class DepartmentController : ControllerBase
{
private readonly IDepartmentService _departmentService;
private readonly ILogger _logger;
public DepartmentController(IDepartmentService departmentService, ILogger logger)
{
_departmentService = departmentService;
_logger = logger;
}
///
/// 获取部门树
///
/// 部门树列表
[HttpGet]
public async Task>> GetDepartmentTree()
{
var result = await _departmentService.GetDepartmentTreeAsync();
return ApiResponse>.Success(result);
}
///
/// 获取部门详情
///
/// 部门ID
/// 部门详情
[HttpGet("{id:long}")]
public async Task> GetById(long id)
{
var result = await _departmentService.GetByIdAsync(id);
return ApiResponse.Success(result);
}
///
/// 创建部门
///
/// 创建请求
/// 新部门ID
[HttpPost]
[OperationLog("部门管理", "创建部门")]
public async Task> Create([FromBody] CreateDepartmentRequest request)
{
var id = await _departmentService.CreateAsync(request);
return ApiResponse.Success(id, "创建成功");
}
///
/// 更新部门
///
/// 部门ID
/// 更新请求
[HttpPut("{id:long}")]
[OperationLog("部门管理", "更新部门")]
public async Task Update(long id, [FromBody] UpdateDepartmentRequest request)
{
await _departmentService.UpdateAsync(id, request);
return ApiResponse.Success("更新成功");
}
///
/// 删除部门
///
/// 部门ID
[HttpDelete("{id:long}")]
[OperationLog("部门管理", "删除部门")]
public async Task Delete(long id)
{
await _departmentService.DeleteAsync(id);
return ApiResponse.Success("删除成功");
}
///
/// 获取部门已分配的菜单ID列表
///
/// 部门ID
/// 菜单ID列表
[HttpGet("{id:long}/menus")]
public async Task>> GetMenus(long id)
{
var result = await _departmentService.GetMenuIdsAsync(id);
return ApiResponse>.Success(result);
}
///
/// 分配菜单给部门
///
/// 部门ID
/// 分配请求
[HttpPut("{id:long}/menus")]
[OperationLog("部门管理", "分配菜单")]
public async Task AssignMenus(long id, [FromBody] AssignDepartmentMenusRequest request)
{
await _departmentService.AssignMenusAsync(id, request.MenuIds);
return ApiResponse.Success("分配成功");
}
///
/// 获取部门下的用户列表
///
/// 部门ID
/// 用户列表
[HttpGet("{id:long}/users")]
public async Task>> GetDepartmentUsers(long id)
{
var result = await _departmentService.GetDepartmentUsersAsync(id);
return ApiResponse>.Success(result);
}
}