76 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			C#
		
	
	
			
		
		
	
	
			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.DeleteFromQueryAsync(x => x.Id == siteId);
 | |
|             return ResponseOutput.Result(success);
 | |
|         }
 | |
|     }
 | |
| } |