From 753789bcd47b0217d6fdfb4a5a688e799ec1b6d0 Mon Sep 17 00:00:00 2001 From: Alexis DRAI Date: Sun, 2 Oct 2022 00:22:09 +0200 Subject: [PATCH] :construction: Make data classes internal, start implementing DBManager --- Sources/Data/EF/DiceAppDbContext.cs | 2 +- Sources/Data/EF/Players/PlayerDBManager.cs | 24 ++++++++++++++---- Sources/Data/EF/Players/PlayerEntity.cs | 9 +++++-- Sources/Data/EF/Players/PlayerExtensions.cs | 2 +- Sources/Data/Program.cs | 28 ++++++++++++++++----- Sources/Model/Players/Player.cs | 2 +- Sources/Model/Players/PlayerManager.cs | 2 +- 7 files changed, 52 insertions(+), 17 deletions(-) diff --git a/Sources/Data/EF/DiceAppDbContext.cs b/Sources/Data/EF/DiceAppDbContext.cs index 2140253..867d2d6 100644 --- a/Sources/Data/EF/DiceAppDbContext.cs +++ b/Sources/Data/EF/DiceAppDbContext.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace Data.EF { - public class DiceAppDbContext : DbContext + internal class DiceAppDbContext : DbContext { public DbSet? Players { get; set; } diff --git a/Sources/Data/EF/Players/PlayerDBManager.cs b/Sources/Data/EF/Players/PlayerDBManager.cs index 72d5cd4..7509c3b 100644 --- a/Sources/Data/EF/Players/PlayerDBManager.cs +++ b/Sources/Data/EF/Players/PlayerDBManager.cs @@ -1,4 +1,5 @@ -using Model; +using Microsoft.EntityFrameworkCore.ChangeTracking; +using Model; using System; using System.Collections.Generic; using System.Linq; @@ -7,17 +8,30 @@ using System.Threading.Tasks; namespace Data.EF.Players { - public class PlayerDBManager : IManager + internal class PlayerDBManager : IManager, IDisposable { - + private readonly DiceAppDbContext db = new DiceAppDbContextWithStub(); + + public void Dispose() + { + db.Dispose(); + } + public PlayerEntity Add(PlayerEntity toAdd) { - throw new NotImplementedException(); + if (db.Players!.Where(entity => entity.Name == toAdd.Name).Any()) + { + throw new ArgumentException("this username is already taken", nameof(toAdd)); + } + EntityEntry ee = db.Players!.Add(toAdd); + db.SaveChanges(); + return (PlayerEntity)ee.Entity; } + public IEnumerable GetAll() { - throw new NotImplementedException(); + return db.Players!.AsEnumerable(); } public PlayerEntity GetOneByName(string name) diff --git a/Sources/Data/EF/Players/PlayerEntity.cs b/Sources/Data/EF/Players/PlayerEntity.cs index aa2d14c..5464a3f 100644 --- a/Sources/Data/EF/Players/PlayerEntity.cs +++ b/Sources/Data/EF/Players/PlayerEntity.cs @@ -8,10 +8,15 @@ using System.Threading.Tasks; namespace Data.EF.Players { [Index(nameof(Name), IsUnique = true)] - public class PlayerEntity + internal class PlayerEntity { public Guid ID { get; set; } - public string Name { get; set; } + public string? Name { get; set; } + + public override string? ToString() + { + return $"{ID} -- {Name}"; + } } } diff --git a/Sources/Data/EF/Players/PlayerExtensions.cs b/Sources/Data/EF/Players/PlayerExtensions.cs index 3aa188d..9aa0441 100644 --- a/Sources/Data/EF/Players/PlayerExtensions.cs +++ b/Sources/Data/EF/Players/PlayerExtensions.cs @@ -2,7 +2,7 @@ namespace Data.EF.Players { - public static class PlayerExtensions + internal static class PlayerExtensions { public static Player ToModel(this PlayerEntity entity) { diff --git a/Sources/Data/Program.cs b/Sources/Data/Program.cs index 1d57fda..0daa7d0 100644 --- a/Sources/Data/Program.cs +++ b/Sources/Data/Program.cs @@ -15,14 +15,30 @@ namespace Data { static void Main(string[] args) { - using (DiceAppDbContext db = new DiceAppDbContextWithStub()) // we will remove the "WithStub" bit when we release + using (PlayerDBManager playerDBManager = new()) { - if (db.Players is not null) + PrintTable(playerDBManager.GetAll(), "Before"); + try { - foreach (PlayerEntity entity in db.Players) - { - Debug.WriteLine($"{entity.ID} -- {entity.Name}"); - } + playerDBManager.Add(PlayerExtensions.ToEntity(new Player("Ernesto"))); + + } + catch (ArgumentException ex) + { + Debug.WriteLine($"{ex.Message}\n... Never mind"); + } + PrintTable(playerDBManager.GetAll(), "After"); + } + } + + static void PrintTable(IEnumerable table, string description) + { + Debug.WriteLine(description); + if (table is not null) + { + foreach (var entity in table) + { + Debug.WriteLine(entity); } } } diff --git a/Sources/Model/Players/Player.cs b/Sources/Model/Players/Player.cs index 428cf55..e89c98c 100644 --- a/Sources/Model/Players/Player.cs +++ b/Sources/Model/Players/Player.cs @@ -12,7 +12,7 @@ namespace Model.Players /// /// a player's unique username /// - public string Name { get; private set; } = "John Doe"; + public string Name { get; private set; } public Player(string name) { if (!string.IsNullOrWhiteSpace(name)) diff --git a/Sources/Model/Players/PlayerManager.cs b/Sources/Model/Players/PlayerManager.cs index c5637da..aa4db9b 100644 --- a/Sources/Model/Players/PlayerManager.cs +++ b/Sources/Model/Players/PlayerManager.cs @@ -19,7 +19,7 @@ namespace Model.Players /// add a new player /// /// player to be added - /// added player, or null if was null + /// added player public Player Add(Player toAdd) { if (toAdd is null)