예제 #1
0
 public void CheckIfAttendOptionsAllowedToUpdate(EditEventDto eventDto, Event eventToUpdate)
 {
     if ((eventDto.AllowMaybeGoing != eventToUpdate.AllowMaybeGoing || eventDto.AllowNotGoing != eventToUpdate.AllowNotGoing) && eventToUpdate.EventParticipants.Count > 0)
     {
         throw new EventException(PremiumErrorCodes.EventAttendTypeCannotBeChangedIfParticipantsJoined);
     }
 }
예제 #2
0
        private void UpdateEventOptions(EditEventDto editedEvent, Event @event)
        {
            foreach (var editedOption in editedEvent.EditedOptions)
            {
                var option = @event.EventOptions.Single(o => o.Id == editedOption.Id);
                option.Option = editedOption.Option;
            }

            var removedOptions = @event.EventOptions.Where(o => !editedEvent.EditedOptions.Select(x => x.Id).Contains(o.Id)).ToList();

            foreach (var option in removedOptions)
            {
                _eventOptionsDbSet.Remove(option);
            }

            foreach (var newOption in editedEvent.NewOptions)
            {
                var option = new EventOption
                {
                    Option     = newOption.Option,
                    Rule       = newOption.Rule,
                    EventId    = editedEvent.Id,
                    Created    = DateTime.UtcNow,
                    CreatedBy  = editedEvent.UserId,
                    Modified   = DateTime.UtcNow,
                    ModifiedBy = editedEvent.UserId
                };

                _eventOptionsDbSet.Add(option);
            }
        }
        public IHttpActionResult EditEvent(EditEventDto dto)
        {
            if (dto == null)
            {
                return(BadRequest());
            }

            var e = db.Events.Find(dto.Id);

            if (e == null)
            {
                return(NotFound());
            }

            dto.Edit(ref e);
            db.SaveChanges();

            return(Ok());
        }
예제 #4
0
        public async Task UpdateEventAsync(EditEventDto eventDto)
        {
            var eventToUpdate = await _eventsDbSet
                                .Include(e => e.EventOptions)
                                .Include(e => e.EventParticipants)
                                .FirstOrDefaultAsync(e => e.Id == eventDto.Id && e.OrganizationId == eventDto.OrganizationId);

            var totalOptionsProvided = eventDto.NewOptions.Count() + eventDto.EditedOptions.Count();

            eventDto.MaxOptions = FindOutMaxChoices(totalOptionsProvided, eventDto.MaxOptions);
            eventDto.RegistrationDeadlineDate = SetRegistrationDeadline(eventDto);

            var hasPermission = await _permissionService.UserHasPermissionAsync(eventDto, AdministrationPermissions.Event);

            _eventValidationService.CheckIfEventExists(eventToUpdate);

            if (eventToUpdate == null)
            {
                return;
            }

            _eventValidationService.CheckIfUserHasPermission(eventDto.UserId, eventToUpdate.ResponsibleUserId, hasPermission);
            _eventValidationService.CheckIfUserHasPermissionToPin(eventDto.IsPinned, eventToUpdate.IsPinned, hasPermission);
            _eventValidationService.CheckIfCreatingEventHasInsufficientOptions(eventDto.MaxOptions, totalOptionsProvided);
            _eventValidationService.CheckIfCreatingEventHasNoChoices(eventDto.MaxOptions, totalOptionsProvided);
            _eventValidationService.CheckIfAttendOptionsAllowedToUpdate(eventDto, eventToUpdate);
            await ValidateEvent(eventDto);

            if (eventDto.ResetParticipantList)
            {
                await _eventParticipationService.ResetAttendeesAsync(eventDto.Id, eventDto);
            }

            await UpdateWallAsync(eventToUpdate, eventDto);

            UpdateEventInfo(eventDto, eventToUpdate);
            UpdateEventOptions(eventDto, eventToUpdate);

            await _uow.SaveChangesAsync(false);

            eventToUpdate.Description = _markdownConverter.ConvertToHtml(eventToUpdate.Description);
        }
예제 #5
0
        public void Should_Return_No_Permission_Exception_While_Updating_Event()
        {
            MockPermissionService(_permissionService);
            MockUsers();
            MockEventTypes();
            var eventsGuids = MockEventsListTest();
            var newEvent    = new EditEventDto
            {
                Id     = eventsGuids[0],
                UserId = "2",
                ResetParticipantList = false,
                EndDate           = DateTime.UtcNow.AddHours(3),
                StartDate         = DateTime.UtcNow.AddHours(2),
                Name              = "Name",
                TypeId            = 1,
                ImageName         = "qwer",
                Recurrence        = EventRecurrenceOptions.EveryDay,
                MaxOptions        = 0,
                MaxParticipants   = 1,
                OrganizationId    = 2,
                ResponsibleUserId = "1",
                Location          = "place",
                NewOptions        = new List <NewEventOptionDto>(),
                EditedOptions     = new List <EventOptionDto>
                {
                    new EventOptionDto
                    {
                        Id     = 1,
                        Option = "edited1"
                    },
                    new EventOptionDto
                    {
                        Id     = 2,
                        Option = "edited2"
                    }
                }
            };
            var ex = Assert.ThrowsAsync <EventException>(async() => await _eventService.UpdateEventAsync(newEvent));

            Assert.That(PremiumErrorCodes.EventDontHavePermissionCode, Is.EqualTo(ex.Message));
        }
