diff --git a/LaDOSE.Src/LaDOSE.Api.DTO/LaDOSE.Api.DTO.csproj b/LaDOSE.Src/LaDOSE.Api.DTO/LaDOSE.Api.DTO.csproj
new file mode 100644
index 0000000..5766db6
--- /dev/null
+++ b/LaDOSE.Src/LaDOSE.Api.DTO/LaDOSE.Api.DTO.csproj
@@ -0,0 +1,7 @@
+
+
+
+ netcoreapp2.0
+
+
+
diff --git a/LaDOSE.Src/LaDOSE.Api/Controllers/EventController.cs b/LaDOSE.Src/LaDOSE.Api/Controllers/EventController.cs
new file mode 100644
index 0000000..2c7dd4a
--- /dev/null
+++ b/LaDOSE.Src/LaDOSE.Api/Controllers/EventController.cs
@@ -0,0 +1,43 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using LaDOSE.Business.Interface;
+using LaDOSE.Entity;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc;
+
+namespace LaDOSE.Api.Controllers
+{
+ [Produces("application/json")]
+ [Route("api/[controller]")]
+ public class EventController : Controller
+ {
+ private IEventService _eventService;
+
+ public EventController(IEventService eventService)
+ {
+ _eventService = eventService;
+ }
+
+ [HttpPost]
+ public Event Post([FromBody]Event dto)
+ {
+ return _eventService.Create(dto);
+ }
+
+ [HttpGet("{id}")]
+ public Event Get(int id)
+ {
+ return _eventService.GetById(id);
+
+ }
+
+ [HttpGet("Generate/{dto}")]
+ public bool GenerateChallonge(int dto)
+ {
+ return _eventService.CreateChallonge(dto);
+
+ }
+ }
+}
\ No newline at end of file
diff --git a/LaDOSE.Src/LaDOSE.Api/LaDOSE.Api.csproj b/LaDOSE.Src/LaDOSE.Api/LaDOSE.Api.csproj
index 26c785f..adfc078 100644
--- a/LaDOSE.Src/LaDOSE.Api/LaDOSE.Api.csproj
+++ b/LaDOSE.Src/LaDOSE.Api/LaDOSE.Api.csproj
@@ -11,6 +11,7 @@
+
diff --git a/LaDOSE.Src/LaDOSE.Api/Startup.cs b/LaDOSE.Src/LaDOSE.Api/Startup.cs
index d8c889b..51b151f 100644
--- a/LaDOSE.Src/LaDOSE.Api/Startup.cs
+++ b/LaDOSE.Src/LaDOSE.Api/Startup.cs
@@ -4,6 +4,7 @@ using System.Linq;
using System.Text;
using System.Threading.Tasks;
using LaDOSE.Business.Interface;
+using LaDOSE.Business.Provider;
using LaDOSE.Business.Service;
using LaDOSE.Entity;
using LaDOSE.Entity.Context;
@@ -40,6 +41,7 @@ namespace LaDOSE.Api
var MySqlDatabase = this.Configuration["MySql:Database"];
var MySqlUser = this.Configuration["MySql:User"];
var MySqlPassword = this.Configuration["MySql:Password"];
+
services.AddCors();
services.AddMvc().AddJsonOptions(x => x.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);
services.AddDbContextPool( // replace "YourDbContext" with the class name of your DbContext
@@ -86,11 +88,18 @@ namespace LaDOSE.Api
});
// configure DI for application services
+ AddDIConfig(services);
+ }
+
+ private void AddDIConfig(IServiceCollection services)
+ {
+
services.AddScoped();
services.AddScoped();
+ services.AddScoped();
+ services.AddTransient(p => new ChallongeProvider(this.Configuration["ApiKey:ChallongeApiKey"]));
}
-
-
+
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
diff --git a/LaDOSE.Src/LaDOSE.Api/appsettings.json b/LaDOSE.Src/LaDOSE.Api/appsettings.json
index ca6066c..4a73694 100644
--- a/LaDOSE.Src/LaDOSE.Api/appsettings.json
+++ b/LaDOSE.Src/LaDOSE.Api/appsettings.json
@@ -14,6 +14,9 @@
"User": "User",
"Password": "Password"
},
+ "ApiKey": {
+ "ChallongeApiKey": "Challonge ApiKey"
+ },
"AllowedHosts": "*",
"Port": 5000,
"JWTTokenSecret": "here goes the custom Secret key for authnetication"
diff --git a/LaDOSE.Src/LaDOSE.DiscordBot/Service/ChallongeService.cs b/LaDOSE.Src/LaDOSE.DiscordBot/Service/ChallongeService.cs
index a74dd27..22198c9 100644
--- a/LaDOSE.Src/LaDOSE.DiscordBot/Service/ChallongeService.cs
+++ b/LaDOSE.Src/LaDOSE.DiscordBot/Service/ChallongeService.cs
@@ -35,25 +35,29 @@ namespace LaDOSE.DiscordBot.Service
try
{
-
- List tournamentResultList = await new TournamentsQuery()
+
+ List tournamentResultList = await new TournamentsQuery()
{
state = TournamentState.Ended
}
- .call(this.ApiCaller);
+ .call(this.ApiCaller);
- var lastDate = tournamentResultList.Max(e => e.completed_at);
- var lastRankingDate = new DateTime(lastDate.Year, lastDate.Month, lastDate.Day);
- var lastTournament = tournamentResultList.Where(e => e.completed_at > lastRankingDate).ToList();
- string returnValue = "Les derniers tournois : \n";
- foreach (var tournamentResult in lastTournament)
- {
- returnValue += $"{tournamentResult.name} : \n";
- }
+ var lastDate = tournamentResultList.Max(e => e.completed_at);
+ if (lastDate.HasValue)
+ {
+ var lastRankingDate = new DateTime(lastDate.Value.Year, lastDate.Value.Month, lastDate.Value.Day);
- DernierTournois = returnValue;
- return true;
+ var lastTournament = tournamentResultList.Where(e => e.completed_at > lastRankingDate).ToList();
+ string returnValue = "Les derniers tournois : \n";
+ foreach (var tournamentResult in lastTournament)
+ {
+ returnValue += $"{tournamentResult.name} : \n";
+ }
+
+ DernierTournois = returnValue;
+ }
+ return true;
}
catch
{
diff --git a/LaDOSE.Src/LaDOSE.Entity/Context/LaDOSEDbContext.cs b/LaDOSE.Src/LaDOSE.Entity/Context/LaDOSEDbContext.cs
index ed00c13..39b0bed 100644
--- a/LaDOSE.Src/LaDOSE.Entity/Context/LaDOSEDbContext.cs
+++ b/LaDOSE.Src/LaDOSE.Entity/Context/LaDOSEDbContext.cs
@@ -21,12 +21,16 @@ namespace LaDOSE.Entity.Context
base.OnModelCreating(modelBuilder);
modelBuilder.Entity()
.HasKey(t => new { t.SeasonId, t.GameId });
+ modelBuilder.Entity()
+ .HasKey(t => new { t.EventId, t.GameId });
modelBuilder.Entity()
.HasOne(s => s.Season)
.WithMany(p => p.Event)
.HasForeignKey(fk => fk.SeasonId);
+
+
modelBuilder.Entity()
.HasOne(pt => pt.Season)
.WithMany(p => p.Games)
@@ -37,6 +41,17 @@ namespace LaDOSE.Entity.Context
.WithMany(p => p.Seasons)
.HasForeignKey(pt => pt.GameId);
+
+ modelBuilder.Entity()
+ .HasOne(pt => pt.Event)
+ .WithMany(p => p.Games)
+ .HasForeignKey(pt => pt.EventId);
+
+ modelBuilder.Entity()
+ .HasOne(pt => pt.Game)
+ .WithMany(p => p.Events)
+ .HasForeignKey(pt => pt.GameId);
+
}
}
diff --git a/LaDOSE.Src/LaDOSE.Entity/Event.cs b/LaDOSE.Src/LaDOSE.Entity/Event.cs
index 2201f5a..0d55573 100644
--- a/LaDOSE.Src/LaDOSE.Entity/Event.cs
+++ b/LaDOSE.Src/LaDOSE.Entity/Event.cs
@@ -1,4 +1,5 @@
using System;
+using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
namespace LaDOSE.Entity
@@ -13,5 +14,9 @@ namespace LaDOSE.Entity
public Season Season { get; set; }
public bool Ranking { get; set; }
+
+ public virtual IEnumerable Games { get; set; }
+
+
}
}
\ No newline at end of file
diff --git a/LaDOSE.Src/LaDOSE.Entity/EventGame.cs b/LaDOSE.Src/LaDOSE.Entity/EventGame.cs
new file mode 100644
index 0000000..6c1bda9
--- /dev/null
+++ b/LaDOSE.Src/LaDOSE.Entity/EventGame.cs
@@ -0,0 +1,12 @@
+namespace LaDOSE.Entity
+{
+ public class EventGame
+ {
+
+ public int EventId { get; set; }
+ public Event Event { get; set; }
+ public int GameId { get; set; }
+ public Game Game { get; set; }
+
+ }
+}
\ No newline at end of file
diff --git a/LaDOSE.Src/LaDOSE.Entity/Game.cs b/LaDOSE.Src/LaDOSE.Entity/Game.cs
index c20751b..8180f14 100644
--- a/LaDOSE.Src/LaDOSE.Entity/Game.cs
+++ b/LaDOSE.Src/LaDOSE.Entity/Game.cs
@@ -12,5 +12,7 @@ namespace LaDOSE.Entity
public string ImgUrl { get; set; }
public virtual IEnumerable Seasons { get; set; }
+ public virtual IEnumerable Events { get; set; }
+
}
}
diff --git a/LaDOSE.Src/LaDOSE.Service/Interface/IChallongeProvider.cs b/LaDOSE.Src/LaDOSE.Service/Interface/IChallongeProvider.cs
new file mode 100644
index 0000000..f46edc0
--- /dev/null
+++ b/LaDOSE.Src/LaDOSE.Service/Interface/IChallongeProvider.cs
@@ -0,0 +1,12 @@
+using System;
+using System.Threading.Tasks;
+
+namespace LaDOSE.Business.Interface
+{
+ public interface IChallongeProvider
+ {
+ Task GetLastTournament();
+ string GetLastTournamentMessage();
+ Task> CreateTournament(string name, string url);
+ }
+}
\ No newline at end of file
diff --git a/LaDOSE.Src/LaDOSE.Service/Interface/IEventService.cs b/LaDOSE.Src/LaDOSE.Service/Interface/IEventService.cs
index cdc762d..fa841e0 100644
--- a/LaDOSE.Src/LaDOSE.Service/Interface/IEventService.cs
+++ b/LaDOSE.Src/LaDOSE.Service/Interface/IEventService.cs
@@ -4,6 +4,6 @@ namespace LaDOSE.Business.Interface
{
public interface IEventService : IBaseService
{
-
+ bool CreateChallonge(int dto);
}
}
\ No newline at end of file
diff --git a/LaDOSE.Src/LaDOSE.Service/LaDOSE.Business.csproj b/LaDOSE.Src/LaDOSE.Service/LaDOSE.Business.csproj
index 10f635d..9b0eda5 100644
--- a/LaDOSE.Src/LaDOSE.Service/LaDOSE.Business.csproj
+++ b/LaDOSE.Src/LaDOSE.Service/LaDOSE.Business.csproj
@@ -10,4 +10,10 @@
+
+
+ ..\..\Library\ChallongeCSharpDriver.dll
+
+
+
diff --git a/LaDOSE.Src/LaDOSE.Service/Provider/ChallongeProvider.cs b/LaDOSE.Src/LaDOSE.Service/Provider/ChallongeProvider.cs
new file mode 100644
index 0000000..4d00fe3
--- /dev/null
+++ b/LaDOSE.Src/LaDOSE.Service/Provider/ChallongeProvider.cs
@@ -0,0 +1,78 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using ChallongeCSharpDriver;
+using ChallongeCSharpDriver.Caller;
+using ChallongeCSharpDriver.Core.Queries;
+using ChallongeCSharpDriver.Core.Results;
+using LaDOSE.Business.Interface;
+
+namespace LaDOSE.Business.Provider
+{
+ public class ChallongeProvider : IChallongeProvider
+ {
+ private ChallongeConfig Config;
+ public string ApiKey { get; set; }
+
+ public ChallongeHTTPClientAPICaller ApiCaller { get; set; }
+
+ public string DernierTournois { get; set; }
+
+
+ public ChallongeProvider(string apiKey)
+ {
+ this.ApiKey = apiKey;
+ this.Config = new ChallongeConfig(this.ApiKey);
+ this.ApiCaller = new ChallongeHTTPClientAPICaller(Config);
+ DernierTournois = "Aucun tournois.";
+ }
+
+ public async Task> CreateTournament(string name, string url)
+ {
+ var p = await new CreateTournamentQuery(name, TournamentType.Double_Elimination, url).call(ApiCaller);
+ return new Tuple(p.id, p.url);
+
+
+ }
+
+ public async Task GetLastTournament()
+ {
+ try
+ {
+
+
+ List tournamentResultList = await new TournamentsQuery()
+ {
+ state = TournamentState.Ended
+ }
+ .call(this.ApiCaller);
+
+
+ var lastDate = tournamentResultList.Max(e => e.completed_at);
+ if (lastDate.HasValue)
+ {
+ var lastRankingDate = new DateTime(lastDate.Value.Year, lastDate.Value.Month, lastDate.Value.Day);
+
+ var lastTournament = tournamentResultList.Where(e => e.completed_at > lastRankingDate).ToList();
+ string returnValue = "Les derniers tournois : \n";
+ foreach (var tournamentResult in lastTournament)
+ {
+ returnValue += $"{tournamentResult.name} : \n";
+ }
+
+ DernierTournois = returnValue;
+ }
+ return true;
+ }
+ catch
+ {
+ return false;
+ }
+ }
+ public string GetLastTournamentMessage()
+ {
+ return DernierTournois;
+ }
+ }
+}
\ No newline at end of file
diff --git a/LaDOSE.Src/LaDOSE.Service/Service/EventService.cs b/LaDOSE.Src/LaDOSE.Service/Service/EventService.cs
index fe092b8..440937d 100644
--- a/LaDOSE.Src/LaDOSE.Service/Service/EventService.cs
+++ b/LaDOSE.Src/LaDOSE.Service/Service/EventService.cs
@@ -1,14 +1,24 @@
using System;
+using System.Linq;
using LaDOSE.Business.Interface;
using LaDOSE.Entity;
using LaDOSE.Entity.Context;
+using Microsoft.EntityFrameworkCore;
namespace LaDOSE.Business.Service
{
public class EventService : BaseService, IEventService
{
- public EventService(LaDOSEDbContext context) : base(context)
+ private IChallongeProvider _challongeProvider;
+
+ public EventService(LaDOSEDbContext context,IChallongeProvider challongeProvider) : base(context)
{
+ this._challongeProvider = challongeProvider;
+ }
+
+ public override Event GetById(int id)
+ {
+ return _context.Event.Include(e=>e.Season).Include(e=>e.Games).ThenInclude(e=>e.Game).FirstOrDefault(e=>e.Id == id);
}
public override Event Create(Event e)
@@ -22,5 +32,25 @@ namespace LaDOSE.Business.Service
_context.SaveChanges();
return eventAdded.Entity;
}
+
+ public bool CreateChallonge(int dto)
+ {
+ var currentEvent = _context.Event.Include(e=>e.Games).ThenInclude(e=>e.Game).FirstOrDefault(e=>e.Id == dto);
+ if (currentEvent != null)
+ {
+ var games = currentEvent.Games.Select(e => e.Game);
+ var s = currentEvent.Date.ToString("MM/dd/yy");
+ foreach (var game in games)
+ {
+ var url = $"TestDev{game.Id}{game.Name}";
+ var name = $"[{s}]Ranking {currentEvent.Name}{game.Name}";
+ _challongeProvider.CreateTournament(name,url);
+ }
+
+ return true;
+ }
+
+ return false;
+ }
}
}
\ No newline at end of file
diff --git a/LaDOSE.Src/LaDOSE.Service/Service/GameService.cs b/LaDOSE.Src/LaDOSE.Service/Service/GameService.cs
index 1e60406..cbe5ed2 100644
--- a/LaDOSE.Src/LaDOSE.Service/Service/GameService.cs
+++ b/LaDOSE.Src/LaDOSE.Service/Service/GameService.cs
@@ -17,7 +17,7 @@ namespace LaDOSE.Business.Service
public override IEnumerable GetAll()
{
- return _context.Game.Include(e => e.Seasons).ToList();
+ return _context.Game.Include(e => e.Seasons).ThenInclude(e=>e.Season).ToList();
}
diff --git a/Library/ChallongeCSharpDriver.dll b/Library/ChallongeCSharpDriver.dll
index 0e1f2b5..d0b5f85 100644
Binary files a/Library/ChallongeCSharpDriver.dll and b/Library/ChallongeCSharpDriver.dll differ