public async Task Delete(Guid uuid) { DatepickerDto datepickerToRemove = await _context.Datepicker.FindAsync(uuid); _context.Datepicker.Remove(datepickerToRemove); await _context.SaveChangesAsync(); }
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)); } }
public async Task FindTest() { var testDatepicker = new TestDatepickerDto().Datepicker; DatepickerDto result = await _datepickerLogic.Find(testDatepicker.Uuid); Assert.NotNull(result); }
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); }
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); }
/// <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); } } }
/// <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); }
/// <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); }
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); }
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); }
/// <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); }
public async Task Update(DatepickerDto datepicker) { _context.Datepicker.Update(datepicker); await _context.SaveChangesAsync(); }
public async Task Add(DatepickerDto datepicker) { await _context.Datepicker.AddAsync(datepicker); await _context.SaveChangesAsync(); }