using FlexJobApi.Core;
using Furion.DatabaseAccessor;
using Mapster;
using MediatR;
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace FlexJobApi.UserServer.Application
{
///
/// 电子签配置查询处理器
///
public class ElectronSignSettingQueryHandler(
IRepository rep,
IRepository repEnterpriseElectronSignSetting
) :
IRequestHandler>
{
private readonly IRepository rep = rep;
private readonly IRepository repEnterpriseElectronSignSetting = repEnterpriseElectronSignSetting;
///
/// 查询已启用的电子签配置
///
///
///
///
public async Task> Handle(GetEnabledElectronSignSettingsQuery request, CancellationToken cancellationToken)
{
var logier = JwtUtils.GetCurrentLogier();
var q = rep.AsQueryable().AsNoTracking();
if (request.All != true)
{
q = q.Where(it => !it.IsDisabled);
}
if (logier.Type == EnumUserType.Enterprise)
{
request.EnterpriseId = logier.EnterpriseId;
}
if (request.EnterpriseId.HasValue)
{
var accesses = await repEnterpriseElectronSignSetting.AsQueryable()
.Where(it => it.EnterpriseId == request.EnterpriseId)
.Select(it => it.ElectronSignAccess)
.ToListAsync();
q = q.Where(it => accesses.Contains(it.Access));
}
return await q
.ProjectToType()
.ToListAsync();
}
}
}