Beispiel #1
0
        public async Task Delete(Guid uuid)
        {
            DatepickerDto datepickerToRemove = await _context.Datepicker.FindAsync(uuid);

            _context.Datepicker.Remove(datepickerToRemove);
            await _context.SaveChangesAsync();
        }
Beispiel #2
0
        public async Task <ActionResult <DatepickerViewmodel> > Find(Guid uuid)
        {
            try
            {
                UserHelper    requestingUser = _controllerHelper.GetRequestingUser(this);
                DatepickerDto datepicker     = await _datepickerLogic.Find(uuid);

                var datepickerViewmodel = _mapper.Map <DatepickerViewmodel>(datepicker);
                datepickerViewmodel.CanBeRemoved = datepicker.AuthorUuid == requestingUser.Uuid;

                return(datepickerViewmodel);
            }
            catch (KeyNotFoundException)
            {
                return(NotFound());
            }
            catch (UnprocessableException)
            {
                return(UnprocessableEntity());
            }
            catch (Exception e)
            {
                _logLogic.Log(e);
                return(StatusCode(StatusCodes.Status500InternalServerError));
            }
        }
Beispiel #3
0
        public async Task FindTest()
        {
            var           testDatepicker = new TestDatepickerDto().Datepicker;
            DatepickerDto result         = await _datepickerLogic.Find(testDatepicker.Uuid);

            Assert.NotNull(result);
        }
Beispiel #4
0
 private async Task UpdateDatabaseDatepicker(DatepickerDto datepicker, DatepickerDto dbDatepicker)
 {
     dbDatepicker.Title       = datepicker.Title;
     dbDatepicker.Description = datepicker.Description;
     dbDatepicker.Expires     = datepicker.Expires;
     dbDatepicker.Location    = datepicker.Location;
     await _datepickerDal.Update(dbDatepicker);
 }
Beispiel #5
0
 private bool DatepickerValid(DatepickerDto datepicker)
 {
     return(!string.IsNullOrEmpty(datepicker.Title) &&
            !string.IsNullOrEmpty(datepicker.Description) &&
            !string.IsNullOrEmpty(datepicker.Location) &&
            datepicker.Dates.Any() &&
            datepicker.Expires > DateTime.Now &&
            datepicker.Uuid != Guid.Empty);
 }
Beispiel #6
0
        /// <summary>
        /// Updates the datepicker in the database
        /// </summary>
        /// <param name="datepicker">The updated datepicker</param>
        public async Task Update(DatepickerDto datepicker)
        {
            if (!DatepickerValid(datepicker))
            {
                throw new UnprocessableException(nameof(datepicker));
            }

            DatepickerDto dbDatepicker = await _datepickerDal.Find(datepicker.Uuid);

            if (dbDatepicker == null)
            {
                throw new KeyNotFoundException();
            }

            List <Guid> userUuidCollection = dbDatepicker.Dates.SelectMany(d => d.UserAvailabilities.Select(ua => ua.UserUuid))
                                             .ToList();

            if (datepicker.Title != dbDatepicker.Title)
            {
                bool datepickerWithNameExists = await _datepickerDal.Exists(datepicker.Title);

                if (datepickerWithNameExists)
                {
                    throw new DuplicateNameException();
                }

                var  rpcClient       = new RpcClient(_channel);
                bool eventNameExists = rpcClient.Call <bool>(datepicker.Title, RabbitMqQueues.ExistsEventQueue);
                if (eventNameExists)
                {
                    throw new DuplicateNameException();
                }
            }

            await UpdateDatabaseDatepicker(datepicker, dbDatepicker);

            if (datepicker.Dates.Count != dbDatepicker.Dates.Count || datepicker.Dates // update datepicker dates if supplied dates date time is different from database values
                .TrueForAll(dpd => dbDatepicker.Dates
                            .All(dbDpd => dbDpd.DateTime != dpd.DateTime)))
            {
                await _datepickerDateDal.Delete(dbDatepicker.Dates);

                await _datepickerDateDal.Add(datepicker.Dates);

                if (userUuidCollection.Any())
                {
                    var rpcClient = new RpcClient(_channel);
                    InformUsersAboutDatepickerDatesUpdate(rpcClient, userUuidCollection, dbDatepicker);
                }
            }
        }
Beispiel #7
0
        /// <summary>
        /// Finds the datepicker by uuid
        /// </summary>
        /// <param name="uuid">The uuid to search for</param>
        /// <returns>The found datepicker, null if nothing found</returns>
        public async Task <DatepickerDto> Find(Guid uuid)
        {
            if (uuid == Guid.Empty)
            {
                throw new UnprocessableException();
            }

            DatepickerDto datepicker = await _datepickerDal.Find(uuid);

            if (datepicker == null)
            {
                throw new KeyNotFoundException();
            }

            return(datepicker);
        }
