Example #1
0
        /// <summary>
        ///     Called when a reaction has been uploaded. This will
        ///     post the reaction and notify the vlog owner.
        /// </summary>
        /// <remarks>
        ///     <para>
        ///         The reaction will belong to the current user.
        ///     </para>
        ///     <para>
        ///         If the video file or thumbnail file does not
        ///         exist in our blob storage this throws a
        ///         <see cref="FileNotFoundException"/>.
        ///     </para>
        /// </remarks>
        /// <param name="context">Context for posting a reaction.</param>
        public async Task PostAsync(PostReactionContext context)
        {
            if (context is null)
            {
                throw new ArgumentNullException(nameof(context));
            }

            if (!await _blobStorageService.FileExistsAsync(StorageConstants.ReactionStorageFolderName, context.ReactionId.ToString()))
            {
                throw new FileNotFoundException();
            }

            var reaction = new Reaction
            {
                Id           = context.ReactionId,
                TargetVlogId = context.TargetVlogId,
                UserId       = context.UserId,
            };

            await _reactionRepository.CreateAsync(reaction);

            var targetVlog = await _vlogRepository.GetAsync(context.TargetVlogId);

            await _notificationService.NotifyReactionPlacedAsync(targetVlog.UserId, context.TargetVlogId, context.ReactionId);
        }