From 70c10f57def09ecf1ad2d32979714ec101d93dc0 Mon Sep 17 00:00:00 2001
From: Lucas PLE <plel@acajou07.iut-infobio.priv.univ-lille1.fr>
Date: Tue, 2 Feb 2021 15:33:35 +0100
Subject: [PATCH] tp3 fini

---
 src/main/java/fr/ulille/iut/tva/Main.java     |  2 +-
 .../java/fr/ulille/iut/tva/dto/DetailDto.java | 66 ++++++++++++++++++
 .../fr/ulille/iut/tva/dto/InfoTauxDto.java    | 35 ++++++++++
 .../NiveauTvaInexistantException.java         | 16 +++++
 .../iut/tva/ressource/TvaRessource.java       | 67 +++++++++++++++++++
 5 files changed, 185 insertions(+), 1 deletion(-)
 create mode 100644 src/main/java/fr/ulille/iut/tva/dto/DetailDto.java
 create mode 100644 src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java
 create mode 100644 src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java

diff --git a/src/main/java/fr/ulille/iut/tva/Main.java b/src/main/java/fr/ulille/iut/tva/Main.java
index 62da555..7038335 100644
--- a/src/main/java/fr/ulille/iut/tva/Main.java
+++ b/src/main/java/fr/ulille/iut/tva/Main.java
@@ -16,7 +16,7 @@ import java.util.logging.Logger;
  */
 public class Main {
     // Base URI the Grizzly HTTP server will listen on
-    public static final String BASE_URI = "http://localhost:8080/myapp/";
+    public static final String BASE_URI = "http://localhost:8080/api/v1";
 
     /**
      * Starts Grizzly HTTP server exposing JAX-RS resources defined in this application.
diff --git a/src/main/java/fr/ulille/iut/tva/dto/DetailDto.java b/src/main/java/fr/ulille/iut/tva/dto/DetailDto.java
new file mode 100644
index 0000000..1e410ff
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/dto/DetailDto.java
@@ -0,0 +1,66 @@
+package fr.ulille.iut.tva.dto;
+
+import fr.ulille.iut.tva.service.TauxTva;
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class DetailDto {
+	private double montantTotal;
+	private double montantTva;
+	private double somme;
+	private String tauxLabel;
+	private double tauxValue;
+	
+	public DetailDto() {}
+	
+	public DetailDto(TauxTva tauxTva, double somme) {
+		this.somme = somme;
+		this.tauxLabel = tauxTva.name();
+		this.tauxValue = tauxTva.taux;
+		this.montantTva = somme*(tauxValue/100);
+		this.montantTotal = somme + montantTva;
+	}
+	
+	public double getMontantTotal() {
+		return montantTotal;
+	}
+	
+	public void setMontantTotal(double montantTotal) {
+		this.montantTotal = montantTotal;
+	}
+	
+	public double getMontantTva() {
+		return montantTva;
+	}
+	
+	public void setMontantTva(double montantTva) {
+		this.montantTva = montantTva;
+	}
+	
+	public double getSomme() {
+		return somme;
+	}
+	
+	public void setSomme(double somme) {
+		this.somme = somme;
+	}
+	
+	public String getTauxLabel() {
+		return tauxLabel;
+	}
+	
+	public void setTauxLabel(String tauxLabel) {
+		this.tauxLabel = tauxLabel;
+	}
+	
+	public double getTauxValue() {
+		return tauxValue;
+	}
+	
+	public void setTauxValue(double tauxValue) {
+		this.tauxValue = tauxValue;
+	}
+	
+	
+
+}
diff --git a/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java b/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java
new file mode 100644
index 0000000..d193592
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/dto/InfoTauxDto.java
@@ -0,0 +1,35 @@
+package fr.ulille.iut.tva.dto;
+
+import jakarta.xml.bind.annotation.XmlRootElement;
+
+@XmlRootElement
+public class InfoTauxDto {
+	private String label;
+	private double taux;
+	
+	public InfoTauxDto() {}
+	
+	public InfoTauxDto(String label, double taux) {
+		this.label = label;
+		this.taux = taux;
+	}
+
+	public String getLabel() {
+		return label;
+	}
+
+	public void setLabel(String label) {
+		this.label = label;
+	}
+
+	public double getTaux() {
+		return taux;
+	}
+
+	public void setTaux(double taux) {
+		this.taux = taux;
+	}
+	
+	
+
+}
diff --git a/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java b/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java
new file mode 100644
index 0000000..3f64225
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/tva/ressource/NiveauTvaInexistantException.java
@@ -0,0 +1,16 @@
+package fr.ulille.iut.tva.ressource;
+
+import jakarta.ws.rs.WebApplicationException;
+import jakarta.ws.rs.core.Response;
+
+public class NiveauTvaInexistantException extends WebApplicationException {
+
+	/**
+	 * 
+	 */
+	private static final long serialVersionUID = 939875418210403804L;
+	
+	public NiveauTvaInexistantException() {
+		super(Response.status(Response.Status.NOT_ACCEPTABLE).entity("Niveau de TVA inexistant").build());
+	}
+}	
diff --git a/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java b/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
index 4c63ca6..658f114 100644
--- a/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
+++ b/src/main/java/fr/ulille/iut/tva/ressource/TvaRessource.java
@@ -1,12 +1,79 @@
 package fr.ulille.iut.tva.ressource;
 
