- 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
76 lines
1.6 KiB
TypeScript
76 lines
1.6 KiB
TypeScript
import { db } from "@/lib/db";
|
|
import { userUpdateLog } from "@/db/schema";
|
|
import { eq } from "drizzle-orm";
|
|
import fs from "fs";
|
|
import path from "path";
|
|
|
|
export interface ChangelogEntry {
|
|
id: string;
|
|
type: string;
|
|
title: string;
|
|
date: string;
|
|
icon: string;
|
|
category: string;
|
|
}
|
|
|
|
export interface Changelog {
|
|
version: string;
|
|
generatedAt: string;
|
|
entries: ChangelogEntry[];
|
|
}
|
|
|
|
export function getChangelog(): Changelog {
|
|
try {
|
|
const changelogPath = path.join(process.cwd(), "public", "changelog.json");
|
|
|
|
if (!fs.existsSync(changelogPath)) {
|
|
return {
|
|
version: "1.0.0",
|
|
generatedAt: new Date().toISOString(),
|
|
entries: [],
|
|
};
|
|
}
|
|
|
|
const content = fs.readFileSync(changelogPath, "utf-8");
|
|
return JSON.parse(content);
|
|
} catch (error) {
|
|
console.error("Error reading changelog:", error);
|
|
return {
|
|
version: "1.0.0",
|
|
generatedAt: new Date().toISOString(),
|
|
entries: [],
|
|
};
|
|
}
|
|
}
|
|
|
|
export async function getUnreadUpdates(userId: string) {
|
|
const changelog = getChangelog();
|
|
|
|
if (changelog.entries.length === 0) {
|
|
return {
|
|
unreadCount: 0,
|
|
unreadEntries: [],
|
|
allEntries: [],
|
|
};
|
|
}
|
|
|
|
// Get read updates from database
|
|
const readLogs = await db
|
|
.select()
|
|
.from(userUpdateLog)
|
|
.where(eq(userUpdateLog.userId, userId));
|
|
|
|
const readUpdateIds = new Set(readLogs.map((log) => log.updateId));
|
|
|
|
// Filter unread entries
|
|
const unreadEntries = changelog.entries.filter(
|
|
(entry) => !readUpdateIds.has(entry.id)
|
|
);
|
|
|
|
return {
|
|
unreadCount: unreadEntries.length,
|
|
unreadEntries,
|
|
allEntries: changelog.entries,
|
|
};
|
|
}
|