début des routes et mise en place de l'interface idatamanager
continuous-integration/drone/push Build is failing Details

EF
Zakariya SAOULA 2 years ago
parent 7a2336e933
commit 4d9e8bfc08

@ -0,0 +1,48 @@
using Shared;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Model
{
public interface IDataManager
{
IPlayersManager PlayersMgr { get; }
IGamesManager GamesMgr { get; }
IGamesModeManager GamesModeMgr { get; }
ICasesManager CasesMgr { get; }
IGrillesManager GrillesMgr { get; }
IStatsManager StatsMgr { get; }
ITurnsManager TurnsMgr { get; }
}
public interface IPlayersManager : IGenericDataManager<Player?>
{
}
public interface IGamesManager : IGenericDataManager<Game?>
{
}
public interface IGamesModeManager : IGenericDataManager<GameMode?>
{
}
public interface ICasesManager : IGenericDataManager<Case?>
{
}
public interface IGrillesManager : IGenericDataManager<Grille?>
{
}
public interface IStatsManager : IGenericDataManager<Stats?>
{
}
public interface ITurnsManager : IGenericDataManager<Turn?>
{
}
}

@ -6,4 +6,8 @@
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Shared\Shared.csproj" />
</ItemGroup>
</Project>

@ -25,6 +25,12 @@
Stats = new Stats();
}
public Player(string pseudo, Stats stats)
{
Pseudo = pseudo;
Stats = stats;
}
//nécessaire ?
//public bool Equals(Player? other)
// => Pseudo.Equals(other?.Pseudo);

@ -16,9 +16,7 @@ namespace Model
public Stats()
{
}
{}
public override string ToString()
=> $"{NbWin} {NbPlayed} {MaxChain} {MaxZone} {MaxZone}";

@ -0,0 +1,11 @@
namespace Shared
{
public interface IGenericDataManager<T>
{
Task<int> GetNbItems();
Task<IEnumerable<T>> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false);
Task<T> UpdateItem(T oldItem, T newItem);
Task<T> AddItem(T item);
Task<bool> DeleteItem(T item);
}
}

@ -0,0 +1,9 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
</Project>

@ -0,0 +1,67 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Stub
{
static class Extensions
{
internal static Task<IEnumerable<T?>> GetItemsWithFilterAndOrdering<T>(this IEnumerable<T> collection,
Func<T, bool> filter, int index, int count, string? orderingPropertyName = null, bool descending = false)
{
IEnumerable<T> temp = collection;
temp = temp.Where(item => filter(item));
if (orderingPropertyName != null)
{
var prop = typeof(T).GetProperty(orderingPropertyName!);
if (prop != null)
{
temp = descending ? temp.OrderByDescending(item => prop.GetValue(item))
: temp.OrderBy(item => prop.GetValue(item));
}
}
return Task.FromResult<IEnumerable<T?>>(temp.Skip(index * count).Take(count));
}
//internal static Task<int> GetNbItemsWithFilter<T>(this IEnumerable<T> collection, Func<T, bool> filter)
//{
// return Task.FromResult(collection.Count(item => filter(item)));
//}
internal static Task<T?> AddItem<T>(this IList<T> collection, T? item)
{
if (item == null || collection.Contains(item))
{
return Task.FromResult<T?>(default(T));
}
collection.Add(item);
return Task.FromResult<T?>(item);
}
internal static Task<bool> DeleteItem<T>(this IList<T> collection, T? item)
{
if (item == null)
{
return Task.FromResult(false);
}
bool result = collection.Remove(item!);
return Task.FromResult(result);
}
internal static Task<T?> UpdateItem<T>(this IList<T> collection, T? oldItem, T? newItem)
{
if (oldItem == null || newItem == null) return Task.FromResult<T?>(default(T));
if (!collection.Contains(oldItem))
{
return Task.FromResult<T?>(default(T));
}
collection.Remove(oldItem!);
collection.Add(newItem!);
return Task.FromResult<T?>(newItem);
}
}
}

@ -0,0 +1,13 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\Model\Model.csproj" />
</ItemGroup>
</Project>

