Exemplo n.º 1
0
        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();
        }
Exemplo n.º 3
0
        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());
        }