Files
DBE-S04/seed.js
T

84 lines
2.1 KiB
JavaScript

// Anderson Valadares Pinto (20251PL.TSIAD0018) [SLS]
//
// Popula o banco com instrumentos para testar a listagem.
// Uso: npm run seed (insere o que ainda não existe)
// npm run seed -- --reset (apaga tudo e insere de novo)
import mongoose from 'mongoose';
import Instrumento from './models/Instrumento.js';
const MONGODB_URI =
process.env.MONGODB_URI || 'mongodb://127.0.0.1:27017/loja_instrumentos';
// Três cordas (dois do mesmo tipo, como pede o enunciado), preços variados
// e nomes que permitem testar a busca depois.
const instrumentos = [
{
nome: 'Guitarra Elétrica Stratocaster',
fabricante: 'Fender',
preco: 5490.0,
tipo: 'Cordas',
},
{
nome: 'Guitarra Acústica Folk',
fabricante: 'Yamaha',
preco: 2190.0,
tipo: 'Cordas',
},
{
nome: 'Baixo Elétrico SR300',
fabricante: 'Ibanez',
preco: 3890.0,
tipo: 'Cordas',
},
{
nome: 'Bateria Acústica Roadshow',
fabricante: 'Pearl',
preco: 7290.0,
tipo: 'Percussão',
},
{
nome: 'Teclado Digital Juno-DS61',
fabricante: 'Roland',
preco: 4590.0,
tipo: 'Teclas',
},
{
nome: 'Saxofone Alto YAS-280',
fabricante: 'Yamaha',
preco: 6290.0,
tipo: 'Sopro',
},
];
async function executar() {
await mongoose.connect(MONGODB_URI);
if (process.argv.includes('--reset')) {
const removidos = await Instrumento.deleteMany({});
console.log(`${removidos.deletedCount} instrumento(s) removido(s).`);
}
let inseridos = 0;
for (const instrumento of instrumentos) {
// upsert por nome: rodar o seed duas vezes não duplica o estoque.
const resultado = await Instrumento.updateOne(
{ nome: instrumento.nome },
{ $setOnInsert: instrumento },
{ upsert: true }
);
if (resultado.upsertedCount) inseridos += 1;
}
const total = await Instrumento.countDocuments();
console.log(`${inseridos} instrumento(s) inserido(s); ${total} no total.`);
}
executar()
.catch((erro) => {
console.error('Falha ao popular o banco:', erro.message);
process.exitCode = 1;
})
.finally(() => mongoose.disconnect());