@ -0,0 +1,55 @@
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Stub
{
public partial class StubData
{
private List<Case> Cases = new()
{
new Case(1),
new Case(12),
new Case(4),
new Case(9),
new Case(8),
new Case(6),
};
public class CasesManager : ICasesManager
{
private readonly StubData parent;
public CasesManager(StubData parent)
=> this.parent = parent;
public Task<Case?> AddItem(Case? item)
{
throw new NotImplementedException();
}
public Task<bool> DeleteItem(Case? item)
{
throw new NotImplementedException();
}
public Task<IEnumerable<Case?>> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
{
throw new NotImplementedException();
}
public Task<int> GetNbItems()
{
throw new NotImplementedException();
}
public Task<Case?> UpdateItem(Case? oldItem, Case? newItem)
{
throw new NotImplementedException();
}
}
}
}

@ -0,0 +1,51 @@
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Stub
{
public partial class StubData
{
private List<Game> games = new()
{
//new Game(new TimeSpan(1,20,0),new DateOnly(2023,06,03)),
//new Game(),
};
public class GamesManager : IGamesManager
{
private readonly StubData parent;
public GamesManager(StubData parent)
=> this.parent = parent;
public Task<Game?> AddItem(Game? item)
{
throw new NotImplementedException();
}
public Task<bool> DeleteItem(Game? item)
{
throw new NotImplementedException();
}
public Task<IEnumerable<Game?>> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
{
throw new NotImplementedException();
}
public Task<int> GetNbItems()
{
throw new NotImplementedException();
}
public Task<Game?> UpdateItem(Game? oldItem, Game? newItem)
{
throw new NotImplementedException();
}
}
}
}

@ -0,0 +1,51 @@
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Stub
{
public partial class StubData
{
private List<GameMode> GamesMode = new()
{
//new GameMode(),
//new GameMode(),
};
public class GamesModeManager : IGamesModeManager
{
private readonly StubData parent;
public GamesModeManager(StubData parent)
=> this.parent = parent;
public Task<GameMode?> AddItem(GameMode? item)
{
throw new NotImplementedException();
}
public Task<bool> DeleteItem(GameMode? item)
{
throw new NotImplementedException();
}
public Task<IEnumerable<GameMode?>> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
{
throw new NotImplementedException();
}
public Task<int> GetNbItems()
{
throw new NotImplementedException();
}
public Task<GameMode?> UpdateItem(GameMode? oldItem, GameMode? newItem)
{
throw new NotImplementedException();
}
}
}
}

@ -0,0 +1,45 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
namespace Stub
{
public partial class StubData
{
private List<Grille> grilles = new()
{
new Grille(new List<Case> {new Case(3), new Case(5), new Case(6), new Case(7), new Case(8), new Case(9),
new Case(12), new Case(4), new Case(2), new Case(10), new Case(8), new Case(2),}),
//new Grille(),
};
public class GrillesManager : IGrillesManager
{
private readonly StubData parent;
public GrillesManager(StubData parent)
=> this.parent = parent;
public Task<Grille?> AddItem(Grille? item)
=> parent.grilles.AddItem(item);
public Task<bool> DeleteItem(Grille? item)
=> parent.grilles.DeleteItem(item);
public Task<IEnumerable<Grille?>> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
=> parent.grilles.GetItemsWithFilterAndOrdering(
c => true,
index, count,
orderingPropertyName, descending);
public Task<int> GetNbItems()
=> Task.FromResult(parent.grilles.Count);
public Task<Grille?> UpdateItem(Grille? oldItem, Grille? newItem)
=> parent.grilles.UpdateItem(oldItem,newItem);
}
}
}

