From d8b0f1335078d53d95a4212b1a4d4b0b28016702 Mon Sep 17 00:00:00 2001
From: Zach Berwaldt <zberwaldt@tutamail.com>
Date: Fri, 1 Mar 2024 20:12:21 -0500
Subject: feat(DataView): Add functionality to add water statistic

This commit adds functionality to add water statistics to the DataView component. It includes the following changes:
- Remove unused imports and variables
- Move the 'handleClick' function logic to a new 'AddForm' component
- Create the 'AddForm' component which displays a dialog with input fields for date and quantity and allows the user to add a new water statistic
- Dispatch events on form submit and dialog close in the 'AddForm' component
- Call the 'fetchData' function on successful submission of a new statistic
- Update chart data to display sample data

New component:
- AddForm.svelte: A form component to add a new water statistic

Note: This commit message exceeds the 50-character limit in the subject line, but adheres to the other specified requirements.
---
 fe/src/lib/forms/AddForm.svelte | 74 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 74 insertions(+)
 create mode 100644 fe/src/lib/forms/AddForm.svelte

(limited to 'fe/src/lib/forms/AddForm.svelte')

diff --git a/fe/src/lib/forms/AddForm.svelte b/fe/src/lib/forms/AddForm.svelte
new file mode 100644
index 0000000..f22e5f4
--- /dev/null
+++ b/fe/src/lib/forms/AddForm.svelte
@@ -0,0 +1,74 @@
+<script lang='ts'>
+    import { createEventDispatcher } from "svelte";
+    import { token, user } from "../../stores/auth";
+    import type { Statistic } from "../../types";
+
+    export let open: boolean;
+
+    const dispatch = createEventDispatcher();
+
+    const statistic: Statistic = newStatistic();
+
+    function newStatistic(): Statistic {
+        let now = new Date(),
+            month,
+            day,
+            year;
+
+        month = `${now.getMonth() + 1}`;
+        day = `${now.getDate()}`;
+        year = now.getFullYear();
+        if (month.length < 2) month = "0" + month;
+        if (day.length < 2) day = "0" + day;
+
+        const date = [year, month, day].join("-");
+
+        return {
+            user_id: $user!.uuid,
+            date,
+            quantity: 1
+        };
+    }
+
+    function closeDialog() {
+        dispatch("close");
+    }
+
+    async function handleSubmitStat() {
+        const response = await fetch("http://localhost:8080/api/v1/stats/", {
+            method: "POST",
+            headers: {
+                Authorization: `Bearer ${$token}`
+            },
+            body: JSON.stringify({
+                date: new Date(),
+                user_id: 1,
+                quantity: 3
+            })
+        });
+        dispatch("submit");
+    }
+</script>
+
+<dialog {open} on:submit={handleSubmitStat}>
+    <h2>Add Water</h2>
+    <form method="dialog">
+        <div class="form input group">
+            <label for="date">Date:</label>
+            <input bind:value={statistic.date} id="date" name="date" type="date" />
+        </div>
+        <div class="form input group">
+            <label for="quantity">Quantity:</label>
+            <input
+                bind:value={statistic.quantity}
+                id="quantity"
+                name="quantity"
+                type="number"
+                min="0"
+                autocomplete="off"
+            />
+        </div>
+        <button on:click={closeDialog}>Cancel</button>
+        <button type="submit">Submit</button>
+    </form>
+</dialog>
\ No newline at end of file
-- 
cgit v1.1


From 5fa57845052655883120ba4d19a85d8756fb8d8c Mon Sep 17 00:00:00 2001
From: Zach Berwaldt <zberwaldt@tutamail.com>
Date: Wed, 6 Mar 2024 21:53:07 -0500
Subject: [FEAT] Refactor API main file and models

This commit refactors the `main.go` file in the API directory, as well as the related models in the `models.go` file. The changes include:

- Reordering imports and removing unnecessary imports
- Fixing error messages to be more descriptive
- Handling database connections more efficiently with deferred closures
- Handling errors and returning appropriate error responses
- Adding proper JSON bindings for POST requests
- Adding new views in the database scripts for aggregated statistics and daily user statistics

No changes were made to imports and requires.
---
 fe/src/lib/forms/AddForm.svelte | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

(limited to 'fe/src/lib/forms/AddForm.svelte')

diff --git a/fe/src/lib/forms/AddForm.svelte b/fe/src/lib/forms/AddForm.svelte
index f22e5f4..4520b1b 100644
--- a/fe/src/lib/forms/AddForm.svelte
+++ b/fe/src/lib/forms/AddForm.svelte
@@ -34,20 +34,23 @@
         dispatch("close");
     }
 
-    async function handleSubmitStat() {
-        const response = await fetch("http://localhost:8080/api/v1/stats/", {
+    async function handleSubmitStat()
+    {
+        const { date, quantity } = statistic;
+        await fetch("http://localhost:8080/api/v1/stats/", {
             method: "POST",
             headers: {
                 Authorization: `Bearer ${$token}`
             },
             body: JSON.stringify({
-                date: new Date(),
-                user_id: 1,
-                quantity: 3
+                date: new Date(date),
+                user_id: 2,
+                quantity
             })
         });
         dispatch("submit");
     }
+
 </script>
 
 <dialog {open} on:submit={handleSubmitStat}>
-- 
cgit v1.1


From fd1332a3df191577e91c6d846a8b5db1747099fd Mon Sep 17 00:00:00 2001
From: Zach Berwaldt <zberwaldt@tutamail.com>
Date: Fri, 15 Mar 2024 22:00:10 -0400
Subject: cleanup

---
 fe/src/lib/forms/AddForm.svelte | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

(limited to 'fe/src/lib/forms/AddForm.svelte')

diff --git a/fe/src/lib/forms/AddForm.svelte b/fe/src/lib/forms/AddForm.svelte
index 4520b1b..f85cce6 100644
--- a/fe/src/lib/forms/AddForm.svelte
+++ b/fe/src/lib/forms/AddForm.svelte
@@ -2,6 +2,7 @@
     import { createEventDispatcher } from "svelte";
     import { token, user } from "../../stores/auth";
     import type { Statistic } from "../../types";
+    import { apiURL } from "../../utils";
 
     export let open: boolean;
 
@@ -37,7 +38,7 @@
     async function handleSubmitStat()
     {
         const { date, quantity } = statistic;
-        await fetch("http://localhost:8080/api/v1/stats/", {
+        await fetch(apiURL("stats"), {
             method: "POST",
             headers: {
                 Authorization: `Bearer ${$token}`
-- 
cgit v1.1

