using AgileConfig.Server.Apisite.Controllers.api.Models; using AgileConfig.Server.Apisite.Filters; using AgileConfig.Server.Apisite.Models; using AgileConfig.Server.IService; using Microsoft.AspNetCore.Mvc; using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace AgileConfig.Server.Apisite.Controllers.api { /// /// 节点操作接口 /// [TypeFilter(typeof(AdmBasicAuthenticationAttribute))] [Route("api/[controller]")] public class NodeController : Controller { private readonly IServerNodeService _serverNodeService; private readonly ISysLogService _sysLogService; private readonly IRemoteServerNodeProxy _remoteServerNodeProxy; public NodeController(IServerNodeService serverNodeService, ISysLogService sysLogService, IRemoteServerNodeProxy remoteServerNodeProxy) { _serverNodeService = serverNodeService; _sysLogService = sysLogService; _remoteServerNodeProxy = remoteServerNodeProxy; } /// /// 获取所有节点 /// /// [HttpGet] public async Task>> GetAll() { var nodes = await _serverNodeService.GetAllNodesAsync(); var vms = nodes.Select(x=> new ApiNodeVM { Address = x.Address, Remark = x.Remark, LastEchoTime = x.LastEchoTime, Status= x.Status }); return Json(vms); } /// /// 添加节点 /// /// 节点模型 /// [ProducesResponseType(201)] [TypeFilter(typeof(PremissionCheckByBasicAttribute), Arguments = new object[] { "Node.Add", Functions.Node_Add })] [HttpPost] public async Task Add([FromBody] ApiNodeVM model) { var requiredResult = CheckRequired(model); if (!requiredResult.Item1) { Response.StatusCode = 400; return Json(new { message = "添加节点失败" }); } var ctrl = new ServerNodeController(_serverNodeService, _sysLogService, _remoteServerNodeProxy); ctrl.ControllerContext.HttpContext = HttpContext; var result = (await ctrl.Add(new ServerNodeVM { Address = model.Address, Remark = model.Remark, LastEchoTime = model.LastEchoTime, Status = model.Status })) as JsonResult; dynamic obj = result.Value; if (obj.success == true) { return Created("",""); } Response.StatusCode = 400; return Json(new { obj.message }); } /// /// 删除节点 /// /// 节点地址 /// [ProducesResponseType(204)] [TypeFilter(typeof(PremissionCheckByBasicAttribute), Arguments = new object[] { "Node.Delete", Functions.Node_Delete })] [HttpDelete()] public async Task Delete([FromQuery] string address) { var ctrl = new ServerNodeController(_serverNodeService, _sysLogService, _remoteServerNodeProxy); ctrl.ControllerContext.HttpContext = HttpContext; var result = (await ctrl.Delete(new ServerNodeVM { Address = address })) as JsonResult; dynamic obj = result.Value; if (obj.success == true) { return NoContent(); } Response.StatusCode = 400; return Json(new { obj.message }); } private (bool, string) CheckRequired(ApiNodeVM model) { if (string.IsNullOrEmpty(model.Address)) { return (false, "Address不能为空"); } return (true, ""); } } }