+import java.util.ArrayList;
+import java.util.List;
+
+import fr.ulille.iut.tva.dto.DetailDto;
+import fr.ulille.iut.tva.dto.InfoTauxDto;
 import fr.ulille.iut.tva.service.CalculTva;
 import fr.ulille.iut.tva.service.TauxTva;
+import jakarta.ws.rs.GET;
+import jakarta.ws.rs.Path;
+import jakarta.ws.rs.PathParam;
+import jakarta.ws.rs.Produces;
+import jakarta.ws.rs.QueryParam;
+import jakarta.ws.rs.core.MediaType;
 
 /**
  * TvaRessource
  */
+@Path("tva")
 public class TvaRessource {
     private CalculTva calculTva = new CalculTva();
 
+    @GET
+    @Path("tauxpardefaut")
+    public double getValeurTauxParDefaut() {
+    	return TauxTva.NORMAL.taux;
+    }
+    
+    @GET
+    @Path("valeur/{niveauTva}")
+    public double getValeurTaux(@PathParam("niveauTva") String niveau) {
+    	try {
+    		return TauxTva.valueOf(niveau.toUpperCase()).taux;
+    	}
+    	catch(Exception e) {
+    		throw new NiveauTvaInexistantException();
+    	}
+    }
+    
+    @GET
+    @Path("{niveau}")
+    public double getMontantTotal(@PathParam("niveau") String niveau, @QueryParam("somme") String nombre) {
+    	try {
+    	return Double.parseDouble(nombre) + (getValeurTaux(niveau)/100)*Double.parseDouble(nombre);
+    	}
+    	catch(NumberFormatException e) {
+    		throw e;
+    	}
+    }
+    
+    @GET
+    @Path("lestaux")
+    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public List<InfoTauxDto> getInfoTaux() {
+    	ArrayList<InfoTauxDto> result = new ArrayList<>();
+    	for(TauxTva t : TauxTva.values()) {
+    		result.add(new InfoTauxDto(t.name(), t.taux));
+    	}
+    	return result;
+    }
+    
+    @GET
+    @Path("details/{niveau}")
+    @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
+    public DetailDto getDetail(@PathParam("niveau") String niveau, @QueryParam("somme") String nombre) {
+    	double somme;
+    	try {
+    		somme = Double.parseDouble(nombre);
+    		return new DetailDto(TauxTva.valueOf(niveau.toUpperCase()), somme);
+    	}
+    	catch(NumberFormatException n) {
+    		throw n;
+    	}
+    	catch(Exception e) {
+    		throw new NiveauTvaInexistantException();
+    	}
+    }
 }
-- 
GitLab