using Kean.Application.Command.ViewModels; using Kean.Application.Query.ViewModels; using Kean.Domain; using Kean.Domain.Basic.Models; using Microsoft.AspNetCore.Mvc; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; namespace Kean.Presentation.Rest.Controllers { /// /// Item服务 /// [ApiController, Route("api/items")] public class ItemsController : ControllerBase { private readonly Application.Command.Interfaces.IBasicService _basicCommandService; // 基础信息命令服务 private readonly Application.Query.Interfaces.IBasicService _basicQueryService; // 基础信息查询服务 /// /// 依赖注入 /// public ItemsController( Application.Command.Interfaces.IBasicService basicCommandService, Application.Query.Interfaces.IBasicService basicQueryService) { _basicCommandService = basicCommandService; _basicQueryService = basicQueryService; } /// /// 获取item列表 /// /// 成功 [HttpGet] [ProducesResponseType(200)] public async Task GetList( [FromQuery] string name, [FromQuery] string sort, [FromQuery] int? offset, [FromQuery] int? limit) { var items = await _basicQueryService.GetItemList(name, sort, offset, limit); if (offset.HasValue || limit.HasValue) { var total = await _basicQueryService.GetItemCount(name); return StatusCode(200, new { items, total }); } else { return StatusCode(200, new { items, total = items.Count() }); } } /// /// 创建Item /// /// 成功 /// 信息已存在 /// 信息已删除 /// 请求内容错误 [HttpPost] [ProducesResponseType(201)] [ProducesResponseType(409)] [ProducesResponseType(410)] [ProducesResponseType(422)] public async Task CreateItem(Kean.Application.Command.ViewModels.Item item) { var result = await _basicCommandService.CreateItem(item); return result switch { { Id: > 0 } => StatusCode(201, result.Id), { Failure.ErrorCode: nameof(ErrorCode.Conflict) } => StatusCode(409, result.Failure), { Failure.ErrorCode: nameof(ErrorCode.Gone) } => StatusCode(410, result.Failure), _ => StatusCode(422, result.Failure) }; } /// /// 修改Item /// /// 成功 /// 信息已存在 /// 信息已删除 /// 请求内容错误 [HttpPut("{code}")] [ProducesResponseType(200)] [ProducesResponseType(409)] [ProducesResponseType(410)] [ProducesResponseType(422)] public async Task ModifyItem(string code, Kean.Application.Command.ViewModels.Item item) { item.ItemName = code; var result = await _basicCommandService.ModifyItem(item); return result switch { { Success: true } => StatusCode(200), { Failure.ErrorCode: nameof(ErrorCode.Conflict) } => StatusCode(409, result.Failure), { Failure.ErrorCode: nameof(ErrorCode.Gone) } => StatusCode(410, result.Failure), _ => StatusCode(422, result.Failure) }; } /// /// 批量处理物料 /// /// 成功 /// 方法不支持 [HttpPost("batch")] [ProducesResponseType(200)] [ProducesResponseType(405)] public async Task BatchItem(Batch batch) { return batch.Method switch { BatchMethod.Delete => StatusCode(200, await _basicCommandService.DeleteItem(batch.Data)), _ => StatusCode(405) }; } } }