/// <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)); }
/// <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 }
/// <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>()); }