feat: CMS com limites de caracteres, traduções auto e painel de notificações

This commit is contained in:
Erik
2025-11-27 12:05:23 -03:00
parent ea0c4ac5a6
commit 6e32ffdc95
40 changed files with 3665 additions and 278 deletions

View File

@@ -0,0 +1,44 @@
const { PrismaClient } = require('@prisma/client');
async function main() {
const prisma = new PrismaClient();
try {
const pages = await prisma.pageContent.findMany({
orderBy: [{ slug: 'asc' }, { locale: 'asc' }],
});
const grouped = pages.reduce((acc, page) => {
acc[page.slug] = acc[page.slug] || [];
acc[page.slug].push({ locale: page.locale, updatedAt: page.updatedAt });
return acc;
}, {});
for (const [slug, entries] of Object.entries(grouped)) {
console.log(`\n=== ${slug.toUpperCase()} ===`);
const pt = entries.find((e) => e.locale === 'pt');
const ptDate = pt ? new Date(pt.updatedAt) : null;
for (const locale of ['pt', 'en', 'es']) {
const entry = entries.find((e) => e.locale === locale);
if (!entry) {
console.log(`${locale.toUpperCase()}: missing`);
continue;
}
const dt = new Date(entry.updatedAt);
let status = 'ok';
if (ptDate && locale !== 'pt' && dt < ptDate) {
status = 'outdated';
}
console.log(`${locale.toUpperCase()}: ${dt.toISOString()} (${status})`);
}
}
} finally {
await prisma.$disconnect();
}
}
main().catch((err) => {
console.error(err);
process.exitCode = 1;
});