/// <summary> /// /// </summary> /// <param name="feedback"></param> /// <returns></returns> public async Task <Feedback> SaveFeedbackAsync(Feedback feedback) { if (feedback == null) { throw new FriendlyException(FriendlyExceptionType.InvalidModelState); } Logger.WriteDebug("Feedback:" + JsonConvert.SerializeObject(feedback)); if (!LoggedIn) { var restroom = await RestroomUnitOfWork.GetRestroomAsync(feedback.RestroomId); if (!restroom.IsPublic) { throw new FriendlyException(FriendlyExceptionType.AccessDenied); } } if (LoggedIn && feedback.Badge != ClaimsPrincipal.Current.Identity.Name) { throw new UnauthorizedAccessException("You can't post a feedback for someone else."); } if (feedback.Rating < 3 && string.IsNullOrWhiteSpace(feedback.FeedbackText)) { throw new FriendlyException(FriendlyExceptionType.FeedbackTextRequired); } var result = await RestroomUnitOfWork.SaveFeedbackAsync(feedback.ToDataAccess()); return(Feedback.FromDataAccess(result)); }