private async Task <Option <Rating, Error> > RateAsync(RateRestaurant command) { var result = await RatingRepository .GetByUserIdAndRestaurantIdAsync(command.UserId, command.RestaurantId); try { // CREATE if (result == default) { var entry = Mapper.Map <Rating>(command); var rating = await RatingRepository.SaveAsync(entry); return(rating.Some <Rating, Error>()); } // UPDATE result.Stars = command.Stars; await RatingRepository.UpdateAsync(result); return(result.Some <Rating, Error>()); } catch (Exception ex) { Debug.Fail($"Un error has accrued: {ex.Message}"); return(Option.None <Rating, Error>( Error.Critical("Something happens while saving the rating of the restaurant!"))); } }