using SJZY.Expand.ABP.Core.Common;
using SJZY.Track.Application.Dtos.Demo;
using SJZY.Track.Domain.Aggregates.DemoAggregate;
using SJZY.Track.Domain.Dtos.Demo;
namespace SJZY.Track.Application.Services.Demo;
///
/// 接口请求完整样例
///
[ApiExplorerSettings(GroupName = "Demo")]
public class InterFaceDemoService : ApplicationService
{
#region 构造函数
private readonly IDemoRepository _demoRepository;
public InterFaceDemoService(IDemoRepository demoRepository)
{
_demoRepository = demoRepository;
}
#endregion
#region 增删改
///
/// 增删改
///
///
///
[HttpPost("InterFace/Edit")]
public async Task Edit(DemoInput input)
{
var res = new LongIdBaseDto();
if (input.Option == OptionType.新增)
{
var entity = ObjectMapper.Map(input);
res.Id = await _demoRepository.InsertReturnIdentityAsync(entity);
}
else if (input.Option == OptionType.修改 || input.Option == OptionType.删除)
{
var demoInfo = await _demoRepository.GetById1(input.Id);
if (demoInfo == null)
{
//校验数据是否存在...
throw new BusinessException(message: "未找到指定编号下的数据");
}
res.Id = demoInfo.Id;
if (input.Option == OptionType.删除)
{
//await _demoRepository.DeleteAsync(demoInfo); //真删除
//软删除
demoInfo.IsDeleted = true;
await _demoRepository.UpdateAsync(demoInfo);
}
else
{
var entity = ObjectMapper.Map(input, demoInfo);
await _demoRepository.UpdateAsync(entity);
}
}
return res;
}
#endregion
#region 局部更新最佳实践
///
/// 局部更新最佳实践
///
///
///
///
[HttpPost("InterFace/UpdatePartColumns")]
public async Task UpdatePartColumns(DemoInput input)
{
var demoInfo = await _demoRepository.GetById1(input.Id);
if (demoInfo == null)
{
//校验数据是否存在...
throw new BusinessException(message: "未找到指定编号下的数据");
}
//更新同时忽略某几项参数
await _demoRepository.UpdatePartColumns(demoInfo);
return new IdBaseDto() { Id = input.Id };
}
#endregion
#region 分页查询接口
///
/// 分页查询
///
///
///
[HttpPost("InterFace/GetListByPage")]
public async Task> GetListByPage(GetDemoListByPageInput input)
{
//分页时返回值统一用 PageResultDto<> 类型
var list = await _demoRepository.GetListByPage(input.PageSize, input.PageIndex, input.Name);
var res = ObjectMapper.Map, UnifyPageResultDto>(list);
return res;
}
#endregion
#region 入参转换
///
/// 入参转换
///
///
///
[HttpPost("InterFace/InputToValueObject")]
public async Task> InputToValueObject(GetDemoListByPageInput input)
{
var obj = ObjectMapper.Map(input);
var list = await _demoRepository.InputToValueObject(obj);
var res = ObjectMapper.Map, List>(list);
return res;
}
#endregion
#region 原生sql
///
/// 原生sql
///
///
///
[HttpPost("InterFace/OriginalSql")]
public async Task> OriginalSql(DemoValueObject obj)
{
var list = await _demoRepository.OriginalSql(obj);
return list;
}
#endregion
#region 自定义返回结果格式
///
/// 自定义返回结果格式
///
///
///
[HttpPost("Demo/CustomerResult")]
[CustomerResult]
public async Task GetListAsync()
{
/*
说明:
理论上我们有全公司级别的返回值约定,不管是前端调后端,还是后端微服务间的调用,都应完全遵循该规范。
但不排除有些特殊情况下,必须要返回自定义格式的场景。
*/
var res = new MyCustomerResultOutput();
res.Code = "200";
res.Message = "这是一个自定义返回结果";
return res;
}
#endregion
#region 约定类型下返回null
///
/// 约定类型下返回null
///
///
///
[HttpPost("Demo/ReturnNull")]
public async Task ReturnNull()
{
MyCustomerResultOutput res = null;
return res;
}
#endregion
#region
///
/// 没有返回值
///
///
///
[HttpPost("Demo/WithoutReturnObject")]
public async Task WithoutReturnObject()
{
return null;
}
#endregion
#region 主从关系实体存储
///
/// 主从关系实体存储
///
///
///
[HttpPost("InterFace/EntityRelationSave")]
public async Task EntityRelationSave(DemoDetailSaveInput input)
{
var obj = ObjectMapper.Map(input);
var res = await _demoRepository.EntityRelationSave(obj);
return new UnifyResultDto(res);
}
#endregion
#region 数据缓存
///
/// 数据缓存
///
///
///
[HttpPost("InterFace/GetDataCache")]
public async Task GetDataCache(IdBaseDto input)
{
var res = await _demoRepository.GetDataCache(input.Id);
return res;
}
#endregion
//[HttpPost("InterFace/AAAA")]
//public async Task AAAA()
//{
// var result = await _httpClientProxy.Service.GetSystemTokenAsync("Track");
// return result;
//}
}