🚧 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 namespace Data.EF
{ {
public class DiceAppDbContext : DbContext internal class DiceAppDbContext : DbContext
{ {
public DbSet<PlayerEntity>? Players { get; set; } public DbSet<PlayerEntity>? Players { get; set; }

@ -1,4 +1,5 @@
using Model; using Microsoft.EntityFrameworkCore.ChangeTracking;
using Model;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -7,17 +8,30 @@ using System.Threading.Tasks;
namespace Data.EF.Players 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) 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() public IEnumerable<PlayerEntity> GetAll()
{ {
throw new NotImplementedException(); return db.Players!.AsEnumerable();
} }
public PlayerEntity GetOneByName(string name) public PlayerEntity GetOneByName(string name)

@ -8,10 +8,15 @@ using System.Threading.Tasks;
namespace Data.EF.Players namespace Data.EF.Players
{ {
[Index(nameof(Name), IsUnique = true)] [Index(nameof(Name), IsUnique = true)]
public class PlayerEntity internal class PlayerEntity
{ {
public Guid ID { get; set; } 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 namespace Data.EF.Players
{ {
public static class PlayerExtensions internal static class PlayerExtensions
{ {
public static Player ToModel(this PlayerEntity entity) public static Player ToModel(this PlayerEntity entity)
{ {

@ -15,14 +15,30 @@ namespace Data
{ {
static void Main(string[] args) 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> /// <summary>
/// a player's unique username /// a player's unique username
/// </summary> /// </summary>
public string Name { get; private set; } = "John Doe"; public string Name { get; private set; }
public Player(string name) public Player(string name)
{ {
if (!string.IsNullOrWhiteSpace(name)) if (!string.IsNullOrWhiteSpace(name))

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

Loading…
Cancel
Save