working push notifiations

This commit is contained in:
2026-08-23 11:36:17 +02:00
parent 9312783793
commit bdc6562116
49 changed files with 1858 additions and 419 deletions
+34 -46
View File
@@ -17,60 +17,47 @@ router.get('/', asyncHandler(async (req: Request, res: Response) => {
const sinceDate = since;
// Fetch categories changed since timestamp
const changedCategories = await db
.select()
.from(categories)
.where(and(eq(categories.userId, userId), gte(categories.updatedAt, sinceDate)))
.orderBy(asc(categories.updatedAt));
// Fetch all changed entities in parallel
const [changedCategories, changedTasks, changedSubtasks, changedRepeatProfiles, changedFriendships, changedTombstones] = await Promise.all([
db
.select()
.from(categories)
.where(and(eq(categories.userId, userId), gte(categories.updatedAt, sinceDate)))
.orderBy(asc(categories.updatedAt)),
// Fetch tasks changed since timestamp
const changedTasks = await db
.select()
.from(tasks)
.where(and(eq(tasks.userId, userId), gte(tasks.updatedAt, sinceDate)))
.orderBy(asc(tasks.updatedAt));
db
.select()
.from(tasks)
.where(and(eq(tasks.userId, userId), gte(tasks.updatedAt, sinceDate)))
.orderBy(asc(tasks.updatedAt)),
// Fetch subtasks changed since timestamp
let changedSubtasks: any[] = [];
if (changedTasks.length > 0) {
changedSubtasks = await db
db
.select()
.from(subtasks)
.where(and(eq(subtasks.userId, userId), gte(subtasks.updatedAt, sinceDate)))
.orderBy(asc(subtasks.updatedAt));
} else {
// Also fetch subtasks for tasks that might have been deleted
changedSubtasks = await db
.orderBy(asc(subtasks.updatedAt)),
db
.select()
.from(subtasks)
.where(and(eq(subtasks.userId, userId), gte(subtasks.updatedAt, sinceDate)))
.orderBy(asc(subtasks.updatedAt));
}
.from(repeatProfiles)
.where(and(eq(repeatProfiles.userId, userId), gte(repeatProfiles.updatedAt, sinceDate)))
.orderBy(asc(repeatProfiles.updatedAt)),
// Fetch repeat profiles changed since timestamp
const changedRepeatProfiles = await db
.select()
.from(repeatProfiles)
.where(and(eq(repeatProfiles.userId, userId), gte(repeatProfiles.updatedAt, sinceDate)))
.orderBy(asc(repeatProfiles.updatedAt));
db
.select()
.from(friendships)
.where(and(
or(eq(friendships.userId, userId), eq(friendships.friendId, userId)),
gte(friendships.updatedAt, sinceDate)
))
.orderBy(asc(friendships.updatedAt)),
// Fetch friendships changed since timestamp
const changedFriendships = await db
.select()
.from(friendships)
.where(and(
or(eq(friendships.userId, userId), eq(friendships.friendId, userId)),
gte(friendships.updatedAt, sinceDate)
))
.orderBy(asc(friendships.updatedAt));
// Fetch tombstones (deletions) changed since timestamp
const changedTombstones = await db
.select()
.from(tombstones)
.where(and(eq(tombstones.userId, userId), gte(tombstones.updatedAt, sinceDate)))
.orderBy(asc(tombstones.updatedAt));
db
.select()
.from(tombstones)
.where(and(eq(tombstones.userId, userId), gte(tombstones.updatedAt, sinceDate)))
.orderBy(asc(tombstones.updatedAt)),
]);
const timestamp = Date.now();
@@ -292,6 +279,7 @@ router.post('/push', asyncHandler(async (req: Request, res: Response) => {
taskId: sub.taskId,
parentSubtaskId: sub.parentSubtaskId ?? null,
categoryId: sub.categoryId ?? null,
tags: sub.tags ?? '',
title: sub.title,
description: sub.description ?? '',
priority: sub.priority ?? 'none',