@ -0,0 +1,46 @@
using Model;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Stub
{
public partial class StubData
{
private List<Player> players = new()
{
new Player("Aurelien"),
new Player("Theo"),
new Player("Maxence"),
new Player("Zakariya"),
};
public class PlayersManager : IPlayersManager
{
private readonly StubData parent;
public PlayersManager(StubData parent)
=> this.parent = parent;
public Task<Player?> AddItem(Player? item)
=> parent.players.AddItem(item);
public Task<bool> DeleteItem(Player? item)
=> parent.players.DeleteItem(item);
public Task<IEnumerable<Player?>> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
=> parent.players.GetItemsWithFilterAndOrdering(
c => true,
index, count,
orderingPropertyName, descending);
public Task<int> GetNbItems()
=> Task.FromResult(parent.players.Count);
public Task<Player?> UpdateItem(Player? oldItem, Player? newItem)
=> parent.players.UpdateItem(oldItem, newItem);
}
}
}

@ -0,0 +1,52 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
namespace Stub
{
public partial class StubData
{
private List<Stats> stats = new()
{
new Stats(),
//new Stat(),
};
public class StatsManager : IStatsManager
{
private readonly StubData parent;
public StatsManager(StubData parent)
=> this.parent = parent;
public Task<Stats?> AddItem(Stats? item)
{
throw new NotImplementedException();
}
public Task<bool> DeleteItem(Stats? item)
{
throw new NotImplementedException();
}
public Task<IEnumerable<Stats?>> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
=> parent.stats.GetItemsWithFilterAndOrdering(
c => true,
index, count,
orderingPropertyName, descending);
public Task<int> GetNbItems()
{
throw new NotImplementedException();
}
public Task<Stats?> UpdateItem(Stats? oldItem, Stats? newItem)
{
throw new NotImplementedException();
}
}
}
}

@ -0,0 +1,51 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Model;
namespace Stub
{
public partial class StubData
{
private List<Turn> Turns = new()
{
//new Turn(),
//new Turn(),
};
public class TurnsManager : ITurnsManager
{
private readonly StubData parent;
public TurnsManager(StubData parent)
=> this.parent = parent;
public Task<Turn?> AddItem(Turn? item)
{
throw new NotImplementedException();
}
public Task<bool> DeleteItem(Turn? item)
{
throw new NotImplementedException();
}
public Task<IEnumerable<Turn?>> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
{
throw new NotImplementedException();
}
public Task<int> GetNbItems()
{
throw new NotImplementedException();
}
public Task<Turn?> UpdateItem(Turn? oldItem, Turn? newItem)
{
throw new NotImplementedException();
}
}
}
}

@ -0,0 +1,38 @@
using Model;
namespace Stub
{
public partial class StubData : IDataManager
{
public StubData()
{
//ChampionsMgr = new ChampionsManager(this);
//SkinsMgr = new SkinsManager(this);
//RunesMgr = new RunesManager(this);
//RunePagesMgr = new RunePagesManager(this);
PlayersMgr = new PlayersManager(this);
GamesMgr = new GamesManager(this);
GamesModeMgr = new GamesModeManager(this);
CasesMgr = new CasesManager(this);
GrillesMgr = new GrillesManager(this);
StatsMgr = new StatsManager(this);
TurnsMgr = new TurnsManager(this);
}
public IPlayersManager PlayersMgr { get; }
public IGamesManager GamesMgr { get; }
public IGamesModeManager GamesModeMgr { get; }
public ICasesManager CasesMgr { get; }
public IGrillesManager GrillesMgr { get; }
public IStatsManager StatsMgr { get; }
public ITurnsManager TurnsMgr { get; }
}
}

@ -0,0 +1,24 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net6.0</TargetFramework>
<ImplicitUsings>enable</ImplicitUsings>
<Nullable>enable</Nullable>
<IsPackable>false</IsPackable>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.1.0" />
<PackageReference Include="xunit" Version="2.4.1" />
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
<PackageReference Include="coverlet.collector" Version="3.1.2">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>all</PrivateAssets>
</PackageReference>
</ItemGroup>
</Project>

@ -0,0 +1,11 @@
namespace ModelTest
{
public class UnitTest1
{
[Fact]
public void Test1()
{
}
}
}

@ -0,0 +1 @@
global using Xunit;

