diff --git a/.idea/$CACHE_FILE$ b/.idea/$CACHE_FILE$
new file mode 100644
index 0000000..6cb8985
--- /dev/null
+++ b/.idea/$CACHE_FILE$
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/.gitignore b/.idea/.gitignore
new file mode 100644
index 0000000..73f69e0
--- /dev/null
+++ b/.idea/.gitignore
@@ -0,0 +1,8 @@
+# Default ignored files
+/shelf/
+/workspace.xml
+# Datasource local storage ignored files
+/dataSources/
+/dataSources.local.xml
+# Editor-based HTTP Client requests
+/httpRequests/
diff --git a/.idea/ClojureProjectResolveSettings.xml b/.idea/ClojureProjectResolveSettings.xml
new file mode 100644
index 0000000..df470b1
--- /dev/null
+++ b/.idea/ClojureProjectResolveSettings.xml
@@ -0,0 +1,6 @@
+
+
+
+ IDE
+
+
\ No newline at end of file
diff --git a/.idea/clojure-deps.xml b/.idea/clojure-deps.xml
new file mode 100644
index 0000000..60b30af
--- /dev/null
+++ b/.idea/clojure-deps.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..ad33fab
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,15 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__borkdude_dynaload_0_2_2.xml b/.idea/libraries/Deps__borkdude_dynaload_0_2_2.xml
new file mode 100644
index 0000000..fa1aaf4
--- /dev/null
+++ b/.idea/libraries/Deps__borkdude_dynaload_0_2_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__borkdude_edamame_0_0_11_alpha_13.xml b/.idea/libraries/Deps__borkdude_edamame_0_0_11_alpha_13.xml
new file mode 100644
index 0000000..bcd920e
--- /dev/null
+++ b/.idea/libraries/Deps__borkdude_edamame_0_0_11_alpha_13.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__com_bhauman_spell_spec_0_1_2.xml b/.idea/libraries/Deps__com_bhauman_spell_spec_0_1_2.xml
new file mode 100644
index 0000000..937b2e0
--- /dev/null
+++ b/.idea/libraries/Deps__com_bhauman_spell_spec_0_1_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__com_cognitect_transit_clj_1_0_324.xml b/.idea/libraries/Deps__com_cognitect_transit_clj_1_0_324.xml
new file mode 100644
index 0000000..2292c9e
--- /dev/null
+++ b/.idea/libraries/Deps__com_cognitect_transit_clj_1_0_324.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__com_cognitect_transit_java_1_0_343.xml b/.idea/libraries/Deps__com_cognitect_transit_java_1_0_343.xml
new file mode 100644
index 0000000..46117fd
--- /dev/null
+++ b/.idea/libraries/Deps__com_cognitect_transit_java_1_0_343.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_annotations_2_11_2.xml b/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_annotations_2_11_2.xml
new file mode 100644
index 0000000..67b46f3
--- /dev/null
+++ b/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_annotations_2_11_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_core_2_11_2.xml b/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_core_2_11_2.xml
new file mode 100644
index 0000000..ce5fd76
--- /dev/null
+++ b/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_core_2_11_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_databind_2_11_2.xml b/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_databind_2_11_2.xml
new file mode 100644
index 0000000..76b3282
--- /dev/null
+++ b/.idea/libraries/Deps__com_fasterxml_jackson_core_jackson_databind_2_11_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_2.xml b/.idea/libraries/Deps__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_2.xml
new file mode 100644
index 0000000..ff97bbd
--- /dev/null
+++ b/.idea/libraries/Deps__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_11_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__com_googlecode_json_simple_json_simple_1_1_1.xml b/.idea/libraries/Deps__com_googlecode_json_simple_json_simple_1_1_1.xml
new file mode 100644
index 0000000..79b010b
--- /dev/null
+++ b/.idea/libraries/Deps__com_googlecode_json_simple_json_simple_1_1_1.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__commons_codec_1_11.xml b/.idea/libraries/Deps__commons_codec_1_11.xml
new file mode 100644
index 0000000..69f35b0
--- /dev/null
+++ b/.idea/libraries/Deps__commons_codec_1_11.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__commons_fileupload_1_4.xml b/.idea/libraries/Deps__commons_fileupload_1_4.xml
new file mode 100644
index 0000000..e4ad0ea
--- /dev/null
+++ b/.idea/libraries/Deps__commons_fileupload_1_4.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__commons_io_2_6.xml b/.idea/libraries/Deps__commons_io_2_6.xml
new file mode 100644
index 0000000..b91732c
--- /dev/null
+++ b/.idea/libraries/Deps__commons_io_2_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__crypto_equality_1_0_0.xml b/.idea/libraries/Deps__crypto_equality_1_0_0.xml
new file mode 100644
index 0000000..1c283c1
--- /dev/null
+++ b/.idea/libraries/Deps__crypto_equality_1_0_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__crypto_random_1_2_0.xml b/.idea/libraries/Deps__crypto_random_1_2_0.xml
new file mode 100644
index 0000000..ebd769f
--- /dev/null
+++ b/.idea/libraries/Deps__crypto_random_1_2_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__expound_0_8_5.xml b/.idea/libraries/Deps__expound_0_8_5.xml
new file mode 100644
index 0000000..2efd5f7
--- /dev/null
+++ b/.idea/libraries/Deps__expound_0_8_5.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__fipp_0_6_23.xml b/.idea/libraries/Deps__fipp_0_6_23.xml
new file mode 100644
index 0000000..f23b4dc
--- /dev/null
+++ b/.idea/libraries/Deps__fipp_0_6_23.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__hiccup_1_0_5.xml b/.idea/libraries/Deps__hiccup_1_0_5.xml
new file mode 100644
index 0000000..6516a22
--- /dev/null
+++ b/.idea/libraries/Deps__hiccup_1_0_5.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__http_kit_2_3_0.xml b/.idea/libraries/Deps__http_kit_2_3_0.xml
new file mode 100644
index 0000000..19162c0
--- /dev/null
+++ b/.idea/libraries/Deps__http_kit_2_3_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__javax_servlet_javax_servlet_api_3_1_0.xml b/.idea/libraries/Deps__javax_servlet_javax_servlet_api_3_1_0.xml
new file mode 100644
index 0000000..2bc2e68
--- /dev/null
+++ b/.idea/libraries/Deps__javax_servlet_javax_servlet_api_3_1_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__javax_xml_bind_jaxb_api_2_3_0.xml b/.idea/libraries/Deps__javax_xml_bind_jaxb_api_2_3_0.xml
new file mode 100644
index 0000000..1d4ab36
--- /dev/null
+++ b/.idea/libraries/Deps__javax_xml_bind_jaxb_api_2_3_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__lambdaisland_deep_diff_0_0_47.xml b/.idea/libraries/Deps__lambdaisland_deep_diff_0_0_47.xml
new file mode 100644
index 0000000..7ec2b41
--- /dev/null
+++ b/.idea/libraries/Deps__lambdaisland_deep_diff_0_0_47.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__meta_merge_1_0_0.xml b/.idea/libraries/Deps__meta_merge_1_0_0.xml
new file mode 100644
index 0000000..9964ddf
--- /dev/null
+++ b/.idea/libraries/Deps__meta_merge_1_0_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_jsonista_0_2_7.xml b/.idea/libraries/Deps__metosin_jsonista_0_2_7.xml
new file mode 100644
index 0000000..b17ea58
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_jsonista_0_2_7.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_malli_0_0_1_20200924_063109_27.xml b/.idea/libraries/Deps__metosin_malli_0_0_1_20200924_063109_27.xml
new file mode 100644
index 0000000..448f851
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_malli_0_0_1_20200924_063109_27.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_muuntaja_0_6_7.xml b/.idea/libraries/Deps__metosin_muuntaja_0_6_7.xml
new file mode 100644
index 0000000..9b7ebec
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_muuntaja_0_6_7.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_0_5_6.xml
new file mode 100644
index 0000000..012ff87
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_core_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_core_0_5_6.xml
new file mode 100644
index 0000000..edd4b72
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_core_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_dev_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_dev_0_5_6.xml
new file mode 100644
index 0000000..8aee2ef
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_dev_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_frontend_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_frontend_0_5_6.xml
new file mode 100644
index 0000000..cb54895
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_frontend_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_http_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_http_0_5_6.xml
new file mode 100644
index 0000000..c2f60ba
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_http_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_interceptors_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_interceptors_0_5_6.xml
new file mode 100644
index 0000000..7d9ae05
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_interceptors_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_malli_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_malli_0_5_6.xml
new file mode 100644
index 0000000..cdca40b
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_malli_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_middleware_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_middleware_0_5_6.xml
new file mode 100644
index 0000000..8c6232b
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_middleware_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_ring_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_ring_0_5_6.xml
new file mode 100644
index 0000000..0311e15
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_ring_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_schema_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_schema_0_5_6.xml
new file mode 100644
index 0000000..8bca330
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_schema_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_sieppari_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_sieppari_0_5_6.xml
new file mode 100644
index 0000000..6ba56d2
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_sieppari_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_spec_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_spec_0_5_6.xml
new file mode 100644
index 0000000..a0f1383
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_spec_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_swagger_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_swagger_0_5_6.xml
new file mode 100644
index 0000000..7cc0bae
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_swagger_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_reitit_swagger_ui_0_5_6.xml b/.idea/libraries/Deps__metosin_reitit_swagger_ui_0_5_6.xml
new file mode 100644
index 0000000..0085efe
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_reitit_swagger_ui_0_5_6.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_ring_swagger_ui_3_25_3.xml b/.idea/libraries/Deps__metosin_ring_swagger_ui_3_25_3.xml
new file mode 100644
index 0000000..f794949
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_ring_swagger_ui_3_25_3.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_schema_tools_0_12_2.xml b/.idea/libraries/Deps__metosin_schema_tools_0_12_2.xml
new file mode 100644
index 0000000..a8246ee
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_schema_tools_0_12_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_sieppari_0_0_0_alpha13.xml b/.idea/libraries/Deps__metosin_sieppari_0_0_0_alpha13.xml
new file mode 100644
index 0000000..e97a3d8
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_sieppari_0_0_0_alpha13.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__metosin_spec_tools_0_10_4.xml b/.idea/libraries/Deps__metosin_spec_tools_0_10_4.xml
new file mode 100644
index 0000000..b7bf22d
--- /dev/null
+++ b/.idea/libraries/Deps__metosin_spec_tools_0_10_4.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__mvxcvi_arrangement_1_2_0.xml b/.idea/libraries/Deps__mvxcvi_arrangement_1_2_0.xml
new file mode 100644
index 0000000..15768c2
--- /dev/null
+++ b/.idea/libraries/Deps__mvxcvi_arrangement_1_2_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__mvxcvi_puget_1_1_2.xml b/.idea/libraries/Deps__mvxcvi_puget_1_1_2.xml
new file mode 100644
index 0000000..b1a6da9
--- /dev/null
+++ b/.idea/libraries/Deps__mvxcvi_puget_1_1_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__org_clojure_clojure_1_10_1.xml b/.idea/libraries/Deps__org_clojure_clojure_1_10_1.xml
new file mode 100644
index 0000000..12f394b
--- /dev/null
+++ b/.idea/libraries/Deps__org_clojure_clojure_1_10_1.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__org_clojure_core_rrb_vector_0_0_14.xml b/.idea/libraries/Deps__org_clojure_core_rrb_vector_0_0_14.xml
new file mode 100644
index 0000000..389f08a
--- /dev/null
+++ b/.idea/libraries/Deps__org_clojure_core_rrb_vector_0_0_14.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__org_clojure_core_specs_alpha_0_2_44.xml b/.idea/libraries/Deps__org_clojure_core_specs_alpha_0_2_44.xml
new file mode 100644
index 0000000..cef9761
--- /dev/null
+++ b/.idea/libraries/Deps__org_clojure_core_specs_alpha_0_2_44.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__org_clojure_spec_alpha_0_2_187.xml b/.idea/libraries/Deps__org_clojure_spec_alpha_0_2_187.xml
new file mode 100644
index 0000000..171056d
--- /dev/null
+++ b/.idea/libraries/Deps__org_clojure_spec_alpha_0_2_187.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__org_clojure_test_check_1_0_0.xml b/.idea/libraries/Deps__org_clojure_test_check_1_0_0.xml
new file mode 100644
index 0000000..bfb630a
--- /dev/null
+++ b/.idea/libraries/Deps__org_clojure_test_check_1_0_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__org_clojure_tools_reader_1_3_2.xml b/.idea/libraries/Deps__org_clojure_tools_reader_1_3_2.xml
new file mode 100644
index 0000000..ca19071
--- /dev/null
+++ b/.idea/libraries/Deps__org_clojure_tools_reader_1_3_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__org_javassist_javassist_3_18_1_GA.xml b/.idea/libraries/Deps__org_javassist_javassist_3_18_1_GA.xml
new file mode 100644
index 0000000..ea76a2a
--- /dev/null
+++ b/.idea/libraries/Deps__org_javassist_javassist_3_18_1_GA.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__org_msgpack_msgpack_0_6_12.xml b/.idea/libraries/Deps__org_msgpack_msgpack_0_6_12.xml
new file mode 100644
index 0000000..ae5264a
--- /dev/null
+++ b/.idea/libraries/Deps__org_msgpack_msgpack_0_6_12.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__prismatic_schema_1_1_12.xml b/.idea/libraries/Deps__prismatic_schema_1_1_12.xml
new file mode 100644
index 0000000..402c14a
--- /dev/null
+++ b/.idea/libraries/Deps__prismatic_schema_1_1_12.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__ring_ring_anti_forgery_1_3_0.xml b/.idea/libraries/Deps__ring_ring_anti_forgery_1_3_0.xml
new file mode 100644
index 0000000..7b5bfea
--- /dev/null
+++ b/.idea/libraries/Deps__ring_ring_anti_forgery_1_3_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__ring_ring_codec_1_1_2.xml b/.idea/libraries/Deps__ring_ring_codec_1_1_2.xml
new file mode 100644
index 0000000..02595f3
--- /dev/null
+++ b/.idea/libraries/Deps__ring_ring_codec_1_1_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__ring_ring_core_1_8_1.xml b/.idea/libraries/Deps__ring_ring_core_1_8_1.xml
new file mode 100644
index 0000000..44ff993
--- /dev/null
+++ b/.idea/libraries/Deps__ring_ring_core_1_8_1.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__ring_ring_defaults_0_3_2.xml b/.idea/libraries/Deps__ring_ring_defaults_0_3_2.xml
new file mode 100644
index 0000000..f62d92d
--- /dev/null
+++ b/.idea/libraries/Deps__ring_ring_defaults_0_3_2.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__ring_ring_headers_0_3_0.xml b/.idea/libraries/Deps__ring_ring_headers_0_3_0.xml
new file mode 100644
index 0000000..2b08ac8
--- /dev/null
+++ b/.idea/libraries/Deps__ring_ring_headers_0_3_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__ring_ring_ssl_0_3_0.xml b/.idea/libraries/Deps__ring_ring_ssl_0_3_0.xml
new file mode 100644
index 0000000..10da3f6
--- /dev/null
+++ b/.idea/libraries/Deps__ring_ring_ssl_0_3_0.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Deps__tech_droit_clj_diff_1_0_1.xml b/.idea/libraries/Deps__tech_droit_clj_diff_1_0_1.xml
new file mode 100644
index 0000000..877b654
--- /dev/null
+++ b/.idea/libraries/Deps__tech_droit_clj_diff_1_0_1.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..74c8fa5
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,7 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/modules.xml b/.idea/modules.xml
new file mode 100644
index 0000000..2d544ae
--- /dev/null
+++ b/.idea/modules.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/open-retro.iml b/.idea/open-retro.iml
new file mode 100644
index 0000000..d6ebd48
--- /dev/null
+++ b/.idea/open-retro.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..35eb1dd
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/backend/.nrepl-port b/backend/.nrepl-port
new file mode 100644
index 0000000..980bda8
--- /dev/null
+++ b/backend/.nrepl-port
@@ -0,0 +1 @@
+38495
\ No newline at end of file
diff --git a/backend/backend.iml b/backend/backend.iml
new file mode 100644
index 0000000..4291198
--- /dev/null
+++ b/backend/backend.iml
@@ -0,0 +1,74 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/deps.edn b/backend/deps.edn
similarity index 100%
rename from deps.edn
rename to backend/deps.edn
diff --git a/src/openretro/main.clj b/backend/src/openretro/main.clj
similarity index 70%
rename from src/openretro/main.clj
rename to backend/src/openretro/main.clj
index ac8c11f..276a075 100644
--- a/src/openretro/main.clj
+++ b/backend/src/openretro/main.clj
@@ -19,10 +19,12 @@
(http-server/send! channel data)))))
(def router
- (reitit-ring/ring-handler
- (reitit-ring/router
- [["/hello" {:get {:handler hello}}]
- ["/ws" {:get {:handler ws-endpoint}}]])))
+ (wrap-defaults
+ (reitit-ring/ring-handler
+ (reitit-ring/router
+ [["/hello" {:get {:handler hello}}]
+ ["/ws" {:get {:handler ws-endpoint}}]]))
+ ring.middleware.defaults/api-defaults))
(defonce server (atom nil))
@@ -31,7 +33,18 @@
(@server :timeout 1000)
(reset! server nil)))
-(defn -main [& args]
+(defn start-server []
(reset! server
(http-server/run-server #'router
{:port 8080})))
+
+(defn restart-server []
+ (stop-server)
+ (start-server))
+
+(comment
+ (restart-server))
+
+
+(defn -main [& args]
+ (start-server))
diff --git a/frontend/elm.json b/frontend/elm.json
new file mode 100644
index 0000000..8282746
--- /dev/null
+++ b/frontend/elm.json
@@ -0,0 +1,27 @@
+{
+ "type": "application",
+ "source-directories": [
+ "src"
+ ],
+ "elm-version": "0.19.1",
+ "dependencies": {
+ "direct": {
+ "elm/browser": "1.0.1",
+ "elm/core": "1.0.2",
+ "elm/html": "1.0.0",
+ "elm/http": "2.0.0",
+ "elm/json": "1.1.2",
+ "elm/url": "1.0.0"
+ },
+ "indirect": {
+ "elm/bytes": "1.0.8",
+ "elm/file": "1.0.5",
+ "elm/time": "1.0.0",
+ "elm/virtual-dom": "1.0.2"
+ }
+ },
+ "test-dependencies": {
+ "direct": {},
+ "indirect": {}
+ }
+}
diff --git a/frontend/frontend.iml b/frontend/frontend.iml
new file mode 100644
index 0000000..8021953
--- /dev/null
+++ b/frontend/frontend.iml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/frontend/src/Main.elm b/frontend/src/Main.elm
new file mode 100644
index 0000000..dd8aa45
--- /dev/null
+++ b/frontend/src/Main.elm
@@ -0,0 +1,103 @@
+module Main exposing (main)
+
+import Browser
+import Browser.Navigation as Nav
+import Html exposing (..)
+import Html.Attributes exposing (..)
+import Model exposing (Model)
+import Navigation
+import Url
+import Url.Parser
+
+
+main =
+ Browser.application
+ { init = init
+ , onUrlChange = UrlChanged
+ , onUrlRequest = LinkClicked
+ , subscriptions = subscriptions
+ , update = update
+ , view = view
+ }
+
+
+{-| currently no flags are needed
+that's the reason for the generic type and \_ as param name
+-}
+init : () -> Url.Url -> Nav.Key -> ( Model, Cmd Msg )
+init _ url key =
+ let
+ route : Navigation.Route
+ route =
+ Url.Parser.parse Navigation.routeParser url
+ |> Maybe.withDefault Navigation.Home
+
+ model : Model
+ model =
+ Model.initialModel key route url
+ in
+ routeChanged route model
+
+
+subscriptions : Model -> Sub Msg
+subscriptions _ =
+ Sub.none
+
+
+type Msg
+ = UrlChanged Url.Url
+ | LinkClicked Browser.UrlRequest
+
+
+update : Msg -> Model -> ( Model, Cmd Msg )
+update msg model =
+ case msg of
+ -- Navigation based messages
+ LinkClicked urlRequest ->
+ Navigation.linkClicked urlRequest model.key model
+
+ UrlChanged url ->
+ case Url.Parser.parse Navigation.routeParser url of
+ Just route ->
+ routeChanged route model
+
+ Nothing ->
+ -- TODO error reporting
+ ( { model | route = Navigation.Home }, Cmd.none )
+
+
+routeChanged : Navigation.Route -> Model -> ( Model, Cmd Msg )
+routeChanged route model =
+ case route of
+ Navigation.Home ->
+ ( { model | route = route }
+ , Cmd.none
+ )
+
+
+view : Model -> Browser.Document Msg
+view model =
+ { title = "OpenAgile"
+ , body =
+ [ h1 [] [ text "OpenAgile" ]
+ , div [ class "content" ]
+ [ nav [] [ Navigation.navTree ]
+ , main_ [] (appContent model)
+ ]
+ , node "link" [ rel "stylesheet", href "/assets/style.css" ] []
+ ]
+ }
+
+
+appContent : Model -> List (Html Msg)
+appContent model =
+ case model.route of
+ Navigation.Home ->
+ homePage model
+
+
+homePage : Model -> List (Html Msg)
+homePage model =
+ [ h2 [] [ text "Home" ]
+ ]
+
diff --git a/frontend/src/Model.elm b/frontend/src/Model.elm
new file mode 100644
index 0000000..cdb4f2a
--- /dev/null
+++ b/frontend/src/Model.elm
@@ -0,0 +1,45 @@
+module Model exposing (Model, initialModel)
+
+import Browser.Navigation as Nav
+import Http
+import Navigation
+import Url exposing (Url)
+
+
+type alias Model =
+ { key : Nav.Key
+ , apiHost : String
+ , route : Navigation.Route
+ , httpError : Maybe Http.Error
+ }
+
+
+initialModel : Nav.Key -> Navigation.Route -> Url -> Model
+initialModel key route url =
+ Model
+ key
+ ("//" ++ url.host ++ urlToPort url)
+ route
+ -- httpError
+ Maybe.Nothing
+
+
+urlToPort : Url -> String
+urlToPort url =
+ case url.port_ of
+ Just p ->
+ let
+ isDebug =
+ p == 8000
+
+ portToUse =
+ if isDebug then
+ 8080
+
+ else
+ p
+ in
+ ":" ++ String.fromInt portToUse
+
+ Nothing ->
+ ""
diff --git a/frontend/src/Navigation.elm b/frontend/src/Navigation.elm
new file mode 100644
index 0000000..9864f37
--- /dev/null
+++ b/frontend/src/Navigation.elm
@@ -0,0 +1,45 @@
+module Navigation exposing (Route(..), linkClicked, navTree, routeParser)
+
+import Browser
+import Browser.Navigation as Nav
+import Html exposing (Html, a, details, li, summary, text, ul)
+import Html.Attributes as Attr exposing (href)
+import Url
+import Url.Parser exposing ((>), Parser, map, oneOf, s, top)
+
+
+linkClicked : Browser.UrlRequest -> Nav.Key -> model -> ( model, Cmd msg )
+linkClicked urlRequest key model =
+ case urlRequest of
+ Browser.Internal url ->
+ ( model, Nav.pushUrl key (Url.toString url) )
+
+ Browser.External href ->
+ ( model, Nav.load href )
+
+
+type Route
+ = Home
+
+
+routeParser : Parser (Route -> Route) Route
+routeParser =
+ oneOf
+ [ map Home top
+ --, map ShowTicket (s "tickets" > Url.Parser.int)
+ ]
+
+
+navTree : Html msg
+navTree =
+ ul []
+ [ li [] [ a [ href "/" ] [ text "Home" ] ]
+ , li [] [ a [ href "/projects" ] [ text "Projects" ] ]
+ , li []
+ [ details [ Attr.attribute "open" "open" ]
+ [ summary [] [ a [ href "/tickets" ] [ text "Tickets" ] ]
+ , ul []
+ [ li [] [ a [ href "/tickets/new" ] [ text "New Ticket" ] ] ]
+ ]
+ ]
+ ]