예제 #6
0
        public EditEventDto EditEvent(EditEventDto dto)
        {
            var eventToEdit = _context.Events.SingleOrDefault(e => e.EventId == dto.EventId);

            eventToEdit.Name        = dto.Name;
            eventToEdit.Street      = dto.Description;
            eventToEdit.Date        = dto.Date;
            eventToEdit.Description = dto.Description;
            eventToEdit.AudienceKey = dto.AudienceKey;
            eventToEdit.City        = dto.City;

            if (dto.Image != null)
            {
                ImageFileHelper.SaveFile(dto.Image, out var imageFileName);
                eventToEdit.ImageFilename = imageFileName;
            }

            _context.SaveChanges();

            return(_mapper.Map <Domain.Entity.Event, EditEventDto>(eventToEdit));
        }
예제 #7
0
        private async Task UpdateWallAsync(Event currentEvent, EditEventDto updatedEvent)
        {
            var updateWallDto = new UpdateWallDto
            {
                Id             = currentEvent.WallId,
                Description    = updatedEvent.Description,
                Logo           = updatedEvent.ImageName,
                Name           = updatedEvent.Name,
                OrganizationId = updatedEvent.OrganizationId,
                UserId         = updatedEvent.UserId
            };

            await _wallService.UpdateWallAsync(updateWallDto);

            var responsibleUserChanged     = currentEvent.ResponsibleUserId != updatedEvent.ResponsibleUserId;
            var currentHostIsParticipating = currentEvent.EventParticipants.Any(x => x.ApplicationUserId == currentEvent.ResponsibleUserId);
            var newHostIsParticipating     = currentEvent.EventParticipants.Any(p => p.ApplicationUserId == updatedEvent.ResponsibleUserId);

            if (!responsibleUserChanged)
            {
                return;
            }

            await _wallService.RemoveModeratorAsync(currentEvent.WallId, currentEvent.ResponsibleUserId, updatedEvent);

            await _wallService.AddModeratorAsync(currentEvent.WallId, updatedEvent.ResponsibleUserId, updatedEvent);

            if (!newHostIsParticipating)
            {
                await _wallService.JoinOrLeaveWallAsync(currentEvent.WallId, updatedEvent.ResponsibleUserId, updatedEvent.ResponsibleUserId, updatedEvent.OrganizationId, true);
            }

            if (!currentHostIsParticipating)
            {
                await _wallService.JoinOrLeaveWallAsync(currentEvent.WallId, currentEvent.ResponsibleUserId, currentEvent.ResponsibleUserId, updatedEvent.OrganizationId, true);
            }
        }
예제 #8
0
 public EditEventDto EditEvent(EditEventDto dto)
 {
     return(_eventRepo.EditEvent(dto));
 }
예제 #9
0
        public async Task Should_Return_Updated_Event()
        {
            MockPermissionService(_permissionService);
            MockUsers();
            MockEventTypes();
            var eventsGuids = MockEventsListTest();

            MockEventOptions();

            var newEvent = new EditEventDto
            {
                Id     = eventsGuids[0],
                UserId = "1",
                ResetParticipantList = false,
                EndDate   = DateTime.UtcNow.AddHours(3),
                StartDate = DateTime.UtcNow.AddHours(2),
                Name      = "Name",
                TypeId    = 1,
                ImageName = "qwer",
                Offices   = new EventOfficesDto {
                    OfficeNames = new List <string> {
                        "office"
                    }
                },
                Recurrence        = EventRecurrenceOptions.EveryDay,
                MaxOptions        = 1,
                MaxParticipants   = 1,
                OrganizationId    = 2,
                ResponsibleUserId = "1",
                Location          = "place",
                NewOptions        = new List <NewEventOptionDto>
                {
                    new NewEventOptionDto
                    {
                        Option = "Type1"
                    },
                    new NewEventOptionDto
                    {
                        Option = "Type2"
                    }
                },
                EditedOptions = new List <EventOptionDto>
                {
                    new EventOptionDto
                    {
                        Id     = 1,
                        Option = "Edited1"
                    },
                    new EventOptionDto
                    {
                        Id     = 2,
                        Option = "Edited2"
                    }
                }
            };

            await _eventService.UpdateEventAsync(newEvent);

            _eventOptionsDbSet.Received(0).Remove(Arg.Any <EventOption>());
            _eventOptionsDbSet.Received(2).Add(Arg.Any <EventOption>());
            await _uow.Received(1).SaveChangesAsync(false);
        }
예제 #10
0
        public IActionResult EditEvent([FromForm] EditEventDto dto)
        {
            _eventService.EditEvent(dto);

            return(Ok(dto));
        }