diff --git a/app.go b/app.go index 9460bc4..bb463bd 100644 --- a/app.go +++ b/app.go @@ -2,10 +2,11 @@ package main import ( "context" - "fmt" + "encoding/csv" "gegio-ue1/model" "os" "slices" + "strconv" "github.com/wailsapp/wails/v2/pkg/runtime" "gorm.io/gorm" @@ -92,9 +93,39 @@ func (a *App) ExportTournament(t model.Tournament) { dirname, _ := os.UserHomeDir() str, err := runtime.SaveFileDialog(a.ctx, runtime.SaveDialogOptions{DefaultDirectory: dirname, DefaultFilename: "tournament.csv"}) if err != nil { - fmt.Println(err) + panic(err) + } + file, err := os.Create(str) + if err != nil { + panic(err) + } + defer file.Close() + // Create a CSV writer + writer := csv.NewWriter(file) + defer writer.Flush() + + var matches []model.Match + + a.db.Where("tournament_id = ?", t.ID).Order("stage ASC").Order("`order` ASC").Preload("Participant1").Preload("Participant2").Preload("WinnerParticipant").Find(&matches) + + // Write header + header := []string{"Stage", "Order", "Winner", "Looser"} + if err := writer.Write(header); err != nil { + panic(err) + } + + for _, m := range matches { + record := []string{strconv.Itoa(m.Stage), strconv.Itoa(m.Order), m.WinnerParticipant.Name} + if m.WinnerParticipantID == m.Participant1ID { + record = append(record, m.Participant2.Name) + } else { + + record = append(record, m.Participant1.Name) + } + if err := writer.Write(record); err != nil { + panic(err) + } } - println(str) } diff --git a/frontend/src/routes/Home.svelte b/frontend/src/routes/Home.svelte index ebcdd31..76937ca 100644 --- a/frontend/src/routes/Home.svelte +++ b/frontend/src/routes/Home.svelte @@ -13,7 +13,7 @@ Modal, } from "flowbite-svelte"; import TourCreator from "./TourCreator.svelte"; - import { Link } from "svelte-routing"; + import { Link, navigate } from "svelte-routing"; let thingsList: model.Tournament[] = $state([]); let newThing: boolean = $state(false); @@ -46,9 +46,7 @@ {t.WinnerParticipant.Name} - Edit + {/each} diff --git a/frontend/src/routes/Matches.svelte b/frontend/src/routes/Matches.svelte index 4ba14d2..1113b42 100644 --- a/frontend/src/routes/Matches.svelte +++ b/frontend/src/routes/Matches.svelte @@ -28,7 +28,7 @@ function saveMatch(m: model.Match): Promise { if (matches[matches.length - 1].length == 1) { - tournament.WinnerParticipantID = m.WinnerParticipantID; + tournament.WinnerParticipant = m.WinnerParticipant; SaveTournament(tournament).then(update); } return SaveMatch(m); @@ -71,32 +71,33 @@ {#each ms as m} - + {m.Participant1.Name} {m.Participant2.Name} - + {#if m.WinnerParticipant.Name == ""} - - +
+ + +
{:else} {m.WinnerParticipant.Name} {/if} diff --git a/frontend/src/routes/Participants.svelte b/frontend/src/routes/Participants.svelte index 0f6b628..4fd22cd 100644 --- a/frontend/src/routes/Participants.svelte +++ b/frontend/src/routes/Participants.svelte @@ -67,7 +67,6 @@ Name - {#each participants as p} @@ -75,7 +74,7 @@ {p.Name} - + {#if tournament.Participants.find((pa) => pa.ID == p.ID)} diff --git a/tournament.db b/tournament.db index 75dc330..2e07c38 100644 Binary files a/tournament.db and b/tournament.db differ