From 627ebed775f82b772b0626a79184c69ad16ffaea Mon Sep 17 00:00:00 2001 From: jailton Date: Fri, 16 Jun 2023 03:30:41 +0000 Subject: [PATCH] learning about API REST building netuno-vendas services --- server/services/netunovendas/categoria/get.js | 16 ++++++ server/services/netunovendas/cliente/post.js | 21 ++++++++ .../netunovendas/produto/list/post.js | 52 +++++++++++++++++++ server/services/netunovendas/produto/post.js | 30 +++++++++++ 4 files changed, 119 insertions(+) create mode 100644 server/services/netunovendas/categoria/get.js create mode 100644 server/services/netunovendas/cliente/post.js create mode 100644 server/services/netunovendas/produto/list/post.js create mode 100644 server/services/netunovendas/produto/post.js diff --git a/server/services/netunovendas/categoria/get.js b/server/services/netunovendas/categoria/get.js new file mode 100644 index 0000000..3448a99 --- /dev/null +++ b/server/services/netunovendas/categoria/get.js @@ -0,0 +1,16 @@ +const dbCategorias = _db.query(`SELECT uid, nome FROM categoria`); + +const categorias = _val.list(); + +for (const dbCategoria of dbCategorias) { + categorias.add( + _val.map() + .set("uid", dbCategoria.getString("uid")) + .set("nome", dbCategoria.getString("nome")) + ) +}; + +_out.json( + _val.map() + .set("result",categorias) +); diff --git a/server/services/netunovendas/cliente/post.js b/server/services/netunovendas/cliente/post.js new file mode 100644 index 0000000..cf9f8e5 --- /dev/null +++ b/server/services/netunovendas/cliente/post.js @@ -0,0 +1,21 @@ +const nome = _req.getString("nome"); +const email = _req.getString("email"); +const telefone = _req.getString("telefone"); +const pais = _req.getString("pais"); + +const emailExists = _db.query( + `SELECT CASE WHEN COUNT(1) > 0 THEN TRUE ELSE FALSE END FROM cliente WHERE email = ?::varchar`, + _val.init() + .add(email) + ); + +if (emailExists) { + _header.status(400); + _out.json( + _val.map() + .set("error",true) + .set("message","email already exists!") + ) +}; + + diff --git a/server/services/netunovendas/produto/list/post.js b/server/services/netunovendas/produto/list/post.js new file mode 100644 index 0000000..f1fe448 --- /dev/null +++ b/server/services/netunovendas/produto/list/post.js @@ -0,0 +1,52 @@ +const pagination = _req.getValues("pagination",_val.map()); +const filtro = _req.getValues("filtro",_val.map()); + +const pageSize = 5; + +const page = {start:0,size:pageSize}; + +if(pagination != null) { + page.size = pagination.getInt('pageSize', pageSize) + page.start = (pagination.getInt('current', 1) - 1) * page.size +} + +const queryFilter = _val.list() +let queryWhere = ''; + +if(filtro != null) { + if(filtro.getString("produto.nome") != '') { + queryWhere += ' AND nome LIKE ?' + queryFilter.add(`%${ filtro.getString('nome') }%`) + } +} + +const dbProdutos = _db.query(` + SELECT + produto.nome as produto_nome, + produto.preco, + produto.uid, + categoria.nome as categoria_nome + FROM produto + INNER JOIN categoria ON categoria.id = produto.categoria_id + WHERE 1 = 1 + ${queryWhere} + LIMIT ${page.size} OFFSET ${page.start} +`,queryFilter); + +const resultados = _val.list(); + +for(const dbProduto of dbProdutos) { + resultados.add( + _val.map() + .set("nome", dbProduto.getString("produto_nome")) + .set("preco", dbProduto.getString("preco")) + .set("uid",dbProduto.getString("uid")) + .set("categoria", dbProduto.getString("categoria_nome")) + ) +} + +_out.json( + _val.map() + .set("results",resultados) + .set("page",page) +) diff --git a/server/services/netunovendas/produto/post.js b/server/services/netunovendas/produto/post.js new file mode 100644 index 0000000..7e32e22 --- /dev/null +++ b/server/services/netunovendas/produto/post.js @@ -0,0 +1,30 @@ +const nome = _req.getString("nome"); +const preco = _req.getFloat("preco"); +const categoria = _req.getString("categoria"); + +const dbCategoria = _db.queryFirst(`SELECT id FROM categoria WHERE uid = ?::uuid`,categoria); + +if(dbCategoria == null){ + _header.status(404); + _out.json( + _val.map() + .set("error",true) + .set("message","categoria não encontrada") + ); + _exec.stop(); +} + +_db.execute(` + INSERT INTO produto + (nome, preco, categoria_id) + VALUES + (?::varchar, ?::float, ?::int) +`,nome, preco, dbCategoria.getInt("id")) + +_header.status(201); +_out.json( + _val.map() + .set("result",true) +) + +