diff --git a/pom.xml b/pom.xml
index 05b24bb..94071da 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,5 +14,10 @@
slf4j-simple
1.7.21
+
+ org.postgresql
+ postgresql
+ 42.2.16
+
diff --git a/src/main/java/dao/ProdutoDAO.java b/src/main/java/dao/ProdutoDAO.java
index e1a237f..cc99821 100644
--- a/src/main/java/dao/ProdutoDAO.java
+++ b/src/main/java/dao/ProdutoDAO.java
@@ -1,123 +1,129 @@
package dao;
import model.Produto;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.ObjectOutputStream;
-import java.util.ArrayList;
-import java.util.List;
+import java.sql.*;
public class ProdutoDAO {
- private List produtos;
- private int maxId = 0;
+ private Connection conexao;
- private File file;
- private FileOutputStream fos;
- private ObjectOutputStream outputFile;
+ public ProdutoDAO() throws Exception {
+ String driverName = "org.postgresql.Driver";
- public int getMaxId() {
- return maxId;
+ String server = "localhost";
+ int porta = 5432;
+
+ String username = "postgres";
+ String password = "1234";
+
+ String mydatabase = "postgres";
+
+ String url = "jdbc:postgresql://" + server + ":" + porta + "/" + mydatabase;
+ Class.forName(driverName);
+
+ conexao = DriverManager.getConnection(url, username, password);
}
- public ProdutoDAO(String filename) throws IOException {
- file = new File(filename);
- produtos = new ArrayList();
- if (file.exists()) {
- readFromFile();
- }
-
+ public int getRandomId() {
+ return (int) (Math.random() * (1000));
}
- public void add(Produto produto) {
+ public boolean close() {
+ boolean status = false;
+
try {
- produtos.add(produto);
- this.maxId = (produto.getId() > this.maxId) ? produto.getId() : this.maxId;
- this.saveToFile();
- } catch (Exception e) {
- System.out.println("ERRO ao gravar o produto '" + produto.getDescricao() + "' no disco!");
+ conexao.close();
+ status = true;
+ } catch (SQLException e) {
+ System.err.println(e.getMessage());
}
+ return status;
}
- public Produto get(int id) {
- for (Produto produto : produtos) {
- if (id == produto.getId()) {
- return produto;
+ public boolean inserirProduto(Produto produto) {
+ boolean status = false;
+
+ try {
+ Statement st = conexao.createStatement();
+ st.executeUpdate("INSERT INTO produto (id, descricao, preco, quantidade, dataFabricacao, dataValidade) "
+ + "VALUES (" + produto.getId() + ", '" + produto.getDescricao() + "', '" + produto.getPreco()
+ + "', '" + produto.getQuant() + "', '" + produto.getDataFabricacao() + "', '"
+ + produto.getDataValidade() + "');");
+ st.close();
+ status = true;
+ } catch (SQLException u) {
+ throw new RuntimeException(u);
+ }
+ return status;
+ }
+
+ public boolean atualizarProduto(Produto produto) {
+ boolean status = false;
+ try {
+ Statement st = conexao.createStatement();
+ String sql = "UPDATE produto SET descricao = '" + produto.getDescricao() + "', preco = '"
+ + produto.getPreco() + "', quantidade = '" + produto.getQuant() + "', dataFabricacao = '"
+ + produto.getDataFabricacao() + "', dataValidade = '" + produto.getDataValidade() + "'"
+ + " WHERE id = " + produto.getId();
+ st.executeUpdate(sql);
+ st.close();
+ status = true;
+ } catch (SQLException u) {
+ throw new RuntimeException(u);
+ }
+ return status;
+ }
+
+ public boolean excluirProduto(int id) {
+ boolean status = false;
+ try {
+ Statement st = conexao.createStatement();
+ st.executeUpdate("DELETE FROM produto WHERE id = " + id);
+ st.close();
+ status = true;
+ } catch (SQLException u) {
+ throw new RuntimeException(u);
+ }
+ return status;
+ }
+
+ public Produto[] getProdutos() {
+ Produto[] produtos = null;
+
+ try {
+ Statement st = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
+ ResultSet rs = st.executeQuery("SELECT * FROM produto");
+ if (rs.next()) {
+ rs.last();
+ produtos = new Produto[rs.getRow()];
+ rs.beforeFirst();
+
+ for (int i = 0; rs.next(); i++) {
+ produtos[i] = new Produto(rs.getInt("id"), rs.getString("descricao"), rs.getFloat("preco"),
+ rs.getInt("quantidade")/* , rs.getDate("dataFabricacao"), rs.getDate("dataFabricacao") */);
+ }
}
+ st.close();
+ } catch (Exception e) {
+ System.err.println(e.getMessage());
}
- return null;
- }
-
- public void update(Produto p) {
- int index = produtos.indexOf(p);
- if (index != -1) {
- produtos.set(index, p);
- this.saveToFile();
- }
- }
-
- public void remove(Produto p) {
- int index = produtos.indexOf(p);
- if (index != -1) {
- produtos.remove(index);
- this.saveToFile();
- }
- }
-
- public List getAll() {
return produtos;
}
- private List readFromFile() {
- produtos.clear();
+ public Produto getProduto(int id) {
Produto produto = null;
- try (FileInputStream fis = new FileInputStream(file);
- ObjectInputStream inputFile = new ObjectInputStream(fis)) {
- while (fis.available() > 0) {
- produto = (Produto) inputFile.readObject();
- produtos.add(produto);
- maxId = (produto.getId() > maxId) ? produto.getId() : maxId;
- }
- } catch (Exception e) {
- System.out.println("ERRO ao gravar produto no disco!");
- e.printStackTrace();
- }
- return produtos;
- }
-
- private void saveToFile() {
try {
- fos = new FileOutputStream(file, false);
- outputFile = new ObjectOutputStream(fos);
-
- for (Produto produto : produtos) {
- outputFile.writeObject(produto);
+ Statement st = conexao.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
+ ResultSet rs = st.executeQuery("SELECT * FROM produto WHERE produto.id = " + id);
+ if (rs.first()) {
+ produto = new Produto(rs.getInt("id"), rs.getString("descricao"), rs.getFloat("preco"),
+ rs.getInt("quantidade")/* , rs.getDate("dataFabricacao"), rs.getDate("dataFabricacao") */);
}
- outputFile.flush();
- this.close();
- } catch (Exception e) {
- System.out.println("ERRO ao gravar produto no disco!");
- e.printStackTrace();
+ st.close();
+ } catch (SQLException u) {
+ throw new RuntimeException(u);
}
- }
- private void close() throws IOException {
- outputFile.close();
- fos.close();
- }
-
- @Override
- protected void finalize() throws Throwable {
- try {
- this.saveToFile();
- this.close();
- } catch (Exception e) {
- System.out.println("ERRO ao salvar a base de dados no disco!");
- e.printStackTrace();
- }
+ return produto;
}
}
diff --git a/src/main/java/model/Produto.java b/src/main/java/model/Produto.java
index 286a324..a8181fa 100644
--- a/src/main/java/model/Produto.java
+++ b/src/main/java/model/Produto.java
@@ -24,6 +24,15 @@ public class Produto implements Serializable {
dataValidade = LocalDate.now().plusMonths(6); // o default é uma validade de 6 meses.
}
+ public Produto(int id, String descricao, float preco, int quantidade) {
+ setId(id);
+ setDescricao(descricao);
+ setPreco(preco);
+ setQuant(quantidade);
+ dataFabricacao = LocalDateTime.now();
+ dataValidade = LocalDate.now().plusMonths(6); // o default é uma validade de 6 meses.
+ }
+
public Produto(int id, String descricao, float preco, int quantidade, LocalDateTime fabricacao, LocalDate v) {
setId(id);
setDescricao(descricao);
diff --git a/src/main/java/service/ProdutoService.java b/src/main/java/service/ProdutoService.java
index 29c1bc7..223f084 100644
--- a/src/main/java/service/ProdutoService.java
+++ b/src/main/java/service/ProdutoService.java
@@ -1,9 +1,7 @@
package service;
-import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
-
import dao.ProdutoDAO;
import model.Produto;
import spark.Request;
@@ -14,9 +12,9 @@ public class ProdutoService {
public ProdutoService() {
try {
- produtoDAO = new ProdutoDAO("produto.dat");
- } catch (IOException e) {
- System.out.println(e.getMessage());
+ produtoDAO = new ProdutoDAO();
+ } catch (Exception e) {
+ e.printStackTrace();
}
}
@@ -24,14 +22,16 @@ public class ProdutoService {
String descricao = request.queryParams("descricao");
float preco = Float.parseFloat(request.queryParams("preco"));
int quantidade = Integer.parseInt(request.queryParams("quantidade"));
- LocalDateTime dataFabricacao = LocalDateTime.parse(request.queryParams("dataFabricacao"));
- LocalDate dataValidade = LocalDate.parse(request.queryParams("dataValidade"));
+ // LocalDateTime dataFabricacao =
+ // LocalDateTime.parse(request.queryParams("dataFabricacao"));
+ // LocalDate dataValidade =
+ // LocalDate.parse(request.queryParams("dataValidade"));
- int id = produtoDAO.getMaxId() + 1;
+ int id = produtoDAO.getRandomId();
- Produto produto = new Produto(id, descricao, preco, quantidade, dataFabricacao, dataValidade);
+ Produto produto = new Produto(id, descricao, preco, quantidade/* , dataFabricacao, dataValidade */);
- produtoDAO.add(produto);
+ produtoDAO.inserirProduto(produto);
response.status(201); // 201 Created
return id;
@@ -40,7 +40,7 @@ public class ProdutoService {
public Object get(Request request, Response response) {
int id = Integer.parseInt(request.params(":id"));
- Produto produto = (Produto) produtoDAO.get(id);
+ Produto produto = (Produto) produtoDAO.getProduto(id);
if (produto != null) {
response.header("Content-Type", "application/xml");
@@ -60,7 +60,7 @@ public class ProdutoService {
public Object update(Request request, Response response) {
int id = Integer.parseInt(request.params(":id"));
- Produto produto = (Produto) produtoDAO.get(id);
+ Produto produto = (Produto) produtoDAO.getProduto(id);
if (produto != null) {
produto.setDescricao(request.queryParams("descricao"));
@@ -69,7 +69,7 @@ public class ProdutoService {
produto.setDataFabricacao(LocalDateTime.parse(request.queryParams("dataFabricacao")));
produto.setDataValidade(LocalDate.parse(request.queryParams("dataValidade")));
- produtoDAO.update(produto);
+ produtoDAO.atualizarProduto(produto);
return id;
} else {
@@ -82,11 +82,11 @@ public class ProdutoService {
public Object remove(Request request, Response response) {
int id = Integer.parseInt(request.params(":id"));
- Produto produto = (Produto) produtoDAO.get(id);
+ Produto produto = (Produto) produtoDAO.getProduto(id);
if (produto != null) {
- produtoDAO.remove(produto);
+ produtoDAO.excluirProduto(id);
response.status(200); // success
return id;
@@ -98,7 +98,7 @@ public class ProdutoService {
public Object getAll(Request request, Response response) {
StringBuffer returnValue = new StringBuffer("");
- for (Produto produto : produtoDAO.getAll()) {
+ for (Produto produto : produtoDAO.getProdutos()) {
returnValue.append("\n\n" + "\t" + produto.getId() + "\n" + "\t"
+ produto.getDescricao() + "\n" + "\t" + produto.getPreco() + "\n"
+ "\t" + produto.getQuant() + "\n" + "\t"