Пример #1
0
        /// <summary>
        ///     Get a follow request from our data store.
        /// </summary>
        /// <param name="id">Follow request id.</param>
        /// <returns>The follow request.</returns>
        public async Task <FollowRequest> GetAsync(FollowRequestId id)
        {
            if (id is null)
            {
                throw new ArgumentNullException(nameof(id));
            }

            var sql = @"
                    SELECT  fr.date_created,
                            fr.date_updated,
                            fr.follow_request_status,
                            fr.receiver_id,
                            fr.requester_id
                    FROM    application.follow_request AS fr
                    WHERE   fr.receiver_id = @receiver_id
                    AND     fr.requester_id = @requester_id
                    LIMIT   1";

            await using var context = await CreateNewDatabaseContext(sql);

            context.AddParameterWithValue("receiver_id", id.ReceiverId);
            context.AddParameterWithValue("requester_id", id.RequesterId);

            await using var reader = await context.ReaderAsync();

            return(MapFromReader(reader));
        }
Пример #2
0
        /// <summary>
        ///     Updates the status of a follow request.
        /// </summary>
        /// <remarks>
        ///     This throws a <see cref="NotAllowedException"/>
        ///     if the current user id is not equal to either
        ///     the requester or the receiver id.
        /// </remarks>
        /// <param name="id">The follow request id.</param>
        /// <param name="status">The new status.</param>
        public async Task UpdateStatusAsync(FollowRequestId id, FollowRequestStatus status)
        {
            if (id is null)
            {
                throw new ArgumentNullException(nameof(id));
            }
            if (!AppContext.HasUser || (!AppContext.IsUser(id.RequesterId) && !AppContext.IsUser(id.ReceiverId)))
            {
                throw new NotAllowedException();
            }

            var sql = @"
                    UPDATE  application.follow_request AS fr
                    SET     follow_request_status = @follow_request_status
                    WHERE   fr.receiver_id = @receiver_id
                    AND     fr.requester_id = @requester_id";

            await using var context = await CreateNewDatabaseContext(sql);

            context.AddParameterWithValue("follow_request_status", status);
            context.AddParameterWithValue("receiver_id", id.ReceiverId);
            context.AddParameterWithValue("requester_id", id.RequesterId);

            await context.NonQueryAsync(hasRowGuard : false); // No-op
        }
Пример #3
0
        /// <summary>
        ///     Checks if a follow request exists in our database.
        /// </summary>
        /// <param name="id">The id to check for.</param>
        public async Task <bool> ExistsAsync(FollowRequestId id)
        {
            if (id is null)
            {
                throw new ArgumentNullException(nameof(id));
            }

            var sql = @"
                    SELECT  EXISTS (
                        SELECT  1
                        FROM    application.follow_request AS fr
                        WHERE   fr.receiver_id = @receiver_id
                        AND     fr.requester_id = @requester_id
                    )";

            await using var context = await CreateNewDatabaseContext(sql);

            context.AddParameterWithValue("receiver_id", id.ReceiverId);
            context.AddParameterWithValue("requester_id", id.RequesterId);

            return(await context.ScalarAsync <bool>());
        }