v3: code quality pass, various bug fixes
This commit is contained in:
@@ -2,6 +2,7 @@ import type {
|
||||
Notification,
|
||||
NotificationData,
|
||||
NotificationType,
|
||||
UserDumpPostedData,
|
||||
} from "../model/interfaces.ts";
|
||||
import { APIErrorCode, APIException } from "../model/interfaces.ts";
|
||||
import { db, isNotificationRow, notificationRowToApi } from "../model/db.ts";
|
||||
@@ -156,14 +157,53 @@ export function notifyUserFollowersNewDump(
|
||||
`SELECT follower_id FROM follows WHERE followed_user_id = ?;`,
|
||||
).all(dumperId) as { follower_id: string }[];
|
||||
|
||||
if (followerRows.length === 0) return;
|
||||
|
||||
const data: UserDumpPostedData = {
|
||||
dumperId,
|
||||
dumperUsername: posterRow.username,
|
||||
dumpId,
|
||||
dumpTitle,
|
||||
};
|
||||
const dataJson = JSON.stringify(data);
|
||||
const createdAt = new Date().toISOString();
|
||||
const sourceKey = `dump:${dumpId}`;
|
||||
|
||||
// Batch INSERT all follower notifications in a single statement
|
||||
const params: (string | number | null)[] = [];
|
||||
const placeholders: string[] = [];
|
||||
for (const row of followerRows) {
|
||||
createNotification(
|
||||
const id = crypto.randomUUID();
|
||||
placeholders.push("(?, ?, ?, ?, 0, ?, ?)");
|
||||
params.push(
|
||||
id,
|
||||
row.follower_id,
|
||||
"user_dump_posted",
|
||||
{ dumperId, dumperUsername: posterRow.username, dumpId, dumpTitle },
|
||||
`dump:${dumpId}`,
|
||||
dataJson,
|
||||
createdAt,
|
||||
sourceKey,
|
||||
);
|
||||
}
|
||||
|
||||
const result = db.prepare(
|
||||
`INSERT OR IGNORE INTO notifications (id, user_id, type, data, read, created_at, source_key)
|
||||
VALUES ${placeholders.join(", ")};`,
|
||||
).run(...params);
|
||||
|
||||
if ((result.changes as number) > 0) {
|
||||
for (const row of followerRows) {
|
||||
sendToUser(row.follower_id, {
|
||||
type: "notification_created",
|
||||
notification: {
|
||||
userId: row.follower_id,
|
||||
type: "user_dump_posted",
|
||||
data,
|
||||
read: false,
|
||||
createdAt,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export function notifyDumpOwnerUpvote(
|
||||
|
||||
Reference in New Issue
Block a user