irc-netcore-api/IRaCIS.Core.Application/Service/Institution/SiteService.cs

76 lines
2.7 KiB
C#

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 SiteService : BaseService, ISiteService
{
private readonly IRepository<Site> _siteRepository;
private readonly IRepository<TrialSiteUser> _trialSiteUserRepository;
public SiteService(IRepository<Site> siteRepository, IRepository<TrialSiteUser> trialSiteUserRepository)
{
_siteRepository = siteRepository;
this._trialSiteUserRepository = trialSiteUserRepository;
}
/// <summary> 分页获取研究中心列表 </summary>
[HttpPost]
public async Task<PageOutput<SiteSelectDTO>> GetSiteList(SiteQueryParam searchModel)
{
var siteQueryable = _siteRepository
.WhereIf(!string.IsNullOrWhiteSpace(searchModel.SiteName), t => t.SiteName.Contains(searchModel.SiteName))
.ProjectTo<SiteSelectDTO>(_mapper.ConfigurationProvider);
return await siteQueryable.ToPagedListAsync(searchModel.PageIndex, searchModel.PageSize, string.IsNullOrWhiteSpace(searchModel.SortField) ? "SiteName" : searchModel.SortField, searchModel.Asc);
}
public async Task<IEnumerable<SiteSelectionDTO>> GetAllSiteList()
{
return await _siteRepository.ProjectTo<SiteSelectionDTO>(_mapper.ConfigurationProvider).ToListAsync();
}
/// <summary> 添加研究中心 </summary>
public async Task<IResponseOutput> AddOrUpdateSite(SiteCommand siteCommand)
{
var exp = new EntityVerifyExp<Site>()
{
VerifyExp = h => h.SiteName.Equals(siteCommand.SiteName)|| h.SiteCode.Equals(siteCommand.SiteCode),
VerifyMsg = "A site with the same name or code already existed in the table. Please confirm."
};
var site = await _siteRepository.InsertOrUpdateAsync(siteCommand, true, exp);
return ResponseOutput.Ok(site.Id.ToString());
}
/// <summary> 删除研究中心 </summary>
[HttpDelete("{siteId:guid}")]
public async Task<IResponseOutput> DeleteSite(Guid siteId)
{
if (await _trialSiteUserRepository.AnyAsync(t => t.SiteId == siteId))
{
return ResponseOutput.NotOk("This site has participated in the trial and couldn't be deleted.");
}
var success = await _siteRepository.BatchDeleteNoTrackingAsync(x => x.Id == siteId);
return ResponseOutput.Result(success);
}
}
}