Blocking someone removes notifications between you
Also note in the CI guide that the build caches need disk space where Docker keeps its data. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@ import { db, schema } from '../db';
|
||||
import { requireUser } from '../lib/auth';
|
||||
import { HttpError } from '../lib/http';
|
||||
import { FOLLOWS_CHANGED_CHANNEL, redis } from '../lib/redis';
|
||||
import { removeNotificationsBetween } from '../services/notifications';
|
||||
import { toUserSummary } from '../services/nowPlaying';
|
||||
import { removeReactionsBetween } from './reactions';
|
||||
|
||||
@@ -48,6 +49,7 @@ export async function safetyRoutes(app: FastifyInstance) {
|
||||
);
|
||||
});
|
||||
await removeReactionsBetween(me.id, them.id);
|
||||
await removeNotificationsBetween(me.id, them.id);
|
||||
await followsChanged(me.id, them.id);
|
||||
return { ok: true };
|
||||
});
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import { and, desc, eq, gt, inArray, isNull, lt } from 'drizzle-orm';
|
||||
import { and, desc, eq, gt, inArray, isNull, lt, or } from 'drizzle-orm';
|
||||
import webpush from 'web-push';
|
||||
import {
|
||||
notificationPath,
|
||||
@@ -61,6 +61,12 @@ export async function notify(input: {
|
||||
return row!.id;
|
||||
}
|
||||
|
||||
/** After a block: neither sees notifications from the other any more. */
|
||||
export async function removeNotificationsBetween(a: string, b: string) {
|
||||
const n = schema.notifications;
|
||||
await db.delete(n).where(or(and(eq(n.userId, a), eq(n.actorId, b)), and(eq(n.userId, b), eq(n.actorId, a))));
|
||||
}
|
||||
|
||||
/** Take back a reaction's notification when the reaction is removed (if it hasn't been seen). */
|
||||
export async function unnotifyReaction(userId: string, actorId: string, listenId: string) {
|
||||
const n = schema.notifications;
|
||||
|
||||
@@ -67,6 +67,13 @@ describe('notifications', () => {
|
||||
expect((await inbox(bob.token)).unread).toBe(0);
|
||||
});
|
||||
|
||||
it('blocking removes notifications between the two', async () => {
|
||||
const { alice } = await setup();
|
||||
expect((await inbox(alice.token)).notifications).toHaveLength(1);
|
||||
await app().inject({ method: 'POST', url: '/users/bob/block', headers: bearer(alice.token), payload: {} });
|
||||
expect((await inbox(alice.token)).notifications).toHaveLength(0);
|
||||
});
|
||||
|
||||
it('saves notification settings', async () => {
|
||||
const { alice } = await setup();
|
||||
const me = (await app().inject({ method: 'PATCH', url: '/me', headers: bearer(alice.token), payload: { notifyPrefs: { follow: false } } })).json();
|
||||
|
||||
Reference in New Issue
Block a user