diff --git a/astro/services/Competition.go b/astro/services/Competition.go index 6af2f67b4befa2cdcb31bf2ac487511c64aba5fe..64eda4cde4cfb99100ce86e9fcf3551a0bd995fb 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 d1b7815f0366508dab29f1805f78da8f1a3ef75f..753a4a38ee73c7f871000e3b5ca6753151da1e41 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 0be18200824ee8acee6dc19080f1e39643442fd4..da2e0d3a408ab1c3a9c91e697e80890e0d09e698 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 4d98980accafa2416b76ce98dd85c44fd5bdbf13..e6ba82ddcf1ba247ea099fa2e31eef180ad246e0 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 dbf1e772d2927d7bb2bbfb8c60b1f0928853c09c..5de7a5a6c249dfc848e60cc848c53fceabf85472 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 879a8ccc32d3966798bab032f619b11ed541c019..8d4f8dd50296c1bdcf840dcd0135edeaee8bbafc 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 a3c50005801fa85cf100c865338cb5dd54a5c203..02f850f1d21a9146e6c58a2fef0254db1d0aa01f 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 17f3261ad6b33b4d85d49eb4cf85f89d85e70289..e4acc44d418382c0f93b0b6925f9b7b5dfeb7ad7 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 8ab6e420905660f164efa2adb681ba6f9beab02b..1dd14c6f5c7790c9b5828f7aef3ce3862cf68fcd 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 6cc102e46c60d33d724af2ad79575e0cadb41f53..544e98931365ad3ff1671dfc3a1d2a727c01258a 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",