Example #1
0
        public IHttpActionResult DeleteByBroadcastDate([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));
            }

            // zero out times
            var broadcastDateRangeStart = dateRangeStart.Date;
            var broadcastDateRangeEnd   = dateRangeEnd.Date;

            var breaks = _breakRepository.SearchByBroadcastDateRange(broadcastDateRangeStart, broadcastDateRangeEnd, salesAreaNames).ToList();

            if (!breaks.Any())
            {
                return(this.Error().ResourceNotFound());
            }

            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());
        }