using Learn.Archives.API.Expand;
using Learn.Archives.Core.Common;
using Learn.Archives.Core.Common.Expand;
using Learn.Archives.Core.Model.Dto;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.IdentityModel.Tokens;
using SqlSugar;
using UserCenter.Model.Interface;
namespace Learn.Archives.API.Controllers
{
[ApiController]
public class _BaseController : ControllerBase
{
}
///
/// 管理员接口
///
[Authorize(AuthenticationSchemes = Authentication.Admin)]
[Route("api/[controller]/[action]")]
public abstract class BackBaseController : _BaseController
{
}
///
/// 管理员的公共接口
///
///
public abstract class BackController : BackBaseController where T : class, IDFilter, new()
{
readonly Repository _baseRepository;
///
///
///
///
public BackController(Repository baseService) : base()
{
_baseRepository = baseService;
}
///
/// 详情
///
///
///
[HttpGet()]
[Route("/api/[controller]/{id}")]
public virtual async Task Info(long id)
{
return await _baseRepository.GetByIdAsync(id);
}
///
/// 新增/修改
/// id=0 时新增
///
///
///
[HttpPost]
[HttpLogEnable]
public virtual async Task Edit([FromBody] T model)
{
if (model.Id == 0)
return await _baseRepository.InsertAsync(model);
else
return await _baseRepository.UpdateAsync(model);
}
///
/// 删除
///
///
///
[HttpPost]
[HttpLogEnable]
public virtual async Task Del([FromBody] params long[] ids)
{
var db = _baseRepository;
int sum = 0;
if (!typeof(T).IsAssignableFrom(typeof(IDeletedFilter)))
{
if(ids.Length==1)
return await db.DeleteByIdAsync(ids.First());
else
return await db.DeleteByIdsAsync(ids.Select(s=>(dynamic)s).ToArray());
}
try
{
db.Context.Ado.BeginTran();
foreach (var item in ids)
sum += await db.AsUpdateable().SetColumns("DeleteState", true)
.Where("Id=" + item).ExecuteCommandAsync();
db.Context.Ado.CommitTran();
}
catch
{
db.Context.Ado.RollbackTran();
throw;
}
return true;
}
///
/// 分页/全查 的基础查询函数
///
///
///
///
[NonAction]
public virtual ISugarQueryable BaseQuery(QueryDto model)
{
List where = [.. model.Conditions];
var d = _baseRepository.AsQueryable()
.Where(where);
if ((typeof(T)).GetProperty("DeleteState") != null)
d = d.Where("DeleteState=0");
if (!string.IsNullOrEmpty(model.OrderBy))
return d.OrderByPropertyName(model.OrderBy, model.OrderByType);
return d;
}
///
/// 分页查询
///
///
///
[HttpPost]
public virtual async Task PageList([FromBody] QueryRequestBase model)
{
var sqlquery = BaseQuery(model);
RefAsync total = 0;
var data = await sqlquery.ToPageListAsync(model.PageIndex + 1, model.PageSize, total);
return new PageResult() { Data = data, Total = total };
}
///
/// 查询下拉列表
///
///
///
[HttpPost]
public virtual async Task> QueryCombo([FromBody] QueryCombo model)
{
//if (string.IsNullOrEmpty(model.ValueName) || string.IsNullOrEmpty(model.TextName))
// Oh.ModelError("ValueName TextName 是必填项");
var sqlquery = BaseQuery(model);
var res = await sqlquery.Select($"{model.TextName} as Text , {model.ValueName} as Value").ToListAsync();
return res;
}
}
}