Files
Atomx/Atomx.Admin/Atomx.Admin/Controllers/ProductAttributeOptionController.cs
2025-12-06 13:30:17 +08:00

216 lines
7.4 KiB
C#

using Atomx.Admin.Client.Models;
using Atomx.Admin.Client.Validators;
using Atomx.Admin.Services;
using Atomx.Common.Entities;
using Atomx.Common.Models;
using Atomx.Data;
using Atomx.Data.Services;
using MapsterMapper;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
namespace Atomx.Admin.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class ProductAttributeOptionController : ControllerBase
{
readonly ILogger<ProductAttributeOptionController> _logger;
readonly IIdentityService _identityService;
readonly IIdCreatorService _idCreator;
readonly IMapper _mapper;
readonly DataContext _dbContext;
/// <summary>
///
/// </summary>
/// <param name="logger"></param>
/// <param name="identityService"></param>
/// <param name="idCreator"></param>
/// <param name="adminService"></param>
/// <param name="mapper"></param>
public ProductAttributeOptionController(ILogger<ProductAttributeOptionController> logger, IIdentityService identityService, IIdCreatorService idCreator, IMapper mapper, DataContext dataContext)
{
_logger = logger;
_identityService = identityService;
_idCreator = idCreator;
_mapper = mapper;
_dbContext = dataContext;
}
/// <summary>
/// 查询接口
/// </summary>
/// <param name="search"></param>
/// <param name="page"></param>
/// <param name="size"></param>
/// <returns></returns>
[HttpPost("search")]
public IActionResult Search(ProductAttributeOptionSearch search, int page, int size = 20)
{
var result = new ApiResult<PagingList<ProductAttributeOption>>();
try
{
var pager = new PagingList<ProductAttributeOption>() { Size = size, Index = page < 1 ? 1 : page };
var query = from p in _dbContext.ProductAttributeOptions
select p;
if (search.AttributeId > 0)
{
query = from p in query
where p.AttributeId == search.AttributeId
select p;
}
pager.Count = query.Count();
pager.Items = query.OrderByDescending(p => p.Id).Skip((pager.Index - 1) * size).Take(size).ToList();
result = result.IsSuccess(pager);
}
catch (Exception ex)
{
result = result.IsFail(ex.Message);
_logger.LogError(ex.Message);
}
return new JsonResult(result);
}
/// <summary>
/// 根据id获取数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpGet("{id:long}")]
public IActionResult Get(long id)
{
var result = new ApiResult<ProductAttributeOption>();
try
{
var data = _dbContext.ProductAttributeOptions.Where(p => p.Id == id).SingleOrDefault();
result = result.IsSuccess(data);
}
catch (Exception ex)
{
result = result.IsFail(ex.Message);
_logger.LogError(ex.Message);
}
return new JsonResult(result);
}
/// <summary>
/// 新增数据
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost("add")]
public IActionResult Add(ProductAttributeOptionModel model)
{
var result = new ApiResult<string>();
var validator = new ProductAttributeOptionModelValidator();
var validation = validator.Validate(model);
if (!validation.IsValid)
{
var message = validation.Errors.FirstOrDefault()?.ErrorMessage ?? string.Empty;
result = result.IsFail(message, null);
return new JsonResult(result);
}
if (_dbContext.ProductAttributeOptions.Count(p => p.Value == model.Value && p.Id != 0) > 0)
{
result = result.IsFail("名称已经被使用,请更换名称", null);
return new JsonResult(result);
}
try
{
model.Id = _idCreator.CreateId();
var data = _mapper.Map<ProductAttributeOption>(model);
data.CreateTime = DateTime.UtcNow;
_dbContext.ProductAttributeOptions.Add(data);
int count = _dbContext.SaveChanges();
result = result.IsSuccess(count.ToString());
}
catch (Exception ex)
{
result = result.IsFail(ex.Message);
_logger.LogError(ex.Message);
}
return new JsonResult(result);
}
/// <summary>
/// 编辑数据
/// </summary>
/// <param name="model"></param>
/// <returns></returns>
[HttpPost("edit")]
public IActionResult Edit(ProductAttributeOptionModel model)
{
var result = new ApiResult<string>();
var validator = new ProductAttributeOptionModelValidator();
var validation = validator.Validate(model);
if (!validation.IsValid)
{
var message = validation.Errors.FirstOrDefault()?.ErrorMessage;
result = result.IsFail(message ?? string.Empty, null);
return new JsonResult(result);
}
if (_dbContext.ProductAttributeOptions.Count(p => p.Value == model.Value && p.Id != model.Id) > 0)
{
result = result.IsFail("名称已经被使用,请更换名称", null);
return new JsonResult(result);
}
try
{
var data = _dbContext.ProductAttributeOptions.Where(p => p.Id == model.Id).SingleOrDefault();
if (data != null)
{
data = _mapper.Map(model, data);
int count = _dbContext.SaveChanges();
result = result.IsSuccess(count.ToString());
}
else
{
result = result.IsFail("数据不存在");
return new JsonResult(result);
}
}
catch (Exception ex)
{
result = result.IsFail(ex.Message);
_logger.LogError(ex.Message);
Console.WriteLine(ex.Message);
}
return new JsonResult(result);
}
/// <summary>
/// 删除指定ID的数据
/// </summary>
/// <param name="id"></param>
/// <returns></returns>
[HttpPost("delete/{id:long}")]
public IActionResult Delete(long id)
{
var result = new ApiResult<string>();
try
{
Console.WriteLine($"{id} deleted");
var count = _dbContext.ProductAttributeOptions.Where(p => p.Id == id).ExecuteDelete();
result = result.IsSuccess(count.ToString());
}
catch (Exception ex)
{
result = result.IsFail(ex.Message);
_logger.LogError(ex.Message);
}
return new JsonResult(result);
}
}
}