- Adiciona funções para marcar atualizações como lidas - Implementa a lógica para marcar todas as atualizações como lidas - Adiciona suporte a logs de atualizações lidas no banco de dados - Cria funções utilitárias para manipulação de changelog - Gera changelog a partir de commits do Git - Salva changelog em formato JSON na pasta pública perf: adicionar índices de banco de dados para otimização de queries - Cria 14 índices compostos em tabelas principais (lancamentos, contas, etc) - Adiciona índice user_id + period em lancamentos, faturas e orçamentos - Adiciona índices para séries de parcelas e transferências
77 lines
1.8 KiB
TypeScript
77 lines
1.8 KiB
TypeScript
"use server";
|
|
|
|
import { userUpdateLog } from "@/db/schema";
|
|
import { successResult, type ActionResult } from "@/lib/actions/types";
|
|
import { getUser } from "@/lib/auth/server";
|
|
import { db } from "@/lib/db";
|
|
import { and, eq } from "drizzle-orm";
|
|
import { handleActionError } from "../actions/helpers";
|
|
|
|
export async function markUpdateAsRead(
|
|
updateId: string
|
|
): Promise<ActionResult> {
|
|
try {
|
|
const user = await getUser();
|
|
|
|
// Check if already marked as read
|
|
const existing = await db
|
|
.select()
|
|
.from(userUpdateLog)
|
|
.where(
|
|
and(
|
|
eq(userUpdateLog.userId, user.id),
|
|
eq(userUpdateLog.updateId, updateId)
|
|
)
|
|
)
|
|
.limit(1);
|
|
|
|
if (existing.length > 0) {
|
|
return successResult("Já marcado como lido");
|
|
}
|
|
|
|
await db.insert(userUpdateLog).values({
|
|
userId: user.id,
|
|
updateId,
|
|
});
|
|
|
|
return successResult("Marcado como lido");
|
|
} catch (error) {
|
|
return handleActionError(error);
|
|
}
|
|
}
|
|
|
|
export async function markAllUpdatesAsRead(
|
|
updateIds: string[]
|
|
): Promise<ActionResult> {
|
|
try {
|
|
const user = await getUser();
|
|
|
|
// Get existing read updates
|
|
const existing = await db
|
|
.select()
|
|
.from(userUpdateLog)
|
|
.where(eq(userUpdateLog.userId, user.id));
|
|
|
|
const existingIds = new Set(existing.map((log) => log.updateId));
|
|
|
|
// Filter out already read updates
|
|
const newUpdateIds = updateIds.filter((id) => !existingIds.has(id));
|
|
|
|
if (newUpdateIds.length === 0) {
|
|
return successResult("Todos já marcados como lidos");
|
|
}
|
|
|
|
// Insert new read logs
|
|
await db.insert(userUpdateLog).values(
|
|
newUpdateIds.map((updateId) => ({
|
|
userId: user.id,
|
|
updateId,
|
|
}))
|
|
);
|
|
|
|
return successResult("Todas as atualizações marcadas como lidas");
|
|
} catch (error) {
|
|
return handleActionError(error);
|
|
}
|
|
}
|