diff --git a/.idea/dataSources/315cb5c9-2b0f-435b-b602-59823b160908.xml b/.idea/dataSources/315cb5c9-2b0f-435b-b602-59823b160908.xml
deleted file mode 100644
index 4fccad1..0000000
--- a/.idea/dataSources/315cb5c9-2b0f-435b-b602-59823b160908.xml
+++ /dev/null
@@ -1,1833 +0,0 @@
-
-
-
-
- 3.51.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
- 1
- 1
-
-
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- window
-
-
- window
-
-
- window
-
-
-
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- window
-
-
-
- 1
-
-
- window
-
-
- 1
-
-
- 1
- 1
-
-
-
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- window
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
- window
-
-
- 1
- window
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- window
-
-
- 1
- window
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- window
-
-
- window
-
-
- window
-
-
-
- window
-
-
- window
-
-
- window
-
-
- window
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- aggregate
-
-
- 1
-
-
- 1
-
-
-
-
-
- 1
- 1
-
-
- window
-
-
- aggregate
-
-
- 1
- 1
-
-
- window
-
-
- 1
-
-
- aggregate
-
-
- window
-
-
- window
-
-
- 1
-
-
- 1
-
-
-
-
-
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
-
- 1
-
-
- 1
-
-
-
-
- window
-
-
- 1
-
-
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
- window
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
-
-
- 1
-
-
-
- aggregate
-
-
-
- 1
- 1
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- window
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- aggregate
-
-
- aggregate
-
-
- 1
-
-
- 1
- 2026-06-05.07:13:27
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
-
- 1
- TEXT|0s
-
-
- 2
- TEXT|0s
-
-
- 3
- TEXT|0s
-
-
- 4
- INT|0s
-
-
- 5
- TEXT|0s
-
-
-
\ No newline at end of file
diff --git a/.idea/dataSources/315cb5c9-2b0f-435b-b602-59823b160908/storage_v2/_src_/schema/main.uQUzAA.meta b/.idea/dataSources/315cb5c9-2b0f-435b-b602-59823b160908/storage_v2/_src_/schema/main.uQUzAA.meta
deleted file mode 100644
index 8dab49c..0000000
--- a/.idea/dataSources/315cb5c9-2b0f-435b-b602-59823b160908/storage_v2/_src_/schema/main.uQUzAA.meta
+++ /dev/null
@@ -1,2 +0,0 @@
-#n:main
-! [0, 0, null, null, -2147483648, -2147483648]
diff --git a/.idea/dataSources/a0abcd0a-1d6f-40e4-88be-f442bcb431ba.xml b/.idea/dataSources/a0abcd0a-1d6f-40e4-88be-f442bcb431ba.xml
deleted file mode 100644
index 9fc8217..0000000
--- a/.idea/dataSources/a0abcd0a-1d6f-40e4-88be-f442bcb431ba.xml
+++ /dev/null
@@ -1,1833 +0,0 @@
-
-
-
-
- 3.51.1
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
- 1
- 1
-
-
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- window
-
-
- window
-
-
- window
-
-
-
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- window
-
-
-
- 1
-
-
- window
-
-
- 1
-
-
- 1
- 1
-
-
-
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- window
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
- window
-
-
- 1
- window
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- window
-
-
- 1
- window
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- 1
- 1
-
-
- window
-
-
- window
-
-
- window
-
-
-
- window
-
-
- window
-
-
- window
-
-
- window
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- aggregate
-
-
- 1
-
-
- 1
-
-
-
-
-
- 1
- 1
-
-
- window
-
-
- aggregate
-
-
- 1
- 1
-
-
- window
-
-
- 1
-
-
- aggregate
-
-
- window
-
-
- window
-
-
- 1
-
-
- 1
-
-
-
-
-
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
-
- 1
-
-
- 1
-
-
-
-
- window
-
-
- 1
-
-
- 1
-
-
-
-
-
- 1
-
-
- 1
-
-
- window
-
-
- 1
-
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
-
-
- 1
-
-
-
-
- 1
-
-
-
- aggregate
-
-
-
- 1
- 1
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- window
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- window
-
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
-
-
- 1
- 1
-
-
- 1
-
-
- 1
-
-
- aggregate
-
-
- aggregate
-
-
- 1
-
-
- 1
- 2026-06-05.07:12:20
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- 2
-
-
- 3
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- 2
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
- R
-
-
- 1
-
-
-
- 1
- TEXT|0s
-
-
- 2
- TEXT|0s
-
-
- 3
- TEXT|0s
-
-
- 4
- INT|0s
-
-
- 5
- TEXT|0s
-
-
-
\ No newline at end of file
diff --git a/.idea/dataSources/a0abcd0a-1d6f-40e4-88be-f442bcb431ba/storage_v2/_src_/schema/main.uQUzAA.meta b/.idea/dataSources/a0abcd0a-1d6f-40e4-88be-f442bcb431ba/storage_v2/_src_/schema/main.uQUzAA.meta
deleted file mode 100644
index 8dab49c..0000000
--- a/.idea/dataSources/a0abcd0a-1d6f-40e4-88be-f442bcb431ba/storage_v2/_src_/schema/main.uQUzAA.meta
+++ /dev/null
@@ -1,2 +0,0 @@
-#n:main
-! [0, 0, null, null, -2147483648, -2147483648]
diff --git a/content/deleteAccount.php b/content/deleteAccount.php
index 6f02a18..8d42198 100644
--- a/content/deleteAccount.php
+++ b/content/deleteAccount.php
@@ -2,19 +2,29 @@
require_once "php/model/UserManager.php";
-$dao = UserManager::getInstance();
-
/*
Deregistrierung
Funktion: Entfernt User aus der Datenbank und beendet die Session
*/
-if (isset($_SESSION["user_email"])) {
- $dao->deleteUser($_SESSION["user_email"]);
-}
+try {
-$_SESSION = [];
-session_destroy();
+ $dao = UserManager::getInstance();
-header("Location: index.php");
-exit();
\ No newline at end of file
+ if (isset($_SESSION["user_email"])) {
+ $dao->deleteUser($_SESSION["user_email"]);
+ }
+
+ $_SESSION = [];
+ session_destroy();
+
+ header("Location: index.php");
+ exit();
+
+} catch (Exception $e) {
+
+ $_SESSION["message"] = "internal_error";
+
+ header("Location: index.php?pfad=profile");
+ exit();
+}
\ No newline at end of file
diff --git a/php/model/DatabaseUserManager.php b/php/model/DatabaseUserManager.php
index a985160..4e04ae5 100644
--- a/php/model/DatabaseUserManager.php
+++ b/php/model/DatabaseUserManager.php
@@ -2,10 +2,24 @@
require_once "UserManagerDAO.php";
+/**
+ * Klasse für den Zugriff auf Benutzerdaten über eine SQLite-Datenbank.
+ *
+ * Diese Klasse verwendet PDO, Prepared Statements und speichert
+ * Benutzerdaten in der Datei db/users.db.
+ */
class DatabaseUserManager implements UserManagerDAO {
private static $instance = null;
+ /**
+ * Konstruktor.
+ *
+ * Erstellt die Benutzerdatenbank und die Tabelle users,
+ * falls diese noch nicht existieren.
+ *
+ * @throws RuntimeException wenn die Datenbank nicht erstellt werden kann
+ */
public function __construct()
{
try {
@@ -27,6 +41,13 @@ class DatabaseUserManager implements UserManagerDAO {
}
}
+ /**
+ * Baut eine Verbindung zur SQLite-Datenbank auf.
+ *
+ * @return PDO Datenbankverbindung
+ *
+ * @throws RuntimeException wenn keine Verbindung hergestellt werden kann
+ */
private function getConnection()
{
try {
@@ -42,6 +63,11 @@ class DatabaseUserManager implements UserManagerDAO {
}
}
+ /**
+ * Gibt die Singleton-Instanz des DatabaseUserManagers zurück.
+ *
+ * @return DatabaseUserManager Instanz des DatabaseUserManagers
+ */
public static function getInstance()
{
if (self::$instance == null) {
@@ -51,6 +77,16 @@ class DatabaseUserManager implements UserManagerDAO {
return self::$instance;
}
+ /**
+ * Sucht einen Benutzer anhand seiner E-Mail-Adresse.
+ *
+ * @param string $email E-Mail-Adresse des Benutzers
+ *
+ * @return array|null Benutzerdaten als Array oder null,
+ * wenn kein Benutzer gefunden wurde
+ *
+ * @throws RuntimeException wenn der Benutzer nicht geladen werden kann
+ */
public function findUser($email)
{
try {
@@ -72,6 +108,22 @@ class DatabaseUserManager implements UserManagerDAO {
}
}
+ /**
+ * Fügt einen neuen Benutzer in die Datenbank ein.
+ *
+ * Die Speicherung erfolgt innerhalb einer Transaktion.
+ * Doppelte E-Mail-Adressen werden durch den Primary Key verhindert.
+ *
+ * @param string $email E-Mail-Adresse des Benutzers
+ * @param string $vorname Vorname des Benutzers
+ * @param string $nachname Nachname des Benutzers
+ * @param string $password Passwort-Hash des Benutzers
+ *
+ * @return void
+ *
+ * @throws InvalidArgumentException wenn die E-Mail-Adresse bereits verwendet wird
+ * @throws RuntimeException wenn der Benutzer nicht gespeichert werden kann
+ */
public function addUser($email, $vorname, $nachname, $password)
{
try {
@@ -107,6 +159,24 @@ class DatabaseUserManager implements UserManagerDAO {
}
}
+ /**
+ * Aktualisiert die Daten eines bestehenden Benutzers.
+ *
+ * Optional kann zusätzlich das Passwort geändert werden.
+ * Wenn kein neues Passwort übergeben wird, bleibt das alte Passwort erhalten.
+ *
+ * @param string $oldEmail Aktuelle E-Mail-Adresse des Benutzers
+ * @param string $newEmail Neue E-Mail-Adresse des Benutzers
+ * @param string $vorname Neuer Vorname des Benutzers
+ * @param string $nachname Neuer Nachname des Benutzers
+ * @param string|null $password Neues Passwort oder null
+ *
+ * @return bool true, wenn der Benutzer aktualisiert wurde,
+ * sonst false
+ *
+ * @throws InvalidArgumentException wenn die neue E-Mail-Adresse bereits verwendet wird
+ * @throws RuntimeException wenn der Benutzer nicht aktualisiert werden kann
+ */
public function updateUser($oldEmail, $newEmail, $vorname, $nachname, $password = null)
{
try {
@@ -160,6 +230,16 @@ class DatabaseUserManager implements UserManagerDAO {
}
}
+ /**
+ * Löscht einen Benutzer anhand seiner E-Mail-Adresse.
+ *
+ * @param string $email E-Mail-Adresse des zu löschenden Benutzers
+ *
+ * @return bool true, wenn der Benutzer gelöscht wurde,
+ * sonst false
+ *
+ * @throws RuntimeException wenn der Benutzer nicht gelöscht werden kann
+ */
public function deleteUser($email)
{
try {
diff --git a/php/validator/user-validator.php b/php/validator/user-validator.php
index 0f3bc40..0f789cf 100644
--- a/php/validator/user-validator.php
+++ b/php/validator/user-validator.php
@@ -1,5 +1,15 @@
= 5 && $zeichenAnzahl <= 12;
}
+/**
+ * Prüft ein optionales Passwort.
+ *
+ * Ein leeres Passwort ist erlaubt und bedeutet,
+ * dass das bestehende Passwort unverändert bleibt.
+ * Falls ein Passwort angegeben wurde, wird es
+ * mit den normalen Passwortregeln geprüft.
+ *
+ * @param string|null $password Zu prüfendes Passwort
+ *
+ * @return bool true wenn das Passwort gültig oder leer ist,
+ * sonst false
+ */
function userOptionalPasswordValidator($password)
{
if (!isset($password) || $password === '') {