create player

This commit is contained in:
beo3000 2025-11-17 21:41:13 +01:00
parent ed83a246ab
commit a0df047b85
7 changed files with 79 additions and 6 deletions

View File

@ -18,6 +18,14 @@
@inject IDispatcher Dispatcher
@* @inject SharedDataService _dataService *@
<PanelToolbar>
<MudTooltip Text="Spieler anlegen"
Color="Color.Primary" Placement="Placement.Bottom" Arrow="true">
<MudIconButton Icon="@Icons.Material.Filled.Add"
Variant="Variant.Filled" Color="Color.Primary"
Class="mr-5" OnClick="CreatePlayerClick"/>
</MudTooltip>
</PanelToolbar>
@if (PlayersState.Value != null)
{
@ -90,6 +98,9 @@
}
private void CreatePlayerClick(MouseEventArgs obj)
{
Dispatcher.Dispatch(new SavePlayerAction(new PlayerState("Max Musermann",0,true,PlayerStatus.Member)));
}
}

View File

@ -84,7 +84,7 @@ namespace KoogleApp.Data
return item;
}
public async Task<Player> CreateAsync(Player item, string userName)
public async Task<Player> CreatePlayerAsync(Player item, string userName)
{
item.ModifiedBy = userName;
var created = await _playerRepository.CreateAsync(item);
@ -95,7 +95,7 @@ namespace KoogleApp.Data
return created;
}
public async Task<Player> UpdateAsync(Player item, string userName)
public async Task<Player> UpdatePlayerAsync(Player item, string userName)
{
item.ModifiedBy = userName;
var updated = await _playerRepository.UpdateAsync(item);

View File

@ -51,8 +51,8 @@ namespace KoogleApp.Services
// ENTWICKLUNG: In-Memory Repository
if (uesInMemory)
{
services.AddSingleton<IPlayerRepository, InMemoryPlayerRepository>();
services.AddSingleton<IPlayerExpenseRepository, InMemoryPlayerExpenseRepository>();
services.AddSingleton<IPlayerRepository, PlayerRepository>();
services.AddSingleton<IPlayerExpenseRepository, PlayerExpenseRepository>();
}
// PRODUKTION: Entity Framework Repository
else

View File

@ -10,4 +10,8 @@ namespace KoogleApp.Store.Player
public record SelectPlayerAction(PlayerState? Player);
public record ChangePlayerAvailableAction(int PlayerId, bool IsAvailable, DayState DayState, DaysState DaysState);
public record SavePlayerAction(PlayerState Player);
public record PlayerSavedAction(PlayerState Player);
}

View File

@ -18,5 +18,32 @@ namespace KoogleApp.Store.Player
var players = await _dataService.GetAllPlayersAsync();
dispatcher.Dispatch(new PlayersLoadedAction(players, action.DayState));
}
[EffectMethod]
public async Task HandleSavePlayerAction(SavePlayerAction action, IDispatcher dispatcher)
{
try
{
Model.Player savedData;
// Hier die Daten speichern (API-Call, DB, etc.)
if (action.Player.Id == 0)
{
savedData = await _dataService.CreatePlayerAsync(PlayersSelector.DbConvert(action.Player), "todo");
}
else
{
savedData = await _dataService.UpdatePlayerAsync(PlayersSelector.DbConvert(action.Player), "todo");
}
// Nach erfolgreichem Speichern neue Action dispatchen
dispatcher.Dispatch(new PlayerSavedAction(PlayersSelector.DbConvert(savedData)));
}
catch (Exception ex)
{
//dispatcher.Dispatch(new SaveDataFailureAction(ex.Message));
}
}
}
}

View File

@ -40,7 +40,6 @@ namespace KoogleApp.Store.Player
var newList = new List<PlayerState>(state.Players); // Kopie erstellen
var idx = state.Players.FindIndex(p => p.Id == action.PlayerId);
newList[idx] = newList[idx] with { Available = action.IsAvailable }; // Element ändern
return state with { Players = newList };
}
@ -80,5 +79,21 @@ namespace KoogleApp.Store.Player
return state with { Players = lst };
}
[ReducerMethod]
public static PlayersState OnPlayerSavedAction(PlayersState state, PlayerSavedAction action)
{
var newList = new List<PlayerState>(state.Players);
var idx = state.Players.FindIndex(p => p.Id == action.Player.Id);
if (idx < 0)
{
newList.Add(action.Player);
}
else
{
newList[idx] = action.Player;
}
return state with { Players = newList.OrderBy(_ => _.Name).ToList() };
}
}
}

View File

@ -2,6 +2,22 @@
{
public static class PlayersSelector
{
public static PlayerState DbConvert(Model.Player player)
{
return new PlayerState(player.Name, player.Id, true, player.PlayerStatus);
}
public static Model.Player DbConvert(PlayerState player)
{
return new Model.Player
{
Name = player.Name,
Id = player.Id,
PlayerStatus = player.PlayerStatus
};
}
//public static PlayerState? SelectedPlayer(PlayersState state)
//{
// if (state. == null)