Beispiel #8
0
        /// <summary>
        /// Deletes the datepicker in the database by uuid
        /// </summary>
        /// <param name="uuid">The uuid to delete</param>
        public async Task Delete(Guid uuid, Guid requestingUserUuid)
        {
            if (uuid == Guid.Empty)
            {
                throw new UnprocessableException();
            }

            DatepickerDto dbDatepicker = await _datepickerDal.Find(uuid);

            if (dbDatepicker == null)
            {
                throw new KeyNotFoundException();
            }

            if (dbDatepicker.AuthorUuid != requestingUserUuid)
            {
                throw new UnauthorizedAccessException();
            }

            await _datepickerDal.Delete(uuid);

            // Inform users about the update
            List <Guid> userUuidCollection = dbDatepicker.Dates.SelectMany(d => d.UserAvailabilities.Select(ua => ua.UserUuid))
                                             .ToList();

            if (!userUuidCollection.Any())
            {
                return;
            }

            var rpcClient = new RpcClient(_channel);
            var users     = rpcClient.Call <List <UserRabbitMq> >(userUuidCollection, RabbitMqRouting.FindUser);

            users.RemoveAll(u => !u.ReceiveEmail);

            var emails = users
                         .Select(user => new EmailRabbitMq
            {
                EmailAddress = user.Email,
                Subject      = $"datumprikker { dbDatepicker.Title } verwijderd",
                Message      = $"Beste {user.Username},{Environment.NewLine}" +
                               $"De datumprikker {dbDatepicker.Title} is verwijderd."
            })
                         .ToList();

            _publisher.Publish(emails, RabbitMqRouting.SendMail, RabbitMqExchange.MailExchange);
        }
Beispiel #9
0
        private void InformUsersAboutDatepickerDatesUpdate(RpcClient rpcClient, List <Guid> userUuidCollection,
                                                           DatepickerDto dbDatepicker)
        {
            var users = rpcClient.Call <List <UserRabbitMq> >(userUuidCollection, RabbitMqQueues.FindUserQueue);

            users.RemoveAll(u => !u.ReceiveEmail);

            var emails = users
                         .Select(user => new EmailRabbitMq
            {
                EmailAddress = user.Email,
                Subject      = $"Opnieuw opgeven beschikbaarheid datumprikker {dbDatepicker.Title}",
                Message      = $"Beste {user.Username},{Environment.NewLine}" +
                               $"Een aantal datums van de datumprikker {dbDatepicker.Title} zijn aangepast. Daarom moet je opnieuw je beschikbaarheid opgeven."
            })
                         .ToList();

            _publisher.Publish(emails, RabbitMqRouting.SendMail, RabbitMqExchange.MailExchange);
        }
Beispiel #10
0
        public async Task ConvertDatepicker(DatePickerConversion datePickerConversion, UserHelper requestingUser)
        {
            if (!DatepickerConversionModelValid(datePickerConversion))
            {
                throw new UnprocessableException();
            }

            DatepickerDto dbDatepicker = await _datepickerDal.Find(datePickerConversion.DatepickerUuid);

            if (dbDatepicker == null)
            {
                throw new NoNullAllowedException();
            }

            if (dbDatepicker.AuthorUuid != requestingUser.Uuid)
            {
                throw new UnauthorizedAccessException();
            }

            bool datesAreInDatePicker = datePickerConversion.SelectedDates
                                        .TrueForAll(dateUuid => dbDatepicker.Dates
                                                    .Exists(dbDate => dbDate.Uuid == dateUuid));

            if (!datesAreInDatePicker)
            {
                throw new UnprocessableException();
            }

            var datepickerRabbitMq = _mapper.Map <DatepickerRabbitMq>(dbDatepicker);

            datepickerRabbitMq.EventSteps    = _mapper.Map <List <EventStepRabbitMq> >(datePickerConversion.EventSteps);
            datepickerRabbitMq.SelectedDates = datePickerConversion.SelectedDates;
            datepickerRabbitMq.Dates
            .RemoveAll(d => !datePickerConversion.SelectedDates
                       .Contains(d.Uuid));

            _publisher.Publish(datepickerRabbitMq, RabbitMqRouting.ConvertDatepicker, RabbitMqExchange.EventExchange);
            await _datepickerDal.Delete(datePickerConversion.DatepickerUuid);
        }
Beispiel #11
0
        /// <summary>
        /// Adds the datepicker to the database
        /// </summary>
        /// <param name="datepicker">The datepicker to add</param>
        /// <param name="requestingUser">The user that made the request</param>
        public async Task Add(DatepickerDto datepicker, UserHelper requestingUser)
        {
            datepicker.Uuid = Guid.NewGuid();
            if (!DatepickerValid(datepicker))
            {
                throw new UnprocessableException(nameof(datepicker));
            }

            datepicker.AuthorUuid = requestingUser.Uuid;
            datepicker.Dates.ForEach(d => d.DatePickerUuid = datepicker.Uuid);

            bool datepickerExists = await _datepickerDal.Exists(datepicker.Title);

            bool eventExists = _rpcClient.Call <bool>(datepicker.Title, RabbitMqQueues.ExistsEventQueue);

            if (eventExists || datepickerExists)
            {
                throw new DuplicateNameException();
            }

            await _datepickerDal.Add(datepicker);
        }
Beispiel #12
0
 public async Task Update(DatepickerDto datepicker)
 {
     _context.Datepicker.Update(datepicker);
     await _context.SaveChangesAsync();
 }
Beispiel #13
0
        public async Task Add(DatepickerDto datepicker)
        {
            await _context.Datepicker.AddAsync(datepicker);

            await _context.SaveChangesAsync();
        }