quantidades) {
+ this.quantidades = quantidades;
+ }
+
+ //adicionar produto
+ public void adicionar_produto(Produto produto, int quantidade){
+ produto.reduzir_estoque(quantidade);
+ produtos.add(produto);
+ quantidades.add(quantidade);
+ }
+
+ public void calcular_total(){
+ float total=0;
+ int cont = 0;
+ for(Produto prod : produtos){
+ total = total + (prod.getPreco()*quantidades.get(cont));
+ cont++;
+ }
+ System.out.println("O total do pedido foi: " + total);
+ }
+
+ public void finalizar_pedido(){
+ System.out.println("Os itens do seu carrinho são: ");
+ int contar = 0;
+ for(Produto prod : produtos){
+ System.out.println("Nome do produto: " + prod.getNome() + "\nQuantidade: " + quantidades.get(contar) + "\nPreço unitário: " + prod.getPreco() + "\n");
+ contar++;
+ }
+ }
+}
diff --git a/Ex01-git+POO/Produto.java b/Ex01-git+POO/Produto.java
new file mode 100644
index 0000000..6ad8b16
--- /dev/null
+++ b/Ex01-git+POO/Produto.java
@@ -0,0 +1,53 @@
+package exercicio1;
+
+public class Produto {
+ private int id;
+ private String nome;
+ private float preco;
+ private int quantidade_estoque;
+
+ //get e set
+
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id){
+ this.id = id;
+ }
+
+ public String getNome(){
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public float getPreco(){
+ return preco;
+ }
+
+ public void setPreco(float preco){
+ this.preco = preco;
+ }
+
+ public int getQuantidade_estoque(){
+ return quantidade_estoque;
+ }
+
+ public void setQuantidade_estoque(int qe){
+ this.quantidade_estoque = qe;
+ }
+
+ //outros metodos
+ public void reduzir_estoque(int quantidade){
+ this.quantidade_estoque = quantidade_estoque - quantidade;
+ }
+
+ public void exibir_detalhes(){
+ System.out.println("Exibindo detalhes do produto...");
+ System.out.println("O id do produto é: " + this.id + "\nO nome do produto é: " + this.nome + "\nO preço unitário do produto é: " + this.preco + "\nA quantidade disponível do produto é: " + this.quantidade_estoque + "\n");
+ }
+}
diff --git a/Ex02-git+POO/Briefing.md b/Ex02-git+POO/Briefing.md
index 044c127..7f79d41 100644
--- a/Ex02-git+POO/Briefing.md
+++ b/Ex02-git+POO/Briefing.md
@@ -1,70 +1,70 @@
-# Situação-Problema: Sistema de Reservas para um Hotel
-
-## Contexto
-Um hotel chamado **Hotel Estrela do Mar** deseja informatizar o sistema de reservas para melhorar a gestão de quartos, hóspedes e reservas. Cada aluno será responsável por criar uma classe que representa um elemento do sistema. As classes devem ser interdependentes, ou seja, uma classe depende dos dados fornecidos pelas outras para funcionar corretamente.
-
-## Objetivo
-Desenvolver três classes interdependentes, sendo:
-
-1. **Quarto**: Representa os quartos disponíveis no hotel.
-2. **Hospede**: Armazena as informações dos hóspedes que fazem reservas.
-3. **Reserva**: Controla o processo de reserva, relacionando hóspedes e quartos.
-
-A interação entre essas classes permitirá que os alunos simulem um processo completo de reserva, onde um hóspede escolhe um quarto, e o sistema registra a reserva e atualiza o status de disponibilidade do quarto.
-
----
-
-## Distribuição das Classes (Cada aluno cria uma classe)
-
-### Classe Quarto
-- **Responsável:** Aluno 1
-- **Atributos**:
- - `id` (identificador do quarto)
- - `tipo` (tipo do quarto, ex.: solteiro, casal, família)
- - `preco_diaria` (preço da diária)
- - `disponivel` (indica se o quarto está disponível: `True` ou `False`)
-- **Métodos**:
- - `marcar_indisponivel()`: Altera o status de disponibilidade para `False`.
- - `marcar_disponivel()`: Altera o status de disponibilidade para `True`.
- - `exibir_detalhes()`: Mostra os dados do quarto.
-
-### Classe Hospede
-- **Responsável:** Aluno 2
-- **Atributos**:
- - `id` (identificador do hóspede)
- - `nome` (nome completo do hóspede)
- - `telefone` (contato do hóspede)
-- **Métodos**:
- - `exibir_hospede()`: Mostra os dados do hóspede.
-
-### Classe Reserva
-- **Responsável:** Aluno 3
-- **Atributos**:
- - `id` (identificador da reserva)
- - `hospede` (objeto da classe Hospede)
- - `quarto` (objeto da classe Quarto)
- - `diarias` (quantidade de diárias reservadas)
-- **Métodos**:
- - `calcular_total()`: Retorna o valor total da reserva (diárias × preço da diária do quarto).
- - `finalizar_reserva()`: Atualiza o status do quarto para indisponível.
- - `exibir_resumo()`: Mostra os detalhes da reserva (hóspede, quarto e valor total).
-
----
-
-## Resultados Esperados
-1. **Criação das classes pelos alunos**:
- - Cada aluno será responsável por criar e implementar sua classe com base no modelo fornecido.
-2. **Simulação de uma reserva completa**:
- - **Exemplo de quarto**:
- - Quarto 1: Solteiro, R$ 100 por diária, disponível.
- - **Exemplo de hóspede**:
- - Hóspede: Maria Oliveira, telefone `11 99999-1234`.
- - **Exemplo de reserva**:
- - Maria Oliveira reserva o quarto 1 por 3 diárias.
-3. **Interação entre as classes**:
- - O sistema calcula o valor total da reserva (R$ 300) e atualiza o status do quarto para indisponível.
- - Exibe o resumo da reserva:
- - Hóspede: Maria Oliveira
- - Quarto: Solteiro
- - Valor total: R$ 300
-
+# Situação-Problema: Sistema de Reservas para um Hotel
+
+## Contexto
+Um hotel chamado **Hotel Estrela do Mar** deseja informatizar o sistema de reservas para melhorar a gestão de quartos, hóspedes e reservas. Cada aluno será responsável por criar uma classe que representa um elemento do sistema. As classes devem ser interdependentes, ou seja, uma classe depende dos dados fornecidos pelas outras para funcionar corretamente.
+
+## Objetivo
+Desenvolver três classes interdependentes, sendo:
+
+1. **Quarto**: Representa os quartos disponíveis no hotel.
+2. **Hospede**: Armazena as informações dos hóspedes que fazem reservas.
+3. **Reserva**: Controla o processo de reserva, relacionando hóspedes e quartos.
+
+A interação entre essas classes permitirá que os alunos simulem um processo completo de reserva, onde um hóspede escolhe um quarto, e o sistema registra a reserva e atualiza o status de disponibilidade do quarto.
+
+---
+
+## Distribuição das Classes (Cada aluno cria uma classe)
+
+### Classe Quarto
+- **Responsável:** Aluno 1
+- **Atributos**:
+ - `id` (identificador do quarto)
+ - `tipo` (tipo do quarto, ex.: solteiro, casal, família)
+ - `preco_diaria` (preço da diária)
+ - `disponivel` (indica se o quarto está disponível: `True` ou `False`)
+- **Métodos**:
+ - `marcar_indisponivel()`: Altera o status de disponibilidade para `False`.
+ - `marcar_disponivel()`: Altera o status de disponibilidade para `True`.
+ - `exibir_detalhes()`: Mostra os dados do quarto.
+
+### Classe Hospede
+- **Responsável:** Aluno 2
+- **Atributos**:
+ - `id` (identificador do hóspede)
+ - `nome` (nome completo do hóspede)
+ - `telefone` (contato do hóspede)
+- **Métodos**:
+ - `exibir_hospede()`: Mostra os dados do hóspede.
+
+### Classe Reserva
+- **Responsável:** Aluno 3
+- **Atributos**:
+ - `id` (identificador da reserva)
+ - `hospede` (objeto da classe Hospede)
+ - `quarto` (objeto da classe Quarto)
+ - `diarias` (quantidade de diárias reservadas)
+- **Métodos**:
+ - `calcular_total()`: Retorna o valor total da reserva (diárias × preço da diária do quarto).
+ - `finalizar_reserva()`: Atualiza o status do quarto para indisponível.
+ - `exibir_resumo()`: Mostra os detalhes da reserva (hóspede, quarto e valor total).
+
+---
+
+## Resultados Esperados
+1. **Criação das classes pelos alunos**:
+ - Cada aluno será responsável por criar e implementar sua classe com base no modelo fornecido.
+2. **Simulação de uma reserva completa**:
+ - **Exemplo de quarto**:
+ - Quarto 1: Solteiro, R$ 100 por diária, disponível.
+ - **Exemplo de hóspede**:
+ - Hóspede: Maria Oliveira, telefone `11 99999-1234`.
+ - **Exemplo de reserva**:
+ - Maria Oliveira reserva o quarto 1 por 3 diárias.
+3. **Interação entre as classes**:
+ - O sistema calcula o valor total da reserva (R$ 300) e atualiza o status do quarto para indisponível.
+ - Exibe o resumo da reserva:
+ - Hóspede: Maria Oliveira
+ - Quarto: Solteiro
+ - Valor total: R$ 300
+
diff --git a/Ex02-git+POO/Hospede.java b/Ex02-git+POO/Hospede.java
new file mode 100644
index 0000000..6e03321
--- /dev/null
+++ b/Ex02-git+POO/Hospede.java
@@ -0,0 +1,34 @@
+public class Hospede {
+ private int id;
+ private String nome;
+ private String telefone;
+
+ public int getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public String getNome() {
+ return nome;
+ }
+
+ public void setNome(String nome) {
+ this.nome = nome;
+ }
+
+ public String getTelefone() {
+ return telefone;
+ }
+
+ public void setTelefone(String telefone) {
+ this.telefone = telefone;
+
+
+ }
+ public void exibir_hospede(){
+ System.out.println("O id do Hóspede é: " + this.id + " O nome do cliente é: " + this.nome + " O telefone do Hóspede é: " + this.telefone );
+ }
+}
diff --git a/Ex02-git+POO/Main.java b/Ex02-git+POO/Main.java
new file mode 100644
index 0000000..969436d
--- /dev/null
+++ b/Ex02-git+POO/Main.java
@@ -0,0 +1,33 @@
+import java.util.Scanner;
+
+public class Main {
+
+ public static void main(String[] args) {
+
+ Scanner entrada = new Scanner(System.in);
+
+ Quarto quarto1 = new Quarto();
+ Hospede hospede1 = new Hospede();
+ Reserva reserva1 = new Reserva();
+
+ System.out.println("Qual o nome do hóspede?");
+ hospede1.setNome(entrada.nextLine());
+ System.out.println("Digite o número de telefone do hóspede:");
+ hospede1.setTelefone(entrada.nextLine());
+ System.out.println("Tipo do quarto(Solteiro ou Casal):");
+ quarto1.setTipo(entrada.nextLine());
+ System.out.println("Qual o preço da diaria?");
+ quarto1.setPreco_diaria(entrada.nextFloat());
+ System.out.println("Quantas diárias:");
+ reserva1.setDiaria(entrada.nextInt());
+
+
+ reserva1.setHospede(hospede1.getNome());
+ reserva1.setQuarto(quarto1.getTipo());
+ reserva1.calcularTotal(quarto1.getPreco_diaria(), reserva1.getDiaria());
+
+ System.out.println("Informações da reserva:\nHóspede: " + hospede1.getNome() + "\nQuarto: " + quarto1.getTipo() + "\nValor total: " + reserva1.valorTotal);
+
+ }
+
+}
diff --git a/Ex02-git+POO/Quarto.java b/Ex02-git+POO/Quarto.java
new file mode 100644
index 0000000..6994558
--- /dev/null
+++ b/Ex02-git+POO/Quarto.java
@@ -0,0 +1,61 @@
+import java.net.StandardSocketOptions;
+
+public class Quarto {
+
+ private int idQuarto;
+
+ public String tipo;
+
+ public float preco_diaria;
+
+ public boolean disponivel;
+
+ public int getIdQuarto() {
+ return idQuarto;
+ }
+
+ public void setIdQuarto(int idQuarto) {
+ this.idQuarto = idQuarto;
+ }
+
+ public String getTipo() {
+ return tipo;
+ }
+
+ public void setTipo(String tipo) {
+ this.tipo = tipo;
+ }
+
+ public float getPreco_diaria() {
+ return preco_diaria;
+ }
+
+ public void setPreco_diaria(float preco_diaria) {
+ this.preco_diaria = preco_diaria;
+ }
+
+ public boolean isDisponivel() {
+ return disponivel;
+ }
+
+ public void setDisponivel(boolean disponivel) {
+ this.disponivel = disponivel;
+ }
+
+ public void marcarIndisponivel(boolean disponivel) {
+ this.disponivel = false;
+
+ }
+
+ public void marcarDisponivel(boolean disponivel) {
+ this.disponivel = true;
+
+ }
+ public void exibirDetalhes() {
+ System.out.println("Id do quarto: " + getIdQuarto());
+ System.out.println("Tipo do quarto: " + getTipo());
+ System.out.println("Preço do quarto: " + preco_diaria);
+ System.out.println("Disponibilidade do quarto: " + disponivel);
+
+ }
+}
diff --git a/Ex02-git+POO/Reserva.java b/Ex02-git+POO/Reserva.java
new file mode 100644
index 0000000..68babf4
--- /dev/null
+++ b/Ex02-git+POO/Reserva.java
@@ -0,0 +1,75 @@
+public class Reserva extends Quarto{
+ private int idReserva;
+ String hospede;
+ String quarto;
+ int diaria;
+ float precoDiaria;
+ float valorTotal;
+
+ public Reserva() {
+ }
+
+ public Reserva(int idReserva, String hospede, String quarto, int diaria, float precoDiaria) {
+ this.idReserva = idReserva;
+ this.hospede = hospede;
+ this.quarto = quarto;
+ this.diaria = diaria;
+ this.precoDiaria = super.preco_diaria;
+ }
+
+ public int getIdReserva() {
+ return idReserva;
+ }
+
+ public void setIdReserva(int idReserva) {
+ this.idReserva = idReserva;
+ }
+
+ public String getHospede() {
+ return hospede;
+ }
+
+ public void setHospede(String hospede) {
+ this.hospede = hospede;
+ }
+
+ public String getQuarto() {
+ return quarto;
+ }
+
+ public void setQuarto(String quarto) {
+ this.quarto = quarto;
+ }
+
+ public int getDiaria() {
+ return diaria;
+ }
+
+ public void setDiaria(int diaria) {
+ this.diaria = diaria;
+ }
+
+ public float getPrecoDiaria() {
+ return precoDiaria;
+ }
+
+ public void setPrecoDiaria(float precoDiaria) {
+ this.precoDiaria = precoDiaria;
+ }
+
+ public void calcularTotal(float precoDiaria, int diaria) {
+ valorTotal = precoDiaria * diaria;
+ }
+
+ public void finalizarReserva() {
+ if (isDisponivel()) {
+ marcarIndisponivel(true);
+ System.out.println("Reserva finalizada o quarto " + quarto + " agora está indisponível.");
+ }
+
+
+
+ }
+}
+
+
diff --git a/Ex03-java+servlets/.classpath b/Ex03-java+servlets/.classpath
new file mode 100644
index 0000000..7d0c7d2
--- /dev/null
+++ b/Ex03-java+servlets/.classpath
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex03-java+servlets/.gitignore b/Ex03-java+servlets/.gitignore
new file mode 100644
index 0000000..84c048a
--- /dev/null
+++ b/Ex03-java+servlets/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/Ex03-java+servlets/.project b/Ex03-java+servlets/.project
new file mode 100644
index 0000000..0b165c8
--- /dev/null
+++ b/Ex03-java+servlets/.project
@@ -0,0 +1,31 @@
+
+
+ HelloWoldServlet
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.wst.jsdt.core.jsNature
+
+
diff --git a/Ex03-java+servlets/.settings/.jsdtscope b/Ex03-java+servlets/.settings/.jsdtscope
new file mode 100644
index 0000000..76c2d63
--- /dev/null
+++ b/Ex03-java+servlets/.settings/.jsdtscope
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex03-java+servlets/.settings/org.eclipse.jdt.core.prefs b/Ex03-java+servlets/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..23fa13b
--- /dev/null
+++ b/Ex03-java+servlets/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/Ex03-java+servlets/.settings/org.eclipse.wst.common.component b/Ex03-java+servlets/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..fa7eec0
--- /dev/null
+++ b/Ex03-java+servlets/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
diff --git a/Ex03-java+servlets/.settings/org.eclipse.wst.common.project.facet.core.xml b/Ex03-java+servlets/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..fe0ece7
--- /dev/null
+++ b/Ex03-java+servlets/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex03-java+servlets/.settings/org.eclipse.wst.jsdt.ui.superType.container b/Ex03-java+servlets/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/Ex03-java+servlets/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/Ex03-java+servlets/.settings/org.eclipse.wst.jsdt.ui.superType.name b/Ex03-java+servlets/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/Ex03-java+servlets/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/Ex03-java+servlets/src/main/java/hello/Hello.java b/Ex03-java+servlets/src/main/java/hello/Hello.java
new file mode 100644
index 0000000..7cd2f38
--- /dev/null
+++ b/Ex03-java+servlets/src/main/java/hello/Hello.java
@@ -0,0 +1,21 @@
+package hello;
+
+import java.io.IOException;
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet("/hello")
+public class Hello extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ response.setContentType("text/html");
+ PrintWriter out = response.getWriter();
+ out.println("Olá, Mundo! Este é um Servlet no Eclipse.
");
+ }
+}
diff --git a/Ex03-java+servlets/src/main/webapp/META-INF/MANIFEST.MF b/Ex03-java+servlets/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/Ex03-java+servlets/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/Ex04-java+servlets+html/.classpath b/Ex04-java+servlets+html/.classpath
new file mode 100644
index 0000000..7d0c7d2
--- /dev/null
+++ b/Ex04-java+servlets+html/.classpath
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex04-java+servlets+html/.gitignore b/Ex04-java+servlets+html/.gitignore
new file mode 100644
index 0000000..84c048a
--- /dev/null
+++ b/Ex04-java+servlets+html/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/Ex04-java+servlets+html/.project b/Ex04-java+servlets+html/.project
new file mode 100644
index 0000000..bf1f867
--- /dev/null
+++ b/Ex04-java+servlets+html/.project
@@ -0,0 +1,31 @@
+
+
+ RenderizaHTML
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.wst.jsdt.core.jsNature
+
+
diff --git a/Ex04-java+servlets+html/.settings/.jsdtscope b/Ex04-java+servlets+html/.settings/.jsdtscope
new file mode 100644
index 0000000..76c2d63
--- /dev/null
+++ b/Ex04-java+servlets+html/.settings/.jsdtscope
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex04-java+servlets+html/.settings/org.eclipse.jdt.core.prefs b/Ex04-java+servlets+html/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..23fa13b
--- /dev/null
+++ b/Ex04-java+servlets+html/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/Ex04-java+servlets+html/.settings/org.eclipse.wst.common.component b/Ex04-java+servlets+html/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..63f8f02
--- /dev/null
+++ b/Ex04-java+servlets+html/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex04-java+servlets+html/.settings/org.eclipse.wst.common.project.facet.core.xml b/Ex04-java+servlets+html/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..fe0ece7
--- /dev/null
+++ b/Ex04-java+servlets+html/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex04-java+servlets+html/.settings/org.eclipse.wst.jsdt.ui.superType.container b/Ex04-java+servlets+html/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/Ex04-java+servlets+html/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/Ex04-java+servlets+html/.settings/org.eclipse.wst.jsdt.ui.superType.name b/Ex04-java+servlets+html/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/Ex04-java+servlets+html/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/Ex04-java+servlets+html/src/main/java/hello/Hello.java b/Ex04-java+servlets+html/src/main/java/hello/Hello.java
new file mode 100644
index 0000000..7be4588
--- /dev/null
+++ b/Ex04-java+servlets+html/src/main/java/hello/Hello.java
@@ -0,0 +1,21 @@
+package hello;
+
+import java.io.IOException;
+
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+@WebServlet("/renderizar")
+public class Hello extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ request.getRequestDispatcher("/index.html").forward(request, response);
+ }
+}
\ No newline at end of file
diff --git a/Ex04-java+servlets+html/src/main/webapp/META-INF/MANIFEST.MF b/Ex04-java+servlets+html/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/Ex04-java+servlets+html/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/Ex04-java+servlets+html/src/main/webapp/index.html b/Ex04-java+servlets+html/src/main/webapp/index.html
new file mode 100644
index 0000000..be064a3
--- /dev/null
+++ b/Ex04-java+servlets+html/src/main/webapp/index.html
@@ -0,0 +1,12 @@
+
+
+
+
+
+ Página do Servlet
+
+
+ Bem-vindo ao Servlet!
+ Este é um exemplo de como um Servlet pode renderizar um HTML.
+
+
diff --git a/Ex05-java+servlets+forms/.classpath b/Ex05-java+servlets+forms/.classpath
new file mode 100644
index 0000000..7d0c7d2
--- /dev/null
+++ b/Ex05-java+servlets+forms/.classpath
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex05-java+servlets+forms/.gitignore b/Ex05-java+servlets+forms/.gitignore
new file mode 100644
index 0000000..84c048a
--- /dev/null
+++ b/Ex05-java+servlets+forms/.gitignore
@@ -0,0 +1 @@
+/build/
diff --git a/Ex05-java+servlets+forms/.project b/Ex05-java+servlets+forms/.project
new file mode 100644
index 0000000..5991cf0
--- /dev/null
+++ b/Ex05-java+servlets+forms/.project
@@ -0,0 +1,31 @@
+
+
+ html+forms
+
+
+
+
+
+ org.eclipse.jdt.core.javabuilder
+
+
+
+
+ org.eclipse.wst.common.project.facet.core.builder
+
+
+
+
+ org.eclipse.wst.validation.validationbuilder
+
+
+
+
+
+ org.eclipse.jem.workbench.JavaEMFNature
+ org.eclipse.wst.common.modulecore.ModuleCoreNature
+ org.eclipse.wst.common.project.facet.core.nature
+ org.eclipse.jdt.core.javanature
+ org.eclipse.wst.jsdt.core.jsNature
+
+
diff --git a/Ex05-java+servlets+forms/.settings/.jsdtscope b/Ex05-java+servlets+forms/.settings/.jsdtscope
new file mode 100644
index 0000000..76c2d63
--- /dev/null
+++ b/Ex05-java+servlets+forms/.settings/.jsdtscope
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex05-java+servlets+forms/.settings/org.eclipse.jdt.core.prefs b/Ex05-java+servlets+forms/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..23fa13b
--- /dev/null
+++ b/Ex05-java+servlets+forms/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=21
+org.eclipse.jdt.core.compiler.compliance=21
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=21
diff --git a/Ex05-java+servlets+forms/.settings/org.eclipse.wst.common.component b/Ex05-java+servlets+forms/.settings/org.eclipse.wst.common.component
new file mode 100644
index 0000000..fbc270e
--- /dev/null
+++ b/Ex05-java+servlets+forms/.settings/org.eclipse.wst.common.component
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex05-java+servlets+forms/.settings/org.eclipse.wst.common.project.facet.core.xml b/Ex05-java+servlets+forms/.settings/org.eclipse.wst.common.project.facet.core.xml
new file mode 100644
index 0000000..fe0ece7
--- /dev/null
+++ b/Ex05-java+servlets+forms/.settings/org.eclipse.wst.common.project.facet.core.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/Ex05-java+servlets+forms/.settings/org.eclipse.wst.jsdt.ui.superType.container b/Ex05-java+servlets+forms/.settings/org.eclipse.wst.jsdt.ui.superType.container
new file mode 100644
index 0000000..3bd5d0a
--- /dev/null
+++ b/Ex05-java+servlets+forms/.settings/org.eclipse.wst.jsdt.ui.superType.container
@@ -0,0 +1 @@
+org.eclipse.wst.jsdt.launching.baseBrowserLibrary
\ No newline at end of file
diff --git a/Ex05-java+servlets+forms/.settings/org.eclipse.wst.jsdt.ui.superType.name b/Ex05-java+servlets+forms/.settings/org.eclipse.wst.jsdt.ui.superType.name
new file mode 100644
index 0000000..05bd71b
--- /dev/null
+++ b/Ex05-java+servlets+forms/.settings/org.eclipse.wst.jsdt.ui.superType.name
@@ -0,0 +1 @@
+Window
\ No newline at end of file
diff --git a/Ex05-java+servlets+forms/src/main/java/hello/Hello.java b/Ex05-java+servlets+forms/src/main/java/hello/Hello.java
new file mode 100644
index 0000000..5e050d5
--- /dev/null
+++ b/Ex05-java+servlets+forms/src/main/java/hello/Hello.java
@@ -0,0 +1,36 @@
+package hello;
+
+import java.io.IOException;
+
+import java.io.PrintWriter;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.annotation.WebServlet;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
+@WebServlet("/processar")
+public class Hello extends HttpServlet {
+ private static final long serialVersionUID = 1L;
+
+ protected void doGet(HttpServletRequest request, HttpServletResponse response)
+ throws ServletException, IOException {
+ // Captura o valor do parâmetro "nome" enviado pelo formulário
+ String nome = request.getParameter("nome");
+
+ // Configura a resposta para ser HTML
+ response.setContentType("text/html");
+
+ // Escreve a resposta no navegador
+ response.getWriter().println("Olá, " + nome + "!
");
+ response.getWriter().println("Seu nome foi recebido com sucesso.
");
+ }
+}
diff --git a/Ex05-java+servlets+forms/src/main/webapp/META-INF/MANIFEST.MF b/Ex05-java+servlets+forms/src/main/webapp/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..254272e
--- /dev/null
+++ b/Ex05-java+servlets+forms/src/main/webapp/META-INF/MANIFEST.MF
@@ -0,0 +1,3 @@
+Manifest-Version: 1.0
+Class-Path:
+
diff --git a/Ex05-java+servlets+forms/src/main/webapp/index.html b/Ex05-java+servlets+forms/src/main/webapp/index.html
new file mode 100644
index 0000000..88d0168
--- /dev/null
+++ b/Ex05-java+servlets+forms/src/main/webapp/index.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+ Formulário
+
+
+ Envio de Parâmetro GET
+
+
+
diff --git a/Ex06-java+spring+swagger/.gitattributes b/Ex06-java+spring+swagger/.gitattributes
new file mode 100644
index 0000000..3b41682
--- /dev/null
+++ b/Ex06-java+spring+swagger/.gitattributes
@@ -0,0 +1,2 @@
+/mvnw text eol=lf
+*.cmd text eol=crlf
diff --git a/Ex06-java+spring+swagger/.gitignore b/Ex06-java+spring+swagger/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/Ex06-java+spring+swagger/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/Ex06-java+spring+swagger/.mvn/wrapper/maven-wrapper.properties b/Ex06-java+spring+swagger/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..d58dfb7
--- /dev/null
+++ b/Ex06-java+spring+swagger/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+wrapperVersion=3.3.2
+distributionType=only-script
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
diff --git a/Ex06-java+spring+swagger/mvnw b/Ex06-java+spring+swagger/mvnw
new file mode 100644
index 0000000..19529dd
--- /dev/null
+++ b/Ex06-java+spring+swagger/mvnw
@@ -0,0 +1,259 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.3.2
+#
+# Optional ENV vars
+# -----------------
+# JAVA_HOME - location of a JDK home dir, required when download maven via java source
+# MVNW_REPOURL - repo url base for downloading maven distribution
+# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
+# ----------------------------------------------------------------------------
+
+set -euf
+[ "${MVNW_VERBOSE-}" != debug ] || set -x
+
+# OS specific support.
+native_path() { printf %s\\n "$1"; }
+case "$(uname)" in
+CYGWIN* | MINGW*)
+ [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
+ native_path() { cygpath --path --windows "$1"; }
+ ;;
+esac
+
+# set JAVACMD and JAVACCMD
+set_java_home() {
+ # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
+ if [ -n "${JAVA_HOME-}" ]; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACCMD="$JAVA_HOME/jre/sh/javac"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ JAVACCMD="$JAVA_HOME/bin/javac"
+
+ if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
+ echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
+ echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
+ return 1
+ fi
+ fi
+ else
+ JAVACMD="$(
+ 'set' +e
+ 'unset' -f command 2>/dev/null
+ 'command' -v java
+ )" || :
+ JAVACCMD="$(
+ 'set' +e
+ 'unset' -f command 2>/dev/null
+ 'command' -v javac
+ )" || :
+
+ if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
+ echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
+ return 1
+ fi
+ fi
+}
+
+# hash string like Java String::hashCode
+hash_string() {
+ str="${1:-}" h=0
+ while [ -n "$str" ]; do
+ char="${str%"${str#?}"}"
+ h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
+ str="${str#?}"
+ done
+ printf %x\\n $h
+}
+
+verbose() { :; }
+[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
+
+die() {
+ printf %s\\n "$1" >&2
+ exit 1
+}
+
+trim() {
+ # MWRAPPER-139:
+ # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
+ # Needed for removing poorly interpreted newline sequences when running in more
+ # exotic environments such as mingw bash on Windows.
+ printf "%s" "${1}" | tr -d '[:space:]'
+}
+
+# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
+while IFS="=" read -r key value; do
+ case "${key-}" in
+ distributionUrl) distributionUrl=$(trim "${value-}") ;;
+ distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
+ esac
+done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+
+case "${distributionUrl##*/}" in
+maven-mvnd-*bin.*)
+ MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
+ case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
+ *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
+ :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
+ :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
+ :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
+ *)
+ echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
+ distributionPlatform=linux-amd64
+ ;;
+ esac
+ distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
+ ;;
+maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
+*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
+esac
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
+[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
+distributionUrlName="${distributionUrl##*/}"
+distributionUrlNameMain="${distributionUrlName%.*}"
+distributionUrlNameMain="${distributionUrlNameMain%-bin}"
+MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
+MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
+
+exec_maven() {
+ unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
+ exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
+}
+
+if [ -d "$MAVEN_HOME" ]; then
+ verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+ exec_maven "$@"
+fi
+
+case "${distributionUrl-}" in
+*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
+*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
+esac
+
+# prepare tmp dir
+if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
+ clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
+ trap clean HUP INT TERM EXIT
+else
+ die "cannot create temp dir"
+fi
+
+mkdir -p -- "${MAVEN_HOME%/*}"
+
+# Download and Install Apache Maven
+verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+verbose "Downloading from: $distributionUrl"
+verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+# select .zip or .tar.gz
+if ! command -v unzip >/dev/null; then
+ distributionUrl="${distributionUrl%.zip}.tar.gz"
+ distributionUrlName="${distributionUrl##*/}"
+fi
+
+# verbose opt
+__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
+[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
+
+# normalize http auth
+case "${MVNW_PASSWORD:+has-password}" in
+'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+esac
+
+if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
+ verbose "Found wget ... using wget"
+ wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
+elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
+ verbose "Found curl ... using curl"
+ curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
+elif set_java_home; then
+ verbose "Falling back to use Java to download"
+ javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
+ targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
+ cat >"$javaSource" <<-END
+ public class Downloader extends java.net.Authenticator
+ {
+ protected java.net.PasswordAuthentication getPasswordAuthentication()
+ {
+ return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
+ }
+ public static void main( String[] args ) throws Exception
+ {
+ setDefault( new Downloader() );
+ java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
+ }
+ }
+ END
+ # For Cygwin/MinGW, switch paths to Windows format before running javac and java
+ verbose " - Compiling Downloader.java ..."
+ "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
+ verbose " - Running Downloader.java ..."
+ "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
+fi
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+if [ -n "${distributionSha256Sum-}" ]; then
+ distributionSha256Result=false
+ if [ "$MVN_CMD" = mvnd.sh ]; then
+ echo "Checksum validation is not supported for maven-mvnd." >&2
+ echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+ exit 1
+ elif command -v sha256sum >/dev/null; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
+ distributionSha256Result=true
+ fi
+ elif command -v shasum >/dev/null; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
+ distributionSha256Result=true
+ fi
+ else
+ echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
+ echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+ exit 1
+ fi
+ if [ $distributionSha256Result = false ]; then
+ echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
+ echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
+ exit 1
+ fi
+fi
+
+# unzip and move
+if command -v unzip >/dev/null; then
+ unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
+else
+ tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
+fi
+printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
+mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
+
+clean || :
+exec_maven "$@"
diff --git a/Ex06-java+spring+swagger/mvnw.cmd b/Ex06-java+spring+swagger/mvnw.cmd
new file mode 100644
index 0000000..249bdf3
--- /dev/null
+++ b/Ex06-java+spring+swagger/mvnw.cmd
@@ -0,0 +1,149 @@
+<# : batch portion
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Apache Maven Wrapper startup batch script, version 3.3.2
+@REM
+@REM Optional ENV vars
+@REM MVNW_REPOURL - repo url base for downloading maven distribution
+@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
+@REM ----------------------------------------------------------------------------
+
+@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
+@SET __MVNW_CMD__=
+@SET __MVNW_ERROR__=
+@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
+@SET PSModulePath=
+@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
+ IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
+)
+@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
+@SET __MVNW_PSMODULEP_SAVE=
+@SET __MVNW_ARG0_NAME__=
+@SET MVNW_USERNAME=
+@SET MVNW_PASSWORD=
+@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
+@echo Cannot start maven from wrapper >&2 && exit /b 1
+@GOTO :EOF
+: end batch / begin powershell #>
+
+$ErrorActionPreference = "Stop"
+if ($env:MVNW_VERBOSE -eq "true") {
+ $VerbosePreference = "Continue"
+}
+
+# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
+$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
+if (!$distributionUrl) {
+ Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
+}
+
+switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
+ "maven-mvnd-*" {
+ $USE_MVND = $true
+ $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
+ $MVN_CMD = "mvnd.cmd"
+ break
+ }
+ default {
+ $USE_MVND = $false
+ $MVN_CMD = $script -replace '^mvnw','mvn'
+ break
+ }
+}
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
+if ($env:MVNW_REPOURL) {
+ $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
+ $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
+}
+$distributionUrlName = $distributionUrl -replace '^.*/',''
+$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
+$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
+if ($env:MAVEN_USER_HOME) {
+ $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
+}
+$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
+$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
+
+if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
+ Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+ Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
+ exit $?
+}
+
+if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
+ Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
+}
+
+# prepare tmp dir
+$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
+$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
+$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
+trap {
+ if ($TMP_DOWNLOAD_DIR.Exists) {
+ try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+ catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+ }
+}
+
+New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
+
+# Download and Install Apache Maven
+Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+Write-Verbose "Downloading from: $distributionUrl"
+Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+$webclient = New-Object System.Net.WebClient
+if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
+ $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
+}
+[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
+if ($distributionSha256Sum) {
+ if ($USE_MVND) {
+ Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
+ }
+ Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
+ if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
+ Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
+ }
+}
+
+# unzip and move
+Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
+Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
+try {
+ Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
+} catch {
+ if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
+ Write-Error "fail to move MAVEN_HOME"
+ }
+} finally {
+ try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+ catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+}
+
+Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
diff --git a/Ex06-java+spring+swagger/pom.xml b/Ex06-java+spring+swagger/pom.xml
new file mode 100644
index 0000000..25f66d2
--- /dev/null
+++ b/Ex06-java+spring+swagger/pom.xml
@@ -0,0 +1,92 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.2
+
+
+ com.swagger
+ example
+ 0.0.1-SNAPSHOT
+ example
+ demo for first spring first endpoint
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 17
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.5.0
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
diff --git a/Ex06-java+spring+swagger/src/main/java/com/swagger/example/ExampleApplication.java b/Ex06-java+spring+swagger/src/main/java/com/swagger/example/ExampleApplication.java
new file mode 100644
index 0000000..e865a79
--- /dev/null
+++ b/Ex06-java+spring+swagger/src/main/java/com/swagger/example/ExampleApplication.java
@@ -0,0 +1,13 @@
+package com.swagger.example;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class ExampleApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(ExampleApplication.class, args);
+ }
+
+}
diff --git a/Ex06-java+spring+swagger/src/main/java/com/swagger/example/FirstEndpoint.java b/Ex06-java+spring+swagger/src/main/java/com/swagger/example/FirstEndpoint.java
new file mode 100644
index 0000000..bf3b579
--- /dev/null
+++ b/Ex06-java+spring+swagger/src/main/java/com/swagger/example/FirstEndpoint.java
@@ -0,0 +1,13 @@
+package com.swagger.example;
+
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+@RestController
+public class FirstEndpoint {
+
+ @GetMapping("/hello")
+ public String getInformations(){
+ return "Bom dia do primeiro endpoint";
+ }
+}
diff --git a/Ex06-java+spring+swagger/src/main/resources/application.yml b/Ex06-java+spring+swagger/src/main/resources/application.yml
new file mode 100644
index 0000000..e69de29
diff --git a/Ex06-java+spring+swagger/src/test/java/com/swagger/example/ExampleApplicationTests.java b/Ex06-java+spring+swagger/src/test/java/com/swagger/example/ExampleApplicationTests.java
new file mode 100644
index 0000000..463f5bd
--- /dev/null
+++ b/Ex06-java+spring+swagger/src/test/java/com/swagger/example/ExampleApplicationTests.java
@@ -0,0 +1,13 @@
+package com.swagger.example;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class ExampleApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/Ex07-MVC/BancoDeProdutos.java b/Ex07-MVC/BancoDeProdutos.java
new file mode 100644
index 0000000..fd3bc76
--- /dev/null
+++ b/Ex07-MVC/BancoDeProdutos.java
@@ -0,0 +1,46 @@
+import java.util.ArrayList;
+import java.util.List;
+
+public class BancoDeProdutos {
+ private List produtos;
+
+ public BancoDeProdutos() {
+ this.produtos = new ArrayList<>();
+ }
+
+ // Insere um novo produto na lista
+ public void insert(Produto p) {
+ produtos.add(p);
+ }
+
+ // Busca um produto pelo ID
+ public Produto findOne(int id) {
+ for (Produto p : produtos) {
+ if (p.getIdProduto() == id) {
+ return p;
+ }
+ }
+ return null; // Retorna null se não encontrar
+ }
+
+ // Retorna todos os produtos cadastrados
+ public List findAll() {
+ return new ArrayList<>(produtos);
+ }
+
+ // Atualiza um produto existente na lista
+ public boolean update(Produto p) {
+ for (int i = 0; i < produtos.size(); i++) {
+ if (produtos.get(i).getIdProduto() == p.getIdProduto()) {
+ produtos.set(i, p);
+ return true; // Retorno indicando que a atualização foi feita
+ }
+ }
+ return false; // Retorna falso se o produto não foi encontrado
+ }
+
+ // Remove um produto pelo ID
+ public boolean delete(int id) {
+ return produtos.removeIf(p -> p.getIdProduto() == id);
+ }
+}
diff --git a/Ex07-MVC/Produto.java b/Ex07-MVC/Produto.java
new file mode 100644
index 0000000..ce4d1f9
--- /dev/null
+++ b/Ex07-MVC/Produto.java
@@ -0,0 +1,77 @@
+public class Produto {
+ private int idProduto;
+ private String nomeProduto;
+ private String descricao;
+ private double preco;
+ private int quantidade;
+ private String pontoDeVenda;
+
+ // Construtor
+ public Produto(int idProduto, String nomeProduto, String descricao, double preco, int quantidade, String pontoDeVenda) {
+ this.idProduto = idProduto;
+ this.nomeProduto = nomeProduto;
+ this.descricao = descricao;
+ this.preco = preco;
+ this.quantidade = quantidade;
+ this.pontoDeVenda = pontoDeVenda;
+ }
+
+ // Getters e Setters
+ public int getIdProduto() {
+ return idProduto;
+ }
+
+ public void setIdProduto(int idProduto) {
+ this.idProduto = idProduto;
+ }
+
+ public String getNomeProduto() {
+ return nomeProduto;
+ }
+
+ public void setNomeProduto(String nomeProduto) {
+ this.nomeProduto = nomeProduto;
+ }
+
+ public String getDescricao() {
+ return descricao;
+ }
+
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+
+ public double getPreco() {
+ return preco;
+ }
+
+ public void setPreco(double preco) {
+ this.preco = preco;
+ }
+
+ public int getQuantidade() {
+ return quantidade;
+ }
+
+ public void setQuantidade(int quantidade) {
+ this.quantidade = quantidade;
+ }
+
+ public String getPontoDeVenda() {
+ return pontoDeVenda;
+ }
+
+ public void setPontoDeVenda(String pontoDeVenda) {
+ this.pontoDeVenda = pontoDeVenda;
+ }
+
+ // Método para exibir informações do produto
+ public void exibirInformacoes() {
+ System.out.println("ID: " + idProduto);
+ System.out.println("Nome: " + nomeProduto);
+ System.out.println("Descrição: " + descricao);
+ System.out.println("Preço: R$ " + preco);
+ System.out.println("Quantidade: " + quantidade);
+ System.out.println("Ponto de Venda: " + pontoDeVenda);
+ }
+}
diff --git a/Ex08-CrudSemBanco/.gitattributes b/Ex08-CrudSemBanco/.gitattributes
new file mode 100644
index 0000000..3b41682
--- /dev/null
+++ b/Ex08-CrudSemBanco/.gitattributes
@@ -0,0 +1,2 @@
+/mvnw text eol=lf
+*.cmd text eol=crlf
diff --git a/Ex08-CrudSemBanco/.gitignore b/Ex08-CrudSemBanco/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/Ex08-CrudSemBanco/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/Ex08-CrudSemBanco/.mvn/wrapper/maven-wrapper.properties b/Ex08-CrudSemBanco/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..d58dfb7
--- /dev/null
+++ b/Ex08-CrudSemBanco/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+wrapperVersion=3.3.2
+distributionType=only-script
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
diff --git a/Ex08-CrudSemBanco/mvnw b/Ex08-CrudSemBanco/mvnw
new file mode 100644
index 0000000..19529dd
--- /dev/null
+++ b/Ex08-CrudSemBanco/mvnw
@@ -0,0 +1,259 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.3.2
+#
+# Optional ENV vars
+# -----------------
+# JAVA_HOME - location of a JDK home dir, required when download maven via java source
+# MVNW_REPOURL - repo url base for downloading maven distribution
+# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
+# ----------------------------------------------------------------------------
+
+set -euf
+[ "${MVNW_VERBOSE-}" != debug ] || set -x
+
+# OS specific support.
+native_path() { printf %s\\n "$1"; }
+case "$(uname)" in
+CYGWIN* | MINGW*)
+ [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
+ native_path() { cygpath --path --windows "$1"; }
+ ;;
+esac
+
+# set JAVACMD and JAVACCMD
+set_java_home() {
+ # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
+ if [ -n "${JAVA_HOME-}" ]; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACCMD="$JAVA_HOME/jre/sh/javac"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ JAVACCMD="$JAVA_HOME/bin/javac"
+
+ if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
+ echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
+ echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
+ return 1
+ fi
+ fi
+ else
+ JAVACMD="$(
+ 'set' +e
+ 'unset' -f command 2>/dev/null
+ 'command' -v java
+ )" || :
+ JAVACCMD="$(
+ 'set' +e
+ 'unset' -f command 2>/dev/null
+ 'command' -v javac
+ )" || :
+
+ if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
+ echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
+ return 1
+ fi
+ fi
+}
+
+# hash string like Java String::hashCode
+hash_string() {
+ str="${1:-}" h=0
+ while [ -n "$str" ]; do
+ char="${str%"${str#?}"}"
+ h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
+ str="${str#?}"
+ done
+ printf %x\\n $h
+}
+
+verbose() { :; }
+[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
+
+die() {
+ printf %s\\n "$1" >&2
+ exit 1
+}
+
+trim() {
+ # MWRAPPER-139:
+ # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
+ # Needed for removing poorly interpreted newline sequences when running in more
+ # exotic environments such as mingw bash on Windows.
+ printf "%s" "${1}" | tr -d '[:space:]'
+}
+
+# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
+while IFS="=" read -r key value; do
+ case "${key-}" in
+ distributionUrl) distributionUrl=$(trim "${value-}") ;;
+ distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
+ esac
+done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+
+case "${distributionUrl##*/}" in
+maven-mvnd-*bin.*)
+ MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
+ case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
+ *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
+ :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
+ :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
+ :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
+ *)
+ echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
+ distributionPlatform=linux-amd64
+ ;;
+ esac
+ distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
+ ;;
+maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
+*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
+esac
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
+[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
+distributionUrlName="${distributionUrl##*/}"
+distributionUrlNameMain="${distributionUrlName%.*}"
+distributionUrlNameMain="${distributionUrlNameMain%-bin}"
+MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
+MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
+
+exec_maven() {
+ unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
+ exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
+}
+
+if [ -d "$MAVEN_HOME" ]; then
+ verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+ exec_maven "$@"
+fi
+
+case "${distributionUrl-}" in
+*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
+*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
+esac
+
+# prepare tmp dir
+if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
+ clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
+ trap clean HUP INT TERM EXIT
+else
+ die "cannot create temp dir"
+fi
+
+mkdir -p -- "${MAVEN_HOME%/*}"
+
+# Download and Install Apache Maven
+verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+verbose "Downloading from: $distributionUrl"
+verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+# select .zip or .tar.gz
+if ! command -v unzip >/dev/null; then
+ distributionUrl="${distributionUrl%.zip}.tar.gz"
+ distributionUrlName="${distributionUrl##*/}"
+fi
+
+# verbose opt
+__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
+[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
+
+# normalize http auth
+case "${MVNW_PASSWORD:+has-password}" in
+'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+esac
+
+if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
+ verbose "Found wget ... using wget"
+ wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
+elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
+ verbose "Found curl ... using curl"
+ curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
+elif set_java_home; then
+ verbose "Falling back to use Java to download"
+ javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
+ targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
+ cat >"$javaSource" <<-END
+ public class Downloader extends java.net.Authenticator
+ {
+ protected java.net.PasswordAuthentication getPasswordAuthentication()
+ {
+ return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
+ }
+ public static void main( String[] args ) throws Exception
+ {
+ setDefault( new Downloader() );
+ java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
+ }
+ }
+ END
+ # For Cygwin/MinGW, switch paths to Windows format before running javac and java
+ verbose " - Compiling Downloader.java ..."
+ "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
+ verbose " - Running Downloader.java ..."
+ "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
+fi
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+if [ -n "${distributionSha256Sum-}" ]; then
+ distributionSha256Result=false
+ if [ "$MVN_CMD" = mvnd.sh ]; then
+ echo "Checksum validation is not supported for maven-mvnd." >&2
+ echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+ exit 1
+ elif command -v sha256sum >/dev/null; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
+ distributionSha256Result=true
+ fi
+ elif command -v shasum >/dev/null; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
+ distributionSha256Result=true
+ fi
+ else
+ echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
+ echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+ exit 1
+ fi
+ if [ $distributionSha256Result = false ]; then
+ echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
+ echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
+ exit 1
+ fi
+fi
+
+# unzip and move
+if command -v unzip >/dev/null; then
+ unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
+else
+ tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
+fi
+printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
+mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
+
+clean || :
+exec_maven "$@"
diff --git a/Ex08-CrudSemBanco/mvnw.cmd b/Ex08-CrudSemBanco/mvnw.cmd
new file mode 100644
index 0000000..249bdf3
--- /dev/null
+++ b/Ex08-CrudSemBanco/mvnw.cmd
@@ -0,0 +1,149 @@
+<# : batch portion
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Apache Maven Wrapper startup batch script, version 3.3.2
+@REM
+@REM Optional ENV vars
+@REM MVNW_REPOURL - repo url base for downloading maven distribution
+@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
+@REM ----------------------------------------------------------------------------
+
+@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
+@SET __MVNW_CMD__=
+@SET __MVNW_ERROR__=
+@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
+@SET PSModulePath=
+@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
+ IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
+)
+@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
+@SET __MVNW_PSMODULEP_SAVE=
+@SET __MVNW_ARG0_NAME__=
+@SET MVNW_USERNAME=
+@SET MVNW_PASSWORD=
+@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
+@echo Cannot start maven from wrapper >&2 && exit /b 1
+@GOTO :EOF
+: end batch / begin powershell #>
+
+$ErrorActionPreference = "Stop"
+if ($env:MVNW_VERBOSE -eq "true") {
+ $VerbosePreference = "Continue"
+}
+
+# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
+$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
+if (!$distributionUrl) {
+ Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
+}
+
+switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
+ "maven-mvnd-*" {
+ $USE_MVND = $true
+ $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
+ $MVN_CMD = "mvnd.cmd"
+ break
+ }
+ default {
+ $USE_MVND = $false
+ $MVN_CMD = $script -replace '^mvnw','mvn'
+ break
+ }
+}
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
+if ($env:MVNW_REPOURL) {
+ $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
+ $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
+}
+$distributionUrlName = $distributionUrl -replace '^.*/',''
+$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
+$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
+if ($env:MAVEN_USER_HOME) {
+ $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
+}
+$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
+$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
+
+if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
+ Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+ Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
+ exit $?
+}
+
+if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
+ Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
+}
+
+# prepare tmp dir
+$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
+$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
+$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
+trap {
+ if ($TMP_DOWNLOAD_DIR.Exists) {
+ try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+ catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+ }
+}
+
+New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
+
+# Download and Install Apache Maven
+Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+Write-Verbose "Downloading from: $distributionUrl"
+Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+$webclient = New-Object System.Net.WebClient
+if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
+ $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
+}
+[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
+if ($distributionSha256Sum) {
+ if ($USE_MVND) {
+ Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
+ }
+ Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
+ if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
+ Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
+ }
+}
+
+# unzip and move
+Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
+Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
+try {
+ Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
+} catch {
+ if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
+ Write-Error "fail to move MAVEN_HOME"
+ }
+} finally {
+ try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+ catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+}
+
+Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
diff --git a/Ex08-CrudSemBanco/pom.xml b/Ex08-CrudSemBanco/pom.xml
new file mode 100644
index 0000000..398bc57
--- /dev/null
+++ b/Ex08-CrudSemBanco/pom.xml
@@ -0,0 +1,84 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.2
+
+
+ com.senai
+ crudSemBanco
+ 0.0.1-SNAPSHOT
+ crudSemBanco
+ Eh um projeto de crud sem o banco
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 17
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.5.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
diff --git a/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/CrudSemBancoApplication.java b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/CrudSemBancoApplication.java
new file mode 100644
index 0000000..27bc845
--- /dev/null
+++ b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/CrudSemBancoApplication.java
@@ -0,0 +1,13 @@
+package com.senai.crudSemBanco;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CrudSemBancoApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(CrudSemBancoApplication.class, args);
+ }
+
+}
diff --git a/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/banco/BancoDeProdutos.java b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/banco/BancoDeProdutos.java
new file mode 100644
index 0000000..b4ecbc2
--- /dev/null
+++ b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/banco/BancoDeProdutos.java
@@ -0,0 +1,50 @@
+package com.senai.crudSemBanco.banco;
+
+import com.senai.crudSemBanco.model.Produto;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BancoDeProdutos {
+ private List produtos;
+
+ public BancoDeProdutos() {
+ this.produtos = new ArrayList<>();
+ }
+
+ // Insere um novo produto na lista
+ public void insert(Produto p) {
+ produtos.add(p);
+ }
+
+ // Busca um produto pelo ID
+ public Produto findOne(int id) {
+ for (Produto p : produtos) {
+ if (p.getIdProduto() == id) {
+ return p;
+ }
+ }
+ return null; // Retorna null se não encontrar
+ }
+
+ // Retorna todos os produtos cadastrados
+ public List findAll() {
+ return new ArrayList<>(produtos);
+ }
+
+ // Atualiza um produto existente na lista
+ public boolean update(Produto p) {
+ for (int i = 0; i < produtos.size(); i++) {
+ if (produtos.get(i).getIdProduto() == p.getIdProduto()) {
+ produtos.set(i, p);
+ return true; // Retorno indicando que a atualização foi feita
+ }
+ }
+ return false; // Retorna falso se o produto não foi encontrado
+ }
+
+ // Remove um produto pelo ID
+ public boolean delete(int id) {
+ return produtos.removeIf(p -> p.getIdProduto() == id);
+ }
+}
diff --git a/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/controller/ProdutoController.java b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/controller/ProdutoController.java
new file mode 100644
index 0000000..543f632
--- /dev/null
+++ b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/controller/ProdutoController.java
@@ -0,0 +1,19 @@
+package com.senai.crudSemBanco.controller;
+
+import com.senai.crudSemBanco.banco.BancoDeProdutos;
+import com.senai.crudSemBanco.model.Produto;
+
+import java.util.List;
+
+public class ProdutoController {
+
+ BancoDeProdutos bc = new BancoDeProdutos();
+
+ public void inserirNoBanco(Produto p) {
+ bc.insert(p);
+ }
+
+ public List pegarTodosOsProdutos() {
+ return bc.findAll();
+ }
+}
diff --git a/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/model/Produto.java b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/model/Produto.java
new file mode 100644
index 0000000..6c10d75
--- /dev/null
+++ b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/model/Produto.java
@@ -0,0 +1,79 @@
+package com.senai.crudSemBanco.model;
+
+public class Produto {
+ private int idProduto;
+ private String nomeProduto;
+ private String descricao;
+ private double preco;
+ private int quantidade;
+ private String pontoDeVenda;
+
+ // Construtor
+ public Produto(int idProduto, String nomeProduto, String descricao, double preco, int quantidade, String pontoDeVenda) {
+ this.idProduto = idProduto;
+ this.nomeProduto = nomeProduto;
+ this.descricao = descricao;
+ this.preco = preco;
+ this.quantidade = quantidade;
+ this.pontoDeVenda = pontoDeVenda;
+ }
+
+ // Getters e Setters
+ public int getIdProduto() {
+ return idProduto;
+ }
+
+ public void setIdProduto(int idProduto) {
+ this.idProduto = idProduto;
+ }
+
+ public String getNomeProduto() {
+ return nomeProduto;
+ }
+
+ public void setNomeProduto(String nomeProduto) {
+ this.nomeProduto = nomeProduto;
+ }
+
+ public String getDescricao() {
+ return descricao;
+ }
+
+ public void setDescricao(String descricao) {
+ this.descricao = descricao;
+ }
+
+ public double getPreco() {
+ return preco;
+ }
+
+ public void setPreco(double preco) {
+ this.preco = preco;
+ }
+
+ public int getQuantidade() {
+ return quantidade;
+ }
+
+ public void setQuantidade(int quantidade) {
+ this.quantidade = quantidade;
+ }
+
+ public String getPontoDeVenda() {
+ return pontoDeVenda;
+ }
+
+ public void setPontoDeVenda(String pontoDeVenda) {
+ this.pontoDeVenda = pontoDeVenda;
+ }
+
+ // Método para exibir informações do produto
+ public void exibirInformacoes() {
+ System.out.println("ID: " + idProduto);
+ System.out.println("Nome: " + nomeProduto);
+ System.out.println("Descrição: " + descricao);
+ System.out.println("Preço: R$ " + preco);
+ System.out.println("Quantidade: " + quantidade);
+ System.out.println("Ponto de Venda: " + pontoDeVenda);
+ }
+}
diff --git a/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/view/ProdutoView.java b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/view/ProdutoView.java
new file mode 100644
index 0000000..708d5e7
--- /dev/null
+++ b/Ex08-CrudSemBanco/src/main/java/com/senai/crudSemBanco/view/ProdutoView.java
@@ -0,0 +1,27 @@
+package com.senai.crudSemBanco.view;
+
+import com.senai.crudSemBanco.controller.ProdutoController;
+import com.senai.crudSemBanco.model.Produto;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+public class ProdutoView {
+
+ ProdutoController pc = new ProdutoController();
+
+ @GetMapping("/produto")
+ public List getAllProdutos(){
+ return pc.pegarTodosOsProdutos();
+ }
+
+ @PostMapping("/produto")
+ public String postNovoProduto(@RequestBody Produto p){
+ pc.inserirNoBanco(p);
+ return "Sucesso";
+ }
+}
diff --git a/Ex08-CrudSemBanco/src/main/resources/application.properties b/Ex08-CrudSemBanco/src/main/resources/application.properties
new file mode 100644
index 0000000..74e7ef9
--- /dev/null
+++ b/Ex08-CrudSemBanco/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.application.name=crudSemBanco
diff --git a/Ex08-CrudSemBanco/src/test/java/com/senai/crudSemBanco/CrudSemBancoApplicationTests.java b/Ex08-CrudSemBanco/src/test/java/com/senai/crudSemBanco/CrudSemBancoApplicationTests.java
new file mode 100644
index 0000000..5f5dfe2
--- /dev/null
+++ b/Ex08-CrudSemBanco/src/test/java/com/senai/crudSemBanco/CrudSemBancoApplicationTests.java
@@ -0,0 +1,13 @@
+package com.senai.crudSemBanco;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class CrudSemBancoApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/Ex09-calculo-preciso/.idea/.gitignore b/Ex09-calculo-preciso/.idea/.gitignore
new file mode 100644
index 0000000..26d3352
--- /dev/null
+++ b/Ex09-calculo-preciso/.idea/.gitignore
@@ -0,0 +1,3 @@
+# Default ignored files
+/shelf/
+/workspace.xml
diff --git a/Ex09-calculo-preciso/.idea/compiler.xml b/Ex09-calculo-preciso/.idea/compiler.xml
new file mode 100644
index 0000000..a792e4f
--- /dev/null
+++ b/Ex09-calculo-preciso/.idea/compiler.xml
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/.idea/encodings.xml b/Ex09-calculo-preciso/.idea/encodings.xml
new file mode 100644
index 0000000..63e9001
--- /dev/null
+++ b/Ex09-calculo-preciso/.idea/encodings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/.idea/jarRepositories.xml b/Ex09-calculo-preciso/.idea/jarRepositories.xml
new file mode 100644
index 0000000..712ab9d
--- /dev/null
+++ b/Ex09-calculo-preciso/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/.idea/jpa-buddy.xml b/Ex09-calculo-preciso/.idea/jpa-buddy.xml
new file mode 100644
index 0000000..898e07a
--- /dev/null
+++ b/Ex09-calculo-preciso/.idea/jpa-buddy.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/.idea/misc.xml b/Ex09-calculo-preciso/.idea/misc.xml
new file mode 100644
index 0000000..ebc9d76
--- /dev/null
+++ b/Ex09-calculo-preciso/.idea/misc.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/.idea/uiDesigner.xml b/Ex09-calculo-preciso/.idea/uiDesigner.xml
new file mode 100644
index 0000000..2b63946
--- /dev/null
+++ b/Ex09-calculo-preciso/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+ -
+
+
+
+
+ -
+
+
+ -
+
+
+
+
+
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/.idea/vcs.xml b/Ex09-calculo-preciso/.idea/vcs.xml
new file mode 100644
index 0000000..6c0b863
--- /dev/null
+++ b/Ex09-calculo-preciso/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/mvnw b/Ex09-calculo-preciso/mvnw
new file mode 100644
index 0000000..66df285
--- /dev/null
+++ b/Ex09-calculo-preciso/mvnw
@@ -0,0 +1,308 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.2.0
+#
+# Required ENV vars:
+# ------------------
+# JAVA_HOME - location of a JDK home dir
+#
+# Optional ENV vars
+# -----------------
+# MAVEN_OPTS - parameters passed to the Java VM when running Maven
+# e.g. to debug Maven itself, use
+# set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+# MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+# ----------------------------------------------------------------------------
+
+if [ -z "$MAVEN_SKIP_RC" ] ; then
+
+ if [ -f /usr/local/etc/mavenrc ] ; then
+ . /usr/local/etc/mavenrc
+ fi
+
+ if [ -f /etc/mavenrc ] ; then
+ . /etc/mavenrc
+ fi
+
+ if [ -f "$HOME/.mavenrc" ] ; then
+ . "$HOME/.mavenrc"
+ fi
+
+fi
+
+# OS specific support. $var _must_ be set to either true or false.
+cygwin=false;
+darwin=false;
+mingw=false
+case "$(uname)" in
+ CYGWIN*) cygwin=true ;;
+ MINGW*) mingw=true;;
+ Darwin*) darwin=true
+ # Use /usr/libexec/java_home if available, otherwise fall back to /Library/Java/Home
+ # See https://developer.apple.com/library/mac/qa/qa1170/_index.html
+ if [ -z "$JAVA_HOME" ]; then
+ if [ -x "/usr/libexec/java_home" ]; then
+ JAVA_HOME="$(/usr/libexec/java_home)"; export JAVA_HOME
+ else
+ JAVA_HOME="/Library/Java/Home"; export JAVA_HOME
+ fi
+ fi
+ ;;
+esac
+
+if [ -z "$JAVA_HOME" ] ; then
+ if [ -r /etc/gentoo-release ] ; then
+ JAVA_HOME=$(java-config --jre-home)
+ fi
+fi
+
+# For Cygwin, ensure paths are in UNIX format before anything is touched
+if $cygwin ; then
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=$(cygpath --unix "$JAVA_HOME")
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=$(cygpath --path --unix "$CLASSPATH")
+fi
+
+# For Mingw, ensure paths are in UNIX format before anything is touched
+if $mingw ; then
+ [ -n "$JAVA_HOME" ] && [ -d "$JAVA_HOME" ] &&
+ JAVA_HOME="$(cd "$JAVA_HOME" || (echo "cannot cd into $JAVA_HOME."; exit 1); pwd)"
+fi
+
+if [ -z "$JAVA_HOME" ]; then
+ javaExecutable="$(which javac)"
+ if [ -n "$javaExecutable" ] && ! [ "$(expr "\"$javaExecutable\"" : '\([^ ]*\)')" = "no" ]; then
+ # readlink(1) is not available as standard on Solaris 10.
+ readLink=$(which readlink)
+ if [ ! "$(expr "$readLink" : '\([^ ]*\)')" = "no" ]; then
+ if $darwin ; then
+ javaHome="$(dirname "\"$javaExecutable\"")"
+ javaExecutable="$(cd "\"$javaHome\"" && pwd -P)/javac"
+ else
+ javaExecutable="$(readlink -f "\"$javaExecutable\"")"
+ fi
+ javaHome="$(dirname "\"$javaExecutable\"")"
+ javaHome=$(expr "$javaHome" : '\(.*\)/bin')
+ JAVA_HOME="$javaHome"
+ export JAVA_HOME
+ fi
+ fi
+fi
+
+if [ -z "$JAVACMD" ] ; then
+ if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ else
+ JAVACMD="$(\unset -f command 2>/dev/null; \command -v java)"
+ fi
+fi
+
+if [ ! -x "$JAVACMD" ] ; then
+ echo "Error: JAVA_HOME is not defined correctly." >&2
+ echo " We cannot execute $JAVACMD" >&2
+ exit 1
+fi
+
+if [ -z "$JAVA_HOME" ] ; then
+ echo "Warning: JAVA_HOME environment variable is not set."
+fi
+
+# traverses directory structure from process work directory to filesystem root
+# first directory with .mvn subdirectory is considered project base directory
+find_maven_basedir() {
+ if [ -z "$1" ]
+ then
+ echo "Path not specified to find_maven_basedir"
+ return 1
+ fi
+
+ basedir="$1"
+ wdir="$1"
+ while [ "$wdir" != '/' ] ; do
+ if [ -d "$wdir"/.mvn ] ; then
+ basedir=$wdir
+ break
+ fi
+ # workaround for JBEAP-8937 (on Solaris 10/Sparc)
+ if [ -d "${wdir}" ]; then
+ wdir=$(cd "$wdir/.." || exit 1; pwd)
+ fi
+ # end of workaround
+ done
+ printf '%s' "$(cd "$basedir" || exit 1; pwd)"
+}
+
+# concatenates all lines of a file
+concat_lines() {
+ if [ -f "$1" ]; then
+ # Remove \r in case we run on Windows within Git Bash
+ # and check out the repository with auto CRLF management
+ # enabled. Otherwise, we may read lines that are delimited with
+ # \r\n and produce $'-Xarg\r' rather than -Xarg due to word
+ # splitting rules.
+ tr -s '\r\n' ' ' < "$1"
+ fi
+}
+
+log() {
+ if [ "$MVNW_VERBOSE" = true ]; then
+ printf '%s\n' "$1"
+ fi
+}
+
+BASE_DIR=$(find_maven_basedir "$(dirname "$0")")
+if [ -z "$BASE_DIR" ]; then
+ exit 1;
+fi
+
+MAVEN_PROJECTBASEDIR=${MAVEN_BASEDIR:-"$BASE_DIR"}; export MAVEN_PROJECTBASEDIR
+log "$MAVEN_PROJECTBASEDIR"
+
+##########################################################################################
+# Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+# This allows using the maven wrapper in projects that prohibit checking in binary data.
+##########################################################################################
+wrapperJarPath="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar"
+if [ -r "$wrapperJarPath" ]; then
+ log "Found $wrapperJarPath"
+else
+ log "Couldn't find $wrapperJarPath, downloading it ..."
+
+ if [ -n "$MVNW_REPOURL" ]; then
+ wrapperUrl="$MVNW_REPOURL/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+ else
+ wrapperUrl="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+ fi
+ while IFS="=" read -r key value; do
+ # Remove '\r' from value to allow usage on windows as IFS does not consider '\r' as a separator ( considers space, tab, new line ('\n'), and custom '=' )
+ safeValue=$(echo "$value" | tr -d '\r')
+ case "$key" in (wrapperUrl) wrapperUrl="$safeValue"; break ;;
+ esac
+ done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+ log "Downloading from: $wrapperUrl"
+
+ if $cygwin; then
+ wrapperJarPath=$(cygpath --path --windows "$wrapperJarPath")
+ fi
+
+ if command -v wget > /dev/null; then
+ log "Found wget ... using wget"
+ [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--quiet"
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ wget $QUIET "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ else
+ wget $QUIET --http-user="$MVNW_USERNAME" --http-password="$MVNW_PASSWORD" "$wrapperUrl" -O "$wrapperJarPath" || rm -f "$wrapperJarPath"
+ fi
+ elif command -v curl > /dev/null; then
+ log "Found curl ... using curl"
+ [ "$MVNW_VERBOSE" = true ] && QUIET="" || QUIET="--silent"
+ if [ -z "$MVNW_USERNAME" ] || [ -z "$MVNW_PASSWORD" ]; then
+ curl $QUIET -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+ else
+ curl $QUIET --user "$MVNW_USERNAME:$MVNW_PASSWORD" -o "$wrapperJarPath" "$wrapperUrl" -f -L || rm -f "$wrapperJarPath"
+ fi
+ else
+ log "Falling back to using Java to download"
+ javaSource="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.java"
+ javaClass="$MAVEN_PROJECTBASEDIR/.mvn/wrapper/MavenWrapperDownloader.class"
+ # For Cygwin, switch paths to Windows format before running javac
+ if $cygwin; then
+ javaSource=$(cygpath --path --windows "$javaSource")
+ javaClass=$(cygpath --path --windows "$javaClass")
+ fi
+ if [ -e "$javaSource" ]; then
+ if [ ! -e "$javaClass" ]; then
+ log " - Compiling MavenWrapperDownloader.java ..."
+ ("$JAVA_HOME/bin/javac" "$javaSource")
+ fi
+ if [ -e "$javaClass" ]; then
+ log " - Running MavenWrapperDownloader.java ..."
+ ("$JAVA_HOME/bin/java" -cp .mvn/wrapper MavenWrapperDownloader "$wrapperUrl" "$wrapperJarPath") || rm -f "$wrapperJarPath"
+ fi
+ fi
+ fi
+fi
+##########################################################################################
+# End of extension
+##########################################################################################
+
+# If specified, validate the SHA-256 sum of the Maven wrapper jar file
+wrapperSha256Sum=""
+while IFS="=" read -r key value; do
+ case "$key" in (wrapperSha256Sum) wrapperSha256Sum=$value; break ;;
+ esac
+done < "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.properties"
+if [ -n "$wrapperSha256Sum" ]; then
+ wrapperSha256Result=false
+ if command -v sha256sum > /dev/null; then
+ if echo "$wrapperSha256Sum $wrapperJarPath" | sha256sum -c > /dev/null 2>&1; then
+ wrapperSha256Result=true
+ fi
+ elif command -v shasum > /dev/null; then
+ if echo "$wrapperSha256Sum $wrapperJarPath" | shasum -a 256 -c > /dev/null 2>&1; then
+ wrapperSha256Result=true
+ fi
+ else
+ echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available."
+ echo "Please install either command, or disable validation by removing 'wrapperSha256Sum' from your maven-wrapper.properties."
+ exit 1
+ fi
+ if [ $wrapperSha256Result = false ]; then
+ echo "Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised." >&2
+ echo "Investigate or delete $wrapperJarPath to attempt a clean download." >&2
+ echo "If you updated your Maven version, you need to update the specified wrapperSha256Sum property." >&2
+ exit 1
+ fi
+fi
+
+MAVEN_OPTS="$(concat_lines "$MAVEN_PROJECTBASEDIR/.mvn/jvm.config") $MAVEN_OPTS"
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin; then
+ [ -n "$JAVA_HOME" ] &&
+ JAVA_HOME=$(cygpath --path --windows "$JAVA_HOME")
+ [ -n "$CLASSPATH" ] &&
+ CLASSPATH=$(cygpath --path --windows "$CLASSPATH")
+ [ -n "$MAVEN_PROJECTBASEDIR" ] &&
+ MAVEN_PROJECTBASEDIR=$(cygpath --path --windows "$MAVEN_PROJECTBASEDIR")
+fi
+
+# Provide a "standardized" way to retrieve the CLI args that will
+# work with both Windows and non-Windows executions.
+MAVEN_CMD_LINE_ARGS="$MAVEN_CONFIG $*"
+export MAVEN_CMD_LINE_ARGS
+
+WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+# shellcheck disable=SC2086 # safe args
+exec "$JAVACMD" \
+ $MAVEN_OPTS \
+ $MAVEN_DEBUG_OPTS \
+ -classpath "$MAVEN_PROJECTBASEDIR/.mvn/wrapper/maven-wrapper.jar" \
+ "-Dmaven.multiModuleProjectDirectory=${MAVEN_PROJECTBASEDIR}" \
+ ${WRAPPER_LAUNCHER} $MAVEN_CONFIG "$@"
diff --git a/Ex09-calculo-preciso/mvnw.cmd b/Ex09-calculo-preciso/mvnw.cmd
new file mode 100644
index 0000000..95ba6f5
--- /dev/null
+++ b/Ex09-calculo-preciso/mvnw.cmd
@@ -0,0 +1,205 @@
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM https://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Apache Maven Wrapper startup batch script, version 3.2.0
+@REM
+@REM Required ENV vars:
+@REM JAVA_HOME - location of a JDK home dir
+@REM
+@REM Optional ENV vars
+@REM MAVEN_BATCH_ECHO - set to 'on' to enable the echoing of the batch commands
+@REM MAVEN_BATCH_PAUSE - set to 'on' to wait for a keystroke before ending
+@REM MAVEN_OPTS - parameters passed to the Java VM when running Maven
+@REM e.g. to debug Maven itself, use
+@REM set MAVEN_OPTS=-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
+@REM MAVEN_SKIP_RC - flag to disable loading of mavenrc files
+@REM ----------------------------------------------------------------------------
+
+@REM Begin all REM lines with '@' in case MAVEN_BATCH_ECHO is 'on'
+@echo off
+@REM set title of command window
+title %0
+@REM enable echoing by setting MAVEN_BATCH_ECHO to 'on'
+@if "%MAVEN_BATCH_ECHO%" == "on" echo %MAVEN_BATCH_ECHO%
+
+@REM set %HOME% to equivalent of $HOME
+if "%HOME%" == "" (set "HOME=%HOMEDRIVE%%HOMEPATH%")
+
+@REM Execute a user defined script before this one
+if not "%MAVEN_SKIP_RC%" == "" goto skipRcPre
+@REM check for pre script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_pre.bat" call "%USERPROFILE%\mavenrc_pre.bat" %*
+if exist "%USERPROFILE%\mavenrc_pre.cmd" call "%USERPROFILE%\mavenrc_pre.cmd" %*
+:skipRcPre
+
+@setlocal
+
+set ERROR_CODE=0
+
+@REM To isolate internal variables from possible post scripts, we use another setlocal
+@setlocal
+
+@REM ==== START VALIDATION ====
+if not "%JAVA_HOME%" == "" goto OkJHome
+
+echo.
+echo Error: JAVA_HOME not found in your environment. >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+:OkJHome
+if exist "%JAVA_HOME%\bin\java.exe" goto init
+
+echo.
+echo Error: JAVA_HOME is set to an invalid directory. >&2
+echo JAVA_HOME = "%JAVA_HOME%" >&2
+echo Please set the JAVA_HOME variable in your environment to match the >&2
+echo location of your Java installation. >&2
+echo.
+goto error
+
+@REM ==== END VALIDATION ====
+
+:init
+
+@REM Find the project base dir, i.e. the directory that contains the folder ".mvn".
+@REM Fallback to current working directory if not found.
+
+set MAVEN_PROJECTBASEDIR=%MAVEN_BASEDIR%
+IF NOT "%MAVEN_PROJECTBASEDIR%"=="" goto endDetectBaseDir
+
+set EXEC_DIR=%CD%
+set WDIR=%EXEC_DIR%
+:findBaseDir
+IF EXIST "%WDIR%"\.mvn goto baseDirFound
+cd ..
+IF "%WDIR%"=="%CD%" goto baseDirNotFound
+set WDIR=%CD%
+goto findBaseDir
+
+:baseDirFound
+set MAVEN_PROJECTBASEDIR=%WDIR%
+cd "%EXEC_DIR%"
+goto endDetectBaseDir
+
+:baseDirNotFound
+set MAVEN_PROJECTBASEDIR=%EXEC_DIR%
+cd "%EXEC_DIR%"
+
+:endDetectBaseDir
+
+IF NOT EXIST "%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config" goto endReadAdditionalConfig
+
+@setlocal EnableExtensions EnableDelayedExpansion
+for /F "usebackq delims=" %%a in ("%MAVEN_PROJECTBASEDIR%\.mvn\jvm.config") do set JVM_CONFIG_MAVEN_PROPS=!JVM_CONFIG_MAVEN_PROPS! %%a
+@endlocal & set JVM_CONFIG_MAVEN_PROPS=%JVM_CONFIG_MAVEN_PROPS%
+
+:endReadAdditionalConfig
+
+SET MAVEN_JAVA_EXE="%JAVA_HOME%\bin\java.exe"
+set WRAPPER_JAR="%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.jar"
+set WRAPPER_LAUNCHER=org.apache.maven.wrapper.MavenWrapperMain
+
+set WRAPPER_URL="https://repo.maven.apache.org/maven2/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperUrl" SET WRAPPER_URL=%%B
+)
+
+@REM Extension to allow automatically downloading the maven-wrapper.jar from Maven-central
+@REM This allows using the maven wrapper in projects that prohibit checking in binary data.
+if exist %WRAPPER_JAR% (
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Found %WRAPPER_JAR%
+ )
+) else (
+ if not "%MVNW_REPOURL%" == "" (
+ SET WRAPPER_URL="%MVNW_REPOURL%/org/apache/maven/wrapper/maven-wrapper/3.2.0/maven-wrapper-3.2.0.jar"
+ )
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Couldn't find %WRAPPER_JAR%, downloading it ...
+ echo Downloading from: %WRAPPER_URL%
+ )
+
+ powershell -Command "&{"^
+ "$webclient = new-object System.Net.WebClient;"^
+ "if (-not ([string]::IsNullOrEmpty('%MVNW_USERNAME%') -and [string]::IsNullOrEmpty('%MVNW_PASSWORD%'))) {"^
+ "$webclient.Credentials = new-object System.Net.NetworkCredential('%MVNW_USERNAME%', '%MVNW_PASSWORD%');"^
+ "}"^
+ "[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12; $webclient.DownloadFile('%WRAPPER_URL%', '%WRAPPER_JAR%')"^
+ "}"
+ if "%MVNW_VERBOSE%" == "true" (
+ echo Finished downloading %WRAPPER_JAR%
+ )
+)
+@REM End of extension
+
+@REM If specified, validate the SHA-256 sum of the Maven wrapper jar file
+SET WRAPPER_SHA_256_SUM=""
+FOR /F "usebackq tokens=1,2 delims==" %%A IN ("%MAVEN_PROJECTBASEDIR%\.mvn\wrapper\maven-wrapper.properties") DO (
+ IF "%%A"=="wrapperSha256Sum" SET WRAPPER_SHA_256_SUM=%%B
+)
+IF NOT %WRAPPER_SHA_256_SUM%=="" (
+ powershell -Command "&{"^
+ "$hash = (Get-FileHash \"%WRAPPER_JAR%\" -Algorithm SHA256).Hash.ToLower();"^
+ "If('%WRAPPER_SHA_256_SUM%' -ne $hash){"^
+ " Write-Output 'Error: Failed to validate Maven wrapper SHA-256, your Maven wrapper might be compromised.';"^
+ " Write-Output 'Investigate or delete %WRAPPER_JAR% to attempt a clean download.';"^
+ " Write-Output 'If you updated your Maven version, you need to update the specified wrapperSha256Sum property.';"^
+ " exit 1;"^
+ "}"^
+ "}"
+ if ERRORLEVEL 1 goto error
+)
+
+@REM Provide a "standardized" way to retrieve the CLI args that will
+@REM work with both Windows and non-Windows executions.
+set MAVEN_CMD_LINE_ARGS=%*
+
+%MAVEN_JAVA_EXE% ^
+ %JVM_CONFIG_MAVEN_PROPS% ^
+ %MAVEN_OPTS% ^
+ %MAVEN_DEBUG_OPTS% ^
+ -classpath %WRAPPER_JAR% ^
+ "-Dmaven.multiModuleProjectDirectory=%MAVEN_PROJECTBASEDIR%" ^
+ %WRAPPER_LAUNCHER% %MAVEN_CONFIG% %*
+if ERRORLEVEL 1 goto error
+goto end
+
+:error
+set ERROR_CODE=1
+
+:end
+@endlocal & set ERROR_CODE=%ERROR_CODE%
+
+if not "%MAVEN_SKIP_RC%"=="" goto skipRcPost
+@REM check for post script, once with legacy .bat ending and once with .cmd ending
+if exist "%USERPROFILE%\mavenrc_post.bat" call "%USERPROFILE%\mavenrc_post.bat"
+if exist "%USERPROFILE%\mavenrc_post.cmd" call "%USERPROFILE%\mavenrc_post.cmd"
+:skipRcPost
+
+@REM pause the script if MAVEN_BATCH_PAUSE is set to 'on'
+if "%MAVEN_BATCH_PAUSE%"=="on" pause
+
+if "%MAVEN_TERMINATE_CMD%"=="on" exit %ERROR_CODE%
+
+cmd /C exit /B %ERROR_CODE%
diff --git a/Ex09-calculo-preciso/pom.xml b/Ex09-calculo-preciso/pom.xml
new file mode 100644
index 0000000..33df73f
--- /dev/null
+++ b/Ex09-calculo-preciso/pom.xml
@@ -0,0 +1,70 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.2.2
+
+
+ com.precisiontech
+ calculopreciso
+ 0.0.1-SNAPSHOT
+ calculopreciso
+ Demo project for Spring Boot
+
+ 17
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.springframework.boot
+ spring-boot-devtools
+ runtime
+ true
+
+
+
+ org.projectlombok
+ lombok
+ 1.18.32
+ provided
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+ mysql
+ mysql-connector-java
+ 8.0.33
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.5.0
+
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
+
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/CPApplication.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/CPApplication.java
new file mode 100644
index 0000000..4c7291d
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/CPApplication.java
@@ -0,0 +1,13 @@
+package com.precisiontech.cp;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class CPApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(CPApplication.class, args);
+ }
+
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/MaoDeObraDTO.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/MaoDeObraDTO.java
new file mode 100644
index 0000000..52f64b1
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/MaoDeObraDTO.java
@@ -0,0 +1,27 @@
+package com.precisiontech.cp.DTO;
+
+import com.precisiontech.cp.entity.MaoDeObra;
+import com.precisiontech.cp.entity.Material;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MaoDeObraDTO {
+ private Long id;
+ private String profissional;
+ private double precoPorHora;
+
+ public static MaoDeObra of(MaoDeObraDTO maoDeObra){
+ MaoDeObra m = new MaoDeObra();
+ m.setId(maoDeObra.getId());
+ m.setProfissional(maoDeObra.getProfissional());
+ m.setPrecoPorHora(maoDeObra.getPrecoPorHora());
+ return m;
+ }
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/MaterialDTO.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/MaterialDTO.java
new file mode 100644
index 0000000..82c0594
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/MaterialDTO.java
@@ -0,0 +1,20 @@
+package com.precisiontech.cp.DTO;
+
+import com.precisiontech.cp.entity.Material;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class MaterialDTO {
+ private Long id;
+ private String nome;
+ private Double precoPorKg;
+ private Double precoCavaco;
+ private Double densidade;
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/PecaDTORequest.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/PecaDTORequest.java
new file mode 100644
index 0000000..c93e234
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/PecaDTORequest.java
@@ -0,0 +1,29 @@
+package com.precisiontech.cp.DTO;
+
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PecaDTORequest {
+ private Long id;
+ private String codigo;
+ private String nomeDaPeca;
+ private Double volumeTotal; // vem do front
+ private Double custoDeProducao; // (materia prima * kg da materia)
+ // + (mao de obra * qtd de mao de obra * tempo)
+ // + (máquinas * quantidade * tempo)
+ private Double tempoDeUsinagem; // soma dos tempos do operador
+ private Double pesoTarugo;
+ private Double quantidadeDeCavaco; // peso do tarugo - peso da peça (volume * densidade)
+ private Double valorDoCavaco;
+ private List maosDeObraIds;
+ private List maquinas;
+ private Long materialId;
+ private List subPecas;
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/PecaDTOResponse.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/PecaDTOResponse.java
new file mode 100644
index 0000000..abea09f
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/PecaDTOResponse.java
@@ -0,0 +1,32 @@
+package com.precisiontech.cp.DTO;
+
+import com.precisiontech.cp.entity.MaoDeObra;
+import com.precisiontech.cp.entity.Maquina;
+import com.precisiontech.cp.entity.Material;
+import com.precisiontech.cp.entity.SubPeca;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Date;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class PecaDTOResponse {
+ private Long id;
+ private String codigo;
+ private String nomeDaPeca;
+ private Double volumeTotal; // vem do front
+ private Double custoDeProducao; // (materia prima * kg da materia) + (mao de obra * qtd de mao de obra * tempo) + (máquinas * quantidade * tempo)
+ private Double tempoDeUsinagem; // soma dos tempos do operador
+ private Double pesoTarugo;
+ private Double quantidadeDeCavaco;
+ private Double valorDoCavaco;
+ private Date dataDeCriacao;
+ private List maosDeObra;
+ private List maquina;
+ private MaterialDTO material;
+ private List subPecas;
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/SubPecaDTORequest.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/SubPecaDTORequest.java
new file mode 100644
index 0000000..f9d000a
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/DTO/SubPecaDTORequest.java
@@ -0,0 +1,63 @@
+package com.precisiontech.cp.DTO;
+
+import com.precisiontech.cp.entity.Cilindro;
+import com.precisiontech.cp.entity.Piramide;
+import com.precisiontech.cp.entity.SubPeca;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+public class SubPecaDTORequest {
+ private Long id;
+ private String nome;
+ private String volume;
+ private Double raio;
+ private Double alturaCilindro;
+ private String tipoBasePiramide;
+ private Double ladoPiramide;
+ private Double alturaPiramide;
+ // Outros campos, se necessário
+
+ public SubPecaDTORequest(SubPeca subPeca) {
+ this.id = subPeca.getId();
+ this.nome = subPeca.getNome();
+ if (subPeca.getFormato() instanceof Cilindro) {
+ Cilindro cilindro = (Cilindro) subPeca.getFormato();
+ this.volume = cilindro.getVolume();
+ this.raio = cilindro.getRaio();
+ this.alturaCilindro = cilindro.getAltura();
+ } else if (subPeca.getFormato() instanceof Piramide) {
+ Piramide piramide = (Piramide) subPeca.getFormato();
+ this.volume = piramide.getVolume();
+ this.tipoBasePiramide = piramide.getTipoBase();
+ this.ladoPiramide = piramide.getLado();
+ this.alturaPiramide = piramide.getAltura();
+ }
+ }
+
+ public SubPeca convertToSubPeca(SubPecaDTORequest subPecaDTO) {
+ SubPeca subPeca = new SubPeca();
+ subPeca.setId(subPecaDTO.getId());
+ subPeca.setNome(subPecaDTO.getNome());
+
+ if (subPecaDTO.getTipoBasePiramide() != null) {
+ Piramide piramide = new Piramide();
+ piramide.setVolume(subPecaDTO.getVolume());
+ piramide.setTipoBase(subPecaDTO.getTipoBasePiramide());
+ piramide.setLado(subPecaDTO.getLadoPiramide());
+ piramide.setAltura(subPecaDTO.getAlturaPiramide());
+ subPeca.setFormato(piramide);
+ } else {
+ Cilindro cilindro = new Cilindro();
+ cilindro.setVolume(subPecaDTO.getVolume());
+ cilindro.setRaio(subPecaDTO.getRaio());
+ cilindro.setAltura(subPecaDTO.getAlturaCilindro());
+ subPeca.setFormato(cilindro);
+ }
+
+ return subPeca;
+ }
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/config/WebConfig.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/config/WebConfig.java
new file mode 100644
index 0000000..cf91f4a
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/config/WebConfig.java
@@ -0,0 +1,18 @@
+package com.precisiontech.cp.config;
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.CorsRegistry;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+@Configuration
+@EnableWebMvc
+public class WebConfig implements WebMvcConfigurer{
+
+ public void addCorsMappings(CorsRegistry registry) {
+ registry.addMapping("/**")
+ .allowedOrigins("*") // Permitir todos os origins
+ .allowedMethods("GET", "POST", "PUT", "DELETE") // Métodos permitidos
+ .allowedHeaders("*"); // Todos os cabeçalhos permitidos
+ }
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaoDeObraController.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaoDeObraController.java
new file mode 100644
index 0000000..95196d2
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaoDeObraController.java
@@ -0,0 +1,56 @@
+package com.precisiontech.cp.controller;
+
+import com.precisiontech.cp.entity.MaoDeObra;
+import com.precisiontech.cp.repository.MaoDeObraRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("/maodeobra")
+public class MaoDeObraController {
+
+ @Autowired
+ private MaoDeObraRepository maoDeObraRepository;
+
+ @GetMapping
+ public List getAllMaoDeObra() {
+ return maoDeObraRepository.findAll();
+ }
+
+ @GetMapping("/{id}")
+ public ResponseEntity getMaoDeObraById(@PathVariable Long id) {
+ return maoDeObraRepository.findById(id)
+ .map(ResponseEntity::ok)
+ .orElse(ResponseEntity.notFound().build());
+ }
+
+ @PostMapping
+ public ResponseEntity createMaoDeObra(@RequestBody MaoDeObra maoDeObra) {
+ System.out.println(maoDeObra);
+ MaoDeObra savedMaoDeObra = maoDeObraRepository.save(maoDeObra);
+ return ResponseEntity.status(HttpStatus.CREATED).body(savedMaoDeObra);
+ }
+
+ @PutMapping("/{id}")
+ public ResponseEntity updateMaoDeObra(@PathVariable Long id, @RequestBody MaoDeObra updatedMaoDeObra) {
+ if (!maoDeObraRepository.existsById(id)) {
+ return ResponseEntity.notFound().build();
+ }
+ updatedMaoDeObra.setId(id);
+ MaoDeObra savedMaoDeObra = maoDeObraRepository.save(updatedMaoDeObra);
+ return ResponseEntity.ok(savedMaoDeObra);
+ }
+
+ @DeleteMapping("/{id}")
+ public ResponseEntity deleteMaoDeObra(@PathVariable Long id) {
+ if (!maoDeObraRepository.existsById(id)) {
+ return ResponseEntity.notFound().build();
+ }
+ maoDeObraRepository.deleteById(id);
+ return ResponseEntity.noContent().build();
+ }
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaquinaController.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaquinaController.java
new file mode 100644
index 0000000..3cf325c
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaquinaController.java
@@ -0,0 +1,55 @@
+package com.precisiontech.cp.controller;
+
+import com.precisiontech.cp.entity.MaoDeObra;
+import com.precisiontech.cp.entity.Maquina;
+import com.precisiontech.cp.repository.MaoDeObraRepository;
+import com.precisiontech.cp.repository.MaquinaRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+@RestController
+@RequestMapping("/maquinas")
+public class MaquinaController {
+ @Autowired
+ private MaquinaRepository maquinaRepository;
+
+ @GetMapping
+ public List getAllMaquina() {
+ return maquinaRepository.findAll();
+ }
+
+ @GetMapping("/{id}")
+ public ResponseEntity getMaquinaById(@PathVariable Long id) {
+ return maquinaRepository.findById(id)
+ .map(ResponseEntity::ok)
+ .orElse(ResponseEntity.notFound().build());
+ }
+
+ @PostMapping
+ public ResponseEntity createMaquina(@RequestBody Maquina maquina) {
+ Maquina savedMaquina = maquinaRepository.save(maquina);
+ return ResponseEntity.status(HttpStatus.CREATED).body(savedMaquina);
+ }
+
+ @PutMapping("/{id}")
+ public ResponseEntity updateMaquina(@PathVariable Long id, @RequestBody Maquina updatedMaquina) {
+ if (!maquinaRepository.existsById(id)) {
+ return ResponseEntity.notFound().build();
+ }
+ updatedMaquina.setId(id);
+ Maquina savedMaquina = maquinaRepository.save(updatedMaquina);
+ return ResponseEntity.ok(savedMaquina);
+ }
+
+ @DeleteMapping("/{id}")
+ public ResponseEntity deleteMaquina(@PathVariable Long id) {
+ if (!maquinaRepository.existsById(id)) {
+ return ResponseEntity.notFound().build();
+ }
+ maquinaRepository.deleteById(id);
+ return ResponseEntity.noContent().build();
+ }
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaterialController.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaterialController.java
new file mode 100644
index 0000000..e4668d2
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/MaterialController.java
@@ -0,0 +1,70 @@
+package com.precisiontech.cp.controller;
+
+
+import com.precisiontech.cp.entity.MaoDeObra;
+import com.precisiontech.cp.entity.Material;
+import com.precisiontech.cp.repository.MaterialRepository;
+import com.precisiontech.cp.repository.UsuarioRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequestMapping("/material")
+public class MaterialController {
+ @Autowired
+ private MaterialRepository materialRepository;
+
+ @GetMapping
+ public ResponseEntity> getAllMaterial() {
+ try {
+ List materials = materialRepository.findAll();
+ if (!materials.isEmpty()) {
+ return ResponseEntity.ok(materials);
+ } else {
+ return ResponseEntity.noContent().build(); // Retorna 204 No Content se a lista estiver vazia
+ }
+
+ } catch (Exception e) {
+ return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); // Retorna 500 Internal Server Error se ocorrer uma exceção
+ }
+ }
+
+
+ @GetMapping("/{id}")
+ public ResponseEntity getMaterialById(@PathVariable Long id) {
+ return materialRepository.findById(id)
+ .map(ResponseEntity::ok)
+ .orElse(ResponseEntity.notFound().build());
+ }
+
+
+ @PostMapping
+ public ResponseEntity createMaterial(@RequestBody Material material) {
+ Material savedMaterial = materialRepository.save(material);
+ return ResponseEntity.status(HttpStatus.CREATED).body(savedMaterial);
+ }
+
+ @PutMapping("/{id}")
+ public ResponseEntity updateMaterial(@PathVariable Long id, @RequestBody Material updatedMaterial) {
+ if (!materialRepository.existsById(id)) {
+ return ResponseEntity.notFound().build();
+ }
+ updatedMaterial.setId(id);
+ Material savedMaterial = materialRepository.save(updatedMaterial);
+ return ResponseEntity.ok(savedMaterial);
+ }
+
+ @DeleteMapping("/{id}")
+ public ResponseEntity deleteMaterial(@PathVariable Long id) {
+ if (!materialRepository.existsById(id)) {
+ return ResponseEntity.notFound().build();
+ }
+ materialRepository.deleteById(id);
+ return ResponseEntity.noContent().build();
+ }
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/PecaController.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/PecaController.java
new file mode 100644
index 0000000..cac657b
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/PecaController.java
@@ -0,0 +1,185 @@
+package com.precisiontech.cp.controller;
+
+import com.precisiontech.cp.DTO.MaoDeObraDTO;
+import com.precisiontech.cp.DTO.MaterialDTO;
+import com.precisiontech.cp.DTO.PecaDTORequest;
+import com.precisiontech.cp.DTO.PecaDTOResponse;
+import com.precisiontech.cp.entity.*;
+import com.precisiontech.cp.repository.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.List;
+import java.util.Optional;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/pecas")
+public class PecaController {
+
+ private final PecaRepository pecaRepository;
+
+ private final MaterialRepository materialRepository;
+
+ private final MaoDeObraRepository maoDeObraRepository;
+
+ private final MaquinaRepository maquinaRepository;
+
+ private final SubPecaRepository subPecaRepository;
+
+ private final FormatoRepository formatoRepository;
+
+ @Autowired
+ public PecaController(PecaRepository pecaRepository, MaterialRepository materialRepository, MaoDeObraRepository maoDeObraRepository, MaquinaRepository maquinaRepository, SubPecaRepository subPecaRepository, FormatoRepository formatoRepository) {
+ this.pecaRepository = pecaRepository;
+ this.materialRepository = materialRepository;
+ this.maoDeObraRepository = maoDeObraRepository;
+ this.maquinaRepository = maquinaRepository;
+ this.subPecaRepository = subPecaRepository;
+ this.formatoRepository = formatoRepository;
+ }
+
+ @GetMapping
+ public List getAllPecas() {
+ List pecas = (List) pecaRepository.findAll();
+ return pecas.stream().map(this::toDTO).collect(Collectors.toList());
+ }
+
+ @GetMapping("/nome")
+ public List getNomes() {
+ return pecaRepository.findNome();
+ }
+
+ @GetMapping("/codigo")
+ public List getCodigo() {
+ return pecaRepository.findCodigo();
+ }
+
+ @GetMapping("/{id}")
+ public PecaDTOResponse getPecaById(@PathVariable Long id) {
+ Peca peca = pecaRepository.findById(id)
+ .orElseThrow(() -> new RuntimeException("Peca not found with id: " + id));
+ return toDTO(peca);
+ }
+
+ @PostMapping
+ public PecaDTOResponse createPeca(@RequestBody PecaDTORequest pecaDTORequest) {
+ Peca peca = fromDTO(pecaDTORequest);
+
+ Peca finalPeca = pecaRepository.save(peca);
+
+ Optional materialOptional = materialRepository.findById(finalPeca.getMaterial().getId());
+ materialOptional.ifPresent(materialEntity -> {
+ List pecas = materialEntity.getPecas();
+ pecas.add(finalPeca);
+
+ materialRepository.save(materialEntity);
+ });
+
+
+ peca.getSubPecas().forEach(subPeca -> {
+ if (subPeca.getFormato() != null) {
+ subPeca.setPeca(finalPeca);
+ formatoRepository.save(subPeca.getFormato());
+ }
+ });
+
+ peca.getSubPecas().forEach(subPecaRepository::save);
+
+ List maquinasAtualizadas = new ArrayList<>();
+
+ peca.getMaquinas().forEach(maquina -> {
+ List pecas = new ArrayList<>(maquina.getPecas());
+ pecas.add(finalPeca);
+ maquina.setPecas(pecas);
+ maquinasAtualizadas.add(maquina);
+ });
+
+ maquinaRepository.saveAll(maquinasAtualizadas);
+
+ return toDTO(peca);
+ }
+
+ @PutMapping("/{id}")
+ public PecaDTOResponse updatePeca(@PathVariable Long id, @RequestBody PecaDTORequest updatedPecaDTORequest) {
+ Peca existingPeca = pecaRepository.findById(id)
+ .orElseThrow(() -> new RuntimeException("Peca not found with id: " + id));
+ BeanUtils.copyProperties(fromDTO(updatedPecaDTORequest), existingPeca, "id");
+ existingPeca = pecaRepository.save(existingPeca);
+ return toDTO(existingPeca);
+ }
+
+ @DeleteMapping("/{id}")
+ public void deletePeca(@PathVariable Long id) {
+ pecaRepository.deleteById(id);
+ }
+
+ private PecaDTOResponse toDTO(Peca peca) {
+
+ List maosDeObraDTO = peca.getMaosDeObra().stream()
+ .map(MaoDeObra::fromEntity)
+ .collect(Collectors.toList());
+
+ MaterialDTO materialDTO = Material.fromEntity(peca.getMaterial());
+
+ return new PecaDTOResponse(
+ peca.getId(),
+ peca.getCodigo(),
+ peca.getNomeDaPeca(),
+ peca.getVolumeTotal(),
+ peca.getCustoDeProducao(),
+ peca.getTempoDeUsinagem(),
+ peca.getPesoTarugo(),
+ peca.getQuantidadeDeCavaco(),
+ peca.getValorDoCavaco(),
+ peca.getDataDeCriacao(),
+ maosDeObraDTO,
+ peca.getMaquinas(),
+ materialDTO,
+ peca.getSubPecas()
+ );
+ }
+
+ private Peca fromDTO(PecaDTORequest pecaDTORequest) {
+ List maosDeObra = pecaDTORequest.getMaosDeObraIds().stream()
+ .map(maoDeObraId -> maoDeObraRepository.findById(maoDeObraId)
+ .orElseThrow(() -> new RuntimeException("Mão de obra not found with id: " + maoDeObraId)))
+ .collect(Collectors.toList());
+
+ List maquinas = pecaDTORequest.getMaquinas().stream()
+ .map(maquinasIds -> maquinaRepository.findById(maquinasIds)
+ .orElseThrow(() -> new RuntimeException("Máquina not found with id: " + maquinasIds)))
+ .collect(Collectors.toList());
+
+ Material material = materialRepository.findById(pecaDTORequest.getMaterialId())
+ .orElseThrow(() -> new RuntimeException("Material not found with id: " + pecaDTORequest.getMaterialId()));
+
+ List subPecas = pecaDTORequest.getSubPecas().stream()
+ .map(subPecaDTO -> {
+ return subPecaDTO.convertToSubPeca(subPecaDTO);
+ })
+ .collect(Collectors.toList());
+
+
+ Peca peca = new Peca();
+ peca.setId(pecaDTORequest.getId());
+ peca.setCodigo(pecaDTORequest.getCodigo());
+ peca.setNomeDaPeca(pecaDTORequest.getNomeDaPeca());
+ peca.setVolumeTotal(pecaDTORequest.getVolumeTotal());
+ peca.setCustoDeProducao(pecaDTORequest.getCustoDeProducao());
+ peca.setTempoDeUsinagem(pecaDTORequest.getTempoDeUsinagem());
+ peca.setPesoTarugo(pecaDTORequest.getPesoTarugo());
+ peca.setQuantidadeDeCavaco(pecaDTORequest.getQuantidadeDeCavaco());
+ peca.setValorDoCavaco(pecaDTORequest.getValorDoCavaco());
+ peca.setDataDeCriacao(Calendar.getInstance().getTime());
+ peca.setMaosDeObra(maosDeObra);
+ peca.setMaquinas(maquinas);
+ peca.setSubPecas(subPecas);
+ peca.setMaterial(material);
+
+ return peca;
+ }
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/SubPecaController.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/SubPecaController.java
new file mode 100644
index 0000000..3a6ac83
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/SubPecaController.java
@@ -0,0 +1,61 @@
+package com.precisiontech.cp.controller;
+
+import com.precisiontech.cp.DTO.PecaDTORequest;
+import com.precisiontech.cp.DTO.PecaDTOResponse;
+import com.precisiontech.cp.entity.*;
+import com.precisiontech.cp.repository.*;
+import org.springframework.beans.BeanUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+@RestController
+@RequestMapping("/subpecas")
+public class SubPecaController {
+
+ @Autowired
+ private SubPecaRepository subPecaRepository;
+
+ @Autowired
+ private FormatoRepository formatoRepository;
+
+
+ @GetMapping
+ public Iterable getAllPecas() {
+ return subPecaRepository.findAll();
+ }
+
+ @GetMapping("/{id}")
+ public SubPeca getPecaById(@PathVariable Long id) {
+ return subPecaRepository.findById(id)
+ .orElseThrow(() -> new RuntimeException("Sub Peca not found with id: " + id));
+ }
+
+ @PostMapping("/subpeca")
+ public SubPeca createSubPeca(@RequestBody SubPeca subPeca) {
+ Formato formato = subPeca.getFormato();
+ formato = formatoRepository.save(formato);
+ subPeca.setFormato(formato);
+ return subPecaRepository.save(subPeca);
+ }
+
+ @PutMapping("/{id}")
+ public SubPeca updatePeca(@PathVariable Long id, @RequestBody SubPeca subPeca) {
+ SubPeca existingSubPeca = subPecaRepository.findById(id)
+ .orElseThrow(() -> new RuntimeException("Sub Peca not found with id: " + id));
+ BeanUtils.copyProperties(subPeca, existingSubPeca, "id");
+ existingSubPeca = subPecaRepository.save(existingSubPeca);
+ return existingSubPeca;
+ }
+
+ @DeleteMapping("/{id}")
+ public void deletePeca(@PathVariable Long id) {
+ subPecaRepository.deleteById(id);
+ }
+
+
+
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/TurmaController.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/TurmaController.java
new file mode 100644
index 0000000..5cbd946
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/TurmaController.java
@@ -0,0 +1,77 @@
+package com.precisiontech.cp.controller;
+
+import com.precisiontech.cp.entity.Turma;
+import com.precisiontech.cp.repository.TurmaRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequestMapping("/turmas")
+public class TurmaController {
+
+ private final TurmaRepository turmaRepository;
+
+ @Autowired
+ public TurmaController(TurmaRepository turmaRepository) {
+ this.turmaRepository = turmaRepository;
+ }
+
+ // Create
+ @PostMapping
+ public ResponseEntity criarTurma(@RequestBody Turma turma) {
+ try {
+ Turma novaTurma = turmaRepository.save(turma);
+ return new ResponseEntity<>(novaTurma, HttpStatus.CREATED);
+ } catch (Exception e) {
+ return new ResponseEntity<>(null, HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ }
+
+ // Read all
+ @GetMapping
+ public ResponseEntity> obterTodasTurmas() {
+ List turmas = turmaRepository.findAll();
+ if (turmas.isEmpty()) {
+ return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+ }
+ return new ResponseEntity<>(turmas, HttpStatus.OK);
+ }
+
+ // Read one
+ @GetMapping("/{id}")
+ public ResponseEntity obterTurmaPorId(@PathVariable("id") Long id) {
+ Optional turmaOptional = turmaRepository.findById(id);
+ return turmaOptional.map(turma -> new ResponseEntity<>(turma, HttpStatus.OK))
+ .orElseGet(() -> new ResponseEntity<>(HttpStatus.NOT_FOUND));
+ }
+
+ // Update
+ @PutMapping("/{id}")
+ public ResponseEntity atualizarTurma(@PathVariable("id") Long id, @RequestBody Turma turma) {
+ Optional turmaOptional = turmaRepository.findById(id);
+ if (turmaOptional.isPresent()) {
+ Turma _turma = turmaOptional.get();
+ _turma.setCodTurma(turma.getCodTurma());
+ _turma.setNome(turma.getNome());
+ return new ResponseEntity<>(turmaRepository.save(_turma), HttpStatus.OK);
+ } else {
+ return new ResponseEntity<>(HttpStatus.NOT_FOUND);
+ }
+ }
+
+ // Delete
+ @DeleteMapping("/{id}")
+ public ResponseEntity deletarTurma(@PathVariable("id") Long id) {
+ try {
+ turmaRepository.deleteById(id);
+ return new ResponseEntity<>(HttpStatus.NO_CONTENT);
+ } catch (Exception e) {
+ return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
+ }
+ }
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/UsuarioController.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/UsuarioController.java
new file mode 100644
index 0000000..7b800e9
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/controller/UsuarioController.java
@@ -0,0 +1,89 @@
+package com.precisiontech.cp.controller;
+
+import com.precisiontech.cp.entity.Usuario;
+import com.precisiontech.cp.repository.UsuarioRepository;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@RestController
+@RequestMapping("/usuarios")
+public class UsuarioController {
+
+ @Autowired
+ private UsuarioRepository usuarioRepository;
+
+ @GetMapping
+ public ResponseEntity> getAllUsuarios() {
+ List usuarios = usuarioRepository.findAll();
+ return ResponseEntity.ok(usuarios);
+ }
+
+ @GetMapping("/{email}")
+ public ResponseEntity getUsuarioByEmail(@PathVariable String email) {
+ Optional usuarioOptional = usuarioRepository.findById(email);
+ return usuarioOptional.map(ResponseEntity::ok)
+ .orElseGet(() -> ResponseEntity.notFound().build());
+ }
+
+ @GetMapping("/professores")
+ public List getProfessores() {
+ return usuarioRepository.findByTipoUsuario(Usuario.TipoUsuario.valueOf("PROFESSOR"));
+ }
+
+ @GetMapping("/alunos")
+ public List getAlunos() {
+ return usuarioRepository.findByTipoUsuario(Usuario.TipoUsuario.valueOf("ALUNO"));
+ }
+
+ @PostMapping
+ public ResponseEntity createUsuario(@RequestBody Usuario usuario) {
+ Usuario createdUsuario = usuarioRepository.save(usuario);
+ return ResponseEntity.status(HttpStatus.CREATED).body(createdUsuario);
+ }
+
+ @PostMapping("/login")
+ public ResponseEntity login(@RequestBody Usuario usuario) {
+
+ Optional usuarioEncontrado = usuarioRepository.findById(usuario.getEmail());
+
+ if (usuarioEncontrado.isPresent()
+ && usuarioEncontrado.get().getEmail().equals(usuario.getEmail())
+ && usuarioEncontrado.get().getSenha().equals(usuario.getSenha())) {
+ return ResponseEntity.ok("{\"message:\":\"Login bem-sucedido!\"}"); // Aqui você retornaria um token de autenticação, por exemplo
+ } else {
+ return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("{\"message:\":\"credenciais inválidas!\"}");
+ }
+ }
+
+ @PutMapping("/{email}")
+ public ResponseEntity updateUsuario(@PathVariable String email, @RequestBody Usuario usuarioDetails) {
+ Optional usuarioOptional = usuarioRepository.findById(email);
+ if (usuarioOptional.isPresent()) {
+ Usuario usuario = usuarioOptional.get();
+ usuario.setNome(usuarioDetails.getNome());
+ usuario.setCurso(usuarioDetails.getCurso());
+ usuario.setTipoUsuario(usuarioDetails.getTipoUsuario());
+ usuario.setSenha(usuarioDetails.getSenha());
+ Usuario updatedUsuario = usuarioRepository.save(usuario);
+ return ResponseEntity.ok(updatedUsuario);
+ } else {
+ return ResponseEntity.notFound().build();
+ }
+ }
+
+ @DeleteMapping("/{email}")
+ public ResponseEntity deleteUsuario(@PathVariable String email) {
+ Optional usuarioOptional = usuarioRepository.findById(email);
+ if (usuarioOptional.isPresent()) {
+ usuarioRepository.deleteById(email);
+ return ResponseEntity.noContent().build();
+ } else {
+ return ResponseEntity.notFound().build();
+ }
+ }
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Cilindro.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Cilindro.java
new file mode 100644
index 0000000..09c7645
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Cilindro.java
@@ -0,0 +1,22 @@
+package com.precisiontech.cp.entity;
+
+import jakarta.persistence.DiscriminatorValue;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@DiscriminatorValue("cilindro")
+public class Cilindro extends Formato {
+
+ private Double raio;
+ private Double altura;
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Formato.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Formato.java
new file mode 100644
index 0000000..349f8ea
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Formato.java
@@ -0,0 +1,30 @@
+package com.precisiontech.cp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@Table(name = "formato")
+public class Formato implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String volume;
+
+ @JsonIgnore
+ @OneToMany(mappedBy = "formato")
+ private List subPecas = new ArrayList<>();
+
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/MaoDeObra.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/MaoDeObra.java
new file mode 100644
index 0000000..c4fc4b2
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/MaoDeObra.java
@@ -0,0 +1,39 @@
+package com.precisiontech.cp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.precisiontech.cp.DTO.MaoDeObraDTO;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+@Table(name = "MaoDeObra")
+public class MaoDeObra {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String profissional;
+ private double precoPorHora;
+
+ @JsonIgnore
+ @ManyToMany(mappedBy = "maosDeObra")
+ private List pecas = new ArrayList<>();
+
+ public static MaoDeObraDTO fromEntity(MaoDeObra maoDeObra) {
+ return new MaoDeObraDTO(
+ maoDeObra.getId(),
+ maoDeObra.getProfissional(),
+ maoDeObra.getPrecoPorHora()
+ );
+ }
+
+
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Maquina.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Maquina.java
new file mode 100644
index 0000000..991639c
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Maquina.java
@@ -0,0 +1,33 @@
+package com.precisiontech.cp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+public class Maquina {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String nome;
+ private double precoPorHora;
+
+ @JsonIgnore
+ @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ @JoinTable(
+ name = "Maquina_Peca",
+ joinColumns = @JoinColumn(name = "maquina_id"),
+ inverseJoinColumns = @JoinColumn(name = "peca_id")
+ )
+ private List pecas = new ArrayList<>();
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Material.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Material.java
new file mode 100644
index 0000000..25a0f28
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Material.java
@@ -0,0 +1,50 @@
+package com.precisiontech.cp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import com.precisiontech.cp.DTO.MaterialDTO;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+import lombok.ToString;
+
+import java.util.List;
+
+@Data
+@NoArgsConstructor
+@AllArgsConstructor
+@Entity
+public class Material {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ @Column(name = "id")
+ private Long id;
+
+ @Column(name = "nome")
+ private String nome;
+
+ @Column(name = "preco_por_kg")
+ private Double precoPorKg;
+
+ @Column(name = "preco_cavaco")
+ private Double precoCavaco;
+
+ @Column(name= "densidade")
+ private Double densidade;
+
+ @JsonIgnore
+ @ToString.Exclude
+ @OneToMany(mappedBy = "material")
+ private List pecas;
+
+ public static MaterialDTO fromEntity(Material material) {
+ return new MaterialDTO(
+ material.getId(),
+ material.getNome(),
+ material.getPrecoPorKg(),
+ material.getPrecoCavaco(),
+ material.getDensidade()
+ );
+ }
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Peca.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Peca.java
new file mode 100644
index 0000000..10e57b0
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Peca.java
@@ -0,0 +1,56 @@
+package com.precisiontech.cp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@Table(name = "Peca")
+public class Peca implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String codigo;
+ private String nomeDaPeca;
+ private Double volumeTotal; // vem do front
+ private Double custoDeProducao; // (materia prima * kg da materia) + (mao de obra * qtd de mao de obra * tempo) + (máquinas * quantidade * tempo)
+ private Double tempoDeUsinagem; // soma dos tempos do operador
+ private Double pesoTarugo;
+ private Double quantidadeDeCavaco;
+ private Double valorDoCavaco;
+ private Date dataDeCriacao;
+
+ @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ @JoinTable(
+ name = "Peca_MaoDeObra",
+ joinColumns = @JoinColumn(name = "peca_id"),
+ inverseJoinColumns = @JoinColumn(name = "mao_de_obra_id")
+ )
+ private List maosDeObra = new ArrayList<>();
+
+ @ManyToOne
+ @JoinColumn(name = "material_id") // Chave estrangeira na tabela Peca
+ private Material material;
+
+
+ @ManyToMany(mappedBy = "pecas", cascade = {CascadeType.PERSIST, CascadeType.MERGE})
+ private List maquinas = new ArrayList<>();
+
+
+ @OneToMany(mappedBy = "peca")
+ private List subPecas;
+
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Piramide.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Piramide.java
new file mode 100644
index 0000000..bdaeb3c
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Piramide.java
@@ -0,0 +1,23 @@
+package com.precisiontech.cp.entity;
+
+import jakarta.persistence.DiscriminatorValue;
+import jakarta.persistence.Entity;
+import jakarta.persistence.Table;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@DiscriminatorValue("Piramide")
+public class Piramide extends Formato {
+
+ private String tipoBase;
+ private Double lado;
+ private Double altura;
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/SubPeca.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/SubPeca.java
new file mode 100644
index 0000000..e01c7f2
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/SubPeca.java
@@ -0,0 +1,36 @@
+package com.precisiontech.cp.entity;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@Table(name = "subpeca")
+public class SubPeca implements Serializable {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+ private String nome;
+
+ @ManyToOne
+ @JoinColumn(name = "formato_id")
+ private Formato formato;
+
+ @JsonIgnore
+ @ManyToOne
+ @JoinColumn(name = "peca_id")
+ private Peca peca;
+
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Turma.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Turma.java
new file mode 100644
index 0000000..f39e346
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Turma.java
@@ -0,0 +1,24 @@
+package com.precisiontech.cp.entity;
+
+import jakarta.persistence.Entity;
+import jakarta.persistence.GeneratedValue;
+import jakarta.persistence.GenerationType;
+import jakarta.persistence.Id;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+public class Turma {
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private Long id;
+
+ private String codTurma;
+ private String nome;
+
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Usuario.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Usuario.java
new file mode 100644
index 0000000..f2f552b
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/entity/Usuario.java
@@ -0,0 +1,28 @@
+package com.precisiontech.cp.entity;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.Objects;
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Entity
+public class Usuario {
+
+ @Id
+ private String email;
+ private String nome;
+ private String curso;
+ private TipoUsuario tipoUsuario;
+ private String senha;
+
+ public enum TipoUsuario {
+ ADMINISTRADOR,
+ PROFESSOR,
+ ALUNO
+ }
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/FormatoRepository.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/FormatoRepository.java
new file mode 100644
index 0000000..5f0a1ec
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/FormatoRepository.java
@@ -0,0 +1,8 @@
+package com.precisiontech.cp.repository;
+
+import com.precisiontech.cp.entity.Formato;
+import com.precisiontech.cp.entity.Peca;
+import org.springframework.data.repository.CrudRepository;
+
+public interface FormatoRepository extends CrudRepository {
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaoDeObraRepository.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaoDeObraRepository.java
new file mode 100644
index 0000000..5fc15b7
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaoDeObraRepository.java
@@ -0,0 +1,9 @@
+package com.precisiontech.cp.repository;
+
+import com.precisiontech.cp.entity.MaoDeObra;
+import com.precisiontech.cp.entity.Material;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.CrudRepository;
+
+public interface MaoDeObraRepository extends JpaRepository {
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaquinaRepository.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaquinaRepository.java
new file mode 100644
index 0000000..1530a6c
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaquinaRepository.java
@@ -0,0 +1,9 @@
+package com.precisiontech.cp.repository;
+
+import com.precisiontech.cp.entity.Maquina;
+import com.precisiontech.cp.entity.Material;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+public interface MaquinaRepository extends JpaRepository {
+
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaterialRepository.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaterialRepository.java
new file mode 100644
index 0000000..8149a40
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/MaterialRepository.java
@@ -0,0 +1,9 @@
+package com.precisiontech.cp.repository;
+
+import com.precisiontech.cp.entity.Material;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.repository.CrudRepository;
+
+public interface MaterialRepository extends JpaRepository {
+
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/PecaRepository.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/PecaRepository.java
new file mode 100644
index 0000000..d75c9d1
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/PecaRepository.java
@@ -0,0 +1,16 @@
+package com.precisiontech.cp.repository;
+
+import com.precisiontech.cp.entity.Peca;
+import org.springframework.data.jpa.repository.Query;
+import org.springframework.data.repository.CrudRepository;
+
+import java.util.List;
+
+public interface PecaRepository extends CrudRepository {
+ @Query("SELECT p.codigo FROM Peca p")
+ List findCodigo();
+
+ @Query("SELECT p.nomeDaPeca FROM Peca p")
+ List findNome();
+
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/SubPecaRepository.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/SubPecaRepository.java
new file mode 100644
index 0000000..95ffdd0
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/SubPecaRepository.java
@@ -0,0 +1,8 @@
+package com.precisiontech.cp.repository;
+
+import com.precisiontech.cp.entity.Peca;
+import com.precisiontech.cp.entity.SubPeca;
+import org.springframework.data.repository.CrudRepository;
+
+public interface SubPecaRepository extends CrudRepository {
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/TurmaRepository.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/TurmaRepository.java
new file mode 100644
index 0000000..f9758cc
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/TurmaRepository.java
@@ -0,0 +1,9 @@
+package com.precisiontech.cp.repository;
+
+import com.precisiontech.cp.entity.Turma;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
+public interface TurmaRepository extends JpaRepository {
+}
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/UsuarioRepository.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/UsuarioRepository.java
new file mode 100644
index 0000000..5988e91
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/repository/UsuarioRepository.java
@@ -0,0 +1,13 @@
+package com.precisiontech.cp.repository;
+
+import com.precisiontech.cp.entity.Usuario;
+import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.stereotype.Repository;
+
+import java.util.List;
+
+@Repository
+public interface UsuarioRepository extends JpaRepository {
+
+ public List findByTipoUsuario(Usuario.TipoUsuario tipoUsuario);
+}
\ No newline at end of file
diff --git a/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/util/CPUtil.java b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/util/CPUtil.java
new file mode 100644
index 0000000..880973f
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/java/com/precisiontech/cp/util/CPUtil.java
@@ -0,0 +1,7 @@
+package com.precisiontech.cp.util;
+
+public class CPUtil {
+ public static double arredondarPara3CasasDecimais(double valor) {
+ return Math.round(valor * 1000.0) / 1000.0;
+ }
+}
diff --git a/Ex09-calculo-preciso/src/main/resources/application.properties b/Ex09-calculo-preciso/src/main/resources/application.properties
new file mode 100644
index 0000000..ba61cde
--- /dev/null
+++ b/Ex09-calculo-preciso/src/main/resources/application.properties
@@ -0,0 +1,17 @@
+#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/banco_calculopreciso?useTimezone=true&serverTimezone=UTC
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/banco_calculopreciso
+spring.datasource.username=root
+spring.datasource.password=aluno
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+
+spring.jpa.show-sql=true
+spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL8Dialect
+spring.jpa.hibernate.ddl-auto=update
+
+file.upload-dir=src/main/resources/static/uploads
+# Increase the size allowed for uploaded files
+spring.servlet.multipart.max-file-size=1MB
+spring.servlet.multipart.max-request-size=1MB
+springdoc.api-docs.enabled=true
+springdoc.swagger-ui.enabled=true
+
diff --git a/Ex09-calculo-preciso/src/test/java/com/precisiontech/cp/CPApplicationTests.java b/Ex09-calculo-preciso/src/test/java/com/precisiontech/cp/CPApplicationTests.java
new file mode 100644
index 0000000..5e5308b
--- /dev/null
+++ b/Ex09-calculo-preciso/src/test/java/com/precisiontech/cp/CPApplicationTests.java
@@ -0,0 +1,13 @@
+package com.precisiontech.cp;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class Mvp03ApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}
diff --git a/Ex09-calculo-preciso/target/classes/application.properties b/Ex09-calculo-preciso/target/classes/application.properties
new file mode 100644
index 0000000..ba61cde
--- /dev/null
+++ b/Ex09-calculo-preciso/target/classes/application.properties
@@ -0,0 +1,17 @@
+#spring.datasource.url=jdbc:mysql://127.0.0.1:3306/banco_calculopreciso?useTimezone=true&serverTimezone=UTC
+spring.datasource.url=jdbc:mysql://127.0.0.1:3306/banco_calculopreciso
+spring.datasource.username=root
+spring.datasource.password=aluno
+spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
+
+spring.jpa.show-sql=true
+spring.jpa.properties.hibernate.dialect =org.hibernate.dialect.MySQL8Dialect
+spring.jpa.hibernate.ddl-auto=update
+
+file.upload-dir=src/main/resources/static/uploads
+# Increase the size allowed for uploaded files
+spring.servlet.multipart.max-file-size=1MB
+spring.servlet.multipart.max-request-size=1MB
+springdoc.api-docs.enabled=true
+springdoc.swagger-ui.enabled=true
+
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/CPApplication.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/CPApplication.class
new file mode 100644
index 0000000..ba1c287
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/CPApplication.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/MaoDeObraDTO.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/MaoDeObraDTO.class
new file mode 100644
index 0000000..1ec533b
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/MaoDeObraDTO.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/MaterialDTO.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/MaterialDTO.class
new file mode 100644
index 0000000..3d48cc9
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/MaterialDTO.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/PecaDTORequest.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/PecaDTORequest.class
new file mode 100644
index 0000000..ba60848
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/PecaDTORequest.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/PecaDTOResponse.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/PecaDTOResponse.class
new file mode 100644
index 0000000..2012a2d
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/PecaDTOResponse.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/SubPecaDTORequest.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/SubPecaDTORequest.class
new file mode 100644
index 0000000..45911c5
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/DTO/SubPecaDTORequest.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/config/WebConfig.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/config/WebConfig.class
new file mode 100644
index 0000000..b6ca6ea
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/config/WebConfig.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaoDeObraController.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaoDeObraController.class
new file mode 100644
index 0000000..b125ecc
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaoDeObraController.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaquinaController.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaquinaController.class
new file mode 100644
index 0000000..1fdfa6b
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaquinaController.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaterialController.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaterialController.class
new file mode 100644
index 0000000..52afb0c
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/MaterialController.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/PecaController.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/PecaController.class
new file mode 100644
index 0000000..a44601e
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/PecaController.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/SubPecaController.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/SubPecaController.class
new file mode 100644
index 0000000..2c4ff7a
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/SubPecaController.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/TurmaController.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/TurmaController.class
new file mode 100644
index 0000000..f0181ab
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/TurmaController.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/UsuarioController.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/UsuarioController.class
new file mode 100644
index 0000000..be85092
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/controller/UsuarioController.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Cilindro.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Cilindro.class
new file mode 100644
index 0000000..5f40284
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Cilindro.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Formato.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Formato.class
new file mode 100644
index 0000000..969ad67
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Formato.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/MaoDeObra.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/MaoDeObra.class
new file mode 100644
index 0000000..7c6737b
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/MaoDeObra.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Maquina.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Maquina.class
new file mode 100644
index 0000000..4a6a09a
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Maquina.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Material.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Material.class
new file mode 100644
index 0000000..99c0d8b
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Material.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Peca.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Peca.class
new file mode 100644
index 0000000..67c383b
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Peca.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Piramide.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Piramide.class
new file mode 100644
index 0000000..3eea351
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Piramide.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/SubPeca.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/SubPeca.class
new file mode 100644
index 0000000..3e93945
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/SubPeca.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Turma.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Turma.class
new file mode 100644
index 0000000..e314c60
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Turma.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Usuario$TipoUsuario.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Usuario$TipoUsuario.class
new file mode 100644
index 0000000..3ae6fa1
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Usuario$TipoUsuario.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Usuario.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Usuario.class
new file mode 100644
index 0000000..072e489
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/entity/Usuario.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/FormatoRepository.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/FormatoRepository.class
new file mode 100644
index 0000000..784a02b
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/FormatoRepository.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaoDeObraRepository.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaoDeObraRepository.class
new file mode 100644
index 0000000..c62ef87
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaoDeObraRepository.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaquinaRepository.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaquinaRepository.class
new file mode 100644
index 0000000..45d3fbf
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaquinaRepository.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaterialRepository.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaterialRepository.class
new file mode 100644
index 0000000..9f8cf8d
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/MaterialRepository.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/PecaRepository.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/PecaRepository.class
new file mode 100644
index 0000000..298fe57
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/PecaRepository.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/SubPecaRepository.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/SubPecaRepository.class
new file mode 100644
index 0000000..45c9e28
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/SubPecaRepository.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/TurmaRepository.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/TurmaRepository.class
new file mode 100644
index 0000000..9a2a92c
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/TurmaRepository.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/UsuarioRepository.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/UsuarioRepository.class
new file mode 100644
index 0000000..1b138c7
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/repository/UsuarioRepository.class differ
diff --git a/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/util/CPUtil.class b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/util/CPUtil.class
new file mode 100644
index 0000000..37c2626
Binary files /dev/null and b/Ex09-calculo-preciso/target/classes/com/precisiontech/cp/util/CPUtil.class differ
diff --git a/Ex10-debug/.gitattributes b/Ex10-debug/.gitattributes
new file mode 100644
index 0000000..3b41682
--- /dev/null
+++ b/Ex10-debug/.gitattributes
@@ -0,0 +1,2 @@
+/mvnw text eol=lf
+*.cmd text eol=crlf
diff --git a/Ex10-debug/.gitignore b/Ex10-debug/.gitignore
new file mode 100644
index 0000000..549e00a
--- /dev/null
+++ b/Ex10-debug/.gitignore
@@ -0,0 +1,33 @@
+HELP.md
+target/
+!.mvn/wrapper/maven-wrapper.jar
+!**/src/main/**/target/
+!**/src/test/**/target/
+
+### STS ###
+.apt_generated
+.classpath
+.factorypath
+.project
+.settings
+.springBeans
+.sts4-cache
+
+### IntelliJ IDEA ###
+.idea
+*.iws
+*.iml
+*.ipr
+
+### NetBeans ###
+/nbproject/private/
+/nbbuild/
+/dist/
+/nbdist/
+/.nb-gradle/
+build/
+!**/src/main/**/build/
+!**/src/test/**/build/
+
+### VS Code ###
+.vscode/
diff --git a/Ex10-debug/.mvn/wrapper/maven-wrapper.properties b/Ex10-debug/.mvn/wrapper/maven-wrapper.properties
new file mode 100644
index 0000000..d58dfb7
--- /dev/null
+++ b/Ex10-debug/.mvn/wrapper/maven-wrapper.properties
@@ -0,0 +1,19 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+wrapperVersion=3.3.2
+distributionType=only-script
+distributionUrl=https://repo.maven.apache.org/maven2/org/apache/maven/apache-maven/3.9.9/apache-maven-3.9.9-bin.zip
diff --git a/Ex10-debug/mvnw b/Ex10-debug/mvnw
new file mode 100644
index 0000000..19529dd
--- /dev/null
+++ b/Ex10-debug/mvnw
@@ -0,0 +1,259 @@
+#!/bin/sh
+# ----------------------------------------------------------------------------
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+# ----------------------------------------------------------------------------
+
+# ----------------------------------------------------------------------------
+# Apache Maven Wrapper startup batch script, version 3.3.2
+#
+# Optional ENV vars
+# -----------------
+# JAVA_HOME - location of a JDK home dir, required when download maven via java source
+# MVNW_REPOURL - repo url base for downloading maven distribution
+# MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+# MVNW_VERBOSE - true: enable verbose log; debug: trace the mvnw script; others: silence the output
+# ----------------------------------------------------------------------------
+
+set -euf
+[ "${MVNW_VERBOSE-}" != debug ] || set -x
+
+# OS specific support.
+native_path() { printf %s\\n "$1"; }
+case "$(uname)" in
+CYGWIN* | MINGW*)
+ [ -z "${JAVA_HOME-}" ] || JAVA_HOME="$(cygpath --unix "$JAVA_HOME")"
+ native_path() { cygpath --path --windows "$1"; }
+ ;;
+esac
+
+# set JAVACMD and JAVACCMD
+set_java_home() {
+ # For Cygwin and MinGW, ensure paths are in Unix format before anything is touched
+ if [ -n "${JAVA_HOME-}" ]; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ]; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ JAVACCMD="$JAVA_HOME/jre/sh/javac"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ JAVACCMD="$JAVA_HOME/bin/javac"
+
+ if [ ! -x "$JAVACMD" ] || [ ! -x "$JAVACCMD" ]; then
+ echo "The JAVA_HOME environment variable is not defined correctly, so mvnw cannot run." >&2
+ echo "JAVA_HOME is set to \"$JAVA_HOME\", but \"\$JAVA_HOME/bin/java\" or \"\$JAVA_HOME/bin/javac\" does not exist." >&2
+ return 1
+ fi
+ fi
+ else
+ JAVACMD="$(
+ 'set' +e
+ 'unset' -f command 2>/dev/null
+ 'command' -v java
+ )" || :
+ JAVACCMD="$(
+ 'set' +e
+ 'unset' -f command 2>/dev/null
+ 'command' -v javac
+ )" || :
+
+ if [ ! -x "${JAVACMD-}" ] || [ ! -x "${JAVACCMD-}" ]; then
+ echo "The java/javac command does not exist in PATH nor is JAVA_HOME set, so mvnw cannot run." >&2
+ return 1
+ fi
+ fi
+}
+
+# hash string like Java String::hashCode
+hash_string() {
+ str="${1:-}" h=0
+ while [ -n "$str" ]; do
+ char="${str%"${str#?}"}"
+ h=$(((h * 31 + $(LC_CTYPE=C printf %d "'$char")) % 4294967296))
+ str="${str#?}"
+ done
+ printf %x\\n $h
+}
+
+verbose() { :; }
+[ "${MVNW_VERBOSE-}" != true ] || verbose() { printf %s\\n "${1-}"; }
+
+die() {
+ printf %s\\n "$1" >&2
+ exit 1
+}
+
+trim() {
+ # MWRAPPER-139:
+ # Trims trailing and leading whitespace, carriage returns, tabs, and linefeeds.
+ # Needed for removing poorly interpreted newline sequences when running in more
+ # exotic environments such as mingw bash on Windows.
+ printf "%s" "${1}" | tr -d '[:space:]'
+}
+
+# parse distributionUrl and optional distributionSha256Sum, requires .mvn/wrapper/maven-wrapper.properties
+while IFS="=" read -r key value; do
+ case "${key-}" in
+ distributionUrl) distributionUrl=$(trim "${value-}") ;;
+ distributionSha256Sum) distributionSha256Sum=$(trim "${value-}") ;;
+ esac
+done <"${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+[ -n "${distributionUrl-}" ] || die "cannot read distributionUrl property in ${0%/*}/.mvn/wrapper/maven-wrapper.properties"
+
+case "${distributionUrl##*/}" in
+maven-mvnd-*bin.*)
+ MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/
+ case "${PROCESSOR_ARCHITECTURE-}${PROCESSOR_ARCHITEW6432-}:$(uname -a)" in
+ *AMD64:CYGWIN* | *AMD64:MINGW*) distributionPlatform=windows-amd64 ;;
+ :Darwin*x86_64) distributionPlatform=darwin-amd64 ;;
+ :Darwin*arm64) distributionPlatform=darwin-aarch64 ;;
+ :Linux*x86_64*) distributionPlatform=linux-amd64 ;;
+ *)
+ echo "Cannot detect native platform for mvnd on $(uname)-$(uname -m), use pure java version" >&2
+ distributionPlatform=linux-amd64
+ ;;
+ esac
+ distributionUrl="${distributionUrl%-bin.*}-$distributionPlatform.zip"
+ ;;
+maven-mvnd-*) MVN_CMD=mvnd.sh _MVNW_REPO_PATTERN=/maven/mvnd/ ;;
+*) MVN_CMD="mvn${0##*/mvnw}" _MVNW_REPO_PATTERN=/org/apache/maven/ ;;
+esac
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
+[ -z "${MVNW_REPOURL-}" ] || distributionUrl="$MVNW_REPOURL$_MVNW_REPO_PATTERN${distributionUrl#*"$_MVNW_REPO_PATTERN"}"
+distributionUrlName="${distributionUrl##*/}"
+distributionUrlNameMain="${distributionUrlName%.*}"
+distributionUrlNameMain="${distributionUrlNameMain%-bin}"
+MAVEN_USER_HOME="${MAVEN_USER_HOME:-${HOME}/.m2}"
+MAVEN_HOME="${MAVEN_USER_HOME}/wrapper/dists/${distributionUrlNameMain-}/$(hash_string "$distributionUrl")"
+
+exec_maven() {
+ unset MVNW_VERBOSE MVNW_USERNAME MVNW_PASSWORD MVNW_REPOURL || :
+ exec "$MAVEN_HOME/bin/$MVN_CMD" "$@" || die "cannot exec $MAVEN_HOME/bin/$MVN_CMD"
+}
+
+if [ -d "$MAVEN_HOME" ]; then
+ verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+ exec_maven "$@"
+fi
+
+case "${distributionUrl-}" in
+*?-bin.zip | *?maven-mvnd-?*-?*.zip) ;;
+*) die "distributionUrl is not valid, must match *-bin.zip or maven-mvnd-*.zip, but found '${distributionUrl-}'" ;;
+esac
+
+# prepare tmp dir
+if TMP_DOWNLOAD_DIR="$(mktemp -d)" && [ -d "$TMP_DOWNLOAD_DIR" ]; then
+ clean() { rm -rf -- "$TMP_DOWNLOAD_DIR"; }
+ trap clean HUP INT TERM EXIT
+else
+ die "cannot create temp dir"
+fi
+
+mkdir -p -- "${MAVEN_HOME%/*}"
+
+# Download and Install Apache Maven
+verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+verbose "Downloading from: $distributionUrl"
+verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+# select .zip or .tar.gz
+if ! command -v unzip >/dev/null; then
+ distributionUrl="${distributionUrl%.zip}.tar.gz"
+ distributionUrlName="${distributionUrl##*/}"
+fi
+
+# verbose opt
+__MVNW_QUIET_WGET=--quiet __MVNW_QUIET_CURL=--silent __MVNW_QUIET_UNZIP=-q __MVNW_QUIET_TAR=''
+[ "${MVNW_VERBOSE-}" != true ] || __MVNW_QUIET_WGET='' __MVNW_QUIET_CURL='' __MVNW_QUIET_UNZIP='' __MVNW_QUIET_TAR=v
+
+# normalize http auth
+case "${MVNW_PASSWORD:+has-password}" in
+'') MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+has-password) [ -n "${MVNW_USERNAME-}" ] || MVNW_USERNAME='' MVNW_PASSWORD='' ;;
+esac
+
+if [ -z "${MVNW_USERNAME-}" ] && command -v wget >/dev/null; then
+ verbose "Found wget ... using wget"
+ wget ${__MVNW_QUIET_WGET:+"$__MVNW_QUIET_WGET"} "$distributionUrl" -O "$TMP_DOWNLOAD_DIR/$distributionUrlName" || die "wget: Failed to fetch $distributionUrl"
+elif [ -z "${MVNW_USERNAME-}" ] && command -v curl >/dev/null; then
+ verbose "Found curl ... using curl"
+ curl ${__MVNW_QUIET_CURL:+"$__MVNW_QUIET_CURL"} -f -L -o "$TMP_DOWNLOAD_DIR/$distributionUrlName" "$distributionUrl" || die "curl: Failed to fetch $distributionUrl"
+elif set_java_home; then
+ verbose "Falling back to use Java to download"
+ javaSource="$TMP_DOWNLOAD_DIR/Downloader.java"
+ targetZip="$TMP_DOWNLOAD_DIR/$distributionUrlName"
+ cat >"$javaSource" <<-END
+ public class Downloader extends java.net.Authenticator
+ {
+ protected java.net.PasswordAuthentication getPasswordAuthentication()
+ {
+ return new java.net.PasswordAuthentication( System.getenv( "MVNW_USERNAME" ), System.getenv( "MVNW_PASSWORD" ).toCharArray() );
+ }
+ public static void main( String[] args ) throws Exception
+ {
+ setDefault( new Downloader() );
+ java.nio.file.Files.copy( java.net.URI.create( args[0] ).toURL().openStream(), java.nio.file.Paths.get( args[1] ).toAbsolutePath().normalize() );
+ }
+ }
+ END
+ # For Cygwin/MinGW, switch paths to Windows format before running javac and java
+ verbose " - Compiling Downloader.java ..."
+ "$(native_path "$JAVACCMD")" "$(native_path "$javaSource")" || die "Failed to compile Downloader.java"
+ verbose " - Running Downloader.java ..."
+ "$(native_path "$JAVACMD")" -cp "$(native_path "$TMP_DOWNLOAD_DIR")" Downloader "$distributionUrl" "$(native_path "$targetZip")"
+fi
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+if [ -n "${distributionSha256Sum-}" ]; then
+ distributionSha256Result=false
+ if [ "$MVN_CMD" = mvnd.sh ]; then
+ echo "Checksum validation is not supported for maven-mvnd." >&2
+ echo "Please disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+ exit 1
+ elif command -v sha256sum >/dev/null; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | sha256sum -c >/dev/null 2>&1; then
+ distributionSha256Result=true
+ fi
+ elif command -v shasum >/dev/null; then
+ if echo "$distributionSha256Sum $TMP_DOWNLOAD_DIR/$distributionUrlName" | shasum -a 256 -c >/dev/null 2>&1; then
+ distributionSha256Result=true
+ fi
+ else
+ echo "Checksum validation was requested but neither 'sha256sum' or 'shasum' are available." >&2
+ echo "Please install either command, or disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties." >&2
+ exit 1
+ fi
+ if [ $distributionSha256Result = false ]; then
+ echo "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised." >&2
+ echo "If you updated your Maven version, you need to update the specified distributionSha256Sum property." >&2
+ exit 1
+ fi
+fi
+
+# unzip and move
+if command -v unzip >/dev/null; then
+ unzip ${__MVNW_QUIET_UNZIP:+"$__MVNW_QUIET_UNZIP"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -d "$TMP_DOWNLOAD_DIR" || die "failed to unzip"
+else
+ tar xzf${__MVNW_QUIET_TAR:+"$__MVNW_QUIET_TAR"} "$TMP_DOWNLOAD_DIR/$distributionUrlName" -C "$TMP_DOWNLOAD_DIR" || die "failed to untar"
+fi
+printf %s\\n "$distributionUrl" >"$TMP_DOWNLOAD_DIR/$distributionUrlNameMain/mvnw.url"
+mv -- "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" "$MAVEN_HOME" || [ -d "$MAVEN_HOME" ] || die "fail to move MAVEN_HOME"
+
+clean || :
+exec_maven "$@"
diff --git a/Ex10-debug/mvnw.cmd b/Ex10-debug/mvnw.cmd
new file mode 100644
index 0000000..249bdf3
--- /dev/null
+++ b/Ex10-debug/mvnw.cmd
@@ -0,0 +1,149 @@
+<# : batch portion
+@REM ----------------------------------------------------------------------------
+@REM Licensed to the Apache Software Foundation (ASF) under one
+@REM or more contributor license agreements. See the NOTICE file
+@REM distributed with this work for additional information
+@REM regarding copyright ownership. The ASF licenses this file
+@REM to you under the Apache License, Version 2.0 (the
+@REM "License"); you may not use this file except in compliance
+@REM with the License. You may obtain a copy of the License at
+@REM
+@REM http://www.apache.org/licenses/LICENSE-2.0
+@REM
+@REM Unless required by applicable law or agreed to in writing,
+@REM software distributed under the License is distributed on an
+@REM "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+@REM KIND, either express or implied. See the License for the
+@REM specific language governing permissions and limitations
+@REM under the License.
+@REM ----------------------------------------------------------------------------
+
+@REM ----------------------------------------------------------------------------
+@REM Apache Maven Wrapper startup batch script, version 3.3.2
+@REM
+@REM Optional ENV vars
+@REM MVNW_REPOURL - repo url base for downloading maven distribution
+@REM MVNW_USERNAME/MVNW_PASSWORD - user and password for downloading maven
+@REM MVNW_VERBOSE - true: enable verbose log; others: silence the output
+@REM ----------------------------------------------------------------------------
+
+@IF "%__MVNW_ARG0_NAME__%"=="" (SET __MVNW_ARG0_NAME__=%~nx0)
+@SET __MVNW_CMD__=
+@SET __MVNW_ERROR__=
+@SET __MVNW_PSMODULEP_SAVE=%PSModulePath%
+@SET PSModulePath=
+@FOR /F "usebackq tokens=1* delims==" %%A IN (`powershell -noprofile "& {$scriptDir='%~dp0'; $script='%__MVNW_ARG0_NAME__%'; icm -ScriptBlock ([Scriptblock]::Create((Get-Content -Raw '%~f0'))) -NoNewScope}"`) DO @(
+ IF "%%A"=="MVN_CMD" (set __MVNW_CMD__=%%B) ELSE IF "%%B"=="" (echo %%A) ELSE (echo %%A=%%B)
+)
+@SET PSModulePath=%__MVNW_PSMODULEP_SAVE%
+@SET __MVNW_PSMODULEP_SAVE=
+@SET __MVNW_ARG0_NAME__=
+@SET MVNW_USERNAME=
+@SET MVNW_PASSWORD=
+@IF NOT "%__MVNW_CMD__%"=="" (%__MVNW_CMD__% %*)
+@echo Cannot start maven from wrapper >&2 && exit /b 1
+@GOTO :EOF
+: end batch / begin powershell #>
+
+$ErrorActionPreference = "Stop"
+if ($env:MVNW_VERBOSE -eq "true") {
+ $VerbosePreference = "Continue"
+}
+
+# calculate distributionUrl, requires .mvn/wrapper/maven-wrapper.properties
+$distributionUrl = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionUrl
+if (!$distributionUrl) {
+ Write-Error "cannot read distributionUrl property in $scriptDir/.mvn/wrapper/maven-wrapper.properties"
+}
+
+switch -wildcard -casesensitive ( $($distributionUrl -replace '^.*/','') ) {
+ "maven-mvnd-*" {
+ $USE_MVND = $true
+ $distributionUrl = $distributionUrl -replace '-bin\.[^.]*$',"-windows-amd64.zip"
+ $MVN_CMD = "mvnd.cmd"
+ break
+ }
+ default {
+ $USE_MVND = $false
+ $MVN_CMD = $script -replace '^mvnw','mvn'
+ break
+ }
+}
+
+# apply MVNW_REPOURL and calculate MAVEN_HOME
+# maven home pattern: ~/.m2/wrapper/dists/{apache-maven-,maven-mvnd--}/
+if ($env:MVNW_REPOURL) {
+ $MVNW_REPO_PATTERN = if ($USE_MVND) { "/org/apache/maven/" } else { "/maven/mvnd/" }
+ $distributionUrl = "$env:MVNW_REPOURL$MVNW_REPO_PATTERN$($distributionUrl -replace '^.*'+$MVNW_REPO_PATTERN,'')"
+}
+$distributionUrlName = $distributionUrl -replace '^.*/',''
+$distributionUrlNameMain = $distributionUrlName -replace '\.[^.]*$','' -replace '-bin$',''
+$MAVEN_HOME_PARENT = "$HOME/.m2/wrapper/dists/$distributionUrlNameMain"
+if ($env:MAVEN_USER_HOME) {
+ $MAVEN_HOME_PARENT = "$env:MAVEN_USER_HOME/wrapper/dists/$distributionUrlNameMain"
+}
+$MAVEN_HOME_NAME = ([System.Security.Cryptography.MD5]::Create().ComputeHash([byte[]][char[]]$distributionUrl) | ForEach-Object {$_.ToString("x2")}) -join ''
+$MAVEN_HOME = "$MAVEN_HOME_PARENT/$MAVEN_HOME_NAME"
+
+if (Test-Path -Path "$MAVEN_HOME" -PathType Container) {
+ Write-Verbose "found existing MAVEN_HOME at $MAVEN_HOME"
+ Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
+ exit $?
+}
+
+if (! $distributionUrlNameMain -or ($distributionUrlName -eq $distributionUrlNameMain)) {
+ Write-Error "distributionUrl is not valid, must end with *-bin.zip, but found $distributionUrl"
+}
+
+# prepare tmp dir
+$TMP_DOWNLOAD_DIR_HOLDER = New-TemporaryFile
+$TMP_DOWNLOAD_DIR = New-Item -Itemtype Directory -Path "$TMP_DOWNLOAD_DIR_HOLDER.dir"
+$TMP_DOWNLOAD_DIR_HOLDER.Delete() | Out-Null
+trap {
+ if ($TMP_DOWNLOAD_DIR.Exists) {
+ try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+ catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+ }
+}
+
+New-Item -Itemtype Directory -Path "$MAVEN_HOME_PARENT" -Force | Out-Null
+
+# Download and Install Apache Maven
+Write-Verbose "Couldn't find MAVEN_HOME, downloading and installing it ..."
+Write-Verbose "Downloading from: $distributionUrl"
+Write-Verbose "Downloading to: $TMP_DOWNLOAD_DIR/$distributionUrlName"
+
+$webclient = New-Object System.Net.WebClient
+if ($env:MVNW_USERNAME -and $env:MVNW_PASSWORD) {
+ $webclient.Credentials = New-Object System.Net.NetworkCredential($env:MVNW_USERNAME, $env:MVNW_PASSWORD)
+}
+[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
+$webclient.DownloadFile($distributionUrl, "$TMP_DOWNLOAD_DIR/$distributionUrlName") | Out-Null
+
+# If specified, validate the SHA-256 sum of the Maven distribution zip file
+$distributionSha256Sum = (Get-Content -Raw "$scriptDir/.mvn/wrapper/maven-wrapper.properties" | ConvertFrom-StringData).distributionSha256Sum
+if ($distributionSha256Sum) {
+ if ($USE_MVND) {
+ Write-Error "Checksum validation is not supported for maven-mvnd. `nPlease disable validation by removing 'distributionSha256Sum' from your maven-wrapper.properties."
+ }
+ Import-Module $PSHOME\Modules\Microsoft.PowerShell.Utility -Function Get-FileHash
+ if ((Get-FileHash "$TMP_DOWNLOAD_DIR/$distributionUrlName" -Algorithm SHA256).Hash.ToLower() -ne $distributionSha256Sum) {
+ Write-Error "Error: Failed to validate Maven distribution SHA-256, your Maven distribution might be compromised. If you updated your Maven version, you need to update the specified distributionSha256Sum property."
+ }
+}
+
+# unzip and move
+Expand-Archive "$TMP_DOWNLOAD_DIR/$distributionUrlName" -DestinationPath "$TMP_DOWNLOAD_DIR" | Out-Null
+Rename-Item -Path "$TMP_DOWNLOAD_DIR/$distributionUrlNameMain" -NewName $MAVEN_HOME_NAME | Out-Null
+try {
+ Move-Item -Path "$TMP_DOWNLOAD_DIR/$MAVEN_HOME_NAME" -Destination $MAVEN_HOME_PARENT | Out-Null
+} catch {
+ if (! (Test-Path -Path "$MAVEN_HOME" -PathType Container)) {
+ Write-Error "fail to move MAVEN_HOME"
+ }
+} finally {
+ try { Remove-Item $TMP_DOWNLOAD_DIR -Recurse -Force | Out-Null }
+ catch { Write-Warning "Cannot remove $TMP_DOWNLOAD_DIR" }
+}
+
+Write-Output "MVN_CMD=$MAVEN_HOME/bin/$MVN_CMD"
diff --git a/Ex10-debug/pom.xml b/Ex10-debug/pom.xml
new file mode 100644
index 0000000..531c3c8
--- /dev/null
+++ b/Ex10-debug/pom.xml
@@ -0,0 +1,85 @@
+
+
+ 4.0.0
+
+ org.springframework.boot
+ spring-boot-starter-parent
+ 3.4.3
+
+
+ com.senai
+ mvc
+ 0.0.1-SNAPSHOT
+ mvc
+ Demo project for Spring Boot
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 17
+
+
+
+ org.springframework.boot
+ spring-boot-starter-web
+
+
+
+ org.projectlombok
+ lombok
+ true
+
+
+
+ org.springdoc
+ springdoc-openapi-starter-webmvc-ui
+ 2.5.0
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+ org.projectlombok
+ lombok
+
+
+
+
+
+
+
+
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/MvcApplication.java b/Ex10-debug/src/main/java/com/senai/mvc/MvcApplication.java
new file mode 100644
index 0000000..b2c72c0
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/MvcApplication.java
@@ -0,0 +1,13 @@
+package com.senai.mvc;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+
+@SpringBootApplication
+public class MvcApplication {
+
+ public static void main(String[] args) {
+ SpringApplication.run(MvcApplication.class, args);
+ }
+
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeClientes.java b/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeClientes.java
new file mode 100644
index 0000000..fde36d9
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeClientes.java
@@ -0,0 +1,52 @@
+package com.senai.mvc.banco;
+
+
+
+import com.senai.mvc.model.Cliente;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BancoDeClientes {
+ private List clientes;
+
+ public BancoDeClientes() {
+ this.clientes = new ArrayList<>();
+ }
+
+ // Insere um novo produto na lista
+ public void insert(Cliente p) {
+ clientes.add(p);
+ }
+
+ // Busca um produto pelo ID
+ public Cliente findOne(int id) {
+ for (Cliente p : clientes) {
+ if (p.getIdCliente() == id) {
+ return p;
+ }
+ }
+ return null; // Retorna null se não encontrar
+ }
+
+ // Retorna todos os produtos cadastrados
+ public List findAll() {
+ return new ArrayList<>(clientes);
+ }
+
+ // Atualiza um produto existente na lista
+ public boolean update(Cliente p) {
+ for (int i = 0; i < clientes.size(); i++) {
+ if (clientes.get(i).getIdCliente() == p.getIdCliente()) {
+ clientes.set(i, p);
+ return true; // Retorno indicando que a atualização foi feita
+ }
+ }
+ return false; // Retorna falso se o produto não foi encontrado
+ }
+
+ // Remove um produto pelo ID
+ public boolean delete(int id) {
+ return clientes.removeIf(p -> p.getIdCliente() == id);
+ }
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeProdutos.java b/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeProdutos.java
new file mode 100644
index 0000000..65a9068
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeProdutos.java
@@ -0,0 +1,49 @@
+package com.senai.mvc.banco;
+
+import java.util.ArrayList;
+import java.util.List;
+import com.senai.mvc.model.Produto;
+
+public class BancoDeProdutos {
+ private List produtos;
+
+ public BancoDeProdutos() {
+ this.produtos = new ArrayList<>();
+ }
+
+ // Insere um novo produto na lista
+ public void insert(Produto p) {
+ produtos.add(p);
+ }
+
+ // Busca um produto pelo ID
+ public Produto findOne(int id) {
+ for (Produto p : produtos) {
+ if (p.getIdProduto() == id) {
+ return p;
+ }
+ }
+ return null; // Retorna null se não encontrar
+ }
+
+ // Retorna todos os produtos cadastrados
+ public List findAll() {
+ return new ArrayList<>(produtos);
+ }
+
+ // Atualiza um produto existente na lista
+ public boolean update(Produto p) {
+ for (int i = 0; i < produtos.size(); i++) {
+ if (produtos.get(i).getIdProduto() == p.getIdProduto()) {
+ produtos.set(i, p);
+ return true; // Retorno indicando que a atualização foi feita
+ }
+ }
+ return false; // Retorna falso se o produto não foi encontrado
+ }
+
+ // Remove um produto pelo ID
+ public boolean delete(int id) {
+ return produtos.removeIf(p -> p.getIdProduto() == id);
+ }
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeVendas.java b/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeVendas.java
new file mode 100644
index 0000000..973754b
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/banco/BancoDeVendas.java
@@ -0,0 +1,51 @@
+package com.senai.mvc.banco;
+
+import com.senai.mvc.model.Cliente;
+import com.senai.mvc.model.Venda;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class BancoDeVendas {
+ private List venda;
+
+ public BancoDeVendas() {
+ this.venda = new ArrayList<>();
+ }
+
+ // Insere um novo produto na lista
+ public void insert(Venda p) {
+ venda.add(p);
+ }
+
+ // Busca um produto pelo ID
+ public Venda findOne(int id) {
+ for (Venda p : venda) {
+ if (p.getIdVenda() == id) {
+ return p;
+ }
+ }
+ return null; // Retorna null se não encontrar
+ }
+
+ // Retorna todos os produtos cadastrados
+ public List findAll() {
+ return new ArrayList<>(venda);
+ }
+
+ // Atualiza um produto existente na lista
+ public boolean update(Venda p) {
+ for (int i = 0; i < venda.size(); i++) {
+ if (venda.get(i).getIdVenda() == p.getIdVenda()) {
+ venda.set(i, p);
+ return true; // Retorno indicando que a atualização foi feita
+ }
+ }
+ return false; // Retorna falso se o produto não foi encontrado
+ }
+
+ // Remove um produto pelo ID
+ public boolean delete(int id) {
+ return venda.removeIf(p -> p.getIdVenda() == id);
+ }
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/controller/ClienteController.java b/Ex10-debug/src/main/java/com/senai/mvc/controller/ClienteController.java
new file mode 100644
index 0000000..d495263
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/controller/ClienteController.java
@@ -0,0 +1,19 @@
+package com.senai.mvc.controller;
+
+import com.senai.mvc.banco.BancoDeClientes;
+import com.senai.mvc.model.Cliente;
+
+import java.util.List;
+
+public class ClienteController {
+
+ BancoDeClientes bc = new BancoDeClientes();
+ public List getAllClientes() {
+ return bc.findAll();
+ }
+
+ public Boolean save(Cliente c) {
+ bc.insert(c);
+ return true;
+ }
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/controller/ProdutoController.java b/Ex10-debug/src/main/java/com/senai/mvc/controller/ProdutoController.java
new file mode 100644
index 0000000..08a3538
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/controller/ProdutoController.java
@@ -0,0 +1,22 @@
+package com.senai.mvc.controller;
+
+import com.senai.mvc.banco.BancoDeClientes;
+import com.senai.mvc.banco.BancoDeProdutos;
+import com.senai.mvc.model.Cliente;
+import com.senai.mvc.model.Produto;
+
+import java.util.List;
+
+public class ProdutoController {
+
+ BancoDeProdutos bp = new BancoDeProdutos();
+
+ public List getAllProdutos() {
+ return bp.findAll();
+ }
+
+ public Boolean save(Produto p) {
+ bp.insert(p);
+ return true;
+ }
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/controller/VendaController.java b/Ex10-debug/src/main/java/com/senai/mvc/controller/VendaController.java
new file mode 100644
index 0000000..26484a0
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/controller/VendaController.java
@@ -0,0 +1,45 @@
+package com.senai.mvc.controller;
+
+import com.senai.mvc.banco.BancoDeClientes;
+import com.senai.mvc.banco.BancoDeProdutos;
+import com.senai.mvc.banco.BancoDeVendas;
+import com.senai.mvc.model.Cliente;
+import com.senai.mvc.model.Produto;
+import com.senai.mvc.model.Venda;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class VendaController {
+
+ BancoDeVendas bcoVendas = new BancoDeVendas();
+ BancoDeClientes bcoClientes = new BancoDeClientes();
+ BancoDeProdutos bcoProdutos = new BancoDeProdutos();
+
+ public List getAllVendas() {
+ return bcoVendas.findAll();
+ }
+
+ public Boolean save(Venda v) {
+ List clientesCadastrados = bcoClientes.findAll();
+ List produtosCadastrados = bcoProdutos.findAll();
+
+ Cliente clienteEnviado = v.getCliente();
+ List produtosEnviados = v.getProduto();
+
+ // verifica se o cliente está dentro da lista
+ if (bcoClientes.findOne(clienteEnviado.getIdCliente()) == null){
+ return false;
+ }
+
+ // verifica se os produtos enviados estão dentro da lista
+ for (Produto p : produtosEnviados){
+ if (bcoProdutos.findOne(p.getIdProduto()) == null){
+ return false;
+ }
+ }
+
+ bcoVendas.insert(v);
+ return true;
+ }
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/model/Cliente.java b/Ex10-debug/src/main/java/com/senai/mvc/model/Cliente.java
new file mode 100644
index 0000000..465691d
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/model/Cliente.java
@@ -0,0 +1,17 @@
+package com.senai.mvc.model;
+
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class Cliente {
+ private Integer idCliente;
+ private String nome;
+ private String CPF;
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/model/Produto.java b/Ex10-debug/src/main/java/com/senai/mvc/model/Produto.java
new file mode 100644
index 0000000..892bef2
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/model/Produto.java
@@ -0,0 +1,17 @@
+package com.senai.mvc.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class Produto {
+ private Integer idProduto;
+ private String nome;
+ private Double preco;
+ private Integer quantidade;
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/model/Venda.java b/Ex10-debug/src/main/java/com/senai/mvc/model/Venda.java
new file mode 100644
index 0000000..2560072
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/model/Venda.java
@@ -0,0 +1,20 @@
+package com.senai.mvc.model;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+import lombok.Setter;
+
+import java.time.LocalDate;
+import java.util.ArrayList;
+
+@Getter
+@Setter
+@AllArgsConstructor
+@NoArgsConstructor
+public class Venda {
+ private Integer idVenda;
+ private LocalDate dataDaVenda;
+ private ArrayList produto;
+ private Cliente cliente;
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/view/ClienteView.java b/Ex10-debug/src/main/java/com/senai/mvc/view/ClienteView.java
new file mode 100644
index 0000000..2e1abee
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/view/ClienteView.java
@@ -0,0 +1,27 @@
+package com.senai.mvc.view;
+
+import com.senai.mvc.controller.ClienteController;
+import com.senai.mvc.model.Cliente;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@RestController
+public class ClienteView {
+
+ ClienteController ct = new ClienteController();
+
+ @GetMapping("/cliente")
+ public List getAllClientes(){
+ return ct.getAllClientes();
+ }
+
+ @PostMapping("/cliente")
+ public Boolean postCliente(@RequestBody Cliente c){
+ return ct.save(c);
+ }
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/view/ProdutoView.java b/Ex10-debug/src/main/java/com/senai/mvc/view/ProdutoView.java
new file mode 100644
index 0000000..4ce3507
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/view/ProdutoView.java
@@ -0,0 +1,28 @@
+package com.senai.mvc.view;
+
+import com.senai.mvc.controller.ClienteController;
+import com.senai.mvc.controller.ProdutoController;
+import com.senai.mvc.model.Cliente;
+import com.senai.mvc.model.Produto;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+public class ProdutoView {
+
+ ProdutoController pt = new ProdutoController();
+
+ @GetMapping("/produto")
+ public List getAllProdutos(){
+ return pt.getAllProdutos();
+ }
+
+ @PostMapping("/produto")
+ public Boolean postProduto(@RequestBody Produto p){
+ return pt.save(p);
+ }
+}
diff --git a/Ex10-debug/src/main/java/com/senai/mvc/view/VendaView.java b/Ex10-debug/src/main/java/com/senai/mvc/view/VendaView.java
new file mode 100644
index 0000000..1d484b0
--- /dev/null
+++ b/Ex10-debug/src/main/java/com/senai/mvc/view/VendaView.java
@@ -0,0 +1,28 @@
+package com.senai.mvc.view;
+
+import com.senai.mvc.controller.ClienteController;
+import com.senai.mvc.controller.VendaController;
+import com.senai.mvc.model.Cliente;
+import com.senai.mvc.model.Venda;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+public class VendaView {
+
+ VendaController ct = new VendaController();
+
+ @GetMapping("/venda")
+ public List getAllVendas(){
+ return ct.getAllVendas();
+ }
+
+ @PostMapping("/venda")
+ public Boolean postVendas(@RequestBody Venda v){
+ return ct.save(v);
+ }
+}
diff --git a/Ex10-debug/src/main/resources/application.properties b/Ex10-debug/src/main/resources/application.properties
new file mode 100644
index 0000000..6ab31e8
--- /dev/null
+++ b/Ex10-debug/src/main/resources/application.properties
@@ -0,0 +1 @@
+spring.application.name=mvc
diff --git a/Ex10-debug/src/test/java/com/senai/mvc/MvcApplicationTests.java b/Ex10-debug/src/test/java/com/senai/mvc/MvcApplicationTests.java
new file mode 100644
index 0000000..39f526b
--- /dev/null
+++ b/Ex10-debug/src/test/java/com/senai/mvc/MvcApplicationTests.java
@@ -0,0 +1,13 @@
+package com.senai.mvc;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.boot.test.context.SpringBootTest;
+
+@SpringBootTest
+class MvcApplicationTests {
+
+ @Test
+ void contextLoads() {
+ }
+
+}