refactor(ux): consolidate BMAD skills, update design system, and clean up Prisma generated client
This commit is contained in:
148
mcp-server/import-full-docs.js
Normal file
148
mcp-server/import-full-docs.js
Normal file
@@ -0,0 +1,148 @@
|
||||
#!/usr/bin/env node
|
||||
/**
|
||||
* Script d'import COMPLET des documents dans Memento
|
||||
* Importe le contenu intégral de chaque fichier .md
|
||||
*/
|
||||
|
||||
import { PrismaClient } from '../keep-notes/prisma/client-generated/index.js';
|
||||
import { readFileSync } from 'fs';
|
||||
import { join, dirname } from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
|
||||
const __filename = fileURLToPath(import.meta.url);
|
||||
const __dirname = dirname(__filename);
|
||||
|
||||
const prisma = new PrismaClient({
|
||||
datasources: {
|
||||
db: { url: 'file:/Users/sepehr/dev/Keep/keep-notes/prisma/dev.db' },
|
||||
},
|
||||
});
|
||||
|
||||
// Liste des documents avec leurs chemins
|
||||
const documents = [
|
||||
{ file: 'guide-utilisateur-mcp.md', title: '📘 Guide Utilisateur MCP', color: 'blue' },
|
||||
{ file: 'source-tree-analysis.md', title: '📁 Source Tree Analysis', color: 'green' },
|
||||
{ file: 'project-overview.md', title: '🎯 Project Overview', color: 'purple' },
|
||||
{ file: 'deployment-guide.md', title: '🚀 Deployment Guide', color: 'orange' },
|
||||
{ file: 'development-guide-keep-notes.md', title: '💻 Development Guide', color: 'teal' },
|
||||
{ file: 'integration-architecture.md', title: '🔌 Integration Architecture', color: 'blue' },
|
||||
{ file: 'api-contracts-keep-notes.md', title: '📡 API Contracts Keep Notes', color: 'yellow' },
|
||||
{ file: 'architecture-keep-notes.md', title: '🏗️ Architecture Keep Notes', color: 'purple' },
|
||||
{ file: 'code-review-cleanup-report.md', title: '🔍 Code Review Cleanup Report', color: 'red' },
|
||||
{ file: 'data-models.md', title: '🗄️ Data Models', color: 'gray' },
|
||||
{ file: 'component-inventory.md', title: '🧩 Component Inventory', color: 'teal' },
|
||||
{ file: 'architecture-mcp-server.md', title: '🔧 Architecture MCP Server', color: 'blue' },
|
||||
{ file: 'api-contracts-mcp-server.md', title: '📋 API Contracts MCP Server', color: 'yellow' },
|
||||
{ file: 'monetization-analysis.md', title: '💰 Monetization Analysis', color: 'green' },
|
||||
{ file: 'index.md', title: '📚 Index Documentation', color: 'gray' },
|
||||
{ file: 'mcp-optimization-report.md', title: '⚡ MCP Optimization Report', color: 'purple' },
|
||||
];
|
||||
|
||||
async function importDocuments() {
|
||||
console.log('📝 Import COMPLET des documents dans Memento...\n');
|
||||
|
||||
// Trouver le user
|
||||
let user = await prisma.user.findFirst();
|
||||
if (!user) {
|
||||
console.log('❌ Aucun utilisateur trouvé');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Trouver ou créer le notebook "Documentation"
|
||||
let notebook = await prisma.notebook.findFirst({
|
||||
where: { name: 'Documentation' },
|
||||
});
|
||||
|
||||
if (!notebook) {
|
||||
const highestOrder = await prisma.notebook.findFirst({
|
||||
orderBy: { order: 'desc' },
|
||||
select: { order: true },
|
||||
});
|
||||
|
||||
notebook = await prisma.notebook.create({
|
||||
data: {
|
||||
name: 'Documentation',
|
||||
icon: '📚',
|
||||
color: '#3B82F6',
|
||||
order: (highestOrder?.order ?? -1) + 1,
|
||||
userId: user.id,
|
||||
},
|
||||
});
|
||||
console.log('📁 Notebook "Documentation" créé\n');
|
||||
} else {
|
||||
console.log('📁 Notebook "Documentation" trouvé\n');
|
||||
}
|
||||
|
||||
let created = 0;
|
||||
let updated = 0;
|
||||
let errors = 0;
|
||||
|
||||
for (const doc of documents) {
|
||||
try {
|
||||
const filePath = join('/Users/sepehr/dev/Keep/docs', doc.file);
|
||||
let content;
|
||||
|
||||
try {
|
||||
content = readFileSync(filePath, 'utf-8');
|
||||
} catch (e) {
|
||||
console.log(`⚠️ Fichier non trouvé: ${doc.file}`);
|
||||
errors++;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Vérifier si la note existe déjà
|
||||
const existing = await prisma.note.findFirst({
|
||||
where: {
|
||||
title: doc.title,
|
||||
notebookId: notebook.id,
|
||||
},
|
||||
});
|
||||
|
||||
if (existing) {
|
||||
// Mettre à jour avec le contenu complet
|
||||
await prisma.note.update({
|
||||
where: { id: existing.id },
|
||||
data: {
|
||||
content: content,
|
||||
color: doc.color,
|
||||
labels: JSON.stringify(['documentation']),
|
||||
updatedAt: new Date(),
|
||||
},
|
||||
});
|
||||
console.log(`🔄 Mis à jour: ${doc.title} (${content.length} caractères)`);
|
||||
updated++;
|
||||
} else {
|
||||
// Créer nouvelle note
|
||||
await prisma.note.create({
|
||||
data: {
|
||||
title: doc.title,
|
||||
content: content,
|
||||
color: doc.color,
|
||||
labels: JSON.stringify(['documentation']),
|
||||
notebookId: notebook.id,
|
||||
userId: user.id,
|
||||
type: 'text',
|
||||
isPinned: false,
|
||||
isArchived: false,
|
||||
},
|
||||
});
|
||||
console.log(`✅ Créé: ${doc.title} (${content.length} caractères)`);
|
||||
created++;
|
||||
}
|
||||
} catch (error) {
|
||||
console.log(`❌ Erreur ${doc.title}: ${error.message}`);
|
||||
errors++;
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n📊 Résumé:`);
|
||||
console.log(` Créés: ${created}`);
|
||||
console.log(` Mis à jour: ${updated}`);
|
||||
console.log(` Erreurs: ${errors}`);
|
||||
console.log(` Total: ${documents.length}`);
|
||||
console.log(`\n✨ Import terminé !`);
|
||||
}
|
||||
|
||||
importDocuments()
|
||||
.catch(console.error)
|
||||
.finally(() => prisma.$disconnect());
|
||||
Reference in New Issue
Block a user