diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..5c98b428844d9f7d529e2b6fb918d15bf072f3df
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,2 @@
+# Default ignored files
+/workspace.xml
\ No newline at end of file
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000000000000000000000000000000000000..7409a65a6083c3d03584c16151ba946c52e965d4
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+pizzaland_jdbi
\ No newline at end of file
diff --git a/.idea/artifacts/pizzaland_jdbi_war.xml b/.idea/artifacts/pizzaland_jdbi_war.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2e5cb507bbcbdfd7ec55f414d9333b92a2cb8e6a
--- /dev/null
+++ b/.idea/artifacts/pizzaland_jdbi_war.xml
@@ -0,0 +1,14 @@
+<component name="ArtifactManager">
+  <artifact type="war" name="pizzaland_jdbi:war">
+    <output-path>$PROJECT_DIR$/target</output-path>
+    <properties id="maven-jee-properties">
+      <options>
+        <module>pizzaland_jdbi</module>
+        <packaging>war</packaging>
+      </options>
+    </properties>
+    <root id="archive" name="pizzaland.war">
+      <element id="artifact" artifact-name="pizzaland_jdbi:war exploded" />
+    </root>
+  </artifact>
+</component>
\ No newline at end of file
diff --git a/.idea/artifacts/pizzaland_jdbi_war_exploded.xml b/.idea/artifacts/pizzaland_jdbi_war_exploded.xml
new file mode 100644
index 0000000000000000000000000000000000000000..13a6e3cb204dcd937101dc4412a9894ad2b49155
--- /dev/null
+++ b/.idea/artifacts/pizzaland_jdbi_war_exploded.xml
@@ -0,0 +1,73 @@
+<component name="ArtifactManager">
+  <artifact type="exploded-war" name="pizzaland_jdbi:war exploded">
+    <output-path>$PROJECT_DIR$/target/pizzaland</output-path>
+    <properties id="maven-jee-properties">
+      <options>
+        <exploded>true</exploded>
+        <module>pizzaland_jdbi</module>
+        <packaging>war</packaging>
+      </options>
+    </properties>
+    <root id="root">
+      <element id="directory" name="WEB-INF">
+        <element id="directory" name="classes">
+          <element id="module-output" name="pizzaland_jdbi" />
+        </element>
+        <element id="directory" name="lib">
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.containers:jersey-container-servlet:2.30" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.containers:jersey-container-servlet-core:2.30" />
+          <element id="library" level="project" name="Maven: org.glassfish.hk2.external:jakarta.inject:2.6.1" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.core:jersey-common:2.30" />
+          <element id="library" level="project" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" />
+          <element id="library" level="project" name="Maven: org.glassfish.hk2:osgi-resource-locator:1.0.3" />
+          <element id="library" level="project" name="Maven: com.sun.activation:jakarta.activation:1.2.1" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.core:jersey-server:2.30" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.core:jersey-client:2.30" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.30" />
+          <element id="library" level="project" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" />
+          <element id="library" level="project" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.2" />
+          <element id="library" level="project" name="Maven: jakarta.activation:jakarta.activation-api:1.2.1" />
+          <element id="library" level="project" name="Maven: jakarta.ws.rs:jakarta.ws.rs-api:2.1.6" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.inject:jersey-hk2:2.30" />
+          <element id="library" level="project" name="Maven: org.glassfish.hk2:hk2-locator:2.6.1" />
+          <element id="library" level="project" name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.6.1" />
+          <element id="library" level="project" name="Maven: org.glassfish.hk2:hk2-api:2.6.1" />
+          <element id="library" level="project" name="Maven: org.glassfish.hk2:hk2-utils:2.6.1" />
+          <element id="library" level="project" name="Maven: org.javassist:javassist:3.25.0-GA" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.media:jersey-media-json-binding:2.30" />
+          <element id="library" level="project" name="Maven: org.glassfish:jakarta.json:1.1.5" />
+          <element id="library" level="project" name="Maven: org.eclipse:yasson:1.0.3" />
+          <element id="library" level="project" name="Maven: jakarta.json.bind:jakarta.json.bind-api:1.0.2" />
+          <element id="library" level="project" name="Maven: jakarta.json:jakarta.json-api:1.1.5" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-jetty:2.30" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.test-framework:jersey-test-framework-core:2.30" />
+          <element id="library" level="project" name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.3" />
+          <element id="library" level="project" name="Maven: org.glassfish.jersey.containers:jersey-container-jetty-http:2.30" />
+          <element id="library" level="project" name="Maven: org.eclipse.jetty:jetty-server:9.4.17.v20190418" />
+          <element id="library" level="project" name="Maven: javax.servlet:javax.servlet-api:3.1.0" />
+          <element id="library" level="project" name="Maven: org.eclipse.jetty:jetty-http:9.4.17.v20190418" />
+          <element id="library" level="project" name="Maven: org.eclipse.jetty:jetty-io:9.4.17.v20190418" />
+          <element id="library" level="project" name="Maven: org.eclipse.jetty:jetty-util:9.4.17.v20190418" />
+          <element id="library" level="project" name="Maven: org.eclipse.jetty:jetty-continuation:9.4.17.v20190418" />
+          <element id="library" level="project" name="Maven: junit:junit:4.12" />
+          <element id="library" level="project" name="Maven: org.hamcrest:hamcrest-core:1.3" />
+          <element id="library" level="project" name="Maven: org.xerial:sqlite-jdbc:3.30.1" />
+          <element id="library" level="project" name="Maven: org.jdbi:jdbi3-core:3.12.0" />
+          <element id="library" level="project" name="Maven: org.antlr:antlr4-runtime:4.7.2" />
+          <element id="library" level="project" name="Maven: org.slf4j:slf4j-api:1.7.25" />
+          <element id="library" level="project" name="Maven: io.leangen.geantyref:geantyref:1.3.7" />
+          <element id="library" level="project" name="Maven: com.github.ben-manes.caffeine:caffeine:2.8.0" />
+          <element id="library" level="project" name="Maven: org.checkerframework:checker-qual:2.10.0" />
+          <element id="library" level="project" name="Maven: org.jdbi:jdbi3-sqlobject:3.12.0" />
+          <element id="library" level="project" name="Maven: org.jdbi:jdbi3-sqlite:3.12.0" />
+          <element id="library" level="project" name="Maven: ch.qos.logback:logback-classic:1.2.3" />
+          <element id="library" level="project" name="Maven: ch.qos.logback:logback-core:1.2.3" />
+        </element>
+      </element>
+      <element id="directory" name="META-INF">
+        <element id="file-copy" path="$PROJECT_DIR$/target/pizzaland/META-INF/MANIFEST.MF" />
+      </element>
+      <element id="javaee-facet-resources" facet="pizzaland_jdbi/web/Web" />
+    </root>
+  </artifact>
+</component>
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000000000000000000000000000000000000..177e39e383292fd60512f20fee3219920098e0de
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="CompilerConfiguration">
+    <annotationProcessing>
+      <profile name="Maven default annotation processors profile" enabled="true">
+        <sourceOutputDir name="target/generated-sources/annotations" />
+        <sourceTestOutputDir name="target/generated-test-sources/test-annotations" />
+        <outputRelativeToContentRoot value="true" />
+        <module name="pizzaland_jdbi" />
+      </profile>
+    </annotationProcessing>
+    <bytecodeTargetLevel>
+      <module name="pizzaland_jdbi" target="1.8" />
+    </bytecodeTargetLevel>
+  </component>
+  <component name="JavacSettings">
+    <option name="ADDITIONAL_OPTIONS_OVERRIDE">
+      <module name="pizzaland_jdbi" options="-parameters" />
+    </option>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aa00ffab7828f4818589659c804ec2cfd99baed3
--- /dev/null
+++ b/.idea/encodings.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Encoding">
+    <file url="file://$PROJECT_DIR$/src/main/java" charset="UTF-8" />
+    <file url="file://$PROJECT_DIR$/src/main/resources" charset="UTF-8" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6fec8f4346ac31350b855bd6cd3886f1d15e3f79
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_classic_1_2_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: ch.qos.logback:logback-classic:1.2.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-classic/1.2.3/logback-classic-1.2.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9eb8596a33a55f6e2480baf37393b24b7ae8da60
--- /dev/null
+++ b/.idea/libraries/Maven__ch_qos_logback_logback_core_1_2_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: ch.qos.logback:logback-core:1.2.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/ch/qos/logback/logback-core/1.2.3/logback-core-1.2.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_8_0.xml b/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_8_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8f636b518e4156e9ef33a94cfa3fad5060ffa812
--- /dev/null
+++ b/.idea/libraries/Maven__com_github_ben_manes_caffeine_caffeine_2_8_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.github.ben-manes.caffeine:caffeine:2.8.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/github/ben-manes/caffeine/caffeine/2.8.0/caffeine-2.8.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/github/ben-manes/caffeine/caffeine/2.8.0/caffeine-2.8.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/github/ben-manes/caffeine/caffeine/2.8.0/caffeine-2.8.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_1.xml b/.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..dd97b216efa8f36be2c6dd2b6217d3f9312ff3c7
--- /dev/null
+++ b/.idea/libraries/Maven__com_sun_activation_jakarta_activation_1_2_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: com.sun.activation:jakarta.activation:1.2.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/sun/activation/jakarta.activation/1.2.1/jakarta.activation-1.2.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/com/sun/activation/jakarta.activation/1.2.1/jakarta.activation-1.2.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/com/sun/activation/jakarta.activation/1.2.1/jakarta.activation-1.2.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__io_leangen_geantyref_geantyref_1_3_7.xml b/.idea/libraries/Maven__io_leangen_geantyref_geantyref_1_3_7.xml
new file mode 100644
index 0000000000000000000000000000000000000000..4e4c2ae2b66deec8ae5cc711e1d907c7098ec42b
--- /dev/null
+++ b/.idea/libraries/Maven__io_leangen_geantyref_geantyref_1_3_7.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: io.leangen.geantyref:geantyref:1.3.7">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/leangen/geantyref/geantyref/1.3.7/geantyref-1.3.7.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/io/leangen/geantyref/geantyref/1.3.7/geantyref-1.3.7-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/io/leangen/geantyref/geantyref/1.3.7/geantyref-1.3.7-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_1.xml b/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a96bbdc69697d90b75800cc15b773f3b89d11b2b
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_activation_jakarta_activation_api_1_2_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.activation:jakarta.activation-api:1.2.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/activation/jakarta.activation-api/1.2.1/jakarta.activation-api-1.2.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml
new file mode 100644
index 0000000000000000000000000000000000000000..cba9dd244f222ce7ecbdcab4c7f9621a57fe1a67
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/annotation/jakarta.annotation-api/1.3.5/jakarta.annotation-api-1.3.5-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_json_bind_jakarta_json_bind_api_1_0_2.xml b/.idea/libraries/Maven__jakarta_json_bind_jakarta_json_bind_api_1_0_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ce5bb3878951a2461ceb2a70e00a92c35536f0fe
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_json_bind_jakarta_json_bind_api_1_0_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.json.bind:jakarta.json.bind-api:1.0.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/bind/jakarta.json.bind-api/1.0.2/jakarta.json.bind-api-1.0.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_json_jakarta_json_api_1_1_5.xml b/.idea/libraries/Maven__jakarta_json_jakarta_json_api_1_1_5.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6203aabc732652c18e94100f9cdcff45cc195d56
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_json_jakarta_json_api_1_1_5.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.json:jakarta.json-api:1.1.5">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/jakarta.json-api/1.1.5/jakarta.json-api-1.1.5.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/jakarta.json-api/1.1.5/jakarta.json-api-1.1.5-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/json/jakarta.json-api/1.1.5/jakarta.json-api-1.1.5-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_servlet_jakarta_servlet_api_4_0_3.xml b/.idea/libraries/Maven__jakarta_servlet_jakarta_servlet_api_4_0_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..5343c74586c4c86053b7fc334453a0a423391f1c
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_servlet_jakarta_servlet_api_4_0_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/servlet/jakarta.servlet-api/4.0.3/jakarta.servlet-api-4.0.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/servlet/jakarta.servlet-api/4.0.3/jakarta.servlet-api-4.0.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/servlet/jakarta.servlet-api/4.0.3/jakarta.servlet-api-4.0.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml b/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e66afb958e3ccfe0bd5a70dcc9f10dafb5ec8450
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.validation:jakarta.validation-api:2.0.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/validation/jakarta.validation-api/2.0.2/jakarta.validation-api-2.0.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_ws_rs_jakarta_ws_rs_api_2_1_6.xml b/.idea/libraries/Maven__jakarta_ws_rs_jakarta_ws_rs_api_2_1_6.xml
new file mode 100644
index 0000000000000000000000000000000000000000..fb37accba8abb27f5fa5e6afde8b3f3c12b4698e
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_ws_rs_jakarta_ws_rs_api_2_1_6.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.ws.rs:jakarta.ws.rs-api:2.1.6">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/ws/rs/jakarta.ws.rs-api/2.1.6/jakarta.ws.rs-api-2.1.6-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml b/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..bdf217a0c258ed07bb96036043bf50b69bc534f0
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/jakarta/xml/bind/jakarta.xml.bind-api/2.3.2/jakarta.xml.bind-api-2.3.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c24f7e308355dba395440a2fcc7bcdcf8976391a
--- /dev/null
+++ b/.idea/libraries/Maven__javax_servlet_javax_servlet_api_3_1_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: javax.servlet:javax.servlet-api:3.1.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/javax/servlet/javax.servlet-api/3.1.0/javax.servlet-api-3.1.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__junit_junit_4_12.xml b/.idea/libraries/Maven__junit_junit_4_12.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d411041745b6e44356035cdd44538daca09388f6
--- /dev/null
+++ b/.idea/libraries/Maven__junit_junit_4_12.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: junit:junit:4.12">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/junit/junit/4.12/junit-4.12-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_7_2.xml b/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_7_2.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d0c6a38647565185954c8a371c4a02135f007508
--- /dev/null
+++ b/.idea/libraries/Maven__org_antlr_antlr4_runtime_4_7_2.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.antlr:antlr4-runtime:4.7.2">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/antlr/antlr4-runtime/4.7.2/antlr4-runtime-4.7.2.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/antlr/antlr4-runtime/4.7.2/antlr4-runtime-4.7.2-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/antlr/antlr4-runtime/4.7.2/antlr4-runtime-4.7.2-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_checkerframework_checker_qual_2_10_0.xml b/.idea/libraries/Maven__org_checkerframework_checker_qual_2_10_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..2301054201b1b4c71778c6447cf3e720e9b9631f
--- /dev/null
+++ b/.idea/libraries/Maven__org_checkerframework_checker_qual_2_10_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.checkerframework:checker-qual:2.10.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/checkerframework/checker-qual/2.10.0/checker-qual-2.10.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_continuation_9_4_17_v20190418.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_continuation_9_4_17_v20190418.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a595715872ddda1ae922c74810d4977d2bf010e3
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_continuation_9_4_17_v20190418.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.eclipse.jetty:jetty-continuation:9.4.17.v20190418">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-continuation/9.4.17.v20190418/jetty-continuation-9.4.17.v20190418.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-continuation/9.4.17.v20190418/jetty-continuation-9.4.17.v20190418-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-continuation/9.4.17.v20190418/jetty-continuation-9.4.17.v20190418-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_9_4_17_v20190418.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_9_4_17_v20190418.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3a5fa91881c3f9b69828be3b742021743d1e0ef9
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_http_9_4_17_v20190418.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.eclipse.jetty:jetty-http:9.4.17.v20190418">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-http/9.4.17.v20190418/jetty-http-9.4.17.v20190418.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-http/9.4.17.v20190418/jetty-http-9.4.17.v20190418-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-http/9.4.17.v20190418/jetty-http-9.4.17.v20190418-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_9_4_17_v20190418.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_9_4_17_v20190418.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f14494d4b4f3381e0e2a148b32a8954f41c331a2
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_io_9_4_17_v20190418.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.eclipse.jetty:jetty-io:9.4.17.v20190418">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-io/9.4.17.v20190418/jetty-io-9.4.17.v20190418.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-io/9.4.17.v20190418/jetty-io-9.4.17.v20190418-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-io/9.4.17.v20190418/jetty-io-9.4.17.v20190418-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_server_9_4_17_v20190418.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_server_9_4_17_v20190418.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3cc09b3fecda6112f59aba36d85f452610b59574
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_server_9_4_17_v20190418.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.eclipse.jetty:jetty-server:9.4.17.v20190418">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-server/9.4.17.v20190418/jetty-server-9.4.17.v20190418.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-server/9.4.17.v20190418/jetty-server-9.4.17.v20190418-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-server/9.4.17.v20190418/jetty-server-9.4.17.v20190418-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_9_4_17_v20190418.xml b/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_9_4_17_v20190418.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c9e8270f7b0eb8aca91ba8966351c30d4713ec70
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_jetty_jetty_util_9_4_17_v20190418.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.eclipse.jetty:jetty-util:9.4.17.v20190418">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-util/9.4.17.v20190418/jetty-util-9.4.17.v20190418.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-util/9.4.17.v20190418/jetty-util-9.4.17.v20190418-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/jetty/jetty-util/9.4.17.v20190418/jetty-util-9.4.17.v20190418-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_eclipse_yasson_1_0_3.xml b/.idea/libraries/Maven__org_eclipse_yasson_1_0_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9e1e8db4c1b6e1af8cf3a7272834865b2b3055ec
--- /dev/null
+++ b/.idea/libraries/Maven__org_eclipse_yasson_1_0_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.eclipse:yasson:1.0.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/yasson/1.0.3/yasson-1.0.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/yasson/1.0.3/yasson-1.0.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/eclipse/yasson/1.0.3/yasson-1.0.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_6_1.xml b/.idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_6_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..aa22cc134225b34c17ff6c53b6e11fcca4bfad65
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_hk2_external_aopalliance_repackaged_2_6_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.6.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.6.1/aopalliance-repackaged-2.6.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.6.1/aopalliance-repackaged-2.6.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/aopalliance-repackaged/2.6.1/aopalliance-repackaged-2.6.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_external_jakarta_inject_2_6_1.xml b/.idea/libraries/Maven__org_glassfish_hk2_external_jakarta_inject_2_6_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..98fbebfe7793dab06ebacd17920f917d2a76e7e4
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_hk2_external_jakarta_inject_2_6_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.hk2.external:jakarta.inject:2.6.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/external/jakarta.inject/2.6.1/jakarta.inject-2.6.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_6_1.xml b/.idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_6_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..963f506927989c2976490c9428fc23ad37f55b4c
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_hk2_hk2_api_2_6_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.hk2:hk2-api:2.6.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-api/2.6.1/hk2-api-2.6.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_6_1.xml b/.idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_6_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..951e584adc6a3dafdbdc93e76dec7c68d7a1cac3
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_hk2_hk2_locator_2_6_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.hk2:hk2-locator:2.6.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-locator/2.6.1/hk2-locator-2.6.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_6_1.xml b/.idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_6_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..57730c4095750cbd620827fa40333446aff66f51
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_hk2_hk2_utils_2_6_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.hk2:hk2-utils:2.6.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/hk2-utils/2.6.1/hk2-utils-2.6.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_hk2_osgi_resource_locator_1_0_3.xml b/.idea/libraries/Maven__org_glassfish_hk2_osgi_resource_locator_1_0_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..18fdf9c00de49b84f22502d703aca8afb8c43b6a
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_hk2_osgi_resource_locator_1_0_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.hk2:osgi-resource-locator:1.0.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/osgi-resource-locator/1.0.3/osgi-resource-locator-1.0.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/osgi-resource-locator/1.0.3/osgi-resource-locator-1.0.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/hk2/osgi-resource-locator/1.0.3/osgi-resource-locator-1.0.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jakarta_json_1_1_5.xml b/.idea/libraries/Maven__org_glassfish_jakarta_json_1_1_5.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d4a28659a57395be10fc57d6a0a89ad3d1ee7fcc
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jakarta_json_1_1_5.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish:jakarta.json:1.1.5">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.json/1.1.5/jakarta.json-1.1.5.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.json/1.1.5/jakarta.json-1.1.5-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jakarta.json/1.1.5/jakarta.json-1.1.5-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_jetty_http_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_jetty_http_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e50e9fc28a73459b1537f3fe0915d668a9223a28
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_jetty_http_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.containers:jersey-container-jetty-http:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-jetty-http/2.30/jersey-container-jetty-http-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-jetty-http/2.30/jersey-container-jetty-http-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-jetty-http/2.30/jersey-container-jetty-http-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_servlet_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_servlet_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e5cb82144ac4eadbde47a7c35a0202713ed4b8dd
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_servlet_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.containers:jersey-container-servlet:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-servlet/2.30/jersey-container-servlet-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-servlet/2.30/jersey-container-servlet-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-servlet/2.30/jersey-container-servlet-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_servlet_core_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_servlet_core_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ead34e6e2a44de5d18a80ea01b3db140e9dca1d5
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_containers_jersey_container_servlet_core_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.containers:jersey-container-servlet-core:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-servlet-core/2.30/jersey-container-servlet-core-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-servlet-core/2.30/jersey-container-servlet-core-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/containers/jersey-container-servlet-core/2.30/jersey-container-servlet-core-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c50b1073ec2662ebc5557bdfa8ec1e36d608123e
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_client_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.core:jersey-client:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.30/jersey-client-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.30/jersey-client-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-client/2.30/jersey-client-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..7b1e272641f14221ab7c371fa1c8177dbba87b4c
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_common_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.core:jersey-common:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.30/jersey-common-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.30/jersey-common-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-common/2.30/jersey-common-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8a6297dfed549aeaf618dfd8f2bf9920f4980b0f
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_core_jersey_server_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.core:jersey-server:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.30/jersey-server-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.30/jersey-server-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/core/jersey-server/2.30/jersey-server-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_inject_jersey_hk2_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_inject_jersey_hk2_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..3ce9962ece74ac017901ac1b0658547d66cb6900
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_inject_jersey_hk2_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.inject:jersey-hk2:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/inject/jersey-hk2/2.30/jersey-hk2-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/inject/jersey-hk2/2.30/jersey-hk2-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/inject/jersey-hk2/2.30/jersey-hk2-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..1818a71ececc11bb7a24e6ceed316a8a22e38fc7
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_jaxb_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.30/jersey-media-jaxb-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.30/jersey-media-jaxb-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-jaxb/2.30/jersey-media-jaxb-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_binding_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_binding_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..ec2208570c1fa34b9a5a67036bd742a49f42bf19
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_media_jersey_media_json_binding_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.media:jersey-media-json-binding:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-binding/2.30/jersey-media-json-binding-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-binding/2.30/jersey-media-json-binding-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/media/jersey-media-json-binding/2.30/jersey-media-json-binding-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_test_framework_jersey_test_framework_core_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_test_framework_jersey_test_framework_core_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..68142832af706b8902fa6d72205aa36941a79275
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_test_framework_jersey_test_framework_core_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.test-framework:jersey-test-framework-core:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/test-framework/jersey-test-framework-core/2.30/jersey-test-framework-core-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/test-framework/jersey-test-framework-core/2.30/jersey-test-framework-core-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/test-framework/jersey-test-framework-core/2.30/jersey-test-framework-core-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_glassfish_jersey_test_framework_providers_jersey_test_framework_provider_jetty_2_30.xml b/.idea/libraries/Maven__org_glassfish_jersey_test_framework_providers_jersey_test_framework_provider_jetty_2_30.xml
new file mode 100644
index 0000000000000000000000000000000000000000..06252d9cc49bc3b0fde2c3f1e56c3510c36389d7
--- /dev/null
+++ b/.idea/libraries/Maven__org_glassfish_jersey_test_framework_providers_jersey_test_framework_provider_jetty_2_30.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-jetty:2.30">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/test-framework/providers/jersey-test-framework-provider-jetty/2.30/jersey-test-framework-provider-jetty-2.30.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/test-framework/providers/jersey-test-framework-provider-jetty/2.30/jersey-test-framework-provider-jetty-2.30-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/glassfish/jersey/test-framework/providers/jersey-test-framework-provider-jetty/2.30/jersey-test-framework-provider-jetty-2.30-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
new file mode 100644
index 0000000000000000000000000000000000000000..f58bbc11276f98bea2b6c82f21664c5a9f424fe3
--- /dev/null
+++ b/.idea/libraries/Maven__org_hamcrest_hamcrest_core_1_3.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.hamcrest:hamcrest-core:1.3">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_javassist_javassist_3_25_0_GA.xml b/.idea/libraries/Maven__org_javassist_javassist_3_25_0_GA.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a24c34c964b519aa8f7e7be991549c307ccf4a64
--- /dev/null
+++ b/.idea/libraries/Maven__org_javassist_javassist_3_25_0_GA.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.javassist:javassist:3.25.0-GA">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/javassist/javassist/3.25.0-GA/javassist-3.25.0-GA-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jdbi_jdbi3_core_3_12_0.xml b/.idea/libraries/Maven__org_jdbi_jdbi3_core_3_12_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..0650c0e07c5bd4594d280cd252255128c41199a2
--- /dev/null
+++ b/.idea/libraries/Maven__org_jdbi_jdbi3_core_3_12_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.jdbi:jdbi3-core:3.12.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-core/3.12.0/jdbi3-core-3.12.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-core/3.12.0/jdbi3-core-3.12.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-core/3.12.0/jdbi3-core-3.12.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jdbi_jdbi3_sqlite_3_12_0.xml b/.idea/libraries/Maven__org_jdbi_jdbi3_sqlite_3_12_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..65494a8656d2ecfe107395061661afff57bf1465
--- /dev/null
+++ b/.idea/libraries/Maven__org_jdbi_jdbi3_sqlite_3_12_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.jdbi:jdbi3-sqlite:3.12.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-sqlite/3.12.0/jdbi3-sqlite-3.12.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-sqlite/3.12.0/jdbi3-sqlite-3.12.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-sqlite/3.12.0/jdbi3-sqlite-3.12.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jdbi_jdbi3_sqlobject_3_12_0.xml b/.idea/libraries/Maven__org_jdbi_jdbi3_sqlobject_3_12_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..6616b9a32cdb43f2fb77e56ccf00355888b95be0
--- /dev/null
+++ b/.idea/libraries/Maven__org_jdbi_jdbi3_sqlobject_3_12_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.jdbi:jdbi3-sqlobject:3.12.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-sqlobject/3.12.0/jdbi3-sqlobject-3.12.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-sqlobject/3.12.0/jdbi3-sqlobject-3.12.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-sqlobject/3.12.0/jdbi3-sqlobject-3.12.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jdbi_jdbi3_testing_3_12_0.xml b/.idea/libraries/Maven__org_jdbi_jdbi3_testing_3_12_0.xml
new file mode 100644
index 0000000000000000000000000000000000000000..9dbeb62bb4de9123f2d565c05e8e46bb5b0e3b4d
--- /dev/null
+++ b/.idea/libraries/Maven__org_jdbi_jdbi3_testing_3_12_0.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.jdbi:jdbi3-testing:3.12.0">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-testing/3.12.0/jdbi3-testing-3.12.0.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-testing/3.12.0/jdbi3-testing-3.12.0-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/jdbi/jdbi3-testing/3.12.0/jdbi3-testing-3.12.0-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
new file mode 100644
index 0000000000000000000000000000000000000000..20e816363d89d5823f89dc148df6b00bbc30626a
--- /dev/null
+++ b/.idea/libraries/Maven__org_slf4j_slf4j_api_1_7_25.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.slf4j:slf4j-api:1.7.25">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_30_1.xml b/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_30_1.xml
new file mode 100644
index 0000000000000000000000000000000000000000..d358bf3ff54aded15dc8eaf9c242b75c849dc9fe
--- /dev/null
+++ b/.idea/libraries/Maven__org_xerial_sqlite_jdbc_3_30_1.xml
@@ -0,0 +1,13 @@
+<component name="libraryTable">
+  <library name="Maven: org.xerial:sqlite-jdbc:3.30.1">
+    <CLASSES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/xerial/sqlite-jdbc/3.30.1/sqlite-jdbc-3.30.1.jar!/" />
+    </CLASSES>
+    <JAVADOC>
+      <root url="jar://$MAVEN_REPOSITORY$/org/xerial/sqlite-jdbc/3.30.1/sqlite-jdbc-3.30.1-javadoc.jar!/" />
+    </JAVADOC>
+    <SOURCES>
+      <root url="jar://$MAVEN_REPOSITORY$/org/xerial/sqlite-jdbc/3.30.1/sqlite-jdbc-3.30.1-sources.jar!/" />
+    </SOURCES>
+  </library>
+</component>
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000000000000000000000000000000000000..a9cccd5db9c93ae849184281f1f1a1ecf0c9da7c
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="FrameworkDetectionExcludesConfiguration">
+    <file type="web" url="file://$PROJECT_DIR$" />
+  </component>
+  <component name="MavenProjectsManager">
+    <option name="originalFiles">
+      <list>
+        <option value="$PROJECT_DIR$/pom.xml" />
+      </list>
+    </option>
+  </component>
+  <component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="false" project-jdk-name="1.8" project-jdk-type="JavaSDK" />
+</project>
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8d312cc997ee836924bcfebe26f2587c0bf694bb
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="ProjectModuleManager">
+    <modules>
+      <module fileurl="file://$PROJECT_DIR$/pizzaland_jdbi.iml" filepath="$PROJECT_DIR$/pizzaland_jdbi.iml" />
+    </modules>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/uiDesigner.xml b/.idea/uiDesigner.xml
new file mode 100644
index 0000000000000000000000000000000000000000..e96534fb27b68192f27f985d3879e173ec77adb8
--- /dev/null
+++ b/.idea/uiDesigner.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="Palette2">
+    <group name="Swing">
+      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
+      </item>
+      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
+        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" />
+        <initial-values>
+          <property name="text" value="Button" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="RadioButton" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="CheckBox" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" />
+        <initial-values>
+          <property name="text" value="Label" />
+        </initial-values>
+      </item>
+      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1">
+          <preferred-size width="150" height="-1" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3">
+          <preferred-size width="150" height="50" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3">
+          <preferred-size width="200" height="200" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" />
+      </item>
+      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" />
+      </item>
+      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1">
+          <preferred-size width="-1" height="20" />
+        </default-constraints>
+      </item>
+      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false">
+        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" />
+      </item>
+      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false">
+        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" />
+      </item>
+    </group>
+  </component>
+</project>
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000000000000000000000000000000000000..35eb1ddfbbc029bcab630581847471d7f238ec53
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project version="4">
+  <component name="VcsDirectoryMappings">
+    <mapping directory="" vcs="Git" />
+  </component>
+</project>
\ No newline at end of file
diff --git a/pizzaland_jdbi.iml b/pizzaland_jdbi.iml
new file mode 100644
index 0000000000000000000000000000000000000000..bfc29f853a9a2a13eb41ecd61a0f55f3aa449cb6
--- /dev/null
+++ b/pizzaland_jdbi.iml
@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
+  <component name="FacetManager">
+    <facet type="web" name="Web">
+      <configuration>
+        <webroots>
+          <root url="file://$MODULE_DIR$/src/main/webapp" relative="/" />
+        </webroots>
+        <sourceRoots>
+          <root url="file://$MODULE_DIR$/src/main/java" />
+          <root url="file://$MODULE_DIR$/src/main/resources" />
+        </sourceRoots>
+      </configuration>
+    </facet>
+  </component>
+  <component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_8">
+    <output url="file://$MODULE_DIR$/target/classes" />
+    <output-test url="file://$MODULE_DIR$/target/test-classes" />
+    <content url="file://$MODULE_DIR$">
+      <sourceFolder url="file://$MODULE_DIR$/src/main/java" isTestSource="false" />
+      <sourceFolder url="file://$MODULE_DIR$/src/main/resources" type="java-resource" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/java" isTestSource="true" />
+      <sourceFolder url="file://$MODULE_DIR$/src/test/resources" type="java-test-resource" />
+      <excludeFolder url="file://$MODULE_DIR$/target" />
+    </content>
+    <orderEntry type="inheritedJdk" />
+    <orderEntry type="sourceFolder" forTests="false" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.containers:jersey-container-servlet:2.30" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.containers:jersey-container-servlet-core:2.30" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.hk2.external:jakarta.inject:2.6.1" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-common:2.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.annotation:jakarta.annotation-api:1.3.5" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.hk2:osgi-resource-locator:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: com.sun.activation:jakarta.activation:1.2.1" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-server:2.30" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.core:jersey-client:2.30" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.media:jersey-media-jaxb:2.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.validation:jakarta.validation-api:2.0.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.xml.bind:jakarta.xml.bind-api:2.3.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.activation:jakarta.activation-api:1.2.1" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.ws.rs:jakarta.ws.rs-api:2.1.6" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.inject:jersey-hk2:2.30" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-locator:2.6.1" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.hk2.external:aopalliance-repackaged:2.6.1" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-api:2.6.1" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.hk2:hk2-utils:2.6.1" level="project" />
+    <orderEntry type="library" name="Maven: org.javassist:javassist:3.25.0-GA" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.media:jersey-media-json-binding:2.30" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish:jakarta.json:1.1.5" level="project" />
+    <orderEntry type="library" name="Maven: org.eclipse:yasson:1.0.3" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.json.bind:jakarta.json.bind-api:1.0.2" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.json:jakarta.json-api:1.1.5" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.test-framework.providers:jersey-test-framework-provider-jetty:2.30" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.test-framework:jersey-test-framework-core:2.30" level="project" />
+    <orderEntry type="library" name="Maven: jakarta.servlet:jakarta.servlet-api:4.0.3" level="project" />
+    <orderEntry type="library" name="Maven: org.glassfish.jersey.containers:jersey-container-jetty-http:2.30" level="project" />
+    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-server:9.4.17.v20190418" level="project" />
+    <orderEntry type="library" name="Maven: javax.servlet:javax.servlet-api:3.1.0" level="project" />
+    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-http:9.4.17.v20190418" level="project" />
+    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-io:9.4.17.v20190418" level="project" />
+    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-util:9.4.17.v20190418" level="project" />
+    <orderEntry type="library" name="Maven: org.eclipse.jetty:jetty-continuation:9.4.17.v20190418" level="project" />
+    <orderEntry type="library" name="Maven: junit:junit:4.12" level="project" />
+    <orderEntry type="library" name="Maven: org.hamcrest:hamcrest-core:1.3" level="project" />
+    <orderEntry type="library" name="Maven: org.xerial:sqlite-jdbc:3.30.1" level="project" />
+    <orderEntry type="library" name="Maven: org.jdbi:jdbi3-core:3.12.0" level="project" />
+    <orderEntry type="library" name="Maven: org.antlr:antlr4-runtime:4.7.2" level="project" />
+    <orderEntry type="library" name="Maven: org.slf4j:slf4j-api:1.7.25" level="project" />
+    <orderEntry type="library" name="Maven: io.leangen.geantyref:geantyref:1.3.7" level="project" />
+    <orderEntry type="library" name="Maven: com.github.ben-manes.caffeine:caffeine:2.8.0" level="project" />
+    <orderEntry type="library" name="Maven: org.checkerframework:checker-qual:2.10.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jdbi:jdbi3-sqlobject:3.12.0" level="project" />
+    <orderEntry type="library" name="Maven: org.jdbi:jdbi3-sqlite:3.12.0" level="project" />
+    <orderEntry type="library" scope="TEST" name="Maven: org.jdbi:jdbi3-testing:3.12.0" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-classic:1.2.3" level="project" />
+    <orderEntry type="library" name="Maven: ch.qos.logback:logback-core:1.2.3" level="project" />
+  </component>
+</module>
\ No newline at end of file
diff --git a/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java b/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java
index b565c8399d5213fc5b2335568b0224cea580b1e5..fb76fa2f7c45b4d2a32d9b1a5efcba55d1bb4283 100644
--- a/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java
+++ b/src/main/java/fr/ulille/iut/pizzaland/ApiV1.java
@@ -1,16 +1,71 @@
 package fr.ulille.iut.pizzaland;
 
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+import fr.ulille.iut.pizzaland.beans.Pizza;
+import fr.ulille.iut.pizzaland.dao.IngredientDao;
+import fr.ulille.iut.pizzaland.dao.PizzaDao;
 import org.glassfish.jersey.server.ResourceConfig;
 
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
 import java.util.logging.Logger;
 
