diff --git a/Sources/API_LoL/API_LoL.csproj b/Sources/API_LoL/API_LoL.csproj
index a8c4de7..db2c1c8 100644
--- a/Sources/API_LoL/API_LoL.csproj
+++ b/Sources/API_LoL/API_LoL.csproj
@@ -17,6 +17,7 @@
+
diff --git a/Sources/API_LoL/Controllers/ChampionsController.cs b/Sources/API_LoL/Controllers/ChampionsController.cs
index 0e4df63..b2d58bd 100644
--- a/Sources/API_LoL/Controllers/ChampionsController.cs
+++ b/Sources/API_LoL/Controllers/ChampionsController.cs
@@ -92,9 +92,10 @@ namespace API_LoL.Controllers
var list = await ChampionsManager.GetItemsByName(name, 0, 1);
if (list.Count() == 1)
{
- var skins = await SkinsManager.GetItemsByChampion(list.First(), 0, await SkinsManager.GetNbItemsByChampion(list.First()));
- if (skins.Count() != 0)
+ var nb = await SkinsManager.GetNbItemsByChampion(list.First());
+ if (nb != 0)
{
+ var skins = await SkinsManager.GetItemsByChampion(list.First(), 0, nb);
return Ok(skins.Select(skin => skin?.ToDTO()));
}
else { return NoContent(); }
diff --git a/Sources/API_LoL/Program.cs b/Sources/API_LoL/Program.cs
index c192eac..7c535a4 100644
--- a/Sources/API_LoL/Program.cs
+++ b/Sources/API_LoL/Program.cs
@@ -1,4 +1,6 @@
using API_LoL;
+using EntityFramework;
+using EntityFramework.Manager;
using Microsoft.AspNetCore.Mvc.ApiExplorer;
using Microsoft.AspNetCore.Mvc.Versioning;
using Model;
@@ -37,13 +39,19 @@ builder.Services.AddControllers();
-builder.Services.AddScoped();
-
-
+//builder.Services.AddScoped();
+builder.Services.AddScoped();
+builder.Services.AddDbContext();
var app = builder.Build();
+using(var scope = app.Services.CreateScope())
+{
+ var context = scope.ServiceProvider.GetService();
+ context.Database.EnsureCreated();
+}
+
var apiVersionDescriptionProvider = app.Services.GetRequiredService();
diff --git a/Sources/EF_UT/EFDataManagerChampionTest.cs b/Sources/EF_UT/EFDataManagerChampionTest.cs
new file mode 100644
index 0000000..80f34af
--- /dev/null
+++ b/Sources/EF_UT/EFDataManagerChampionTest.cs
@@ -0,0 +1,39 @@
+using EntityFramework;
+using EntityFramework.Manager;
+using FluentAssertions;
+using FluentAssertions.Primitives;
+using Microsoft.EntityFrameworkCore;
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EF_UT
+{
+ [TestClass]
+ public class EFDataManagerChampionTest
+ {
+ [TestMethod]
+ public void Add_ValidChampion_Added()
+ {
+ IDataManager dataManager = new EFDataManager();
+ IChampionsManager championsManager = dataManager.ChampionsMgr;
+
+ var champ = championsManager.AddItem(new Champion("test"));
+ }
+
+ //[TestMethod]
+ //public async Task GetItemsByName_DefaultChamp_One()
+ //{
+ // IDataManager dataManager = new EFDataManager();
+ // IChampionsManager championsManager = dataManager.ChampionsMgr;
+
+ // var ak = (await championsManager.GetItemsByName("A",0,1)).First();
+
+ // Assert.IsNotNull(ak);
+ // //Assert.AreEqual("Akali", ak.Name);
+ //}
+ }
+}
diff --git a/Sources/EF_UT/EntityTest.cs b/Sources/EF_UT/EntityTest.cs
index 4122418..5fd0afb 100644
--- a/Sources/EF_UT/EntityTest.cs
+++ b/Sources/EF_UT/EntityTest.cs
@@ -23,11 +23,12 @@ namespace EF_UT
using (var context = new LoLDbContext(options))
{
- ChampionEntity chewie = new ChampionEntity("Chewbacca", "", "");
- ChampionEntity yoda = new ChampionEntity("Yoda", "", "");
- ChampionEntity ewok = new ChampionEntity("Ewok", "", "");
-
+ ChampionEntity chewie = new ChampionEntity { Name = "Chewbacca", Bio = "", Icon = "" };
+ ChampionEntity yoda = new ChampionEntity{ Name = "Yoda", Bio = "", Icon = "" };
+ ChampionEntity ewok = new ChampionEntity{ Name = "Ewok", Bio = "", Icon = "" };
+ //SkinEntity defaulSkin = new SkinEntity("Skin Default", chewie);
+ //chewie.AddSkin(defaulSkin);
Console.WriteLine("Creates and inserts new Champion for tests");
context.Add(chewie);
context.Add(yoda);
@@ -54,9 +55,9 @@ namespace EF_UT
//prepares the database with one instance of the context
using (var context = new LoLDbContext(options))
{
- ChampionEntity chewie = new ChampionEntity("Chewbacca", "ewa", "");
- ChampionEntity yoda = new ChampionEntity("Yoda", "wewo", "");
- ChampionEntity ewok = new ChampionEntity("Ewok", "", "");
+ ChampionEntity chewie = new ChampionEntity{ Name = "Chewbacca", Bio = "ewa", Icon = "" };
+ ChampionEntity yoda = new ChampionEntity{ Name = "Yoda", Bio = "wewo", Icon = "" };
+ ChampionEntity ewok = new ChampionEntity{ Name = "Ewok", Bio = "", Icon = "" };
context.Add(chewie);
context.Add(yoda);
diff --git a/Sources/EntityFramework/ChampionEntity.cs b/Sources/EntityFramework/ChampionEntity.cs
index d672964..456b9ce 100644
--- a/Sources/EntityFramework/ChampionEntity.cs
+++ b/Sources/EntityFramework/ChampionEntity.cs
@@ -32,14 +32,29 @@ namespace EntityFramework
//public ImmutableHashSet Skills => skills.ToImmutableHashSet();
//private HashSet skills = new HashSet();
- private ICollection Skills { get; set; }
+ public ICollection Skills { get; set; } = new Collection();
- public ChampionEntity(string name,string bio,string icon) {
- this.Name = name;
- this.Bio = bio;
- this.Icon = icon;
- Skills= new List();
- }
+ //public ReadOnlyCollection Skins { get; private set; }
+ //private List skins = new();
+
+ public ICollection skins { get; set; } = new Collection();
+
+ //public LargeImageEntity? Image { get; set; } ====> voir pour faire "plus propre" => créé une table pour l'entity Largeimage
+ public string? Image { get; set; }
+
+
+
+ ///
+ /// pas besoin de constructeur ! (sans lui, il est possible d'utiliser la syntaxe utilisé dans le stubbedbDBCOntext)
+ ///
+ ///
+ //public ChampionEntity(string name,string bio,string icon) {
+ // this.Name = name;
+ // this.Bio = bio;
+ // this.Icon = icon;
+ // Skills= new List();
+ // //Skins = new ReadOnlyCollection(skins);
+ //}
public override string ToString()
{
@@ -53,5 +68,15 @@ namespace EntityFramework
public void RemoveSkill(SkillEntity skill)
=> Skills.Remove(skill);
+
+ public bool AddSkin(SkinEntity skin)
+ {
+ if (skins.Contains(skin))
+ return false;
+ skins.Add(skin);
+ return true;
+ }
+
+
}
}
diff --git a/Sources/EntityFramework/EntityFramework.csproj b/Sources/EntityFramework/EntityFramework.csproj
index 2d1f7fc..358fe36 100644
--- a/Sources/EntityFramework/EntityFramework.csproj
+++ b/Sources/EntityFramework/EntityFramework.csproj
@@ -1,4 +1,4 @@
-
+
Exe
@@ -8,6 +8,14 @@
$(MSBuildProjectDirectory)
+
+
+
+
+
+
+
+
@@ -18,6 +26,7 @@
+
diff --git a/Sources/EntityFramework/LargeImageEntity.cs b/Sources/EntityFramework/LargeImageEntity.cs
new file mode 100644
index 0000000..b925a83
--- /dev/null
+++ b/Sources/EntityFramework/LargeImageEntity.cs
@@ -0,0 +1,22 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.ComponentModel.DataAnnotations;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EntityFramework
+{
+
+ public class LargeImageEntity
+ {
+ public int Id { get; set; }
+ public string Base64 { get; set; }
+
+ //public LargeImageEntity(string base64)
+ //{
+ // Base64 = base64;
+ //}
+ }
+}
diff --git a/Sources/EntityFramework/LoLDbContext.cs b/Sources/EntityFramework/LoLDbContext.cs
index 7d61851..003ff03 100644
--- a/Sources/EntityFramework/LoLDbContext.cs
+++ b/Sources/EntityFramework/LoLDbContext.cs
@@ -11,6 +11,11 @@ namespace EntityFramework
{
public DbSet Champions { get; set; }
+ public DbSet Skins { get; set; }
+
+ public DbSet Image { get; set; }
+
+
public LoLDbContext()
{ }
@@ -30,7 +35,7 @@ namespace EntityFramework
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity().HasKey(entity => entity.Name);
- modelBuilder.Entity().ToTable("Champion");
+ modelBuilder.Entity().ToTable("Champions");
//modelBuilder.Entity().Property(entity => entity.Id)
// .ValueGeneratedOnAdd();
@@ -46,7 +51,25 @@ namespace EntityFramework
modelBuilder.Entity().Property(entity => entity.Icon)
.IsRequired();
-
+
+
+
+ /// One to many
+ /// ChampionEntity 1 ---> * SkinEntity
+ //création de la table Skin
+ modelBuilder.Entity().HasKey(skin => skin.Name); //définition de la clé primaire
+ modelBuilder.Entity().Property(skin => skin.Name)
+ .ValueGeneratedOnAdd(); //définition du mode de génération de la clé : génération à l'insertion
+
+ // Add the shadow property to the model
+ modelBuilder.Entity()
+ .Property("ChampionEntityForeignKey");
+
+ // Use the shadow property as a foreign key
+ modelBuilder.Entity()
+ .HasOne(skin => skin.Champion)
+ .WithMany(champion => champion.skins)
+ .HasForeignKey("ChampionEntityForeignKey");
}
}
diff --git a/Sources/EntityFramework/Manager/EFDataManager.Champions.cs b/Sources/EntityFramework/Manager/EFDataManager.Champions.cs
new file mode 100644
index 0000000..e784096
--- /dev/null
+++ b/Sources/EntityFramework/Manager/EFDataManager.Champions.cs
@@ -0,0 +1,159 @@
+using EntityFramework.Mapper;
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+
+namespace EntityFramework.Manager
+{
+ public partial class EFDataManager
+ {
+ public class ChampionsManager : IChampionsManager
+ {
+ private readonly EFDataManager parent;
+
+ public ChampionsManager(EFDataManager parent)
+ {
+ this.parent = parent;
+ }
+
+ public async Task AddItem(Champion? item)
+ {
+ using(var context = new LoLDBContextWithStub())
+ {
+ if (item != null)
+ {
+ context.Add(item.ToEntity());
+ return item;
+ }
+ else
+ {
+ throw new Exception();
+ }
+ }
+ }
+
+ public Task DeleteItem(Champion? item)
+ {
+ throw new NotImplementedException();
+ }
+
+ public async Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ using(var context = new LoLDBContextWithStub() )
+ {
+ var champ = context.Champions.ToArray();
+ if (descending == false)
+ {
+ return champ.ToList().Skip(index * count).Take(count).Select(c => c.ToChampion()).OrderBy(c => c.Name);
+ }
+ else
+ {
+ return champ.ToList().Skip(index * count).Take(count).Select(c => c.ToChampion()).OrderByDescending(c => c.Name);
+ }
+ }
+ }
+
+ public Task> GetItemsByCharacteristic(string charName, int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task> GetItemsByClass(Model.ChampionClass championClass, int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ throw new NotImplementedException();
+ }
+
+ public async Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ using (var context = new LoLDBContextWithStub())
+ {
+ var champ = context.Champions.Where(c => c.Name.Contains(substring)).AsEnumerable();
+ if (descending == false)
+ {
+ return champ.Select(c => c.ToChampion()).ToList().Skip(index * count).Take(count).OrderBy(c=> c.Name);
+
+ }
+ else
+ {
+ return champ.Select(c => c.ToChampion()).ToList().Skip(index*count).Take(count).OrderByDescending(c => c.Name);
+
+ }
+
+
+
+ }
+ }
+
+ public Task> GetItemsByRunePage(RunePage? runePage, int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task> GetItemsBySkill(Skill? skill, int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ throw new NotImplementedException();
+ }
+
+ public async Task> GetItemsBySkill(string skill, int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ using(var context = new LoLDBContextWithStub())
+ {
+ var champ = context.Champions.Where(c => c.Skills.Any(c => c.Name.Contains(skill)));
+ if (descending.Equals(false))
+ {
+ return champ.Select(c=> c.ToChampion()).ToList().Skip(index * count).Take(count).OrderBy(c => c.Name);
+
+ }
+ else
+ {
+ return champ.Select(c => c.ToChampion()).ToList().Skip(index * count).Take(count).OrderByDescending(c => c.Name);
+ }
+ }
+ }
+
+ public Task GetNbItems()
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task GetNbItemsByCharacteristic(string charName)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task GetNbItemsByClass(Model.ChampionClass championClass)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task GetNbItemsByName(string substring)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task GetNbItemsByRunePage(RunePage? runePage)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task GetNbItemsBySkill(Skill? skill)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task GetNbItemsBySkill(string skill)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task UpdateItem(Champion? oldItem, Champion? newItem)
+ {
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
diff --git a/Sources/EntityFramework/Manager/EFDataManager.Skins.cs b/Sources/EntityFramework/Manager/EFDataManager.Skins.cs
new file mode 100644
index 0000000..bed5678
--- /dev/null
+++ b/Sources/EntityFramework/Manager/EFDataManager.Skins.cs
@@ -0,0 +1,85 @@
+using EntityFramework.Mapper;
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EntityFramework.Manager
+{
+ public partial class EFDataManager
+ {
+ public class SkinsManager : ISkinsManager
+ {
+ private readonly EFDataManager parent;
+
+ public SkinsManager(EFDataManager parent)
+ {
+ this.parent = parent;
+ }
+
+ public Task AddItem(Skin? item)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task DeleteItem(Skin? item)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task> GetItems(int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ throw new NotImplementedException();
+ }
+
+ public async Task> GetItemsByChampion(Champion? champion, int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ using (var context = new LoLDBContextWithStub())
+ {
+ var skins = context.Skins.Where(c => c.Champion.Equals(champion)).ToList();
+
+ if (descending == false)
+ {
+ return skins.Select(c => c.ToSkin()).ToList().Skip(index * count).Take(count).OrderBy(c => c.Name);
+
+ }
+ else
+ {
+ return skins.Select(c => c.ToSkin()).ToList().Skip(index * count).Take(count).OrderByDescending(c => c.Name);
+
+ }
+ }
+ }
+
+ public Task> GetItemsByName(string substring, int index, int count, string? orderingPropertyName = null, bool descending = false)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task GetNbItems()
+ {
+ throw new NotImplementedException();
+ }
+
+ public async Task GetNbItemsByChampion(Champion? champion)
+ {
+ using(var context = new LoLDBContextWithStub())
+ {
+ return context.Skins.Where(c => c.Champion.Equals(champion.ToEntity())).Count();
+ }
+ }
+
+ public Task GetNbItemsByName(string substring)
+ {
+ throw new NotImplementedException();
+ }
+
+ public Task UpdateItem(Skin? oldItem, Skin? newItem)
+ {
+ throw new NotImplementedException();
+ }
+ }
+ }
+}
diff --git a/Sources/EntityFramework/Manager/EFDataManager.cs b/Sources/EntityFramework/Manager/EFDataManager.cs
new file mode 100644
index 0000000..5c5d677
--- /dev/null
+++ b/Sources/EntityFramework/Manager/EFDataManager.cs
@@ -0,0 +1,25 @@
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EntityFramework.Manager
+{
+ public partial class EFDataManager : IDataManager
+ {
+ public EFDataManager() {
+ ChampionsMgr = new ChampionsManager(this);
+ SkinsMgr = new SkinsManager(this);
+ }
+ public IChampionsManager ChampionsMgr { get; }
+
+ public ISkinsManager SkinsMgr { get; }
+
+ public IRunesManager RunesMgr { get; }
+
+ public IRunePagesManager RunePagesMgr { get; }
+
+ }
+}
diff --git a/Sources/EntityFramework/Mapper/ChampionMapper.cs b/Sources/EntityFramework/Mapper/ChampionMapper.cs
index 862264d..da146b2 100644
--- a/Sources/EntityFramework/Mapper/ChampionMapper.cs
+++ b/Sources/EntityFramework/Mapper/ChampionMapper.cs
@@ -10,7 +10,13 @@ namespace EntityFramework.Mapper
public static class ChampionMapper
{
public static ChampionEntity ToEntity(this Champion champion) {
- return new ChampionEntity(champion.Name, champion.Bio, champion.Icon);
+ return new ChampionEntity { Name = champion.Name, Bio = champion.Bio, Icon = champion.Icon };
}
+
+ public static Champion ToChampion(this ChampionEntity champion)
+ {
+ return new Champion(champion.Name,bio: champion.Bio,icon: champion.Icon);
+ }
+
}
}
diff --git a/Sources/EntityFramework/Mapper/SkinMapper.cs b/Sources/EntityFramework/Mapper/SkinMapper.cs
new file mode 100644
index 0000000..3ce09ff
--- /dev/null
+++ b/Sources/EntityFramework/Mapper/SkinMapper.cs
@@ -0,0 +1,24 @@
+using Model;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EntityFramework.Mapper
+{
+ public static class SkinMapper
+ {
+ public static SkinEntity ToEntity(this Skin skin)
+ {
+ return new SkinEntity { Champion = skin.Champion.ToEntity(), Description = skin.Description, Icon = skin.Icon, Image = skin.Image.Base64, Name = skin.Name, Price = skin.Price };
+ }
+
+ public static Skin ToSkin(this SkinEntity entity)
+ {
+ return new Skin(entity.Name,entity.Champion.ToChampion(),price: entity.Price,icon: entity.Icon, image: entity.Image,description: entity.Description);
+ }
+
+
+ }
+}
diff --git a/Sources/EntityFramework/Migrations/20230312170120_stubMig.Designer.cs b/Sources/EntityFramework/Migrations/20230312170120_stubMig.Designer.cs
deleted file mode 100644
index 2b24874..0000000
--- a/Sources/EntityFramework/Migrations/20230312170120_stubMig.Designer.cs
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-using EntityFramework;
-using Microsoft.EntityFrameworkCore;
-using Microsoft.EntityFrameworkCore.Infrastructure;
-using Microsoft.EntityFrameworkCore.Migrations;
-using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
-
-#nullable disable
-
-namespace EntityFramework.Migrations
-{
- [DbContext(typeof(LoLDBContextWithStub))]
- [Migration("20230312170120_stubMig")]
- partial class stubMig
- {
- ///
- protected override void BuildTargetModel(ModelBuilder modelBuilder)
- {
-#pragma warning disable 612, 618
- modelBuilder.HasAnnotation("ProductVersion", "7.0.2");
-
- modelBuilder.Entity("EntityFramework.ChampionEntity", b =>
- {
- b.Property("Name")
- .HasMaxLength(50)
- .HasColumnType("TEXT");
-
- b.Property("Bio")
- .IsRequired()
- .HasMaxLength(500)
- .HasColumnType("string")
- .HasColumnName("Bio");
-
- b.Property("Icon")
- .IsRequired()
- .HasColumnType("TEXT");
-
- b.HasKey("Name");
-
- b.ToTable("Champion", (string)null);
-
- b.HasData(
- new
- {
- Name = "Akali",
- Bio = "",
- Icon = ""
- },
- new
- {
- Name = "Aatrox",
- Bio = "",
- Icon = ""
- },
- new
- {
- Name = "Ahri",
- Bio = "",
- Icon = ""
- },
- new
- {
- Name = "Akshan",
- Bio = "",
- Icon = ""
- },
- new
- {
- Name = "Bard",
- Bio = "",
- Icon = ""
- },
- new
- {
- Name = "Alistar",
- Bio = "",
- Icon = ""
- });
- });
-#pragma warning restore 612, 618
- }
- }
-}
diff --git a/Sources/EntityFramework/Migrations/20230312170120_stubMig.cs b/Sources/EntityFramework/Migrations/20230312170120_stubMig.cs
deleted file mode 100644
index 3323fa4..0000000
--- a/Sources/EntityFramework/Migrations/20230312170120_stubMig.cs
+++ /dev/null
@@ -1,49 +0,0 @@
-using Microsoft.EntityFrameworkCore.Migrations;
-
-#nullable disable
-
-#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
-
-namespace EntityFramework.Migrations
-{
- ///
- public partial class stubMig : Migration
- {
- ///
- protected override void Up(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.CreateTable(
- name: "Champion",
- columns: table => new
- {
- Name = table.Column(type: "TEXT", maxLength: 50, nullable: false),
- Bio = table.Column(type: "string", maxLength: 500, nullable: false),
- Icon = table.Column(type: "TEXT", nullable: false)
- },
- constraints: table =>
- {
- table.PrimaryKey("PK_Champion", x => x.Name);
- });
-
- migrationBuilder.InsertData(
- table: "Champion",
- columns: new[] { "Name", "Bio", "Icon" },
- values: new object[,]
- {
- { "Aatrox", "", "" },
- { "Ahri", "", "" },
- { "Akali", "", "" },
- { "Akshan", "", "" },
- { "Alistar", "", "" },
- { "Bard", "", "" }
- });
- }
-
- ///
- protected override void Down(MigrationBuilder migrationBuilder)
- {
- migrationBuilder.DropTable(
- name: "Champion");
- }
- }
-}
diff --git a/Sources/EntityFramework/Migrations/20230319224555_myMig.Designer.cs b/Sources/EntityFramework/Migrations/20230319224555_myMig.Designer.cs
new file mode 100644
index 0000000..2a90b9d
--- /dev/null
+++ b/Sources/EntityFramework/Migrations/20230319224555_myMig.Designer.cs
@@ -0,0 +1,175 @@
+//
+using EntityFramework;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace EntityFramework.Migrations
+{
+ [DbContext(typeof(LoLDBContextWithStub))]
+ [Migration("20230319224555_myMig")]
+ partial class myMig
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder.HasAnnotation("ProductVersion", "7.0.2");
+
+ modelBuilder.Entity("EntityFramework.ChampionEntity", b =>
+ {
+ b.Property("Name")
+ .HasMaxLength(50)
+ .HasColumnType("TEXT");
+
+ b.Property("Bio")
+ .IsRequired()
+ .HasMaxLength(500)
+ .HasColumnType("string")
+ .HasColumnName("Bio");
+
+ b.Property("Icon")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Image")
+ .HasColumnType("TEXT");
+
+ b.HasKey("Name");
+
+ b.ToTable("Champions", (string)null);
+
+ b.HasData(
+ new
+ {
+ Name = "Akali",
+ Bio = "",
+ Icon = ""
+ },
+ new
+ {
+ Name = "Aatrox",
+ Bio = "",
+ Icon = ""
+ },
+ new
+ {
+ Name = "Ahri",
+ Bio = "",
+ Icon = ""
+ },
+ new
+ {
+ Name = "Akshan",
+ Bio = "",
+ Icon = ""
+ },
+ new
+ {
+ Name = "Bard",
+ Bio = "",
+ Icon = ""
+ },
+ new
+ {
+ Name = "Alistar",
+ Bio = "",
+ Icon = ""
+ });
+ });
+
+ modelBuilder.Entity("EntityFramework.LargeImageEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Base64")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.ToTable("Image");
+ });
+
+ modelBuilder.Entity("EntityFramework.SkillEntity", b =>
+ {
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.Property("ChampionEntityName")
+ .HasColumnType("TEXT");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Name");
+
+ b.HasIndex("ChampionEntityName");
+
+ b.ToTable("SkillEntity");
+ });
+
+ modelBuilder.Entity("EntityFramework.SkinEntity", b =>
+ {
+ b.Property("Name")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("ChampionEntityForeignKey")
+ .HasColumnType("TEXT");
+
+ b.Property("Description")
+ .HasColumnType("TEXT");
+
+ b.Property("Icon")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Image")
+ .HasColumnType("TEXT");
+
+ b.Property("Price")
+ .HasColumnType("REAL");
+
+ b.HasKey("Name");
+
+ b.HasIndex("ChampionEntityForeignKey");
+
+ b.ToTable("Skins");
+ });
+
+ modelBuilder.Entity("EntityFramework.SkillEntity", b =>
+ {
+ b.HasOne("EntityFramework.ChampionEntity", null)
+ .WithMany("Skills")
+ .HasForeignKey("ChampionEntityName");
+ });
+
+ modelBuilder.Entity("EntityFramework.SkinEntity", b =>
+ {
+ b.HasOne("EntityFramework.ChampionEntity", "Champion")
+ .WithMany("skins")
+ .HasForeignKey("ChampionEntityForeignKey");
+
+ b.Navigation("Champion");
+ });
+
+ modelBuilder.Entity("EntityFramework.ChampionEntity", b =>
+ {
+ b.Navigation("Skills");
+
+ b.Navigation("skins");
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/Sources/EntityFramework/Migrations/20230319224555_myMig.cs b/Sources/EntityFramework/Migrations/20230319224555_myMig.cs
new file mode 100644
index 0000000..0e61c80
--- /dev/null
+++ b/Sources/EntityFramework/Migrations/20230319224555_myMig.cs
@@ -0,0 +1,122 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional
+
+namespace EntityFramework.Migrations
+{
+ ///
+ public partial class myMig : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Champions",
+ columns: table => new
+ {
+ Name = table.Column(type: "TEXT", maxLength: 50, nullable: false),
+ Bio = table.Column(type: "string", maxLength: 500, nullable: false),
+ Icon = table.Column(type: "TEXT", nullable: false),
+ Image = table.Column(type: "TEXT", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Champions", x => x.Name);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Image",
+ columns: table => new
+ {
+ Id = table.Column(type: "INTEGER", nullable: false)
+ .Annotation("Sqlite:Autoincrement", true),
+ Base64 = table.Column(type: "TEXT", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Image", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "SkillEntity",
+ columns: table => new
+ {
+ Name = table.Column(type: "TEXT", nullable: false),
+ Type = table.Column(type: "INTEGER", nullable: false),
+ Description = table.Column(type: "TEXT", nullable: false),
+ ChampionEntityName = table.Column(type: "TEXT", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_SkillEntity", x => x.Name);
+ table.ForeignKey(
+ name: "FK_SkillEntity_Champions_ChampionEntityName",
+ column: x => x.ChampionEntityName,
+ principalTable: "Champions",
+ principalColumn: "Name");
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Skins",
+ columns: table => new
+ {
+ Name = table.Column(type: "TEXT", nullable: false),
+ Description = table.Column(type: "TEXT", nullable: true),
+ Icon = table.Column(type: "TEXT", nullable: false),
+ Image = table.Column(type: "TEXT", nullable: true),
+ Price = table.Column(type: "REAL", nullable: false),
+ ChampionEntityForeignKey = table.Column(type: "TEXT", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Skins", x => x.Name);
+ table.ForeignKey(
+ name: "FK_Skins_Champions_ChampionEntityForeignKey",
+ column: x => x.ChampionEntityForeignKey,
+ principalTable: "Champions",
+ principalColumn: "Name");
+ });
+
+ migrationBuilder.InsertData(
+ table: "Champions",
+ columns: new[] { "Name", "Bio", "Icon", "Image" },
+ values: new object[,]
+ {
+ { "Aatrox", "", "", null },
+ { "Ahri", "", "", null },
+ { "Akali", "", "", null },
+ { "Akshan", "", "", null },
+ { "Alistar", "", "", null },
+ { "Bard", "", "", null }
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_SkillEntity_ChampionEntityName",
+ table: "SkillEntity",
+ column: "ChampionEntityName");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Skins_ChampionEntityForeignKey",
+ table: "Skins",
+ column: "ChampionEntityForeignKey");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Image");
+
+ migrationBuilder.DropTable(
+ name: "SkillEntity");
+
+ migrationBuilder.DropTable(
+ name: "Skins");
+
+ migrationBuilder.DropTable(
+ name: "Champions");
+ }
+ }
+}
diff --git a/Sources/EntityFramework/Migrations/LoLDBContextWithStubModelSnapshot.cs b/Sources/EntityFramework/Migrations/LoLDBContextWithStubModelSnapshot.cs
index ba61c51..e00a86a 100644
--- a/Sources/EntityFramework/Migrations/LoLDBContextWithStubModelSnapshot.cs
+++ b/Sources/EntityFramework/Migrations/LoLDBContextWithStubModelSnapshot.cs
@@ -32,9 +32,12 @@ namespace EntityFramework.Migrations
.IsRequired()
.HasColumnType("TEXT");
+ b.Property("Image")
+ .HasColumnType("TEXT");
+
b.HasKey("Name");
- b.ToTable("Champion", (string)null);
+ b.ToTable("Champions", (string)null);
b.HasData(
new
@@ -74,6 +77,95 @@ namespace EntityFramework.Migrations
Icon = ""
});
});
+
+ modelBuilder.Entity("EntityFramework.LargeImageEntity", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("INTEGER");
+
+ b.Property("Base64")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.HasKey("Id");
+
+ b.ToTable("Image");
+ });
+
+ modelBuilder.Entity("EntityFramework.SkillEntity", b =>
+ {
+ b.Property("Name")
+ .HasColumnType("TEXT");
+
+ b.Property("ChampionEntityName")
+ .HasColumnType("TEXT");
+
+ b.Property("Description")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Type")
+ .HasColumnType("INTEGER");
+
+ b.HasKey("Name");
+
+ b.HasIndex("ChampionEntityName");
+
+ b.ToTable("SkillEntity");
+ });
+
+ modelBuilder.Entity("EntityFramework.SkinEntity", b =>
+ {
+ b.Property("Name")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TEXT");
+
+ b.Property("ChampionEntityForeignKey")
+ .HasColumnType("TEXT");
+
+ b.Property("Description")
+ .HasColumnType("TEXT");
+
+ b.Property("Icon")
+ .IsRequired()
+ .HasColumnType("TEXT");
+
+ b.Property("Image")
+ .HasColumnType("TEXT");
+
+ b.Property("Price")
+ .HasColumnType("REAL");
+
+ b.HasKey("Name");
+
+ b.HasIndex("ChampionEntityForeignKey");
+
+ b.ToTable("Skins");
+ });
+
+ modelBuilder.Entity("EntityFramework.SkillEntity", b =>
+ {
+ b.HasOne("EntityFramework.ChampionEntity", null)
+ .WithMany("Skills")
+ .HasForeignKey("ChampionEntityName");
+ });
+
+ modelBuilder.Entity("EntityFramework.SkinEntity", b =>
+ {
+ b.HasOne("EntityFramework.ChampionEntity", "Champion")
+ .WithMany("skins")
+ .HasForeignKey("ChampionEntityForeignKey");
+
+ b.Navigation("Champion");
+ });
+
+ modelBuilder.Entity("EntityFramework.ChampionEntity", b =>
+ {
+ b.Navigation("Skills");
+
+ b.Navigation("skins");
+ });
#pragma warning restore 612, 618
}
}
diff --git a/Sources/EntityFramework/Program.cs b/Sources/EntityFramework/Program.cs
index 65ef614..8c67f3f 100644
--- a/Sources/EntityFramework/Program.cs
+++ b/Sources/EntityFramework/Program.cs
@@ -1,37 +1,86 @@
// See https://aka.ms/new-console-template for more information
using EntityFramework;
+using EntityFramework.Manager;
+using Microsoft.EntityFrameworkCore;
+using Model;
-using( var context = new LoLDbContext())
-{
- context.Add(new ChampionEntity("test","test","test") );
- context.SaveChanges();
+IDataManager dataManager = new EFDataManager();
+IChampionsManager championsManager = dataManager.ChampionsMgr;
+IEnumerable champions = await championsManager.GetItemsByName("A", 0, 1);
+Console.WriteLine(champions.First().Name);
- ChampionEntity champ = context.Find(1);
- if( champ != null)
- {
- Console
- .WriteLine(champ.ToString());
+//using ( var context = new LoLDbContext())
+//{
+// //context.Add(new ChampionEntity{ Name = "test", Bio = "test", Icon = "test" } );
+// context.SaveChanges();
- }
- else
- {
- Console.WriteLine("Not Found");
- }
+// ChampionEntity champ = context.Find("Akali");
- //Test BDD Skills
- ChampionEntity champSkill = new ChampionEntity("nomSkill", "bioSkill", "iconSkill");
+// if( champ != null)
+// {
+// Console
+// .WriteLine(champ.ToString());
- SkillEntity s1 = new SkillEntity("Skill1", "desc", SkillType.Unknown);
- SkillEntity s2 = new SkillEntity("Skill2", "desc2", SkillType.Ultimate);
- SkillEntity s3 = new SkillEntity("Skill3", "desc3", SkillType.Passive);
+// }
+// else
+// {
+// Console.WriteLine("Not Found");
+// }
- champSkill.AddSkill(s1);
- champSkill.AddSkill(s2);
- champSkill.AddSkill(s3);
+// //Test BDD Skills
+// ChampionEntity champSkill = new ChampionEntity { Name="nomSkill", Bio="bioSkill", Icon="iconSkill" };
- context.Add(champSkill);
-
- context.SaveChanges();
+// //SkillEntity s1 = new SkillEntity { Name = "Skill1", Description = "desc", Type = SkillType.Unknown };
+// SkillEntity s2 = new SkillEntity { Name="Skill2", Description="desc2", Type=SkillType.Ultimate };
+// SkillEntity s3 = new SkillEntity { Name = "Skill3", Description = "desc3", Type = SkillType.Passive };
-}
+// champSkill.AddSkill(new SkillEntity { Name = "Skill1", Description = "desc", Type = SkillType.Unknown });
+// champSkill.AddSkill(s2);
+// champSkill.AddSkill(s3);
+
+// context.Add(champSkill);
+
+// context.SaveChanges();
+
+
+// //OneToMany
+// Console.WriteLine("Champions : ");
+// foreach (var champi in context.Champions.Include(a => a.skins))
+// {
+// Console.WriteLine($"\t{champi.Name} : {champi.Bio}");
+// foreach (var s in champi.skins)
+// {
+// Console.WriteLine($"\t\t{s.Name}");
+// }
+// }
+
+// Console.WriteLine();
+
+// Console.WriteLine("Skin :");
+// foreach (var s in context.Skins)
+// {
+// Console.WriteLine($"\t{s.Name}: {s.Description} (Champion : {s.Champion.Name})");
+// }
+
+
+// Console.WriteLine("\nAjout d'un Champion et 6 Skins...\n");
+
+// ChampionEntity captainMarvel = new ChampionEntity { Name = "Captain Marvel", Bio="Mais que fait un avenger ici ??", Icon="Icon.png"};
+// SkinEntity[] skins = { new SkinEntity {Name = "La Fiesta", Champion = captainMarvel},
+// new SkinEntity { Name = "Five Hundred Miles High", Champion = captainMarvel },
+// new SkinEntity { Name = "Captain Marvel", Champion = captainMarvel },
+// new SkinEntity { Name = "Time's Lie", Champion = captainMarvel },
+// new SkinEntity { Name = "Lush Life", Champion = captainMarvel },
+// new SkinEntity { Name = "Day Waves", Champion = captainMarvel }
+// };
+// foreach (var s in skins)
+// {
+// captainMarvel.skins.Add(s);
+// }
+
+// context.Add(captainMarvel);
+// context.SaveChanges();
+
+
+//}
diff --git a/Sources/EntityFramework/SkillEntity.cs b/Sources/EntityFramework/SkillEntity.cs
index d370410..505a427 100644
--- a/Sources/EntityFramework/SkillEntity.cs
+++ b/Sources/EntityFramework/SkillEntity.cs
@@ -10,42 +10,44 @@ namespace EntityFramework
public class SkillEntity
{
- public SkillType Type { get; private set; }
+ public SkillType Type { get; set; }
[Key]
- public string Name
- {
- get => name;
- private init
- {
- if (string.IsNullOrWhiteSpace(value))
- {
- throw new ArgumentException("a Skill needs a name");
- }
- name = value;
- }
- }
- private readonly string name = null!;
+ public string Name { get; set; }
+ //public string Name
+ //{
+ // get => name;
+ // private init
+ // {
+ // if (string.IsNullOrWhiteSpace(value))
+ // {
+ // throw new ArgumentException("a Skill needs a name");
+ // }
+ // name = value;
+ // }
+ //}
+ //private readonly string name = null!;
- public string Description
- {
- get => description;
- set
- {
- if (string.IsNullOrWhiteSpace(value))
- {
- description = "";
- return;
- }
- description = value;
- }
- }
- private string description = "";
+ public string Description { get; set; }
+ //public string Description
+ //{
+ // get => description;
+ // set
+ // {
+ // if (string.IsNullOrWhiteSpace(value))
+ // {
+ // description = "";
+ // return;
+ // }
+ // description = value;
+ // }
+ //}
+ //private string description = "";
- public SkillEntity(string Name, string Description, SkillType Type) {
- this.name = Name;
- this.Description = Description;
- this.Type = Type;
- }
+ //public SkillEntity(string Name, string Description, SkillType Type) {
+ // this.name = Name;
+ // this.Description = Description;
+ // this.Type = Type;
+ //}
}
}
diff --git a/Sources/EntityFramework/SkinEntity.cs b/Sources/EntityFramework/SkinEntity.cs
new file mode 100644
index 0000000..e9650b3
--- /dev/null
+++ b/Sources/EntityFramework/SkinEntity.cs
@@ -0,0 +1,79 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EntityFramework
+{
+ public class SkinEntity //ONE TO MANY
+ {
+
+ public string? Name { get; set; }
+
+ public string? Description { get; set; }
+
+ //public string Name
+ //{
+ // get => name;
+ // private init
+ // {
+ // if (string.IsNullOrWhiteSpace(value))
+ // {
+ // throw new ArgumentException("A skin must have a name");
+ // }
+ // name = value;
+ // }
+ //}
+ //private readonly string name = null!;
+
+ //public string Description
+ //{
+ // get => description;
+ // set
+ // {
+ // if (string.IsNullOrWhiteSpace(value))
+ // {
+ // description = "";
+ // return;
+ // }
+ // description = value;
+ // }
+ //}
+ //private string description = "";
+
+ public string Icon { get; set; } = "";
+
+
+ //public LargeImageEntity Image { get; set; }
+ public string? Image { get; set; }
+
+
+ public float Price { get; set; }
+ public ChampionEntity Champion { get; set; }
+
+
+ //public ChampionEntity Champion
+ //{
+ // get => champion;
+ // private init
+ // {
+ // if (value == null)
+ // throw new ArgumentNullException("A skill can't have a null champion");
+ // champion = value;
+ // }
+ //}
+ //private readonly ChampionEntity champion = null!;
+
+ //public SkinEntity(string name, ChampionEntity champion, float price = 0.0f, string icon = "", string image = "", string description = "")
+ //{
+ // Name = name;
+ // Champion = champion;
+ // //Champion.AddSkin(this);
+ // Price = price;
+ // Icon = icon;
+ // Image = new LargeImageEntity(image);
+ // Description = description;
+ //}
+ }
+}
diff --git a/Sources/EntityFramework/StubbedContext.cs b/Sources/EntityFramework/StubbedContext.cs
new file mode 100644
index 0000000..833f0c7
--- /dev/null
+++ b/Sources/EntityFramework/StubbedContext.cs
@@ -0,0 +1,44 @@
+using Microsoft.EntityFrameworkCore;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace EntityFramework
+{
+ public class StubbedContext : LoLDbContext
+ {
+ //protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ //{
+ // optionsBuilder.EnableSensitiveDataLogging();
+ //}
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ base.OnModelCreating(modelBuilder);
+
+ ChampionEntity corichard = new ChampionEntity {Name="Corichard", Bio="biobiobiobio", Icon="/a/a/a/a"};
+ ChampionEntity pintrand = new ChampionEntity {Name = "Pintrand", Bio = "mimimimimim", Icon = "/small.png" };
+
+ //ChampionEntity corichard = new ChampionEntity() { Name = "Corichard", Bio = "biobiobiobio", Icon = "/a/a/a/a", Image = new LargeImageEntity { Base64 = "base" } };
+ //ChampionEntity pintrand = new ChampionEntity { Name = "Pintrand", Bio = "mimimimimim", Icon = "/small.png", Image = new LargeImageEntity { Base64 = "base" } };
+
+ modelBuilder.Entity().HasData(corichard, pintrand);
+
+ modelBuilder.Entity().HasData(new { Name = "aaaa", ChampionEntityForeignKey = "Corichard", Description = "So What", Icon="/Icon.png", Price=10.0f },
+ new { Name = "skin", ChampionEntityForeignKey = "Corichard", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "bo", ChampionEntityForeignKey = "Corichard", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "Joulie", ChampionEntityForeignKey = "Corichard", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "Radiance", ChampionEntityForeignKey = "Corichard", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "void", ChampionEntityForeignKey = "Corichard", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "Radiance", ChampionEntityForeignKey = "Pintrand", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "void", ChampionEntityForeignKey = "Pintrand", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "DarkTheme", ChampionEntityForeignKey = "Pintrand", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "gold", ChampionEntityForeignKey = "Pintrand", Description = "So What", Icon = "/Icon.png", Price = 10.0f },
+ new { Name = "ruby", ChampionEntityForeignKey = "Pintrand", Description = "So What", Icon = "/Icon.png", Price = 10.0f }
+ );
+ }
+
+ }
+}
diff --git a/Sources/EntityFramework/champion.db b/Sources/EntityFramework/champion.db
index b0ff12d..d6b07a7 100644
Binary files a/Sources/EntityFramework/champion.db and b/Sources/EntityFramework/champion.db differ