// Anderson Valadares Pinto (20251PL.TSIAD0018) [SLS] import express from 'express'; import Instrumento, { TIPOS } from '../models/Instrumento.js'; const router = express.Router(); // "/" só manda para a listagem. router.get('/', (req, res) => res.redirect('/instrumentos')); // Listagem: todos os instrumentos, do mais recente para o mais antigo. router.get('/instrumentos', async (req, res, next) => { try { const instrumentos = await Instrumento.find().sort({ createdAt: -1 }).lean(); res.render('instrumento/lst', { titulo: 'Instrumentos', instrumentos }); } catch (erro) { next(erro); } }); // Formulário de cadastro. router.get('/instrumentos/add', (req, res) => { res.render('instrumento/add', { titulo: 'Cadastrar Instrumento', tipos: TIPOS, valores: {}, erro: null, }); }); // Recebe o formulário, grava no MongoDB e mostra a confirmação. router.post('/instrumentos', async (req, res, next) => { const valores = { nome: String(req.body.nome ?? '').trim(), fabricante: String(req.body.fabricante ?? '').trim(), preco: String(req.body.preco ?? '').replace(',', '.').trim(), tipo: String(req.body.tipo ?? '').trim(), }; try { const instrumento = await Instrumento.create({ nome: valores.nome, fabricante: valores.fabricante, preco: Number(valores.preco), tipo: valores.tipo, }); res.status(201).render('instrumento/addok', { titulo: 'Instrumento Cadastrado', instrumento: instrumento.toObject(), }); } catch (erro) { // ValidationError cobre campos vazios e tipo inválido; CastError aparece // quando o preço chega como texto que não vira número. if (erro.name === 'ValidationError' || erro.name === 'CastError') { // O Mongoose embrulha o erro de conversão do preço num ValidationError, // então olhamos o primeiro erro interno para dar uma mensagem clara. const primeiro = erro.name === 'CastError' ? erro : Object.values(erro.errors || {})[0]; const mensagem = primeiro?.name === 'CastError' ? 'Informe o preço como um número.' : primeiro?.message || 'Confira os dados informados.'; return res.status(400).render('instrumento/add', { titulo: 'Cadastrar Instrumento', tipos: TIPOS, valores, erro: mensagem, }); } next(erro); } }); export default router;