public async Task <CityDto[]> GetRiderCoverageAsync() { var userId = CurrentUser.Id; var riderE = await Repository.GetAsync(e => e.UserID == userId) ?? throw new BusinessException("User must signin first"); var cityEArr = await AsyncExecuter.ToArrayAsync(from cityR in CityRepository join riderCR in RiderCoverageRepository on cityR.Id equals riderCR.CityID where riderCR.RiderID == riderE.Id && riderE.Status != EntityStatusConsts.Blocked select cityR); return(ObjectMapper.Map <CityEntity[], CityDto[]>(cityEArr)); }
public async Task <CityDto[]> UpdateRiderCoverageAsync(int[] cityIds) { var userId = CurrentUser.Id; var riderE = await Repository.GetAsync(e => e.UserID == userId) ?? throw new BusinessException(); var cityEArr = new List <CityEntity>(); var rcEArr = await AsyncExecuter.ToArrayAsync(RiderCoverageRepository.Where(e => e.RiderID == riderE.Id)); foreach (var id in cityIds) { var e = await CityRepository.GetAsync(id) ?? throw new BusinessException("Invalid id"); cityEArr.Add(e); } var newCArr = cityEArr.Where(e => rcEArr.FirstOrDefault(ee => ee.CityID == e.Id) == null) .ToArray(); var removed = rcEArr.Where(e => cityEArr.FirstOrDefault(ee => ee.Id == e.CityID) == null) .ToArray(); foreach (var nCR in newCArr) { await RiderCoverageRepository.InsertAsync(new RiderCoverageEntity(riderE.Id, nCR.Id), autoSave : true); } foreach (var rCR in removed) { await RiderCoverageRepository.DeleteAsync(e => e.RiderID == riderE.Id && e.CityID == rCR.CityID, autoSave : true); } var riderCEArr = await AsyncExecuter.ToArrayAsync(from riderCR in RiderCoverageRepository join cityR in CityRepository on riderCR.CityID equals cityR.Id select cityR); return(ObjectMapper.Map <CityEntity[], CityDto[]>(riderCEArr)); }