+save surfer

This commit is contained in:
Miki 2023-12-30 15:36:11 +00:00
parent 086be8ccc2
commit 317fac17b2
5 changed files with 113 additions and 23 deletions

View file

@ -66,3 +66,22 @@ func (db *DB) loadHeats() []Heat {
return heats return heats
} }
func (db *DB) loadSurfers() []Athlete {
records, err := db.Db.ReadAll("Surfers")
if err != nil {
fmt.Printf("read error: %+v", err)
}
athletes := make([]Athlete, 0)
for _, record := range records {
var athlete Athlete
err = json.Unmarshal([]byte(record), &athlete)
if err != nil {
fmt.Printf("decode error: %+v", err)
}
athletes = append(athletes, athlete)
}
return athletes
}

View file

@ -91,4 +91,6 @@ func (app *App) RegisterApiRoutes() {
// api.POST("/deleteheat", app.DeleteHeat) // api.POST("/deleteheat", app.DeleteHeat)
api.GET("/loadheats", app.LoadHeats) api.GET("/loadheats", app.LoadHeats)
// api.GET("/runningheat", app.LoadRunning) // api.GET("/runningheat", app.LoadRunning)
api.GET("/loadsurfers", app.LoadSurfers)
api.POST("/savesurfer", app.SaveSurfer)
} }

View file

@ -1,7 +1,53 @@
package main package main
import (
"fmt"
"log"
"net/http"
"strings"
"github.com/gin-gonic/gin"
)
type Athlete struct { type Athlete struct {
Firstname string `json:"firstname"` Firstname string `json:"firstname"`
Lastname string `json:"lastname"` Lastname string `json:"lastname"`
Category string `json:"category"` Category string `json:"category"`
} }
func surferName(athlete Athlete) string {
str := fmt.Sprintf("%s.%s.%s", athlete.Firstname, athlete.Lastname, athlete.Category)
str = strings.ReplaceAll(str, " ", "_")
return str
}
func (app *App) LoadSurfers(c *gin.Context) {
surfers := app.DB.loadSurfers()
c.JSON(http.StatusOK, surfers)
log.Printf("surfers: %+v", surfers)
}
func (app *App) SaveSurfer(c *gin.Context) {
var athlete Athlete
err := c.ShouldBind(&athlete)
if err != nil {
log.Printf("req error: %+v", err)
c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
return
}
log.Printf("heat: %+v", athlete)
err = app.DB.Write("Surfers", surferName(athlete), athlete)
if err != nil {
log.Printf("set error: %+v", err)
c.JSON(http.StatusInternalServerError, gin.H{"status": fmt.Sprintf("Error: %+v", err)})
return
}
c.JSON(http.StatusOK, gin.H{"status": "saved"})
}

View file

@ -176,12 +176,6 @@
return false; return false;
} }
function capitalize(element, elementName) {
element[elementName] =
element[elementName].charAt(0).toUpperCase() + element[elementName].slice(1);
console.log(`element: ${element[elementName]}`);
}
onMount(() => { onMount(() => {
resetHeat(); resetHeat();
loadHeats(); loadHeats();

View file

@ -1,4 +1,5 @@
<script> <script>
import { onMount } from 'svelte';
import Header from '$lib/header-setup.svelte'; import Header from '$lib/header-setup.svelte';
import Button from '$lib/button.svelte'; import Button from '$lib/button.svelte';
import Select from '$lib/select.svelte'; import Select from '$lib/select.svelte';
@ -7,13 +8,17 @@
$: surfers = []; $: surfers = [];
let surfer = { let surfer = {};
$: value = '';
function resetSurfer() {
surfer = {
firstname: '', firstname: '',
lastname: '', lastname: '',
category: '' category: ''
}; };
}
$: value = '';
async function loadSurfers() { async function loadSurfers() {
const res = await fetch(`/api/loadsurfers`); const res = await fetch(`/api/loadsurfers`);
@ -24,17 +29,41 @@
} }
} }
function onclick() { async function save() {
alert('clicked'); if (surfer.firstname === '') {
alert('Must have a name');
return;
} }
function reset() { if (surfer.lastname === '') {
surfer = { alert('Must have a name');
firstname: '', return;
lastname: '',
category: ''
};
} }
if (surfer.category === '') {
alert('Must have a category');
return;
}
const res = await fetch(`/api/savesurfer`, {
method: 'POST',
body: JSON.stringify(surfer),
headers: {
'Content-Type': 'application/json'
}
});
console.log(`retval: ${JSON.stringify(res)}`);
console.log(JSON.stringify(surfer));
resetSurfer();
loadSurfers();
}
onMount(() => {
resetSurfer();
loadSurfers();
});
</script> </script>
<Header title="Surfer Edit" /> <Header title="Surfer Edit" />
@ -45,8 +74,8 @@
<Select label="category" id="category" options={$categories} bind:value={surfer.category} /> <Select label="category" id="category" options={$categories} bind:value={surfer.category} />
</div> </div>
<Button handleClick={onclick} label="SAVE"></Button> <Button handleClick={save} label="SAVE"></Button>
<Button handleClick={reset} label="Reset"></Button> <Button handleClick={resetSurfer} label="Reset"></Button>
<hr /> <hr />
@ -55,5 +84,5 @@
<hr /> <hr />
{#each surfers as s} {#each surfers as s}
<label for={s}>{JSON.stringify(s)}</label> <label for={s}>{s.firstname} {s.lastname} - {s.category}</label><br />
{/each}} {/each}}