@ -1,17 +1,25 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio Version 16
VisualStudioVersion = 16.0.810.22
# Visual Studio Version 17
VisualStudioVersion = 17.2.32505.173
MinimumVisualStudioVersion = 10.0.40219.1
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{C75DF644-C41F-4A08-8B69-C8554204AC72}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Trek12_API", "Trek12_API\Trek12_API.csproj", "{3BF053E1-44DF-4305-ACBA-21F7A053A514}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Trek12_API", "Trek12_API\Trek12_API.csproj", "{3BF053E1-44DF-4305-ACBA-21F7A053A514}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Model", "Model\Model.csproj", "{4BEFD382-A3A4-444E-973E-73F410F9CED4}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model", "Model\Model.csproj", "{4BEFD382-A3A4-444E-973E-73F410F9CED4}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EntityFrameWorkLib", "Trek12_Lib\EntityFrameWorkLib.csproj", "{D6B8B866-0510-454A-A00A-BF403E81CE3E}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "EntityFrameWorkLib", "Trek12_Lib\EntityFrameWorkLib.csproj", "{D6B8B866-0510-454A-A00A-BF403E81CE3E}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DbConsole", "Tests\DbConsole\DbConsole.csproj", "{75B303CC-F36E-46FA-BE23-05EEA35D9B28}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DbConsole", "Tests\DbConsole\DbConsole.csproj", "{75B303CC-F36E-46FA-BE23-05EEA35D9B28}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "ModelTest", "Tests\ModelTest\ModelTest.csproj", "{6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Stub", "Stub", "{B1585816-FCBB-484F-A1AA-C7AEB501C39B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Stub", "Stub\Stub\Stub.csproj", "{5E45E953-4FCC-42B6-9F22-15108D002D78}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Shared", "Shared\Shared.csproj", "{8B6EC777-57F8-4509-9163-4312A40FE63C}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
@ -35,14 +43,28 @@ Global
{75B303CC-F36E-46FA-BE23-05EEA35D9B28}.Debug|Any CPU.Build.0 = Debug|Any CPU
{75B303CC-F36E-46FA-BE23-05EEA35D9B28}.Release|Any CPU.ActiveCfg = Release|Any CPU
{75B303CC-F36E-46FA-BE23-05EEA35D9B28}.Release|Any CPU.Build.0 = Release|Any CPU
{6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1}.Release|Any CPU.Build.0 = Release|Any CPU
{5E45E953-4FCC-42B6-9F22-15108D002D78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{5E45E953-4FCC-42B6-9F22-15108D002D78}.Debug|Any CPU.Build.0 = Debug|Any CPU
{5E45E953-4FCC-42B6-9F22-15108D002D78}.Release|Any CPU.ActiveCfg = Release|Any CPU
{5E45E953-4FCC-42B6-9F22-15108D002D78}.Release|Any CPU.Build.0 = Release|Any CPU
{8B6EC777-57F8-4509-9163-4312A40FE63C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{8B6EC777-57F8-4509-9163-4312A40FE63C}.Debug|Any CPU.Build.0 = Debug|Any CPU
{8B6EC777-57F8-4509-9163-4312A40FE63C}.Release|Any CPU.ActiveCfg = Release|Any CPU
{8B6EC777-57F8-4509-9163-4312A40FE63C}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4D47853B-D1A3-49A5-84BA-CD2DC65FD105}
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{75B303CC-F36E-46FA-BE23-05EEA35D9B28} = {C75DF644-C41F-4A08-8B69-C8554204AC72}
{6EC6383D-10E8-44E1-8EDD-EF4DF460A9B1} = {C75DF644-C41F-4A08-8B69-C8554204AC72}
{5E45E953-4FCC-42B6-9F22-15108D002D78} = {B1585816-FCBB-484F-A1AA-C7AEB501C39B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {4D47853B-D1A3-49A5-84BA-CD2DC65FD105}
EndGlobalSection
EndGlobal

@ -0,0 +1,65 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Model;
using Stub;
using Trek12_API.Converter;
using Trek12_API.DTO;
namespace Trek12_API.Controllers
{
[ApiController]
[Route("[controller]")]
public class PlayerController : ControllerBase
{
private StubData.PlayersManager playersManager { get; set; } = new StubData.PlayersManager(new StubData());
private readonly ILogger<PlayerController> _logger;
public PlayerController(ILogger<PlayerController> logger)
{
_logger = logger;
}
[HttpGet]
public async Task<IActionResult> Get()
{
//si count > nb_max
//_logger.LogWarning + reaffecter count
var list = await playersManager.GetItems(0, await playersManager.GetNbItems());
return Ok(list.Select(player => player?.toDTO()));
}
[HttpGet]
public async Task<IActionResult> GetById()
{
var list = await playersManager.GetItems(0, await playersManager.GetNbItems());
return Ok(list.Select(player => player?.toDTO()));
}
[HttpPost]
public async Task<IActionResult> Post(PlayerDTO player)
{
Player playerToCreate = player.toModel();
await playersManager.AddItem(playerToCreate);
return Ok(playerToCreate?.toDTO());
}
[HttpDelete("{player}")]
public async Task<IActionResult> Delete(PlayerDTO player)
{
var playerToDelete = player.toModel();
//faire recherche pour voir si player existe
await playersManager.DeleteItem(playerToDelete);
return Ok();
}
[HttpPut]
public async Task<IActionResult> Update(string pseudo, PlayerDTO playerOld)
{
Player playerOldModel = playerOld.toModel();
Player playerNew = new Player(pseudo, playerOldModel.Stats);
await playersManager.UpdateItem(playerOldModel, playerNew);
return Ok(playerNew);
}
}
}

@ -0,0 +1,33 @@
using Model;
using Trek12_API.DTO;
namespace Trek12_API.Converter
{
public static class PlayerConverter
{
public static PlayerDTO toDTO(this Player player)
{
return new PlayerDTO()
{
Pseudo = player.Pseudo,
Stats = player.Stats.toDTO(),
};
}
public static Player toModel(this PlayerDTO player)
{
return new Player(player.Pseudo, player.Stats.toModel());
}
public static IEnumerable<Player> toModels(this IEnumerable<PlayerDTO?> players)
{
return players.Select(c => c.toModel());
}
public static IEnumerable<PlayerDTO> toDTOs(this IEnumerable<Player?> players)
{
return players.Select(c => c.toDTO());
}
}
}

@ -0,0 +1,42 @@
using Model;
using Trek12_API.DTO;
namespace Trek12_API.Converter
{
public static class StatsConverter
{
public static StatsDTO toDTO(this Stats stats)
{
return new StatsDTO()
{
NbPlayed = stats.NbPlayed,
NbWin = stats.NbWin,
MaxChain = stats.MaxChain,
MaxPoints = stats.MaxPoints,
MaxZone = stats.MaxZone,
};
}
public static Stats toModel(this StatsDTO stats)
{
return new Stats()
{
NbPlayed = stats.NbPlayed,
NbWin = stats.NbWin,
MaxChain = stats.MaxChain,
MaxPoints = stats.MaxPoints,
MaxZone = stats.MaxZone,
};
}
public static IEnumerable<Stats> toModels(this IEnumerable<StatsDTO?> stats)
{
return stats.Select(c => c.toModel());
}
public static IEnumerable<StatsDTO> toDTOs(this IEnumerable<Stats?> stats)
{
return stats.Select(c => c.toDTO());
}
}
}

@ -0,0 +1,9 @@
namespace Trek12_API.DTO
{
public class PlayerDTO
{
public string Pseudo { get; set; }
public StatsDTO Stats { get; set; } = new StatsDTO();
}
}

@ -0,0 +1,11 @@
namespace Trek12_API.DTO
{
public class StatsDTO
{
public int NbWin { get; set; }
public int NbPlayed { get; set; }
public int MaxChain { get; set; }
public int MaxZone { get; set; }
public int MaxPoints { get; set; }
}
}

@ -10,4 +10,8 @@
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Stub\Stub\Stub.csproj" />
</ItemGroup>
</Project>

Loading…
Cancel
Save