From 4504265d5a2bc7210befb967ad47ec2f2d401938 Mon Sep 17 00:00:00 2001 From: ForkBench <robinvandemerghel@protonmail.com> Date: Thu, 11 Jul 2024 16:13:05 +0200 Subject: [PATCH] Adding updates in frontend, and interface implementations in backend --- astro/services/Competition.go | 30 +++++++++++++++++-- astro/services/Seeding.go | 18 +++++------ astro/services/Stage.go | 8 ++--- .../changeme/astro/services/competition.ts | 10 +++++++ .../changeme/astro/services/models.ts | 7 ++++- .../bindings/changeme/astro/services/pool.ts | 11 ++++--- frontend/src/App.svelte | 5 ++++ frontend/src/common/NavBar.svelte | 3 ++ .../components/Seedings/Registrations.svelte | 18 +++++++++++ main.go | 5 ---- 10 files changed, 90 insertions(+), 25 deletions(-) diff --git a/astro/services/Competition.go b/astro/services/Competition.go index 6af2f67..64eda4c 100644 --- a/astro/services/Competition.go +++ b/astro/services/Competition.go @@ -28,9 +28,25 @@ func CreateCompetition(competitionID uint8, competitionName string, competitionC c.CompetitionStages = map[uint8]*Stage{} c.CompetitionPlayers = map[uint16]*Player{} + c.InitCompetition() + return c } +func (c *Competition) InitCompetition() bool { + if c.CompetitionState != REGISTERING { + return false + } + + // Add new stage + var poolStage = CreateSeedingStage(0, 300, 300) + // TODO: Max player number should be dynamic + + c.AddStage(poolStage) + + return true +} + func (c *Competition) StartCompetition() bool { if c.CompetitionState != REGISTERING { return false @@ -78,11 +94,11 @@ func (c *Competition) RemovePlayer(player *Player) bool { } func (c *Competition) AddPlayerToStage(player Player, stage Stage) bool { - return stage.AddPlayer(player) + return stage.AddPlayer(&player) } func (c *Competition) RemovePlayerFromStage(player Player, stage Stage) bool { - return stage.RemovePlayer(player) + return stage.RemovePlayer(&player) } func (c *Competition) UpdatePlayer(player *Player) bool { @@ -95,3 +111,13 @@ func (c *Competition) UpdatePlayer(player *Player) bool { return true } + +func (c *Competition) AddStage(stage Stage) bool { + if c.CompetitionState != REGISTERING { + return false + } + + c.CompetitionStages[stage.GetID()] = &stage + + return true +} diff --git a/astro/services/Seeding.go b/astro/services/Seeding.go index d1b7815..753a4a3 100644 --- a/astro/services/Seeding.go +++ b/astro/services/Seeding.go @@ -26,7 +26,7 @@ func (s *SeedingStage) String() string { return str } -func CreateSeedingStage(seedingStageID uint8, enteringPlayerNumber uint16, leavingPlayerNumber uint16) SeedingStage { +func CreateSeedingStage(seedingStageID uint8, enteringPlayerNumber uint16, leavingPlayerNumber uint16) *SeedingStage { var s SeedingStage s.SeedingStageID = seedingStageID @@ -35,16 +35,16 @@ func CreateSeedingStage(seedingStageID uint8, enteringPlayerNumber uint16, leavi s.SeedingState = IDLE s.SeedingSize = 0 - return s + return &s } // From interface -func (s *SeedingStage) PlayerPosition(player Player) uint16 { +func (s *SeedingStage) PlayerPosition(player *Player) uint16 { return s.SeedingSeedings[player.PlayerID].SeedingPosition } // From interface -func (s *SeedingStage) AddPlayer(player Player) bool { +func (s *SeedingStage) AddPlayer(player *Player) bool { if s.SeedingState != REGISTERING { return false } @@ -55,7 +55,7 @@ func (s *SeedingStage) AddPlayer(player Player) bool { s.SeedingSeedings[player.PlayerID] = &Seeding{ SeedingPosition: s.SeedingSize, - SeedingPlayer: &player, + SeedingPlayer: player, } s.SeedingSize++ @@ -64,7 +64,7 @@ func (s *SeedingStage) AddPlayer(player Player) bool { } // From interface -func (s *SeedingStage) RemovePlayer(player Player) bool { +func (s *SeedingStage) RemovePlayer(player *Player) bool { if s.SeedingState != REGISTERING { return false } @@ -91,11 +91,11 @@ func (s *SeedingStage) GetState() State { } // From interface -func (s *SeedingStage) GetPlayers() []Player { - players := []Player{} +func (s *SeedingStage) GetPlayers() []*Player { + players := []*Player{} for _, seeding := range s.SeedingSeedings { - players = append(players, *seeding.SeedingPlayer) + players = append(players, seeding.SeedingPlayer) } return players diff --git a/astro/services/Stage.go b/astro/services/Stage.go index 0be1820..da2e0d3 100644 --- a/astro/services/Stage.go +++ b/astro/services/Stage.go @@ -2,12 +2,12 @@ package services // Stage : Stage details type Stage interface { - PlayerPosition(player Player) uint16 - AddPlayer(player Player) bool - RemovePlayer(player Player) bool + PlayerPosition(player *Player) uint16 + AddPlayer(player *Player) bool + RemovePlayer(player *Player) bool GetID() uint8 GetState() State - GetPlayers() []Player + GetPlayers() []*Player Register() bool Start() bool End() bool diff --git a/frontend/bindings/changeme/astro/services/competition.ts b/frontend/bindings/changeme/astro/services/competition.ts index 4d98980..e6ba82d 100644 --- a/frontend/bindings/changeme/astro/services/competition.ts +++ b/frontend/bindings/changeme/astro/services/competition.ts @@ -24,11 +24,21 @@ export function AddPlayerToStage(player: $models.Player, stage: $models.Stage): return $resultPromise; } +export function AddStage(stage: $models.Stage): Promise<boolean> & { cancel(): void } { + let $resultPromise = $Call.ByID(2261622806, stage) as any; + return $resultPromise; +} + export function FinishCompetition(): Promise<boolean> & { cancel(): void } { let $resultPromise = $Call.ByID(826570137) as any; return $resultPromise; } +export function InitCompetition(): Promise<boolean> & { cancel(): void } { + let $resultPromise = $Call.ByID(582268878) as any; + return $resultPromise; +} + export function RemovePlayer(player: $models.Player | null): Promise<boolean> & { cancel(): void } { let $resultPromise = $Call.ByID(1491269932, player) as any; return $resultPromise; diff --git a/frontend/bindings/changeme/astro/services/models.ts b/frontend/bindings/changeme/astro/services/models.ts index dbf1e77..5de7a5a 100644 --- a/frontend/bindings/changeme/astro/services/models.ts +++ b/frontend/bindings/changeme/astro/services/models.ts @@ -344,7 +344,12 @@ export enum State { /** * 3 */ - IDLE = 3, + LOCKED = 3, + + /** + * 4 + */ + IDLE = 4, }; /** diff --git a/frontend/bindings/changeme/astro/services/pool.ts b/frontend/bindings/changeme/astro/services/pool.ts index 879a8cc..8d4f8dd 100644 --- a/frontend/bindings/changeme/astro/services/pool.ts +++ b/frontend/bindings/changeme/astro/services/pool.ts @@ -9,22 +9,25 @@ import {Call as $Call, Create as $Create} from "@wailsio/runtime"; // @ts-ignore: Unused imports import * as $models from "./models.js"; -export function AddPlayer(player: $models.Player): Promise<boolean> & { cancel(): void } { +export function AddPlayer(player: $models.Player | null): Promise<boolean> & { cancel(): void } { let $resultPromise = $Call.ByID(2419770436, player) as any; return $resultPromise; } -export function PlayerPosition(player: $models.Player): Promise<number> & { cancel(): void } { +/** + * ------------------------------ Pool ------------------------------ + */ +export function PlayerPosition(player: $models.Player | null): Promise<number> & { cancel(): void } { let $resultPromise = $Call.ByID(199697208, player) as any; return $resultPromise; } -export function RemovePlayer(player: $models.Player): Promise<boolean> & { cancel(): void } { +export function RemovePlayer(player: $models.Player | null): Promise<boolean> & { cancel(): void } { let $resultPromise = $Call.ByID(2585363663, player) as any; return $resultPromise; } -export function SetReferee(referee: $models.Referee): Promise<void> & { cancel(): void } { +export function SetReferee(referee: $models.Referee | null): Promise<boolean> & { cancel(): void } { let $resultPromise = $Call.ByID(1520561734, referee) as any; return $resultPromise; } diff --git a/frontend/src/App.svelte b/frontend/src/App.svelte index a3c5000..02f850f 100644 --- a/frontend/src/App.svelte +++ b/frontend/src/App.svelte @@ -12,6 +12,11 @@ competitions = await Session.GetCompetitions(); loading = false; }); + + // Listen for the "need-to-update" event + window.addEventListener("need-to-update", async () => { + competitions = await Session.GetCompetitions(); + }); </script> <div class="container"> diff --git a/frontend/src/common/NavBar.svelte b/frontend/src/common/NavBar.svelte index 17f3261..e4acc44 100644 --- a/frontend/src/common/NavBar.svelte +++ b/frontend/src/common/NavBar.svelte @@ -13,6 +13,9 @@ async function loadCompetitions() { competitions = await GetCompetitions(); + + // Emit a signal to the parent component + dispatchEvent(new CustomEvent("need-to-update", {})); } onMount(loadCompetitions); diff --git a/frontend/src/components/Seedings/Registrations.svelte b/frontend/src/components/Seedings/Registrations.svelte index 8ab6e42..1dd14c6 100644 --- a/frontend/src/components/Seedings/Registrations.svelte +++ b/frontend/src/components/Seedings/Registrations.svelte @@ -130,6 +130,16 @@ sortBy = { key: "PlayerClub", asc: !sortBy.asc }; }}>Club</th > + <th + on:click={() => { + sortBy = { key: "PlayerRegion", asc: !sortBy.asc }; + }}>Region</th + > + <th + on:click={() => { + sortBy = { key: "PlayerCountry", asc: !sortBy.asc }; + }}>Country</th + > </tr> </thead> <tbody> @@ -233,6 +243,14 @@ >{#if player.PlayerClub}{player.PlayerClub .club_name}{:else}Sans Nom{/if}</td > + <td + >{#if player.PlayerRegion}{player.PlayerRegion + .region_name}{:else}Sans Nom{/if}</td + > + <td + >{#if player.PlayerNation}{player.PlayerNation + .nation_name}{:else}Sans Nom{/if}</td + > </tr> {/if} {/each} diff --git a/main.go b/main.go index 6cc102e..544e989 100644 --- a/main.go +++ b/main.go @@ -14,11 +14,6 @@ var assets embed.FS func main() { session := services.Session{} - session.AddCompetition("Premier League", "U17", "Foil") - session.AddCompetition("Premier League", "U17", "Foil") - session.AddCompetition("Premier League", "U17", "Foil") - session.AddCompetition("Premier League", "U17", "Foil") - session.Competitions[0].AddPlayer(services.CreatePlayer(1, "John", "Doe")) app := application.New(application.Options{ Name: "AstroProject", -- GitLab