theredphone/main.go

237 lines
4.9 KiB
Go

package main
import (
"database/sql"
"fmt"
"html/template"
"net/http"
"github.com/go-sql-driver/mysql"
)
func getIndex(w http.ResponseWriter, r *http.Request) {
tmpl, err := template.ParseFiles("templates/index.tmpl")
if err != nil {
fmt.Println(err)
return
}
err = tmpl.Execute(w, nil)
if err != nil {
fmt.Println(err)
return
}
}
func getParamedicView(w http.ResponseWriter, r *http.Request) {
tmpl, err := template.ParseFiles("templates/paramedicForm.tmpl")
if err != nil {
fmt.Println(err)
return
}
err = tmpl.Execute(w, nil)
if err != nil {
fmt.Println(err)
return
}
}
type Alert struct {
Id int
// Categorization
MedicalOrTrauma string
// Patient data
Age string
Sex string
NhsNumber string
// Observations
HeartRate string
RespiratoryRate string
OxygenSaturation string
Gcs string
BloodPressure string
// Extra information
Eta string
Interventions string
BackgroundInfo string
}
func postParamedicForm(w http.ResponseWriter, r *http.Request) {
// Parse data from form
var alert Alert
alert.MedicalOrTrauma = r.PostFormValue("medical-or-trauma")
alert.Age = r.PostFormValue("age")
alert.Sex = r.PostFormValue("sex")
alert.NhsNumber = r.PostFormValue("nhs-number")
alert.HeartRate = r.PostFormValue("heart-rate")
alert.RespiratoryRate = r.PostFormValue("respiratory-rate")
alert.OxygenSaturation = r.PostFormValue("oxygen-saturation")
alert.Gcs = r.PostFormValue("gcs")
alert.BloodPressure = r.PostFormValue("blood-pressure")
alert.Eta = r.PostFormValue("eta")
alert.Interventions = r.PostFormValue("interventions")
alert.BackgroundInfo = r.PostFormValue("background")
// Insert data into database
query := `INSERT INTO Alert (
MedicalOrTrauma,
Age,
Sex,
NhsNumber,
HeartRate,
RespiratoryRate,
OxygenSaturation,
Gcs,
BloodPressure,
Eta,
Interventions,
BackgroundInfo) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);`
insert, err := database.Prepare(query)
defer insert.Close()
if err != nil {
fmt.Println(err)
}
result, err := insert.Exec(alert.MedicalOrTrauma,
alert.Age,
alert.Sex,
alert.NhsNumber,
alert.HeartRate,
alert.RespiratoryRate,
alert.OxygenSaturation,
alert.Gcs,
alert.BloodPressure,
alert.Eta,
alert.Interventions,
alert.BackgroundInfo)
rowsAffected, err := result.RowsAffected()
if err != nil || rowsAffected != 1 {
fmt.Println(err)
}
http.Redirect(w, r, "http://localhost:3333/paramedic", http.StatusFound)
}
func getERView(w http.ResponseWriter, r *http.Request) {
// Get list of alerts from database
alerts := []Alert{}
rows, err := database.Query("SELECT * FROM Alert;")
if err != nil {
fmt.Println(err)
}
defer rows.Close()
var alert Alert
for rows.Next() {
err := rows.Scan(&alert.Id,
&alert.MedicalOrTrauma,
&alert.Age,
&alert.Sex,
&alert.NhsNumber,
&alert.HeartRate,
&alert.RespiratoryRate,
&alert.OxygenSaturation,
&alert.Gcs,
&alert.BloodPressure,
&alert.Eta,
&alert.Interventions,
&alert.BackgroundInfo)
if err != nil {
fmt.Println(err)
}
alerts = append(alerts, alert)
}
for i, j := 0, len(alerts)-1; i < j; i, j = i+1, j-1 {
alerts[i], alerts[j] = alerts[j], alerts[i]
}
// Execute template with list
tmpl, err := template.ParseFiles("templates/er.tmpl")
if err != nil {
fmt.Println(err)
return
}
err = tmpl.Execute(w, alerts)
if err != nil {
fmt.Println(err)
return
}
}
func setupDatabaseTable(db *sql.DB) {
query := `CREATE TABLE IF NOT EXISTS Alert (
Id SERIAL PRIMARY KEY,
MedicalOrTrauma VARCHAR(100) NULL,
Age VARCHAR(100) NULL,
Sex VARCHAR(100) NULL,
NhsNumber VARCHAR(100) NULL,
HeartRate VARCHAR(100) NULL,
RespiratoryRate VARCHAR(100) NULL,
OxygenSaturation VARCHAR(100) NULL,
Gcs VARCHAR(100) NULL,
BloodPressure VARCHAR(100) NULL,
Eta VARCHAR(100) NULL,
Interventions VARCHAR(100) NULL,
BackgroundInfo VARCHAR(100) NULL
)`
_, err := db.Exec(query)
if err != nil {
fmt.Println(err)
}
}
var database *sql.DB
func main() {
config := mysql.Config{
User: "root",
Passwd: "o7MS6CIn660jIApSP",
Net: "tcp",
Addr: "127.0.0.1:3306",
DBName: "theredphone",
AllowNativePasswords: true,
}
db, err := sql.Open("mysql", config.FormatDSN())
defer db.Close()
database = db
if err != nil {
fmt.Println(err)
return
}
if err = db.Ping(); err != nil {
fmt.Println(err)
return
}
fmt.Println("Connected to database")
setupDatabaseTable(db)
//mux := http.NewServeMux()
http.HandleFunc("/", getIndex)
http.HandleFunc("/paramedic", getParamedicView)
http.HandleFunc("/paramedicForm", postParamedicForm)
http.HandleFunc("/er", getERView)
http.Handle("/styles/", http.StripPrefix("/styles/", http.FileServer(http.Dir("styles"))))
http.Handle("/images/", http.StripPrefix("/images/", http.FileServer(http.Dir("images"))))
fmt.Println("Serving")
http.ListenAndServe(":3333", nil)
}