using IRaCIS.Application.Interfaces; using IRaCIS.Application.Contracts; using IRaCIS.Core.Infra.EFCore; using Microsoft.AspNetCore.Mvc; namespace IRaCIS.Application.Services { [ ApiExplorerSettings(GroupName = "Institution")] public class SponsorService : BaseService, ISponsorService { private readonly IRepository _sponsorRepository; private readonly IRepository _trialRepository; public SponsorService(IRepository sponsorRepository, IRepository trialRepository) { _sponsorRepository = sponsorRepository; this._trialRepository = trialRepository; } /// 分页获取申办方列表 [HttpPost] public async Task> GetSponsorList(SponsorQueryDTO sponsorSearchModel) { var sponsorQueryable = _sponsorRepository .WhereIf(!string.IsNullOrWhiteSpace(sponsorSearchModel.SponsorName),t => t.SponsorName.Contains(sponsorSearchModel.SponsorName)) .ProjectTo(_mapper.ConfigurationProvider); return await sponsorQueryable.ToPagedListAsync(sponsorSearchModel.PageIndex, sponsorSearchModel.PageSize, string.IsNullOrWhiteSpace(sponsorSearchModel.SortField) ? "Id" : sponsorSearchModel.SortField, sponsorSearchModel.Asc); } /// 分页获取申办方列表 public async Task> GetAllSponsorList() { //Expression> sponsorLambda = x => true; //if (!string.IsNullOrWhiteSpace(sponsorSearchModel.SponsorName)) //{ // sponsorLambda = sponsorLambda.And(t => t.SponsorName.Contains(sponsorSearchModel.SponsorName.Trim())); //} var sponsorQueryable = _sponsorRepository.ProjectTo(_mapper.ConfigurationProvider); return await sponsorQueryable.ToListAsync(); } /// 添加申办方 public async Task AddOrUpdateSponsor(SponsorCommand sponsorCommand) { var exp = new EntityVerifyExp() { VerifyExp = h => h.SponsorName.Equals(sponsorCommand.SponsorName), VerifyMsg = "A sponsor with the same name already existed in the table. Please confirm." }; var sponsor = await _sponsorRepository.InsertOrUpdateAsync(sponsorCommand, true, exp); return ResponseOutput.Ok(sponsor.Id.ToString()); } /// 删除申办方 [HttpDelete("{sponsorId:guid}")] public async Task DeleteSponsor(Guid sponsorId) { if (await _trialRepository.AnyAsync(t => t.CROId == sponsorId)) { return ResponseOutput.NotOk("This sponsor has participated in the trial and couldn't be deleted."); } //if (_userRepository.Find().Any(t => t.OrganizationId == sponsorId)) //{ // return ResponseOutput.NotOk("该申办方下存在用户,暂时无法删除。"); //} var success = await _sponsorRepository.BatchDeleteAsync(x => x.Id == sponsorId); return ResponseOutput.Result(success); } } }