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