+import javax.json.bind.Jsonb;
+import javax.json.bind.JsonbBuilder;
 import javax.ws.rs.ApplicationPath;
 
 @ApplicationPath("api/v1/")
 public class ApiV1 extends ResourceConfig {
-    private static final Logger LOGGER = Logger.getLogger(ApiV1.class.getName());
+    public static final Logger LOGGER = Logger.getLogger(ApiV1.class.getName());
 
     public ApiV1() {
         packages("fr.ulille.iut.pizzaland");
+
+        String environment = System.getenv("PIZZAENV");
+//        String environment = null;
+
+        if (environment != null && environment.equals("withdb")) {
+            LOGGER.info("Loading with database");
+            Jsonb jsonb = JsonbBuilder.create();
+            try {
+                FileReader reader = new FileReader(getClass().getClassLoader().getResource("ingredients.json").getFile());
+
+                List<Ingredient> ingredients = JsonbBuilder.create().fromJson(reader, new ArrayList<Ingredient>() {
+                }.getClass().getGenericSuperclass());
+
+                IngredientDao ingredientDao = BDDFactory.buildDao(IngredientDao.class);
+
+                ingredientDao.dropTable();
+                ingredientDao.createTable();
+
+                for (Ingredient ingredient : ingredients) {
+                    ingredientDao.insert(ingredient.getName());
+                }
+
+                System.out.println(Arrays.toString(ingredientDao.getAll().toArray()));
+
+                FileReader readerPizza = new FileReader(getClass().getClassLoader().getResource("pizzas.json").getFile());
+
+                PizzaDao pizzaDao = BDDFactory.buildDao(PizzaDao.class);
+                pizzaDao.dropTable();
+                pizzaDao.createTableAndIngredientAssociation();
+
+                List<Pizza> pizzas = JsonbBuilder.create().fromJson(readerPizza, new ArrayList<Pizza>() {
+                }.getClass().getGenericSuperclass());
+
+
+                for (Pizza pizza : pizzas) {
+                    System.out.println(pizza);
+                    pizzaDao.insert(pizza.getName());
+                    for (int id : pizza.getIngredients()) {
+                        pizzaDao.insertIngredient(pizza.getId(), id);
+                    }
+                }
+            } catch (Exception ex) {
+                throw new IllegalStateException(ex);
+            }
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java b/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java
new file mode 100644
index 0000000000000000000000000000000000000000..0e19e1df09041c7a5d409c1a367d935fe76460bb
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/beans/Ingredient.java
@@ -0,0 +1,87 @@
+package fr.ulille.iut.pizzaland.beans;
+
+import fr.ulille.iut.pizzaland.dto.IngredientCreateDto;
+import fr.ulille.iut.pizzaland.dto.IngredientDto;
+
+public class Ingredient {
+    private long id;
+    private String name;
+
+    public Ingredient() {
+    }
+
+    public Ingredient(long id, String name) {
+        this.id = id;
+        this.name = name;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public static IngredientDto toDto(Ingredient i) {
+        IngredientDto dto = new IngredientDto();
+        dto.setId(i.getId());
+        dto.setName(i.getName());
+
+        return dto;
+    }
+
+    public static Ingredient fromDto(IngredientDto dto) {
+        Ingredient ingredient = new Ingredient();
+        ingredient.setId(dto.getId());
+        ingredient.setName(dto.getName());
+
+        return ingredient;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        Ingredient other = (Ingredient) obj;
+        if (id != other.id)
+            return false;
+        if (name == null) {
+            if (other.name != null)
+                return false;
+        } else if (!name.equals(other.name))
+            return false;
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "Ingredient [id=" + id + ", name=" + name + "]";
+    }
+
+    public static IngredientCreateDto toCreateDto(Ingredient ingredient) {
+        IngredientCreateDto dto = new IngredientCreateDto();
+        dto.setName(ingredient.getName());
+
+        return dto;
+    }
+
+    public static Ingredient fromIngredientCreateDto(IngredientCreateDto dto) {
+        Ingredient ingredient = new Ingredient();
+        ingredient.setName(dto.getName());
+
+        return ingredient;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java b/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java
new file mode 100644
index 0000000000000000000000000000000000000000..d7e3c3396e025226c6bcb4d90e5d2162d0715845
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/beans/Pizza.java
@@ -0,0 +1,94 @@
+package fr.ulille.iut.pizzaland.beans;
+
+import fr.ulille.iut.pizzaland.dto.PizzaCreateDto;
+import fr.ulille.iut.pizzaland.dto.PizzaDto;
+
+import java.util.Arrays;
+
+public class Pizza {
+
+    private long id;
+    private String name;
+    private int[] ingredients;
+
+    public Pizza() { }
+
+    public int[] getIngredients() {
+        return ingredients;
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public void setIngredients(int[] ingredients) {
+        this.ingredients = ingredients;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public static PizzaDto toDto(Pizza p) {
+        PizzaDto dto = new PizzaDto();
+        dto.setId(p.getId());
+        dto.setName(p.getName());
+        dto.setIngredients(p.getIngredients());
+
+        return dto;
+    }
+
+    public static Pizza fromDto(PizzaDto dto) {
+        Pizza pizza = new Pizza();
+        pizza.setId(dto.getId());
+        pizza.setName(dto.getName());
+        pizza.setIngredients(dto.getIngredients());
+
+        return pizza;
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        Pizza other = (Pizza) obj;
+        if (id != other.id)
+            return false;
+        if (name == null) {
+            if (other.name != null)
+                return false;
+        } else if (!name.equals(other.name))
+            return false;
+        return true;
+    }
+
+    @Override
+    public String toString() {
+        return "Pizza [id=" + id + ", name=" + name + "ingredients=" + Arrays.toString(ingredients) + "]";
+    }
+
+    public static PizzaCreateDto toCreateDto(Pizza pizza) {
+        PizzaCreateDto dto = new PizzaCreateDto();
+        dto.setName(pizza.getName());
+
+        return dto;
+    }
+
+    public static Pizza fromPizzaCreateDto(PizzaCreateDto dto) {
+        Pizza pizza = new Pizza();
+        pizza.setName(dto.getName());
+        return pizza;
+    }
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java b/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..b5c655c77759bcd42a80080ff51d628f9eb6d7b6
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dao/IngredientDao.java
@@ -0,0 +1,38 @@
+package fr.ulille.iut.pizzaland.dao;
+
+import java.util.List;
+
+import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
+import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys;
+import org.jdbi.v3.sqlobject.statement.SqlQuery;
+import org.jdbi.v3.sqlobject.statement.SqlUpdate;
+
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+
+public interface IngredientDao {
+
+    @SqlUpdate("CREATE TABLE IF NOT EXISTS ingredients (id INTEGER PRIMARY KEY, name VARCHAR UNIQUE NOT NULL)")
+    void createTable();
+
+    @SqlUpdate("DROP TABLE IF EXISTS ingredients")
+    void dropTable();
+
+    @SqlUpdate("INSERT INTO ingredients (name) VALUES (:name)")
+    @GetGeneratedKeys
+    long insert(String name);
+
+    @SqlQuery("SELECT * FROM ingredients WHERE name = :name")
+    @RegisterBeanMapper(Ingredient.class)
+    Ingredient findByName(String name);
+
+    @SqlUpdate("DELETE FROM ingredients WHERE id = :id")
+    void remove(long id);
+
+    @SqlQuery("SELECT * FROM ingredients")
+    @RegisterBeanMapper(Ingredient.class)
+    List<Ingredient> getAll();
+
+    @SqlQuery("SELECT * FROM ingredients WHERE id = :id")
+    @RegisterBeanMapper(Ingredient.class)
+    Ingredient findById(long id);
+}
\ No newline at end of file
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dao/PizzaDao.java b/src/main/java/fr/ulille/iut/pizzaland/dao/PizzaDao.java
new file mode 100644
index 0000000000000000000000000000000000000000..1659a4aced800bd070b51a9ba8836e91cbed9c6f
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dao/PizzaDao.java
@@ -0,0 +1,60 @@
+package fr.ulille.iut.pizzaland.dao;
+
+import fr.ulille.iut.pizzaland.beans.Pizza;
+import org.jdbi.v3.sqlobject.config.RegisterBeanMapper;
+import org.jdbi.v3.sqlobject.statement.GetGeneratedKeys;
+import org.jdbi.v3.sqlobject.statement.SqlQuery;
+import org.jdbi.v3.sqlobject.statement.SqlUpdate;
+import org.jdbi.v3.sqlobject.transaction.Transaction;
+
+import java.util.List;
+
+public interface PizzaDao {
+
+    @SqlUpdate("CREATE TABLE IF NOT EXISTS pizzas (id INTEGER PRIMARY KEY, name VARCHAR UNIQUE NOT NULL)")
+    void createPizzaTable();
+
+    @SqlUpdate("CREATE TABLE IF NOT EXISTS PizzaIngredients (pizza_id INTEGER NOT NULL, ingredient_id INTEGER NOT NULL, PRIMARY KEY (pizza_id, ingredient_id))")
+    void createAssociationTable();
+
+    @SqlUpdate("DROP TABLE IF EXISTS pizzas")
+    void dropPizzaTable();
+
+    @SqlUpdate("DROP TABLE IF EXISTS PizzaIngredients")
+    void dropAssociationTable();
+
+    @SqlUpdate("INSERT INTO pizzas (name) VALUES (:name)")
+    @GetGeneratedKeys
+    long insert(String name);
+
+    @SqlQuery("SELECT * FROM pizzas AS p INNER JOIN PizzaIngredients AS pi ON (p.id = pi.pizza_id) WHERE name = :name")
+    @RegisterBeanMapper(Pizza.class)
+    Pizza findByName(String name);
+
+    @SqlUpdate("DELETE FROM pizzas WHERE id = :id")
+    void remove(long id);
+
+    @SqlUpdate("INSERT INTO PizzaIngredients VALUES (:pizza, :ingredient)")
+    void insertIngredient(long pizza, int ingredient);
+
+//    @SqlQuery("SELECT * FROM pizzas AS p INNER JOIN PizzaIngredients AS pi ON (p.id = pi.pizza_id) INNER JOIN ingredients AS i ON (i.id = pi.ingredient_id)")
+    @SqlQuery("SELECT * FROM pizzas INNER JOIN PizzasIngredients")
+    @RegisterBeanMapper(Pizza.class)
+    List<Pizza> getAll();
+
+    @SqlQuery("SELECT * FROM pizzas WHERE id = :id")
+    @RegisterBeanMapper(Pizza.class)
+    Pizza findById(long id);
+
+    @Transaction
+    default void dropTable() {
+        dropAssociationTable();
+        dropPizzaTable();
+    }
+
+    @Transaction
+    default void createTableAndIngredientAssociation() {
+        createPizzaTable();
+        createAssociationTable();
+    }
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientCreateDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientCreateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..f6020bb177897dd1444fe57dad8401d5dc97413c
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientCreateDto.java
@@ -0,0 +1,15 @@
+package fr.ulille.iut.pizzaland.dto;
+
+public class IngredientCreateDto {
+    private String name;
+
+    public IngredientCreateDto() {}
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java
index 1a9360bf01fa2544b241a017cfa0c056dada02e2..48775edebad0ce0566799747a90213bb6ec3b3ce 100644
--- a/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/IngredientDto.java
@@ -1,8 +1,26 @@
 package fr.ulille.iut.pizzaland.dto;
 
 public class IngredientDto {
+    private long id;
+    private String name;
 
     public IngredientDto() {
-        
+    }
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
     }
 }
+
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaCreateDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaCreateDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..6540b2bf73c7cfa6f324c63ac3011d08bd2e7161
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaCreateDto.java
@@ -0,0 +1,15 @@
+package fr.ulille.iut.pizzaland.dto;
+
+public class PizzaCreateDto {
+    private String name;
+
+    public PizzaCreateDto() {}
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getName() {
+        return name;
+    }
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java
new file mode 100644
index 0000000000000000000000000000000000000000..2fc40e313dabbecdf4a9391e757c5dcd616c163a
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/dto/PizzaDto.java
@@ -0,0 +1,33 @@
+package fr.ulille.iut.pizzaland.dto;
+
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+
+public class PizzaDto {
+    private long id;
+    private String name;
+    private int[] ingredients;
+
+    public long getId() {
+        return id;
+    }
+
+    public void setId(long id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public int[] getIngredients() {
+        return ingredients;
+    }
+
+    public void setIngredients(int[] ingredients) {
+        this.ingredients = ingredients;
+    }
+}
diff --git a/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java b/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java
index bc19082daf4dd4cd778b956d9607e2f259a94cd1..f5e03e6c30ac81a726e98dd5580a95e99c7ec2da 100644
--- a/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java
+++ b/src/main/java/fr/ulille/iut/pizzaland/resources/IngredientResource.java
@@ -4,29 +4,123 @@ import java.net.URI;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.logging.Logger;
+import java.util.stream.Collectors;
 
-import javax.ws.rs.GET;
-import javax.ws.rs.Path;
+import javax.ws.rs.*;
 import javax.ws.rs.core.Context;
 import javax.ws.rs.core.Response;
 import javax.ws.rs.core.UriInfo;
 
+import fr.ulille.iut.pizzaland.BDDFactory;
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+import fr.ulille.iut.pizzaland.dao.IngredientDao;
+import fr.ulille.iut.pizzaland.dto.IngredientCreateDto;
 import fr.ulille.iut.pizzaland.dto.IngredientDto;
 
 @Path("/ingredients")
 public class IngredientResource {
     private static final Logger LOGGER = Logger.getLogger(IngredientResource.class.getName());
+    private IngredientDao ingredients;
 
     @Context
     public UriInfo uriInfo;
 
     public IngredientResource() {
+        ingredients = BDDFactory.buildDao(IngredientDao.class);
+        ingredients.createTable();
     }
 
     @GET
     public List<IngredientDto> getAll() {
         LOGGER.info("IngredientResource:getAll");
 
-	return null;
+        List<IngredientDto> l = ingredients.getAll().stream().map(Ingredient::toDto).collect(Collectors.toList());
+        return l;
     }
-}
+
+    @GET
+    @Path("{id}")
+    public IngredientDto getOneIngredient(@PathParam("id") long id) {
+        LOGGER.info("getOneIngredient(" + id + ")");
+        try {
+            Ingredient ingredient = ingredients.findById(id);
+            return Ingredient.toDto(ingredient);
+        }
+        catch ( Exception e ) {
+            // Cette exception générera une réponse avec une erreur 404
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+    }
+
+    @POST
+    public Response createIngredient(IngredientCreateDto ingredientCreateDto) {
+        Ingredient existing = ingredients.findByName(ingredientCreateDto.getName());
+        if ( existing != null ) {
+            throw new WebApplicationException(Response.Status.CONFLICT);
+        }
+
+        try {
+            Ingredient ingredient = Ingredient.fromIngredientCreateDto(ingredientCreateDto);
+            long id = ingredients.insert(ingredient.getName());
+            ingredient.setId(id);
+            IngredientDto ingredientDto = Ingredient.toDto(ingredient);
+
+            URI uri = uriInfo.getAbsolutePathBuilder().path("" + id).build();
+
+            return Response.created(uri).entity(ingredientDto).build();
+        }
+        catch ( Exception e ) {
+            e.printStackTrace();
+            throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+        }
+    }
+
+    @DELETE
+    @Path("{id}")
+    public Response deleteIngredient(@PathParam("id") long id) {
+        if ( ingredients.findById(id) == null ) {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+
+        ingredients.remove(id);
+
+        return Response.status(Response.Status.ACCEPTED).build();
+    }
+
+    @GET
+    @Path("{id}/name")
+    public String getIngredientName(@PathParam("id") long id) {
+        Ingredient ingredient = ingredients.findById(id);
+        if ( ingredient == null ) {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+
+        return ingredient.getName();
+    }
+
+    @POST
+    @Consumes("application/x-www-form-urlencoded")
+    public Response createIngredient(@FormParam("name") String name) {
+        Ingredient existing = ingredients.findByName(name);
+        if ( existing != null ) {
+            throw new WebApplicationException(Response.Status.CONFLICT);
+        }
+
+        try {
+            Ingredient ingredient = new Ingredient();
+            ingredient.setName(name);
+
+            long id = ingredients.insert(ingredient.getName());
+            ingredient.setId(id);
+            IngredientDto ingredientDto = Ingredient.toDto(ingredient);
+
+            URI uri = uriInfo.getAbsolutePathBuilder().path("" + id).build();
+
+            return Response.created(uri).entity(ingredientDto).build();
+        }
+        catch ( Exception e ) {
+            e.printStackTrace();
+            throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/ulille/iut/pizzaland/resources/PizzaResource.java b/src/main/java/fr/ulille/iut/pizzaland/resources/PizzaResource.java
new file mode 100644
index 0000000000000000000000000000000000000000..703e4145e2312837ce3a3f016517defb95ba4342
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/resources/PizzaResource.java
@@ -0,0 +1,123 @@
+package fr.ulille.iut.pizzaland.resources;
+
+import fr.ulille.iut.pizzaland.BDDFactory;
+import fr.ulille.iut.pizzaland.beans.Pizza;
+import fr.ulille.iut.pizzaland.dao.PizzaDao;
+import fr.ulille.iut.pizzaland.dto.PizzaCreateDto;
+import fr.ulille.iut.pizzaland.dto.PizzaDto;
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.Context;
+import javax.ws.rs.core.Response;
+import javax.ws.rs.core.UriInfo;
+import java.net.URI;
+import java.util.List;
+import java.util.logging.Logger;
+import java.util.stream.Collectors;
+
+@Path("/pizzas")
+public class PizzaResource {
+    private static final Logger LOGGER = Logger.getLogger(PizzaResource.class.getName());
+    private PizzaDao pizzas;
+
+    @Context
+    public UriInfo uriInfo;
+
+    public PizzaResource() {
+        pizzas = BDDFactory.buildDao(PizzaDao.class);
+        pizzas.createTableAndIngredientAssociation();
+    }
+
+    @GET
+    public List<PizzaDto> getAll() {
+        LOGGER.info("PizzaResource:getAll");
+
+        return pizzas.getAll().stream().map(Pizza::toDto).collect(Collectors.toList());
+    }
+
+    @GET
+    @Path("{id}")
+    public PizzaDto getOnePizza(@PathParam("id") long id) {
+        LOGGER.info("getOnePizza(" + id + ")");
+        try {
+            Pizza pizza = pizzas.findById(id);
+            return Pizza.toDto(pizza);
+        }
+        catch ( Exception e ) {
+            // Cette exception générera une réponse avec une erreur 404
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+    }
+
+    @POST
+    public Response createPizza(PizzaCreateDto pizzaCreateDto) {
+        Pizza existing = pizzas.findByName(pizzaCreateDto.getName());
+        if ( existing != null ) {
+            throw new WebApplicationException(Response.Status.CONFLICT);
+        }
+
+        try {
+            Pizza pizza = Pizza.fromPizzaCreateDto(pizzaCreateDto);
+            long id = pizzas.insert(pizza.getName());
+            pizza.setId(id);
+            PizzaDto pizzaDto = Pizza.toDto(pizza);
+
+            URI uri = uriInfo.getAbsolutePathBuilder().path("" + id).build();
+
+            return Response.created(uri).entity(pizzaDto).build();
+        }
+        catch ( Exception e ) {
+            e.printStackTrace();
+            throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+        }
+    }
+
+    @DELETE
+    @Path("{id}")
+    public Response deleteIngredient(@PathParam("id") long id) {
+        if (pizzas.findById(id) == null ) {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+
+        pizzas.remove(id);
+
+        return Response.status(Response.Status.ACCEPTED).build();
+    }
+
+    @GET
+    @Path("{id}/name")
+    public String getIngredientName(@PathParam("id") long id) {
+        Pizza pizza = pizzas.findById(id);
+        if ( pizza == null ) {
+            throw new WebApplicationException(Response.Status.NOT_FOUND);
+        }
+
+        return pizza.getName();
+    }
+
+    @POST
+    @Consumes("application/x-www-form-urlencoded")
+    public Response createPizza(@FormParam("name") String name) {
+        Pizza existing = pizzas.findByName(name);
+        if ( existing != null ) {
+            throw new WebApplicationException(Response.Status.CONFLICT);
+        }
+
+        try {
+            Pizza pizza = new Pizza();
+            pizza.setName(name);
+
+            long id = pizzas.insert(pizza.getName());
+            pizza.setId(id);
+            PizzaDto pizzaDto = Pizza.toDto(pizza);
+
+            URI uri = uriInfo.getAbsolutePathBuilder().path("" + id).build();
+
+            return Response.created(uri).entity(pizzaDto).build();
+        }
+        catch ( Exception e ) {
+            e.printStackTrace();
+            throw new WebApplicationException(Response.Status.NOT_ACCEPTABLE);
+        }
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/fr/ulille/iut/pizzaland/ressources/UncaughtException.java b/src/main/java/fr/ulille/iut/pizzaland/ressources/UncaughtException.java
new file mode 100644
index 0000000000000000000000000000000000000000..90a85006eacdefde7fd1b72c024dd4ff3ce2b106
--- /dev/null
+++ b/src/main/java/fr/ulille/iut/pizzaland/ressources/UncaughtException.java
@@ -0,0 +1,22 @@
+package fr.ulille.iut.pizzaland.ressources;
+
+import javax.ws.rs.core.Response;
+import javax.ws.rs.ext.ExceptionMapper;
+import javax.ws.rs.ext.Provider;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+@Provider
+public class UncaughtException extends Throwable implements ExceptionMapper<Throwable> {
+    final static Logger logger = LoggerFactory.getLogger(UncaughtException.class);
+
+	private static final long serialVersionUID = 1L;
+
+	@Override
+	public Response toResponse(Throwable exception) {
+		logger.debug("Exception thrown", exception);
+		return Response.status(500).entity("Exception thrown: " + exception.getStackTrace()[0] + "see log.").type("text/plain").build();
+	}
+
+}
diff --git a/src/main/resources/ingredients.json b/src/main/resources/ingredients.json
index 2f6d0120787ad372eaa20f10622f421e2727f447..f1fbef4c8028962b5f40756f03b4680bab6f2fb6 100644
--- a/src/main/resources/ingredients.json
+++ b/src/main/resources/ingredients.json
@@ -1,14 +1,38 @@
 [
-    { "name": "mozzarella"},
-{ "name": "jambon"},
-{ "name": "champignons"},
-{ "name": "olives"},
-{ "name": "tomate"},
-{ "name": "merguez"},
-{ "name": "lardons"},
-{ "name": "fromage"},
-{ "name": "oeuf"},
-{ "name": "poivrons"},
-{ "name": "ananas"},
-{ "name": "reblochon"}
-]
+  {
+    "name": "mozzarella"
+  },
+  {
+    "name": "jambon"
+  },
+  {
+    "name": "champignons"
+  },
+  {
+    "name": "olives"
+  },
+  {
+    "name": "tomate"
+  },
+  {
+    "name": "merguez"
+  },
+  {
+    "name": "lardons"
+  },
+  {
+    "name": "fromage"
+  },
+  {
+    "name": "oeuf"
+  },
+  {
+    "name": "poivrons"
+  },
+  {
+    "name": "ananas"
+  },
+  {
+    "name": "reblochon"
+  }
+]
\ No newline at end of file
diff --git a/src/main/resources/log4j.properties b/src/main/resources/log4j.properties
new file mode 100644
index 0000000000000000000000000000000000000000..393e0877ec1c2207f866bcf94740760170893486
--- /dev/null
+++ b/src/main/resources/log4j.properties
@@ -0,0 +1,8 @@
+# Root logger option
+log4j.rootLogger=INFO, stdout
+
+# Direct log messages to stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/src/main/resources/log4j.xml b/src/main/resources/log4j.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c0c0753c35fb5248be6c098f50df85df597d01d4
--- /dev/null
+++ b/src/main/resources/log4j.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<log4j:configuration debug="true"
+	xmlns:log4j='http://jakarta.apache.org/log4j/'>
+
+	<appender name="console" class="org.apache.log4j.ConsoleAppender">
+	    <layout class="org.apache.log4j.PatternLayout">
+		<param name="ConversionPattern" 
+		  value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
+	    </layout>
+	</appender>
+
+	<root>
+		<level value="DEBUG" />
+		<appender-ref ref="console" />
+	</root>
+
+</log4j:configuration>
diff --git a/src/main/resources/pizzas.json b/src/main/resources/pizzas.json
new file mode 100644
index 0000000000000000000000000000000000000000..377e3ef9c0d6e2b42c35f7ee161f434e4adf30cf
--- /dev/null
+++ b/src/main/resources/pizzas.json
@@ -0,0 +1,22 @@
+[
+  {
+    "name": "intriguante",
+    "ingredients": [1]
+  },
+  {
+    "name": "4 fromages",
+    "ingredients": []
+  },
+  {
+    "name": "regina",
+    "ingredients": []
+  },
+  {
+    "name": "3 fromages",
+    "ingredients": []
+  },
+  {
+    "name": "hawaienne",
+    "ingredients": []
+  }
+]
\ No newline at end of file
diff --git a/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java b/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java
index 2c8b1be3f265046d4d3557185aac26b7704ec1ac..9bd536e2bab19ece4a4e945d4c818a060468a7dc 100644
--- a/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java
+++ b/src/test/java/fr/ulille/iut/pizzaland/IngredientResourceTest.java
@@ -1,6 +1,9 @@
 package fr.ulille.iut.pizzaland;
 
 import fr.ulille.iut.pizzaland.ApiV1;
+import fr.ulille.iut.pizzaland.beans.Ingredient;
+import fr.ulille.iut.pizzaland.dao.IngredientDao;
+import fr.ulille.iut.pizzaland.dto.IngredientCreateDto;
 import fr.ulille.iut.pizzaland.dto.IngredientDto;
 
 import org.glassfish.jersey.test.JerseyTest;
@@ -10,11 +13,10 @@ import org.junit.Before;
 import org.junit.Test;
 
 import javax.ws.rs.client.Entity;
-import javax.ws.rs.core.GenericType;
-import javax.ws.rs.core.Application;
-import javax.ws.rs.core.Response;
+import javax.ws.rs.core.*;
 
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
 
 import java.util.List;
 import java.util.logging.Logger;
@@ -26,10 +28,12 @@ import java.util.logging.Logger;
  */
 public class IngredientResourceTest extends JerseyTest {
     private static final Logger LOGGER = Logger.getLogger(IngredientResourceTest.class.getName());
-    
+    private IngredientDao dao;
+
     @Override
     protected Application configure() {
-       return new ApiV1();
+        BDDFactory.setJdbiForTests();
+        return new ApiV1();
     }
 
     // Les méthodes setEnvUp() et tearEnvDown() serviront à terme à initialiser la base de données
@@ -38,12 +42,13 @@ public class IngredientResourceTest extends JerseyTest {
     // https://stackoverflow.com/questions/25906976/jerseytest-and-junit-throws-nullpointerexception
     @Before
     public void setEnvUp() {
-	
+	    dao = BDDFactory.buildDao(IngredientDao.class);
+	    dao.createTable();
     }
 
     @After
     public void tearEnvDown() throws Exception {
-
+        dao.dropTable();
     }
 
     @Test
@@ -66,4 +71,128 @@ public class IngredientResourceTest extends JerseyTest {
         assertEquals(0, ingredients.size());
 
     }
+
+    @Test
+    public void testGetExistingIngredient() {
+        Ingredient ingredient = new Ingredient();
+        ingredient.setId(1);
+        ingredient.setName("mozzarella");
+
+        Response response = target("/ingredients/1").request().get();
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+
+        Ingredient result  = Ingredient.fromDto(response.readEntity(IngredientDto.class));
+        assertEquals(ingredient, result);
+    }
+
+    @Test
+    public void testGetNotExistingIngredient() {
+        Response response = target("/ingredients/125").request().get();
+        assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
+    }
+
+    @Test
+    public void testCreateIngredient() {
+        IngredientCreateDto ingredientCreateDto = new IngredientCreateDto();
+        ingredientCreateDto.setName("mozzarella");
+
+        Response response = target("/ingredients")
+                .request()
+                .post(Entity.json(ingredientCreateDto));
+
+        // On vérifie le code de status à 201
+        assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus());
+
+        IngredientDto returnedEntity = response.readEntity(IngredientDto.class);
+
+        // On vérifie que le champ d'entête Location correspond à
+        // l'URI de la nouvelle entité
+        assertEquals(target("/ingredients/" +
+                returnedEntity.getId()).getUri(), response.getLocation());
+
+        // On vérifie que le nom correspond
+        assertEquals(returnedEntity.getName(), ingredientCreateDto.getName());
+    }
+
+    @Test
+    public void testCreateSameIngredient() {
+        IngredientCreateDto ingredientCreateDto = new IngredientCreateDto();
+        ingredientCreateDto.setName("mozzarella");
+        dao.insert(ingredientCreateDto.getName());
+
+        Response response = target("/ingredients")
+                .request()
+                .post(Entity.json(ingredientCreateDto));
+
+        assertEquals(Response.Status.CONFLICT.getStatusCode(), response.getStatus());
+    }
+
+    @Test
+    public void testCreateIngredientWithoutName() {
+        IngredientCreateDto ingredientCreateDto = new IngredientCreateDto();
+
+        Response response = target("/ingredients")
+                .request()
+                .post(Entity.json(ingredientCreateDto));
+
+        assertEquals(Response.Status.NOT_ACCEPTABLE.getStatusCode(), response.getStatus());
+    }
+
+    @Test
+    public void testDeleteExistingIngredient() {
+        Ingredient ingredient = new Ingredient();
+        ingredient.setName("mozzarella");
+        long id = dao.insert(ingredient.getName());
+        ingredient.setId(id);
+
+        Response response = target("/ingredients/" + id).request().delete();
+
+        assertEquals(Response.Status.ACCEPTED.getStatusCode(), response.getStatus());
+
+        Ingredient result = dao.findById(id);
+        assertEquals(result, null);
+    }
+
+    @Test
+    public void testDeleteNotExistingIngredient() {
+        Response response = target("/ingredients/125").request().delete();
+        assertEquals(Response.Status.NOT_FOUND.getStatusCode(),
+                response.getStatus());
+    }
+
+    @Test
+    public void testGetIngredientName() {
+        Ingredient ingredient = new Ingredient();
+        ingredient.setName("mozzarella");
+        long id = dao.insert(ingredient.getName());
+
+        Response response = target("ingredients/" + id + "/name").request().get();
+
+        assertEquals(Response.Status.OK.getStatusCode(), response.getStatus());
+
+        assertEquals("mozzarella", response.readEntity(String.class));
+    }
+
+    @Test
+    public void testGetNotExistingIngredientName() {
+        Response response = target("ingredients/125/name").request().get();
+
+        assertEquals(Response.Status.NOT_FOUND.getStatusCode(), response.getStatus());
+    }
+
+    @Test
+    public void testCreateWithForm() {
+        Form form = new Form();
+        form.param("name", "chorizo");
+
+        Entity<Form> formEntity = Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE);
+        Response response = target("ingredients").request().post(formEntity);
+
+        assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatus());
+        String location = response.getHeaderString("Location");
+        long id = Integer.parseInt(location.substring(location.lastIndexOf('/') + 1));
+        Ingredient result = dao.findById(id);
+
+        assertNotNull(result);
+    }
 }
diff --git a/src/test/resources/log4j.properties b/src/test/resources/log4j.properties
new file mode 100644
index 0000000000000000000000000000000000000000..393e0877ec1c2207f866bcf94740760170893486
--- /dev/null
+++ b/src/test/resources/log4j.properties
@@ -0,0 +1,8 @@
+# Root logger option
+log4j.rootLogger=INFO, stdout
+
+# Direct log messages to stdout
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.Target=System.out
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
\ No newline at end of file
diff --git a/src/test/resources/log4j.xml b/src/test/resources/log4j.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c0c0753c35fb5248be6c098f50df85df597d01d4
--- /dev/null
+++ b/src/test/resources/log4j.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">
+<log4j:configuration debug="true"
+	xmlns:log4j='http://jakarta.apache.org/log4j/'>
+
+	<appender name="console" class="org.apache.log4j.ConsoleAppender">
+	    <layout class="org.apache.log4j.PatternLayout">
+		<param name="ConversionPattern" 
+		  value="%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n" />
+	    </layout>
+	</appender>
+
+	<root>
+		<level value="DEBUG" />
+		<appender-ref ref="console" />
+	</root>
+
+</log4j:configuration>