Files
recall/prisma/seed.ts
2026-03-22 13:01:46 -03:00

88 lines
4.1 KiB
TypeScript

import { PrismaClient } from '@prisma/client'
const prisma = new PrismaClient()
async function main() {
await prisma.noteTag.deleteMany()
await prisma.note.deleteMany()
await prisma.tag.deleteMany()
const notes = [
{
title: 'Install Node.js with nvm',
content: '## Comando\n\n```bash\nnvm install node\nnvm use node\n```\n\n## Qué hace\nInstala la última versión de Node.js usando nvm.\n\n## Cuándo usarlo\nCuando necesitas instalar Node.js en un sistema nuevo.',
type: 'command',
tags: ['bash', 'node', 'devops'],
},
{
title: 'React useEffect cleanup pattern',
content: '## Snippet\n\n## Lenguaje\nTypeScript/React\n\n## Qué resuelve\nLimpieza correcta de suscripciones en useEffect.\n\n## Código\n```typescript\nuseEffect(() => {\n const controller = new AbortController()\n return () => controller.abort()\n}, [])\n```',
type: 'snippet',
tags: ['code', 'react', 'frontend'],
},
{
title: 'Usar PostgreSQL para producción',
content: '## Contexto\nEl MVP usa SQLite pero en producción necesitamos más capacidad.\n\n## Decisión\nMigrar a PostgreSQL manteniendo el mismo Prisma ORM.\n\n## Alternativas consideradas\n- MySQL: mejor soporte JSON pero menos popular\n- MongoDB: demasiado flexible\n\n## Consecuencias\n- Mejor concurrencia\n- Migración transparente con Prisma',
type: 'decision',
tags: ['arquitectura', 'backend'],
},
{
title: 'Pollo al horno con hierbas',
content: '## Ingredientes\n- 1 pollo entero (~1.5kg)\n- 4 dientes de ajo\n- Romero fresco\n- Tomillo\n- Aceite de oliva\n- Sal y pimienta\n\n## Pasos\n1. Precalentar horno a 200°C\n2. Limpiar y secar el pollo\n3. Untar con aceite y especias\n4. Hornear 1 hora\n5. Descansar 10 min antes de cortar\n\n## Tiempo\n1h 15min total\n\n## Notas\nQueda muy jugoso si lo vuelves a bañar con sus jugos a mitad de cocción.',
type: 'recipe',
tags: ['cocina'],
},
{
title: 'Renovar pasaporte argentino',
content: '## Objetivo\nRenovar el pasaporte argentino vencido.\n\n## Pasos\n1. Sacar turno online en turno.gob.ar\n2. Llevar DNI original\n3. Llevar pasaporte anterior\n4. Pagar tasa de renovación\n5. Esperar ~15 días hábiles\n\n## Requisitos\n- DNI vigente\n- Pasaporte anterior\n\n## Problemas comunes\n- Los turnos se agotan rápido',
type: 'procedure',
tags: ['trámite', 'hogar'],
},
{
title: 'Inventario cocina',
content: '## Item | Cantidad | Ubicación\nArroz | 2kg | Alacena\nFideos | 5 paquetes | Alacena\nLentejas | 1kg | Alacena\nAceite | 2L | Bajo mesada\nSal | 3 paquetes | Mesa\n\n## Notas\nRevisar fechas de vencimiento cada 6 meses.',
type: 'inventory',
tags: ['hogar', 'inventario'],
},
{
title: 'Ideas para vacaciones 2026',
content: '## Opciones\n1. Costa atlántica argentina\n2. Bariloche (invierno)\n3. Viaje a Europa\n\n## Presupuesto estimado\n- Argentina: $500-800 USD\n- Europa: $2000-3000 USD\n\n## Preferencias\n- Prefiero naturaleza sobre ciudades',
type: 'note',
tags: ['viajes', 'planificación'],
},
{
title: 'Resumen libro: Atomic Habits',
content: '## Ideas principales\n- Hábitos compound: pequeños cambios dan grandes resultados\n- No importa si eres mejor o peor, importa tu sistema\n- 1% mejor cada día = 37x mejor al año\n\n## Aplicar\n- Crear morning routine\n- Eliminar malos hábitos con diseño ambiental\n- No perder rachas',
type: 'note',
tags: ['lectura', 'productividad'],
},
]
for (const note of notes) {
const { tags, ...noteData } = note
await prisma.note.create({
data: {
...noteData,
tags: {
create: await Promise.all(
tags.map(async (tagName) => {
const tag = await prisma.tag.upsert({
where: { name: tagName },
create: { name: tagName },
update: {},
})
return { tagId: tag.id }
})
),
},
},
})
}
console.log('Seed completed')
}
main()
.catch(console.error)
.finally(() => prisma.$disconnect())