コード例 #1
0
        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!")));
            }
        }