= setup OK

= surfer OK
This commit is contained in:
Miki 2024-01-02 10:05:24 +00:00
parent 6b86375ce9
commit 2bb01aa45a
6 changed files with 72 additions and 23 deletions

View file

@ -10,7 +10,8 @@ import (
) )
type Surfer struct { type Surfer struct {
Athlete Athlete `json:"surfer"` Name string `json:"name"`
Category string `json:"category"`
Color string `json:"color"` Color string `json:"color"`
Priority string `json:"priority"` Priority string `json:"priority"`
Score string `json:"score"` Score string `json:"score"`
@ -34,6 +35,10 @@ func heatName(heat Heat) string {
func (app *App) SaveHeat(c *gin.Context) { func (app *App) SaveHeat(c *gin.Context) {
var heat Heat var heat Heat
// body, _ := io.ReadAll(c.Request.Body)
// log.Printf("save: %+v", string(body))
err := c.ShouldBind(&heat) err := c.ShouldBind(&heat)
if err != nil { if err != nil {

View file

@ -93,4 +93,5 @@ func (app *App) RegisterApiRoutes() {
// api.GET("/runningheat", app.LoadRunning) // api.GET("/runningheat", app.LoadRunning)
api.GET("/loadsurfers", app.LoadSurfers) api.GET("/loadsurfers", app.LoadSurfers)
api.POST("/savesurfer", app.SaveSurfer) api.POST("/savesurfer", app.SaveSurfer)
api.POST("/deletesurfer", app.DeleteSurfer)
} }

View file

@ -15,7 +15,7 @@ type Athlete struct {
} }
func surferName(athlete Athlete) string { func surferName(athlete Athlete) string {
str := fmt.Sprintf("%s.%s", athlete.Name, athlete.Category) str := fmt.Sprintf("%s-%s", athlete.Name, athlete.Category)
str = strings.ReplaceAll(str, " ", "_") str = strings.ReplaceAll(str, " ", "_")
return str return str
} }
@ -50,3 +50,26 @@ func (app *App) SaveSurfer(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{"status": "saved"}) c.JSON(http.StatusOK, gin.H{"status": "saved"})
} }
func (app *App) DeleteSurfer(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("surfer: %+v", athlete)
err = app.DB.Delete("Surfers", surferName(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": "deleted"})
}

View file

@ -6,15 +6,14 @@
export let handleSelect; export let handleSelect;
export let element; export let element;
console.log(`options: ${JSON.stringify(options)}`) console.log(`options: ${JSON.stringify(options)}`);
</script> </script>
<label class="label" for={id}>{label}</label> <label class="label" for={id}>{label}</label>
<select name={id} {id} bind:value on:change={handleSelect}> <select name={id} {id} bind:value on:change={handleSelect}>
{#each options as option} {#each options as option}
{#if element} {#if element}
<option value={option}>{option[element]}</option> <option value={option[element]}>{option[element]}</option>
{:else} {:else}
<option value={option}>{option}</option> <option value={option}>{option}</option>
{/if} {/if}

View file

@ -44,10 +44,12 @@
} }
async function loadHeats() { async function loadHeats() {
heats = [];
const res = await fetch(`/api/loadheats`); const res = await fetch(`/api/loadheats`);
const data = await res.json(); const data = await res.json();
for (let i in data) { for (let i in data) {
heats[i] = data[i]; heats[i] = data[i];
heats = heats;
console.log(`${i} loadHeats: ${JSON.stringify(data[i])}`); console.log(`${i} loadHeats: ${JSON.stringify(data[i])}`);
} }
} }
@ -144,7 +146,11 @@
return; return;
} }
heat.surfers = surfer_list; console.log(`saving heat: ${JSON.stringify(heat)}`);
// heat.surfers = surfer_list;
console.log(`saving complete heat: ${JSON.stringify(heat)}`);
const res = await fetch(`/api/saveheat`, { const res = await fetch(`/api/saveheat`, {
method: 'POST', method: 'POST',
@ -240,7 +246,7 @@
<hr /> <hr />
<div class="list"> <div class="list">
{#each heats as h, id} {#each heats || [] as h, id}
<div class="surfer"> <div class="surfer">
<Button handleClick={() => setHeat(id)} label="{h.round} {h.number} {h.category}" /> <Button handleClick={() => setHeat(id)} label="{h.round} {h.number} {h.category}" />
<Button handleClick={() => deleteHeat(id)} label="X" /> <Button handleClick={() => deleteHeat(id)} label="X" />

View file

@ -10,30 +10,44 @@
let surfer = {}; let surfer = {};
$: value = ''; // $: value = '';
function resetSurfer() { function resetSurfer() {
surfer = { surfer = {
firstname: '', firstname: '',
lastname: '', lastname: '',
name: '',
category: '' category: ''
}; };
} }
async function loadSurfers() { async function loadSurfers() {
surfers = [];
const res = await fetch(`/api/loadsurfers`); const res = await fetch(`/api/loadsurfers`);
const data = await res.json(); const data = await res.json();
for (let i in data) { for (let i in data) {
const flname = data[i].name.split(" "); const flname = data[i].name.split('.');
data[i].firstname = flname[0]; data[i].firstname = flname[0];
data[i].lastname = flname[1]; data[i].lastname = flname[1];
surfers[i] = data[i]; surfers[i] = data[i];
surfers = surfers;
console.log(`${i} retval: ${JSON.stringify(data[i])}`); console.log(`${i} retval: ${JSON.stringify(data[i])}`);
} }
} }
async function deleteSurfer(surfer) {
console.log(`deleting: ${JSON.stringify(surfer)}`);
const res = await fetch(`/api/deletesurfer`, {
method: 'POST',
body: JSON.stringify(surfer),
headers: {
'Content-Type': 'application/json'
}
});
console.log(`deleted surfer: ${JSON.stringify(res)}`);
loadSurfers();
}
async function save() { async function save() {
if (surfer.firstname === '') { if (surfer.firstname === '') {
alert('Must have a name'); alert('Must have a name');
@ -50,11 +64,14 @@
return; return;
} }
surfer.name = `${surfer.firstname} ${surfer.lastname}` surfer.name = `${surfer.firstname} ${surfer.lastname}`;
const res = await fetch(`/api/savesurfer`, { const res = await fetch(`/api/savesurfer`, {
method: 'POST', method: 'POST',
body: JSON.stringify(surfer), body: JSON.stringify({
name: `${surfer.firstname}.${surfer.lastname}`,
category: surfer.category
}),
headers: { headers: {
'Content-Type': 'application/json' 'Content-Type': 'application/json'
} }
@ -86,10 +103,8 @@
<hr /> <hr />
<label for="surfer">{JSON.stringify(surfer)}</label>
<hr />
{#each surfers as s} {#each surfers as s}
<label for={s}>{s.firstname} {s.lastname} - {s.category}</label><br /> <Button label="{s.firstname} {s.lastname} - {s.category}" />
<Button handleClick={() => deleteSurfer(s)} label="X" />
<br />
{/each}} {/each}}