🚧 Make data classes internal, start implementing DBManager
continuous-integration/drone/push Build is passing Details

pull/104/head
Alexis Drai 3 years ago
parent a65edca2fd
commit 753789bcd4

@ -8,7 +8,7 @@ using System.Threading.Tasks;
namespace Data.EF
{
public class DiceAppDbContext : DbContext
internal class DiceAppDbContext : DbContext
{
public DbSet<PlayerEntity>? Players { get; set; }

@ -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<PlayerEntity>
internal class PlayerDBManager : IManager<PlayerEntity>, 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<PlayerEntity> GetAll()
{
throw new NotImplementedException();
return db.Players!.AsEnumerable();
}
public PlayerEntity GetOneByName(string name)

@ -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}";
}
}
}

@ -2,7 +2,7 @@
namespace Data.EF.Players
{
public static class PlayerExtensions
internal static class PlayerExtensions
{
public static Player ToModel(this PlayerEntity entity)
{

@ -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)
playerDBManager.Add(PlayerExtensions.ToEntity(new Player("Ernesto")));
}
catch (ArgumentException ex)
{
Debug.WriteLine($"{entity.ID} -- {entity.Name}");
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);
}
}
}

@ -12,7 +12,7 @@ namespace Model.Players
/// <summary>
/// a player's unique username
/// </summary>
public string Name { get; private set; } = "John Doe";
public string Name { get; private set; }
public Player(string name)
{
if (!string.IsNullOrWhiteSpace(name))

@ -19,7 +19,7 @@ namespace Model.Players
/// add a new player
/// </summary>
/// <param name="toAdd">player to be added</param>
/// <returns>added player, or null if <paramref name="toAdd"/> was null</returns>
/// <returns>added player</returns>
public Player Add(Player toAdd)
{
if (toAdd is null)

Loading…
Cancel
Save