using Data.EF.Dice; using Data.EF.Dice.Faces; using Data.EF.Players; using Model.Dice; using Model.Dice.Faces; using Model.Games; namespace Data.EF.Games { public static class TurnExtensions { public static Turn ToModel(this TurnEntity entity) { Dictionary DiceNFaces = new(); DiceNFaces = Utils.Enumerables.FeedListsToDict( DiceNFaces, entity.ColorDice.ToModels() as List, entity.ColorFaces.ToModels() as List ); DiceNFaces = Utils.Enumerables.FeedListsToDict( DiceNFaces, entity.NumberDice.ToModels() as List, entity.NumberFaces.ToModels() as List ); DiceNFaces = Utils.Enumerables.FeedListsToDict( DiceNFaces, entity.ImageDice.ToModels() as List, entity.ImageFaces.ToModels() as List ); return Turn.CreateWithSpecifiedTime( when: entity.When, player: entity.Player.ToModel(), diceNFaces: DiceNFaces ); } public static IEnumerable ToModels(this IEnumerable entities) { return entities.Select(entity => entity.ToModel()); } public static TurnEntity ToEntity(this Turn model) { List NumberDiceEntities = new(); List ColorDiceEntities = new(); List ImageDiceEntities = new(); List NumberFaceEntities = new(); List ColorFaceEntities = new(); List ImageFaceEntities = new(); foreach (KeyValuePair kvp in model.DiceNFaces) { if (kvp.Key.GetType() == typeof(NumberDie)) { NumberDiceEntities.Add((kvp.Key as NumberDie).ToEntity()); NumberFaceEntities.Add((kvp.Value as NumberFace).ToEntity()); } if (kvp.Key.GetType() == typeof(ImageDie)) { ImageDiceEntities.Add((kvp.Key as ImageDie).ToEntity()); ImageFaceEntities.Add((kvp.Value as ImageFace).ToEntity()); } if (kvp.Key.GetType() == typeof(ColorDie)) { ColorDiceEntities.Add((kvp.Key as ColorDie).ToEntity()); ColorFaceEntities.Add((kvp.Value as ColorFace).ToEntity()); } } return new TurnEntity() { When = model.When, Player = model.Player.ToEntity(), NumberDice = NumberDiceEntities, NumberFaces = NumberFaceEntities, ColorDice = ColorDiceEntities, ColorFaces = ColorFaceEntities, ImageDice = ImageDiceEntities, ImageFaces = ImageFaceEntities }; } public static IEnumerable ToEntities(this IEnumerable models) { return models.Select(model => model.ToEntity()); } } }