diff --git a/.env.local b/.env.local new file mode 100644 index 0000000..7f74b2b --- /dev/null +++ b/.env.local @@ -0,0 +1,4 @@ +user=tdfdb_frg4_user +host=dpg-cjvi8615mpss73b6nuv0-a.oregon-postgres.render.com +database=tdfdb_frg4 +password=yLrlA2j3glQuT2u4k2P4YoUuCF4z56vk' \ No newline at end of file diff --git a/.gitignore b/.gitignore index c2658d7..b360736 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ node_modules/ +.env.local/ \ No newline at end of file diff --git a/docs/codigosUsadosDB b/docs/codigosUsadosDB.txt similarity index 100% rename from docs/codigosUsadosDB rename to docs/codigosUsadosDB.txt diff --git a/docs/codigosUsadosNaEnv.txt b/docs/codigosUsadosNaEnv.txt new file mode 100644 index 0000000..f17f458 --- /dev/null +++ b/docs/codigosUsadosNaEnv.txt @@ -0,0 +1,4 @@ +user: '' +host: '' +database: '' +password: '' \ No newline at end of file diff --git a/src/app.js b/src/app.js index 4ea32cc..36d8814 100644 --- a/src/app.js +++ b/src/app.js @@ -2,12 +2,13 @@ const express = require('express'); const app = express(); const depoimentoRoutes = require('./routes/depoimento-route'); const contatosRoutes = require('./routes/contato-route'); +const oportunidadesRoutes = require('./routes/oportunidades-route'); -app.use(express.urlencoded({extended: true})); +app.use(express.urlencoded({ extended: true })); app.use(express.json()); // Habilita o CORS -app.use(function (req, res, next) { +app.use(function(req, res, next) { res.header('Access-Control-Allow-Origin', '*'); res.header('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept, x-access-token, *'); res.header('Access-Control-Allow-Methods', 'GET, POST, PUT, DELETE, OPTIONS'); @@ -16,4 +17,6 @@ app.use(function (req, res, next) { app.use('/api/depoimentos', depoimentoRoutes); app.use('/api/contatos', contatosRoutes); +app.use('/api/oportunidades', oportunidadesRoutes); + module.exports = app; \ No newline at end of file diff --git a/src/controllers/depoimento-controller.js b/src/controllers/depoimento-controller.js index 22f4cb8..79ecde4 100644 --- a/src/controllers/depoimento-controller.js +++ b/src/controllers/depoimento-controller.js @@ -25,8 +25,7 @@ exports.post = async (req, res) => { } exports.delete = async (req, res) => { try { - const conteudo = req.body; - const resultItem = await depoimentoRepository.excluirDepoimento(conteudo.id); + const resultItem = await depoimentoRepository.excluirDepoimento(req.params.id); res.status(202).json({ data: resultItem}); } catch (error) { console.error(error); @@ -37,7 +36,7 @@ exports.delete = async (req, res) => { exports.put = async(req, res) => { try { var conteudo = req.body; - var resultItem = await depoimentoRepository.atualizarDepoimento(conteudo.depoimento, conteudo.id); + var resultItem = await depoimentoRepository.atualizarDepoimento(req.body.depoimento, req.params.id); res.status(203).json({ data: resultItem}); } catch (error) { console.error(error); diff --git a/src/controllers/oportunidades-controller.js b/src/controllers/oportunidades-controller.js new file mode 100644 index 0000000..62f6077 --- /dev/null +++ b/src/controllers/oportunidades-controller.js @@ -0,0 +1,58 @@ +const { Server } = require('http'); +var oportunidadesRepository = require('../repositories/oportunidades-repository'); + +exports.post = async(req, res) => { + try { + const conteudo = req.body; + delete conteudo.id; + + const resultItem = await oportunidadesRepository.criarOportunidade(conteudo.nome, conteudo.empresa, conteudo.nivel, conteudo.faixa_salarial_de, conteudo.faixa_salarial_ate, conteudo.regime); + res.status(201).json({ message: 'Oportunidade criada!.', data: resultItem }); + + } catch (error) { + console.error(error); + res.status(500).json({ error: 'Ocorreu um erro ao criar a Oportunidade.' }); + } +}; + +exports.get = async(req, res) => { + try { + const resultSelect = await oportunidadesRepository.obterOportunidades(); + res.status(200).send({ message: 'Oportunidade obtida!.', data: resultSelect.rows }); + } catch (error) { + console.error(error); + res.status(500).json({ error: 'Ocorreu um erro ao consultar a oportunidade.' }); + } +}; + +exports.put = async(req, res) => { + try { + var conteudo = req.body; + if (!conteudo.id || !Number.isInteger(conteudo.id)) { + return res.status(400).json({ error: 'O campo id deve ser um número inteiro.' }); + } + + var resultItem = await oportunidadesRepository.atualizarOportunidade( + conteudo.id, conteudo.nome, conteudo.empresa, conteudo.nivel, + conteudo.faixa_salarial_de, conteudo.faixa_salarial_ate, conteudo.regime); + res.status(203).json({ message: 'Oportunidade atualizada!.', data: resultItem }); + } catch (error) { + console.error(error); + res.status(500).json({ error: 'Ocorreu um erro ao atualizar a oportunidade.' }); + } +}; + +exports.delete = async(req, res) => { + try { + const conteudo = req.body; + if (!conteudo.id || !Number.isInteger(conteudo.id)) { + return res.status(400).json({ error: 'O campo id deve ser um número inteiro.' }); + } + + const resultItem = await oportunidadesRepository.excluirOportunidade(conteudo.id); + res.status(202).json({ message: 'Oportunidade excuida!.', data: resultItem }); + } catch (error) { + console.error(error); + res.status(500).json({ error: 'Ocorreu um erro ao excluir a Oportunidade.' }); + } +}; \ No newline at end of file diff --git a/src/repositories/oportunidades-repository.js b/src/repositories/oportunidades-repository.js new file mode 100644 index 0000000..2a0c54b --- /dev/null +++ b/src/repositories/oportunidades-repository.js @@ -0,0 +1,46 @@ +const clientBase = require('../db/db'); + +exports.criarOportunidade = async(nome, empresa, nivel, faixa_salarial_de, faixa_salarial_ate, regime) => { + try { + return clientBase.query(`INSERT INTO oportunidades (nome, empresa, nivel, faixa_salarial_de, faixa_salarial_ate, regime) values ($1, $2, $3, $4, $5, $6) RETURNING id;`, [nome, empresa, nivel, faixa_salarial_de, faixa_salarial_ate, regime]); + } catch (error) { + console.error(error); + res.status(400).json({ error: 'Ocorreu um erro ao inserir a oportunidade no DB.' }); + throw error; + } +}; + +exports.obterOportunidades = async() => { + try { + return clientBase.query(`SELECT * FROM oportunidades ORDER BY id`); + } catch (error) { + console.error(error); + throw error; + } +}; + +exports.atualizarOportunidade = async( + id, nome, empresa, nivel, faixa_salarial_de, faixa_salarial_ate, regime) => { + try { + return clientBase.query(`UPDATE oportunidades + SET nome = $1, + empresa = $2, + nivel = $3, + faixa_salarial_de = $4, + faixa_salarial_ate = $5, + regime = $6 + WHERE id = $7`, [nome, empresa, nivel, faixa_salarial_de, faixa_salarial_ate, regime, id]); + } catch (error) { + console.error(error); + res.status(400).json({ error: 'Ocorreu um erro ao atualizar a oportunidade no DB.' }); + } +}; + +exports.excluirOportunidade = async(id) => { + try { + return clientBase.query(`DELETE FROM oportunidades WHERE id = $1`, [id]); + } catch (error) { + console.error(error); + res.status(400).json({ error: 'Ocorreu um erro ao excluir a oportunidade no DB.' }); + } +}; \ No newline at end of file diff --git a/src/routes/depoimento-route.js b/src/routes/depoimento-route.js index ca68ad3..dcce0db 100644 --- a/src/routes/depoimento-route.js +++ b/src/routes/depoimento-route.js @@ -4,8 +4,8 @@ const depoimentoController = require('../controllers/depoimento-controller'); router.get('', depoimentoController.get); router.post('', depoimentoController.post); -router.delete('', depoimentoController.delete); -router.put('', depoimentoController.put); +router.delete('/:id', depoimentoController.delete); +router.put('/:id', depoimentoController.put); module.exports = router; diff --git a/src/routes/oportunidades-route.js b/src/routes/oportunidades-route.js new file mode 100644 index 0000000..18b6fbf --- /dev/null +++ b/src/routes/oportunidades-route.js @@ -0,0 +1,10 @@ +const express = require('express'); +const router = express.Router(); +const oportunidadesController = require('../controllers/oportunidades-controller'); + +router.get('/get', oportunidadesController.get); +router.post('/post', oportunidadesController.post); +router.delete('/delete', oportunidadesController.delete); +router.put('/put', oportunidadesController.put); + +module.exports = router; \ No newline at end of file