diff --git a/backend/cmd/main.go b/backend/cmd/main.go index 0688b2e..2e98fbd 100644 --- a/backend/cmd/main.go +++ b/backend/cmd/main.go @@ -11,13 +11,18 @@ import ( "github.com/gin-gonic/gin" ) -type FormData struct { +type UserformData struct { Age string `json:"age"` Education string `json:"education"` HealthcarePersonnel bool `json:"healthcare_personnel"` Gender string `json:"gender"` } +type FormData struct { + FormAnswers string `json:"allFormAnswers"` + RespondentId int `json:"respondentID"` +} + func main() { router := gin.Default() router.Use(cors.Default()) @@ -25,7 +30,7 @@ func main() { // Info about user router.POST("/submituserform", func(c *gin.Context) { - var requestBody FormData + var requestBody UserformData if err := c.BindJSON(&requestBody); err != nil { fmt.Print(err) @@ -71,6 +76,17 @@ func main() { if err := c.BindJSON(&requestBody); err != nil { fmt.Print(err) } + + respondentID, err := db.InsertUserAnswers(requestBody.RespondentId, requestBody.FormAnswers) + + if err != nil { + fmt.Print(err) + c.JSON(http.StatusInternalServerError, gin.H{"error": "Unable to insert data"}) + return + } + + // Respond with the ID of the newly inserted respondent + c.JSON(http.StatusOK, gin.H{"respondentID": respondentID}) }) // Run the server on port 8080 diff --git a/backend/db/insert_user_answers.go b/backend/db/insert_user_answers.go new file mode 100644 index 0000000..8abff23 --- /dev/null +++ b/backend/db/insert_user_answers.go @@ -0,0 +1,55 @@ +package db + +import ( + "database/sql" + "encoding/json" + "fmt" + "log" + + _ "github.com/lib/pq" +) + +func InsertUserAnswers(respondentId int, allAnswers string) (int, error) { + // Parse allAnswers from JSON string to map + var allAnswersArray []string + err := json.Unmarshal([]byte(allAnswers), &allAnswersArray) + if err != nil { + return 0, fmt.Errorf("invalid JSON format for allAnswers: %v", err) + } + + // Connection string + psqlInfo := fmt.Sprintf("host=%s port=%d user=%s "+ + "password=%s dbname=%s sslmode=disable", + host, port, user, password, dbname) + + // Connect to the database + db, err := sql.Open("postgres", psqlInfo) + if err != nil { + log.Fatalf("Error opening database: %v\n", err) + } + defer db.Close() + + // Check the connection + err = db.Ping() + if err != nil { + log.Fatalf("Error connecting to the database: %v\n", err) + } + + insertStatement := ` + INSERT INTO SvarVurdering (svarID, respondentID, kunnskap, empati, hjelpsomhet) + VALUES ($1, $2, $3, $4, $5) + ` + + tx, err := db.Begin() + if err != nil { + log.Fatalf("Error creating transaction: %v\n", err) + } + + err = tx.Commit() + if err != nil { + log.Fatalf("Transaction commit failed: %v\n", err) + } + + fmt.Printf("Data inserted successfully for respondentID: %d\n", respondentId) + return respondentId, nil +} \ No newline at end of file diff --git a/frontend/src/api/postFormData.ts b/frontend/src/api/postFormData.ts new file mode 100644 index 0000000..6ee7b20 --- /dev/null +++ b/frontend/src/api/postFormData.ts @@ -0,0 +1,21 @@ +export const postFormData = (respondentID: number, allFormAnswers: string) => { + let url = "http://localhost:8080/submitanswers"; + + const response = fetch(url, { + method: "POST", + body: JSON.stringify({ + respondentID: respondentID, + allFormAnswers: allFormAnswers, + }), + }) + .then((response) => { + if (!response.ok) { + throw new Error(`HTTP error! Status: ${response.status}`); + } + return response.ok; + }) + .catch((error) => { + console.log(error); + }); + return response; +}; diff --git a/frontend/src/api/postUserformData.ts b/frontend/src/api/postUserformData.ts index b7f0d4e..ad39f5d 100644 --- a/frontend/src/api/postUserformData.ts +++ b/frontend/src/api/postUserformData.ts @@ -28,7 +28,7 @@ export const postUserformData = ( }) .then((data) => { console.log(data); - localStorage.setItem("RespondentId", data); + localStorage.setItem("RespondentId", data.respondentID); return data; }) .catch((error) => { diff --git a/frontend/src/components/form/footer/Footer.svelte b/frontend/src/components/form/footer/Footer.svelte index f3effa5..cdd7c34 100644 --- a/frontend/src/components/form/footer/Footer.svelte +++ b/frontend/src/components/form/footer/Footer.svelte @@ -2,6 +2,7 @@ import ArrowChevron from "../../svg/ArrowChevron.svelte"; import ButtonComponent from "../../userform/inputs/ButtonComponent.svelte"; import { goto } from "$app/navigation"; + import { postFormData } from "../../../api/postFormData"; export let questionNum:number export let answeredAll:boolean @@ -13,6 +14,16 @@ const gotoPrevPage = async (questionNum: number) => { goto(`${questionNum - 1}`) } + + const handleFormSubmit = () => { + let allFormAnswers:string | null = localStorage.getItem("allFormAnswers") + let respondentID:string | null = localStorage.getItem("RespondentId") + + if (allFormAnswers && respondentID) { + postFormData(Number(respondentID), allFormAnswers) + } + } +