public IHttpActionResult Post([FromBody] List <CreateSpot> spots) { if (spots is null || !ModelState.IsValid) { return(BadRequest(ModelState)); } foreach (var spot in spots) { try { spot.Validate(); } catch (BreakTypeException ex) { ModelState.AddModelError( nameof(CreateSpot.BreakType), BreakTypeValueErrorMessage(ex) ); } } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } CreateSpots(spots); _repository.SaveChanges(); return(Ok()); }
public override void Handle(IBulkSpotCreatedOrUpdated command) { ValidateBookingPositions(command); var salesAreaDictionary = _salesAreaRepository.GetAll().ToDictionary(x => x.Name, x => x.CustomId); var spotEntities = _mapper.Map <List <SpotDbObject> >(command.Data); spotEntities.ForEach(s => { s.Uid = Guid.NewGuid(); var salesAreaCustomId = salesAreaDictionary[s.SalesArea]; s.ExternalBreakNo = s.ExternalBreakNo.GenerateBreakExternalRef(salesAreaCustomId, s.StartDateTime); }); _spotRepository.InsertOrReplace(spotEntities); _spotRepository.SaveChanges(); }
public IHttpActionResult Delete([FromUri] DateTime dateRangeStart, [FromUri] DateTime dateRangeEnd, [FromUri] List <string> salesAreaNames) { var messages = ValidateForDelete(dateRangeStart, dateRangeEnd, salesAreaNames); foreach (var message in messages) { ModelState.AddModelError(message.Key, message.Value); } if (!ModelState.IsValid) { return(BadRequest(ModelState)); } // broadcast day var defaultBroadcastStartTime = new TimeSpan(6, 0, 0); var defaultBroadcastEndTime = defaultBroadcastStartTime.Subtract(new TimeSpan(0, 0, 1)); var broadcastStartDateTime = dateRangeStart.Date.Add(defaultBroadcastStartTime); var broadcastEndDateTime = dateRangeEnd.Date.AddDays(1).Add(defaultBroadcastEndTime); var scheduledDatesRange = new DateTimeRange(broadcastStartDateTime, broadcastEndDateTime); var breaks = _breakRepository.Search(scheduledDatesRange, salesAreaNames).ToList(); if (!breaks.Any()) { return(NotFound()); } var breakIdsToDelete = new HashSet <Guid>(); var breakExtRefsToDelete = new List <string>(); foreach (var oneBreak in breaks) { breakIdsToDelete.Add(oneBreak.Id); breakExtRefsToDelete.Add(oneBreak.ExternalBreakRef); } // load spots and schedules to be updated var spotsToDelete = _spotRepository.FindByExternalBreakNumbers(breakExtRefsToDelete); var schedulesToUpdate = _scheduleRepository.FindByBreakIds(breakIdsToDelete); // delete spots first and persist changes if (spotsToDelete.Any()) { _spotRepository.Delete(spotsToDelete.Select(s => s.Uid)); _spotRepository.SaveChanges(); } _breakRepository.Delete(breakIdsToDelete.ToList()); foreach (var schedule in schedulesToUpdate) { schedule.Breaks = schedule.Breaks.Where(b => !breakIdsToDelete.Contains(b.Id)).ToList(); _scheduleRepository.Update(schedule); _scheduleRepository.SaveChanges(); } return(Ok()); }