From 7694c94feb5db6141371d1f480bed4e55c61d064 Mon Sep 17 00:00:00 2001 From: Kevin MONDEJAR Date: Fri, 14 Mar 2025 11:58:33 +0100 Subject: [PATCH 1/8] test many to many non fonctionel --- WF_EF_Api/Contextlib/Contextlib.csproj | 1 + WF_EF_Api/Contextlib/DbCharacterManager.cs | 11 +- WF_EF_Api/Contextlib/DbCommentaryManager.cs | 111 ++++++++++++++++++ WF_EF_Api/Contextlib/WTFContext.cs | 26 +++- WF_EF_Api/Entity/Favorite.cs | 8 -- WF_EF_Api/Entity/Question.cs | 2 +- WF_EF_Api/Entity/QuizQuestion.cs | 8 -- WF_EF_Api/Entity/Quote.cs | 2 +- WF_EF_Api/Entity/Users.cs | 2 +- WF_EF_Api/Shared/IComentaryService.cs | 2 +- WF_EF_Api/StubbedContextLib/StubWTFContext.cs | 6 +- 11 files changed, 143 insertions(+), 36 deletions(-) create mode 100644 WF_EF_Api/Contextlib/DbCommentaryManager.cs diff --git a/WF_EF_Api/Contextlib/Contextlib.csproj b/WF_EF_Api/Contextlib/Contextlib.csproj index 805901c..d2b9100 100644 --- a/WF_EF_Api/Contextlib/Contextlib.csproj +++ b/WF_EF_Api/Contextlib/Contextlib.csproj @@ -22,6 +22,7 @@ + diff --git a/WF_EF_Api/Contextlib/DbCharacterManager.cs b/WF_EF_Api/Contextlib/DbCharacterManager.cs index 65f19e9..db1a7c0 100644 --- a/WF_EF_Api/Contextlib/DbCharacterManager.cs +++ b/WF_EF_Api/Contextlib/DbCharacterManager.cs @@ -13,10 +13,6 @@ namespace Contextlib { private WTFContext _context; - /// - /// Initializes a new instance of the class. - /// - /// The instance used to interact with the database. public DbCharacterManager(WTFContext context) { _context = context ?? throw new ArgumentNullException(nameof(context), "Database context cannot be null."); @@ -47,12 +43,7 @@ namespace Contextlib { List charLst = _context.characters.ToList(); - return Task.FromResult(new PaginationResult( - charLst.Count, // Total count of characters in the database - 0, // Current page (in this case, no pagination logic implemented) - charLst.Count, // Total number of items (same as count for no pagination) - charLst // The list of characters - )); + return Task.FromResult(new PaginationResult(charLst.Count, 0, charLst.Count, charLst)); } /// diff --git a/WF_EF_Api/Contextlib/DbCommentaryManager.cs b/WF_EF_Api/Contextlib/DbCommentaryManager.cs new file mode 100644 index 0000000..85c7ac8 --- /dev/null +++ b/WF_EF_Api/Contextlib/DbCommentaryManager.cs @@ -0,0 +1,111 @@ +using Entity; +using Microsoft.EntityFrameworkCore; +using Shared; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Contextlib +{ + public class DbCommentManager : ICommentService + { + private WTFContext _context; + + public DbCommentManager(WTFContext context) + { + _context = context ?? throw new ArgumentNullException(nameof(context), "Database context cannot be null."); + } + + /// + /// Adds a new comment to the database. + /// + /// The comment to add. + /// A task representing the asynchronous operation. + /// Thrown when the comment is null. + public async Task AddComment(Commentary comment) + { + if (comment == null) + { + throw new ArgumentNullException(nameof(comment), "Comment cannot be null."); + } + + await _context.comments.AddAsync(comment); + await _context.SaveChangesAsync(); + } + + /// + /// Deletes all comments associated with a specific quote ID from the database. + /// + /// The ID of the quote whose comments need to be deleted. + /// A task representing the asynchronous operation. + /// Thrown when no comments are found for the provided quote ID. + public async Task DeleteCommentForQuote(int quoteId) + { + // Retrieve comments for the specific quoteId + var comments = await _context.comments.Where(x => x.IdQuote == quoteId).ToListAsync(); + if (!comments.Any()) // If no comments exist for this quoteId + { + throw new KeyNotFoundException($"No comments found for the quote ID: {quoteId}."); + } + + _context.comments.RemoveRange(comments); // Efficiently remove all comments in one batch + await _context.SaveChangesAsync(); + } + + /// + /// Deletes all comments associated with a specific user ID from the database. + /// + /// The ID of the user whose comments need to be deleted. + /// A task representing the asynchronous operation. + /// Thrown when no comments are found for the provided user ID. + public async Task DeleteCommentForUser(int userId) + { + // Retrieve comments for the specific userId + var comments = await _context.comments.Where(x => x.IdUsers == userId).ToListAsync(); + if (!comments.Any()) // If no comments exist for this userId + { + throw new KeyNotFoundException($"No comments found for the user ID: {userId}."); + } + + _context.comments.RemoveRange(comments); // Efficiently remove all comments in one batch + await _context.SaveChangesAsync(); + } + + public async Task> GetAllComment() + { + throw new NotImplementedException(); + } + + public async Task GetCommentById(int id) + { + throw new NotImplementedException(); + } + + public async Task> GetCommentByQuote(int quoteId, int index, int pageSize) + { + throw new NotImplementedException(); + } + + public async Task> GetCommentByUser(int userId, int index, int pageSize) + { + throw new NotImplementedException(); + } + + public async Task LastCommentId() + { + throw new NotImplementedException(); + } + + public async Task RemoveComment(int id) + { + throw new NotImplementedException(); + } + + public async Task UpdateComment(int id, Commentary comment) + { + throw new NotImplementedException(); + } + } +} diff --git a/WF_EF_Api/Contextlib/WTFContext.cs b/WF_EF_Api/Contextlib/WTFContext.cs index 02880c7..ad5e4e5 100644 --- a/WF_EF_Api/Contextlib/WTFContext.cs +++ b/WF_EF_Api/Contextlib/WTFContext.cs @@ -10,20 +10,40 @@ namespace Contextlib { public class WTFContext : DbContext { - public DbSet admins { get; set; } + //public DbSet admins { get; set; } public DbSet characters { get; set; } public DbSet comments { get; set; } public DbSet dailyquotes { get; set; } - public DbSet favorites { get; set; } + //public DbSet favorites { get; set; } public DbSet images { get; set; } public DbSet question { get; set; } public DbSet quizzes { get; set; } - public DbSet quizQuestions { get; set; } + //public DbSet quizQuestions { get; set; } public DbSet quotes { get; set; } //public DbSet records { get; set; } public DbSet sources { get; set; } public DbSet users { get; set; } + protected override void OnModelCreating(ModelBuilder modelBuilder) + { + base.OnModelCreating(modelBuilder); + + modelBuilder.Entity() + .HasMany(q => q.Favorite) + .WithMany(u => u.Favorite) + .UsingEntity( + l => l.HasOne().WithMany().HasForeignKey(q => q.IdQuote), + r => r.HasOne().WithMany().HasForeignKey(u => u.IdUsers) + ); + + modelBuilder.Entity() + .HasMany(q => q.Questions) + .WithMany(u => u.Quizs) + .UsingEntity( + l => l.HasOne().WithMany().HasForeignKey(q => q.IdQuestion), + r => r.HasOne().WithMany().HasForeignKey(u => u.IdQuiz) + ); + } protected override void OnConfiguring(DbContextOptionsBuilder options) => options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=WfDatabase.mdf;Trusted_Connection=True;"); diff --git a/WF_EF_Api/Entity/Favorite.cs b/WF_EF_Api/Entity/Favorite.cs index 51165d5..ec60347 100644 --- a/WF_EF_Api/Entity/Favorite.cs +++ b/WF_EF_Api/Entity/Favorite.cs @@ -10,16 +10,8 @@ namespace Entity { public class Favorite { - [Key] - [ForeignKey(nameof(Users))] public int IdUsers { get; set; } - [Key] - [ForeignKey(nameof(Quote))] public int IdQuote { get; set; } - - public Users User { get; set; } = null!; - - public Quote Quote { get; set; } = null!; } } diff --git a/WF_EF_Api/Entity/Question.cs b/WF_EF_Api/Entity/Question.cs index df66009..036747d 100644 --- a/WF_EF_Api/Entity/Question.cs +++ b/WF_EF_Api/Entity/Question.cs @@ -38,6 +38,6 @@ namespace Entity [StringLength(1)] public string CorrectAnswer { get; set; } - public ICollection Quizs { get; } = new List(); + public ICollection Quizs { get; set; } = new List(); } } diff --git a/WF_EF_Api/Entity/QuizQuestion.cs b/WF_EF_Api/Entity/QuizQuestion.cs index eaf51c3..5e7086b 100644 --- a/WF_EF_Api/Entity/QuizQuestion.cs +++ b/WF_EF_Api/Entity/QuizQuestion.cs @@ -10,16 +10,8 @@ namespace Entity { public class QuizQuestion { - [Key] - [ForeignKey(nameof(Quiz))] public int IdQuiz { get; set; } - [Key] - [ForeignKey(nameof(Question))] public int IdQuestion { get; set; } - - public Quiz Quiz { get; set; } = null!; - - public Question Question { get; set; } = null!; } } diff --git a/WF_EF_Api/Entity/Quote.cs b/WF_EF_Api/Entity/Quote.cs index adc1dd8..e91cd13 100644 --- a/WF_EF_Api/Entity/Quote.cs +++ b/WF_EF_Api/Entity/Quote.cs @@ -43,6 +43,6 @@ namespace Entity public ICollection commentaries { get; set; } = new List(); - public ICollection Favorite { get; set; } = new List(); + public ICollection Favorite { get; } = new List(); } } diff --git a/WF_EF_Api/Entity/Users.cs b/WF_EF_Api/Entity/Users.cs index 81aa506..80e38a7 100644 --- a/WF_EF_Api/Entity/Users.cs +++ b/WF_EF_Api/Entity/Users.cs @@ -39,6 +39,6 @@ namespace Entity public ICollection Commentary { get; set; } = new List(); - public ICollection Favorite { get; set; } = new List(); + public ICollection Favorite { get; set; } = new List(); } } diff --git a/WF_EF_Api/Shared/IComentaryService.cs b/WF_EF_Api/Shared/IComentaryService.cs index 2cf4fe1..d5c4fc6 100644 --- a/WF_EF_Api/Shared/IComentaryService.cs +++ b/WF_EF_Api/Shared/IComentaryService.cs @@ -46,7 +46,7 @@ namespace Shared // Deletes all comments made by a specific user. // 'userId' is the unique identifier of the user whose comments will be deleted. - Task DeleteCommentForuser(int userId); + Task DeleteCommentForUser(int userId); // Retrieves the last comment ID. Task LastCommentId(); diff --git a/WF_EF_Api/StubbedContextLib/StubWTFContext.cs b/WF_EF_Api/StubbedContextLib/StubWTFContext.cs index 8fda1c6..bd533d8 100644 --- a/WF_EF_Api/StubbedContextLib/StubWTFContext.cs +++ b/WF_EF_Api/StubbedContextLib/StubWTFContext.cs @@ -15,9 +15,9 @@ namespace StubbedContextLib { base.OnModelCreating(modelBuilder); - modelBuilder.Entity().HasData( + /*modelBuilder.Entity().HasData( new Admin() { IdUsers = 1 } - ); + );*/ modelBuilder.Entity().HasData( new Character() { Id = 1 , Name = "Alan Grant", IdImage = 1}, @@ -111,7 +111,7 @@ namespace StubbedContextLib new Quote() { Id = 10, Content = "La quoi ?", IdCharacter = 10 , IdSource = 4 , IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 } ); - + modelBuilder.Entity().HasData( new Source() { Id = 1, Title = "Jurassic Park", TypeSrc = TypeSrcEnum.movie, Year = 1993 }, new Source() { Id = 2, Title = "Le Seigneur des anneaux : La Communauté de l'anneau", TypeSrc = TypeSrcEnum.movie, Year = 2001 }, -- 2.36.3 From 502eba2552aad3e6aa19f4473373835ecc29a3e1 Mon Sep 17 00:00:00 2001 From: Kevin MONDEJAR Date: Fri, 14 Mar 2025 12:23:17 +0100 Subject: [PATCH 2/8] J'y suis presque --- WF_EF_Api/Contextlib/WTFContext.cs | 17 +- WF_EF_Api/Entity/Favorite.cs | 4 + WF_EF_Api/Entity/Question.cs | 2 +- WF_EF_Api/Entity/Quote.cs | 6 + ...0250312160314_myFirstMigration.Designer.cs | 205 ---- .../20250312160314_myFirstMigration.cs | 149 --- .../20250312162514_migr2.Designer.cs | 248 ---- .../Migrations/20250312162514_migr2.cs | 89 -- .../20250314112216_migrationTest1.Designer.cs | 1071 +++++++++++++++++ .../20250314112216_migrationTest1.cs | 501 ++++++++ .../Migrations/StubWTFContextModelSnapshot.cs | 885 +++++++++++++- WF_EF_Api/StubbedContextLib/StubWTFContext.cs | 97 +- 12 files changed, 2500 insertions(+), 774 deletions(-) delete mode 100644 WF_EF_Api/StubbedContextLib/Migrations/20250312160314_myFirstMigration.Designer.cs delete mode 100644 WF_EF_Api/StubbedContextLib/Migrations/20250312160314_myFirstMigration.cs delete mode 100644 WF_EF_Api/StubbedContextLib/Migrations/20250312162514_migr2.Designer.cs delete mode 100644 WF_EF_Api/StubbedContextLib/Migrations/20250312162514_migr2.cs create mode 100644 WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.Designer.cs create mode 100644 WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.cs diff --git a/WF_EF_Api/Contextlib/WTFContext.cs b/WF_EF_Api/Contextlib/WTFContext.cs index ad5e4e5..f98290d 100644 --- a/WF_EF_Api/Contextlib/WTFContext.cs +++ b/WF_EF_Api/Contextlib/WTFContext.cs @@ -14,7 +14,7 @@ namespace Contextlib public DbSet characters { get; set; } public DbSet comments { get; set; } public DbSet dailyquotes { get; set; } - //public DbSet favorites { get; set; } + public DbSet favorites { get; set; } public DbSet images { get; set; } public DbSet question { get; set; } public DbSet quizzes { get; set; } @@ -32,10 +32,19 @@ namespace Contextlib .HasMany(q => q.Favorite) .WithMany(u => u.Favorite) .UsingEntity( - l => l.HasOne().WithMany().HasForeignKey(q => q.IdQuote), - r => r.HasOne().WithMany().HasForeignKey(u => u.IdUsers) + l => l.HasOne(f => f.Quote) + .WithMany() + .HasForeignKey(f => f.IdQuote), + r => r.HasOne(f => f.Users) + .WithMany() + .HasForeignKey(f => f.IdUsers) ); + modelBuilder.Entity() + .HasMany(u => u.Quotes) + .WithOne(q => q.User) + .HasForeignKey(q => q.IdUsersPropose); + modelBuilder.Entity() .HasMany(q => q.Questions) .WithMany(u => u.Quizs) @@ -46,6 +55,6 @@ namespace Contextlib } protected override void OnConfiguring(DbContextOptionsBuilder options) - => options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=WfDatabase.mdf;Trusted_Connection=True;"); + => options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Wf-Database.mdf;Trusted_Connection=True;"); } } diff --git a/WF_EF_Api/Entity/Favorite.cs b/WF_EF_Api/Entity/Favorite.cs index ec60347..06e1185 100644 --- a/WF_EF_Api/Entity/Favorite.cs +++ b/WF_EF_Api/Entity/Favorite.cs @@ -12,6 +12,10 @@ namespace Entity { public int IdUsers { get; set; } + public Users Users { get; set; } + public int IdQuote { get; set; } + + public Quote Quote { get; set; } } } diff --git a/WF_EF_Api/Entity/Question.cs b/WF_EF_Api/Entity/Question.cs index 036747d..b2e37e9 100644 --- a/WF_EF_Api/Entity/Question.cs +++ b/WF_EF_Api/Entity/Question.cs @@ -15,7 +15,7 @@ namespace Entity public int Id { get; set; } [Required] - [StringLength(50)] + [StringLength(200)] public string Text { get; set; } [Required] diff --git a/WF_EF_Api/Entity/Quote.cs b/WF_EF_Api/Entity/Quote.cs index e91cd13..976f62e 100644 --- a/WF_EF_Api/Entity/Quote.cs +++ b/WF_EF_Api/Entity/Quote.cs @@ -39,6 +39,12 @@ namespace Entity [ForeignKey(nameof(Users))] public int IdUsersPropose { get; set; } + public Users User { get; set; } = null!; + + public Source Source { get; set; } = null!; + + public Character Character { get; set; } = null!; + public ICollection DailyQuotes { get; set; } = new List(); public ICollection commentaries { get; set; } = new List(); diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250312160314_myFirstMigration.Designer.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250312160314_myFirstMigration.Designer.cs deleted file mode 100644 index 516d42a..0000000 --- a/WF_EF_Api/StubbedContextLib/Migrations/20250312160314_myFirstMigration.Designer.cs +++ /dev/null @@ -1,205 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using StubbedContextLib; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - [DbContext(typeof(StubWTFContext))] - [Migration("20250312160314_myFirstMigration")] - partial class myFirstMigration - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Entity.Character", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Character"); - }); - - modelBuilder.Entity("Entity.Images", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ImgPath") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Images"); - }); - - modelBuilder.Entity("Entity.Question", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("AnswerA") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("AnswerB") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("AnswerC") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("AnswerD") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("CorrectAnswer") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Text") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Question"); - }); - - modelBuilder.Entity("Entity.Quiz", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("NbQuestion") - .HasColumnType("int"); - - b.Property("Title") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Quiz"); - }); - - modelBuilder.Entity("Entity.Quote", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Content") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IsValid") - .HasColumnType("bit"); - - b.Property("Langage") - .HasColumnType("int"); - - b.Property("Likes") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Quote"); - }); - - modelBuilder.Entity("Entity.Source", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Title") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Year") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Source"); - }); - - modelBuilder.Entity("Entity.Users", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Created") - .HasColumnType("datetime2"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("UserName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = 1, - Created = new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), - Email = "dev@gmail.com", - Password = "1234", - UserName = "Dev" - }); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250312160314_myFirstMigration.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250312160314_myFirstMigration.cs deleted file mode 100644 index 6fd3de5..0000000 --- a/WF_EF_Api/StubbedContextLib/Migrations/20250312160314_myFirstMigration.cs +++ /dev/null @@ -1,149 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - /// - public partial class myFirstMigration : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.CreateTable( - name: "Character", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Name = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Character", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Images", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - ImgPath = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Images", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Question", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Text = table.Column(type: "nvarchar(max)", nullable: false), - AnswerA = table.Column(type: "nvarchar(max)", nullable: false), - AnswerB = table.Column(type: "nvarchar(max)", nullable: false), - AnswerC = table.Column(type: "nvarchar(max)", nullable: false), - AnswerD = table.Column(type: "nvarchar(max)", nullable: false), - CorrectAnswer = table.Column(type: "nvarchar(max)", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Question", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Quiz", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Title = table.Column(type: "nvarchar(max)", nullable: false), - NbQuestion = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Quiz", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Quote", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Content = table.Column(type: "nvarchar(max)", nullable: false), - Likes = table.Column(type: "int", nullable: false), - Langage = table.Column(type: "int", nullable: false), - IsValid = table.Column(type: "bit", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Quote", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Source", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - Title = table.Column(type: "nvarchar(max)", nullable: false), - Year = table.Column(type: "int", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Source", x => x.Id); - }); - - migrationBuilder.CreateTable( - name: "Users", - columns: table => new - { - Id = table.Column(type: "int", nullable: false) - .Annotation("SqlServer:Identity", "1, 1"), - UserName = table.Column(type: "nvarchar(max)", nullable: false), - Email = table.Column(type: "nvarchar(max)", nullable: false), - Password = table.Column(type: "nvarchar(max)", nullable: false), - Created = table.Column(type: "datetime2", nullable: false) - }, - constraints: table => - { - table.PrimaryKey("PK_Users", x => x.Id); - }); - - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "Created", "Email", "Password", "UserName" }, - values: new object[] { 1, new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), "dev@gmail.com", "1234", "Dev" }); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropTable( - name: "Character"); - - migrationBuilder.DropTable( - name: "Images"); - - migrationBuilder.DropTable( - name: "Question"); - - migrationBuilder.DropTable( - name: "Quiz"); - - migrationBuilder.DropTable( - name: "Quote"); - - migrationBuilder.DropTable( - name: "Source"); - - migrationBuilder.DropTable( - name: "Users"); - } - } -} diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250312162514_migr2.Designer.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250312162514_migr2.Designer.cs deleted file mode 100644 index d84e486..0000000 --- a/WF_EF_Api/StubbedContextLib/Migrations/20250312162514_migr2.Designer.cs +++ /dev/null @@ -1,248 +0,0 @@ -// -using System; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Infrastructure; -using Microsoft.EntityFrameworkCore.Metadata; -using Microsoft.EntityFrameworkCore.Migrations; -using Microsoft.EntityFrameworkCore.Storage.ValueConversion; -using StubbedContextLib; - -#nullable disable - -namespace StubbedContextLib.Migrations -{ - [DbContext(typeof(StubWTFContext))] - [Migration("20250312162514_migr2")] - partial class migr2 - { - /// - protected override void BuildTargetModel(ModelBuilder modelBuilder) - { -#pragma warning disable 612, 618 - modelBuilder - .HasAnnotation("ProductVersion", "9.0.3") - .HasAnnotation("Relational:MaxIdentifierLength", 128); - - SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); - - modelBuilder.Entity("Entity.Character", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Name") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Character"); - }); - - modelBuilder.Entity("Entity.Images", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("ImgPath") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Images"); - - b.HasData( - new - { - Id = 1, - ImgPath = "coucou" - }, - new - { - Id = 2, - ImgPath = "bonjour" - }); - }); - - modelBuilder.Entity("Entity.Question", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("AnswerA") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("AnswerB") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("AnswerC") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("AnswerD") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("CorrectAnswer") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Text") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Question"); - }); - - modelBuilder.Entity("Entity.Quiz", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("NbQuestion") - .HasColumnType("int"); - - b.Property("Title") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Quiz"); - }); - - modelBuilder.Entity("Entity.Quote", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Content") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IsValid") - .HasColumnType("bit"); - - b.Property("Langage") - .HasColumnType("int"); - - b.Property("Likes") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Quote"); - }); - - modelBuilder.Entity("Entity.Source", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Title") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("Year") - .HasColumnType("int"); - - b.HasKey("Id"); - - b.ToTable("Source"); - }); - - modelBuilder.Entity("Entity.Users", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Created") - .HasColumnType("datetime2"); - - b.Property("Email") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("IdImage") - .HasColumnType("int"); - - b.Property("Password") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.Property("UserName") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.HasIndex("IdImage"); - - b.ToTable("Users"); - - b.HasData( - new - { - Id = 1, - Created = new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), - Email = "dev@gmail.com", - IdImage = 1, - Password = "1234", - UserName = "Dev" - }, - new - { - Id = 2, - Created = new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), - Email = "admin@gmail.com", - IdImage = 1, - Password = "1234", - UserName = "Admin" - }); - }); - - modelBuilder.Entity("Entity.Users", b => - { - b.HasOne("Entity.Images", "Images") - .WithMany("Users") - .HasForeignKey("IdImage") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Images"); - }); - - modelBuilder.Entity("Entity.Images", b => - { - b.Navigation("Users"); - }); -#pragma warning restore 612, 618 - } - } -} diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250312162514_migr2.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250312162514_migr2.cs deleted file mode 100644 index 01e2609..0000000 --- a/WF_EF_Api/StubbedContextLib/Migrations/20250312162514_migr2.cs +++ /dev/null @@ -1,89 +0,0 @@ -using System; -using Microsoft.EntityFrameworkCore.Migrations; - -#nullable disable - -#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional - -namespace StubbedContextLib.Migrations -{ - /// - public partial class migr2 : Migration - { - /// - protected override void Up(MigrationBuilder migrationBuilder) - { - migrationBuilder.AddColumn( - name: "IdImage", - table: "Users", - type: "int", - nullable: false, - defaultValue: 0); - - migrationBuilder.InsertData( - table: "Images", - columns: new[] { "Id", "ImgPath" }, - values: new object[,] - { - { 1, "coucou" }, - { 2, "bonjour" } - }); - - migrationBuilder.UpdateData( - table: "Users", - keyColumn: "Id", - keyValue: 1, - column: "IdImage", - value: 1); - - migrationBuilder.InsertData( - table: "Users", - columns: new[] { "Id", "Created", "Email", "IdImage", "Password", "UserName" }, - values: new object[] { 2, new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), "admin@gmail.com", 1, "1234", "Admin" }); - - migrationBuilder.CreateIndex( - name: "IX_Users_IdImage", - table: "Users", - column: "IdImage"); - - migrationBuilder.AddForeignKey( - name: "FK_Users_Images_IdImage", - table: "Users", - column: "IdImage", - principalTable: "Images", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); - } - - /// - protected override void Down(MigrationBuilder migrationBuilder) - { - migrationBuilder.DropForeignKey( - name: "FK_Users_Images_IdImage", - table: "Users"); - - migrationBuilder.DropIndex( - name: "IX_Users_IdImage", - table: "Users"); - - migrationBuilder.DeleteData( - table: "Images", - keyColumn: "Id", - keyValue: 2); - - migrationBuilder.DeleteData( - table: "Users", - keyColumn: "Id", - keyValue: 2); - - migrationBuilder.DeleteData( - table: "Images", - keyColumn: "Id", - keyValue: 1); - - migrationBuilder.DropColumn( - name: "IdImage", - table: "Users"); - } - } -} diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.Designer.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.Designer.cs new file mode 100644 index 0000000..d466b28 --- /dev/null +++ b/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.Designer.cs @@ -0,0 +1,1071 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using StubbedContextLib; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + [DbContext(typeof(StubWTFContext))] + [Migration("20250314112216_migrationTest1")] + partial class migrationTest1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Entity.Character", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdImage") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("IdImage"); + + b.ToTable("characters"); + + b.HasData( + new + { + Id = 1, + IdImage = 1, + Name = "Alan Grant" + }, + new + { + Id = 2, + IdImage = 2, + Name = "Aragorn" + }, + new + { + Id = 3, + IdImage = 3, + Name = "Legolas" + }, + new + { + Id = 4, + IdImage = 4, + Name = "Frodon" + }, + new + { + Id = 5, + IdImage = 5, + Name = "Dobby" + }, + new + { + Id = 6, + IdImage = 6, + Name = "Jon Snow" + }, + new + { + Id = 7, + IdImage = 7, + Name = "Daenerys Targaryen" + }, + new + { + Id = 8, + IdImage = 8, + Name = "Luke Skywalker" + }, + new + { + Id = 9, + IdImage = 9, + Name = "Princess Leia" + }, + new + { + Id = 10, + IdImage = 10, + Name = "Harry Potter" + }); + }); + + modelBuilder.Entity("Entity.Commentary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("DateCommentary") + .HasColumnType("date") + .HasColumnName("DateCommentary"); + + b.Property("IdQuote") + .HasColumnType("int"); + + b.Property("IdUsers") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IdQuote"); + + b.HasIndex("IdUsers"); + + b.ToTable("comments"); + + b.HasData( + new + { + Id = 1, + Comment = "Ce film est le meilleur", + DateCommentary = new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), + IdQuote = 1, + IdUsers = 2 + }, + new + { + Id = 2, + Comment = "Very good", + DateCommentary = new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), + IdQuote = 1, + IdUsers = 3 + }); + }); + + modelBuilder.Entity("Entity.DailyQuote", b => + { + b.Property("IdQuote") + .HasColumnType("int"); + + b.HasKey("IdQuote"); + + b.ToTable("dailyquotes"); + + b.HasData( + new + { + IdQuote = 1 + }, + new + { + IdQuote = 5 + }); + }); + + modelBuilder.Entity("Entity.Favorite", b => + { + b.Property("IdQuote") + .HasColumnType("int"); + + b.Property("IdUsers") + .HasColumnType("int"); + + b.HasKey("IdQuote", "IdUsers"); + + b.HasIndex("IdUsers"); + + b.ToTable("favorites"); + + b.HasData( + new + { + IdQuote = 2, + IdUsers = 8 + }, + new + { + IdQuote = 5, + IdUsers = 3 + }, + new + { + IdQuote = 9, + IdUsers = 1 + }, + new + { + IdQuote = 4, + IdUsers = 10 + }, + new + { + IdQuote = 3, + IdUsers = 2 + }, + new + { + IdQuote = 6, + IdUsers = 7 + }, + new + { + IdQuote = 1, + IdUsers = 6 + }, + new + { + IdQuote = 8, + IdUsers = 9 + }, + new + { + IdQuote = 10, + IdUsers = 5 + }); + }); + + modelBuilder.Entity("Entity.Images", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ImgPath") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("images"); + + b.HasData( + new + { + Id = 1, + ImgPath = "https://th.bing.com/th/id/OIP.TJuWNCsibz8MVmhdNQEdMwHaE8?w=244&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 2, + ImgPath = "https://th.bing.com/th/id/OIP.NgXRQ5-IknA6_qOPFhLWIwHaHK?w=165&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 3, + ImgPath = "https://th.bing.com/th/id/OIP.XcJoJ6bC9sAMjol1pJn5UQHaLH?w=118&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 4, + ImgPath = "https://th.bing.com/th/id/OIP.PPIESqZaNDa-qUcfSDXhdQHaGK?w=210&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 5, + ImgPath = "https://th.bing.com/th/id/OIP.XBghSl2kfRNNtQoSxc901wHaHa?w=177&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 6, + ImgPath = "https://th.bing.com/th/id/OIP.af1Aid64cqEKoIOBgCPxtQHaJO?w=145&h=182&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 7, + ImgPath = "https://th.bing.com/th/id/OIP.ri5vSXr5lNTLt4DO6KQXyQHaI4?w=158&h=189&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 8, + ImgPath = "https://th.bing.com/th/id/OIP.uPTRLR8uspCiafiunUqKfQHaMJ?w=115&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 9, + ImgPath = "https://th.bing.com/th/id/OIP.hcJis4rKbyQtugsoFJU2ngHaM_?w=118&h=207&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 10, + ImgPath = "https://th.bing.com/th/id/OIP.Py1_XfUrKJY_A6tYEmFS5wHaE8?w=280&h=187&c=7&r=0&o=5&pid=1.7" + }); + }); + + modelBuilder.Entity("Entity.Question", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AnswerA") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AnswerB") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AnswerC") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AnswerD") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CorrectAnswer") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("Id"); + + b.ToTable("question"); + + b.HasData( + new + { + Id = 1, + AnswerA = "Gimli", + AnswerB = "Aragorn", + AnswerC = "Frodon", + AnswerD = "Gandalf", + CorrectAnswer = "B", + Text = "Qui est le leader de la Communauté de l'Anneau ?" + }, + new + { + Id = 2, + AnswerA = "Serdaigle", + AnswerB = "Gryffondor", + AnswerC = "Serpentard", + AnswerD = "Poufsouffle", + CorrectAnswer = "B", + Text = "Dans quelle maison Harry Potter est-il ?" + }, + new + { + Id = 3, + AnswerA = "Saroumane", + AnswerB = "Sauron", + AnswerC = "Gollum", + AnswerD = "Gothmog", + CorrectAnswer = "B", + Text = "Qui est le Seigneur des Ténèbres dans la saga Le Seigneur des Anneaux ?" + }, + new + { + Id = 4, + AnswerA = "Han Solo", + AnswerB = "Princesse Leia", + AnswerC = "Chewbacca", + AnswerD = "R2-D2", + CorrectAnswer = "A", + Text = "Dans le film Star Wars : Episode IV, qui sauve Luke Skywalker de l'Étoile de la Mort ?" + }, + new + { + Id = 5, + AnswerA = "Reine Jadis", + AnswerB = "Aslan", + AnswerC = "Edmund", + AnswerD = "Lucy", + CorrectAnswer = "B", + Text = "Qui est le souverain de Narnia dans Le Lion, la Sorcière Blanche et l'Armoire Magique ?" + }, + new + { + Id = 6, + AnswerA = "Smaug", + AnswerB = "Falkor", + AnswerC = "Norbert", + AnswerD = "Shenron", + CorrectAnswer = "A", + Text = "Quel est le nom du dragon dans Le Hobbit ?" + }, + new + { + Id = 7, + AnswerA = "Bella Swan", + AnswerB = "Edward Cullen", + AnswerC = "Jacob Black", + AnswerD = "Victoria", + CorrectAnswer = "A", + Text = "Qui est la première personne à être mordue par un vampire dans Twilight ?" + }, + new + { + Id = 8, + AnswerA = "Obi-Wan Kenobi", + AnswerB = "Yoda", + AnswerC = "Han Solo", + AnswerD = "Luke Skywalker", + CorrectAnswer = "A", + Text = "Quel personnage dit Que la Force soit avec toi dans Star Wars ?" + }, + new + { + Id = 9, + AnswerA = "Dr. Ellie Sattler", + AnswerB = "Alan Grant", + AnswerC = "John Hammond", + AnswerD = "Dennis Nedry", + CorrectAnswer = "B", + Text = "Dans Jurassic Park, quel est le nom du paléontologue sur l'île ?" + }, + new + { + Id = 10, + AnswerA = "Cersei Lannister", + AnswerB = "Arya Stark", + AnswerC = "Daenerys Targaryen", + AnswerD = "Sansa Stark", + CorrectAnswer = "C", + Text = "Dans Game of Thrones, qui est surnommée la Mère des Dragons ?" + }); + }); + + modelBuilder.Entity("Entity.Quiz", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdImage") + .HasColumnType("int"); + + b.Property("NbQuestion") + .HasColumnType("int"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("IdImage"); + + b.ToTable("quizzes"); + + b.HasData( + new + { + Id = 1, + IdImage = 1, + NbQuestion = 5, + Title = "Quiz 1" + }, + new + { + Id = 2, + IdImage = 2, + NbQuestion = 5, + Title = "Quiz 2" + }); + }); + + modelBuilder.Entity("Entity.QuizQuestion", b => + { + b.Property("IdQuestion") + .HasColumnType("int"); + + b.Property("IdQuiz") + .HasColumnType("int"); + + b.HasKey("IdQuestion", "IdQuiz"); + + b.HasIndex("IdQuiz"); + + b.ToTable("QuizQuestion"); + + b.HasData( + new + { + IdQuestion = 1, + IdQuiz = 1 + }, + new + { + IdQuestion = 2, + IdQuiz = 1 + }, + new + { + IdQuestion = 3, + IdQuiz = 1 + }, + new + { + IdQuestion = 4, + IdQuiz = 1 + }, + new + { + IdQuestion = 5, + IdQuiz = 1 + }, + new + { + IdQuestion = 6, + IdQuiz = 2 + }, + new + { + IdQuestion = 7, + IdQuiz = 2 + }, + new + { + IdQuestion = 8, + IdQuiz = 2 + }, + new + { + IdQuestion = 9, + IdQuiz = 2 + }, + new + { + IdQuestion = 10, + IdQuiz = 2 + }); + }); + + modelBuilder.Entity("Entity.Quote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Content") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IdCharacter") + .HasColumnType("int"); + + b.Property("IdSource") + .HasColumnType("int"); + + b.Property("IdUsersPropose") + .HasColumnType("int"); + + b.Property("IsValid") + .HasColumnType("bit"); + + b.Property("Langage") + .HasColumnType("int"); + + b.Property("Likes") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IdCharacter"); + + b.HasIndex("IdSource"); + + b.HasIndex("IdUsersPropose"); + + b.ToTable("quotes"); + + b.HasData( + new + { + Id = 1, + Content = "Je n'y crois pas. Je n'y crois pas. Ce n'est pas possible", + IdCharacter = 1, + IdSource = 1, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 2, + Content = "There is always hope", + IdCharacter = 2, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 3, + Content = "A red sun rises. Blood has been spilled this night.", + IdCharacter = 3, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 4, + Content = "I wish the Ring had never come to me.I wish none of this had happened.", + IdCharacter = 4, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 5, + Content = "Dobby is a free elf!", + IdCharacter = 5, + IdSource = 4, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 6, + Content = "Winter is comming", + IdCharacter = 6, + IdSource = 3, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 7, + Content = "Je suis la dernière Targaryen. Je suis la reine des dragons", + IdCharacter = 7, + IdSource = 3, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 8, + Content = "Je ne suis pas prêt à affronter ça. C'est trop pour moi.", + IdCharacter = 8, + IdSource = 5, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 9, + Content = "Aidez-moi, Obi-Wan Kenobi, vous êtes mon seul espoir.", + IdCharacter = 9, + IdSource = 5, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 10, + Content = "La quoi ?", + IdCharacter = 10, + IdSource = 4, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }); + }); + + modelBuilder.Entity("Entity.Source", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TypeSrc") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("sources"); + + b.HasData( + new + { + Id = 1, + Title = "Jurassic Park", + TypeSrc = 0, + Year = 1993 + }, + new + { + Id = 2, + Title = "Le Seigneur des anneaux : La Communauté de l'anneau", + TypeSrc = 0, + Year = 2001 + }, + new + { + Id = 3, + Title = "Game of throne", + TypeSrc = 1, + Year = 2011 + }, + new + { + Id = 4, + Title = "Harry Potter à l'école des sorcier", + TypeSrc = 0, + Year = 1997 + }, + new + { + Id = 5, + Title = "Star Wars, épisode IV : Un nouvel espoir", + TypeSrc = 0, + Year = 1977 + }); + }); + + modelBuilder.Entity("Entity.Users", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Created") + .HasColumnType("date") + .HasColumnName("Created"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IdImage") + .HasColumnType("int"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("IdImage"); + + b.ToTable("users"); + + b.HasData( + new + { + Id = 1, + Created = new DateTime(2025, 5, 12, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "jhonDhoe@gmail.com", + IdImage = 1, + Password = "1234", + UserName = "Jhon-Dhoe" + }, + new + { + Id = 2, + Created = new DateTime(2025, 3, 19, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "lucy_rose@outlook.com", + IdImage = 2, + Password = "abcd", + UserName = "Lucy-Rose" + }, + new + { + Id = 3, + Created = new DateTime(2024, 11, 2, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "mark.taylor@yahoo.com", + IdImage = 3, + Password = "5678", + UserName = "Mark-Taylor" + }, + new + { + Id = 4, + Created = new DateTime(2025, 2, 28, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "sophie.martin@gmail.com", + IdImage = 4, + Password = "4321", + UserName = "Sophie-Martin" + }, + new + { + Id = 5, + Created = new DateTime(2025, 1, 15, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "nathan_doe@aol.com", + IdImage = 5, + Password = "8765", + UserName = "Nathan-Doe" + }, + new + { + Id = 6, + Created = new DateTime(2025, 4, 7, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "ella.brown@icloud.com", + IdImage = 6, + Password = "2468", + UserName = "Ella-Brown" + }, + new + { + Id = 7, + Created = new DateTime(2024, 12, 25, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "oliver_smith@gmail.com", + IdImage = 7, + Password = "1357", + UserName = "Oliver-Smith" + }, + new + { + Id = 8, + Created = new DateTime(2025, 3, 5, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "mia.jones@outlook.com", + IdImage = 8, + Password = "1122", + UserName = "Mia-Jones" + }, + new + { + Id = 9, + Created = new DateTime(2025, 2, 22, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "kevin_williams@aol.com", + IdImage = 9, + Password = "2233", + UserName = "Kevin-Williams" + }, + new + { + Id = 10, + Created = new DateTime(2025, 1, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "olivia.white@yahoo.com", + IdImage = 10, + Password = "3344", + UserName = "Olivia-White" + }); + }); + + modelBuilder.Entity("Entity.Character", b => + { + b.HasOne("Entity.Images", "Images") + .WithMany("Characters") + .HasForeignKey("IdImage") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Images"); + }); + + modelBuilder.Entity("Entity.Commentary", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany("commentaries") + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Users", "Users") + .WithMany("Commentary") + .HasForeignKey("IdUsers") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Quote"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("Entity.DailyQuote", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany("DailyQuotes") + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Quote"); + }); + + modelBuilder.Entity("Entity.Favorite", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany() + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Users", "Users") + .WithMany() + .HasForeignKey("IdUsers") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Quote"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("Entity.Quiz", b => + { + b.HasOne("Entity.Images", "Images") + .WithMany("Quizs") + .HasForeignKey("IdImage") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Images"); + }); + + modelBuilder.Entity("Entity.QuizQuestion", b => + { + b.HasOne("Entity.Question", null) + .WithMany() + .HasForeignKey("IdQuestion") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Quiz", null) + .WithMany() + .HasForeignKey("IdQuiz") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Entity.Quote", b => + { + b.HasOne("Entity.Character", "Character") + .WithMany("Quotes") + .HasForeignKey("IdCharacter") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Source", "Source") + .WithMany("Quotes") + .HasForeignKey("IdSource") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Users", "User") + .WithMany("Quotes") + .HasForeignKey("IdUsersPropose") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Character"); + + b.Navigation("Source"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Entity.Users", b => + { + b.HasOne("Entity.Images", "Images") + .WithMany("Users") + .HasForeignKey("IdImage") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Images"); + }); + + modelBuilder.Entity("Entity.Character", b => + { + b.Navigation("Quotes"); + }); + + modelBuilder.Entity("Entity.Images", b => + { + b.Navigation("Characters"); + + b.Navigation("Quizs"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("Entity.Quote", b => + { + b.Navigation("DailyQuotes"); + + b.Navigation("commentaries"); + }); + + modelBuilder.Entity("Entity.Source", b => + { + b.Navigation("Quotes"); + }); + + modelBuilder.Entity("Entity.Users", b => + { + b.Navigation("Commentary"); + + b.Navigation("Quotes"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.cs new file mode 100644 index 0000000..a85f30b --- /dev/null +++ b/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.cs @@ -0,0 +1,501 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace StubbedContextLib.Migrations +{ + /// + public partial class migrationTest1 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "images", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + ImgPath = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_images", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "question", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Text = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + AnswerA = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + AnswerB = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + AnswerC = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + AnswerD = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + CorrectAnswer = table.Column(type: "nvarchar(1)", maxLength: 1, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_question", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "sources", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Title = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Year = table.Column(type: "int", nullable: false), + TypeSrc = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_sources", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "characters", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Name = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + IdImage = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_characters", x => x.Id); + table.ForeignKey( + name: "FK_characters_images_IdImage", + column: x => x.IdImage, + principalTable: "images", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "quizzes", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Title = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + IdImage = table.Column(type: "int", nullable: false), + NbQuestion = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_quizzes", x => x.Id); + table.ForeignKey( + name: "FK_quizzes_images_IdImage", + column: x => x.IdImage, + principalTable: "images", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "users", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + UserName = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Email = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Password = table.Column(type: "nvarchar(200)", maxLength: 200, nullable: false), + IdImage = table.Column(type: "int", nullable: false), + Created = table.Column(type: "date", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_users", x => x.Id); + table.ForeignKey( + name: "FK_users_images_IdImage", + column: x => x.IdImage, + principalTable: "images", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "QuizQuestion", + columns: table => new + { + IdQuiz = table.Column(type: "int", nullable: false), + IdQuestion = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_QuizQuestion", x => new { x.IdQuestion, x.IdQuiz }); + table.ForeignKey( + name: "FK_QuizQuestion_question_IdQuestion", + column: x => x.IdQuestion, + principalTable: "question", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_QuizQuestion_quizzes_IdQuiz", + column: x => x.IdQuiz, + principalTable: "quizzes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "quotes", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Content = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Likes = table.Column(type: "int", nullable: false), + Langage = table.Column(type: "int", nullable: false), + IsValid = table.Column(type: "bit", nullable: false), + IdCharacter = table.Column(type: "int", nullable: false), + IdSource = table.Column(type: "int", nullable: false), + IdUsersPropose = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_quotes", x => x.Id); + table.ForeignKey( + name: "FK_quotes_characters_IdCharacter", + column: x => x.IdCharacter, + principalTable: "characters", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_quotes_sources_IdSource", + column: x => x.IdSource, + principalTable: "sources", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_quotes_users_IdUsersPropose", + column: x => x.IdUsersPropose, + principalTable: "users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "comments", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + IdUsers = table.Column(type: "int", nullable: false), + IdQuote = table.Column(type: "int", nullable: false), + DateCommentary = table.Column(type: "date", nullable: false), + Comment = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_comments", x => x.Id); + table.ForeignKey( + name: "FK_comments_quotes_IdQuote", + column: x => x.IdQuote, + principalTable: "quotes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_comments_users_IdUsers", + column: x => x.IdUsers, + principalTable: "users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "dailyquotes", + columns: table => new + { + IdQuote = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_dailyquotes", x => x.IdQuote); + table.ForeignKey( + name: "FK_dailyquotes_quotes_IdQuote", + column: x => x.IdQuote, + principalTable: "quotes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "favorites", + columns: table => new + { + IdUsers = table.Column(type: "int", nullable: false), + IdQuote = table.Column(type: "int", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_favorites", x => new { x.IdQuote, x.IdUsers }); + table.ForeignKey( + name: "FK_favorites_quotes_IdQuote", + column: x => x.IdQuote, + principalTable: "quotes", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_favorites_users_IdUsers", + column: x => x.IdUsers, + principalTable: "users", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.InsertData( + table: "images", + columns: new[] { "Id", "ImgPath" }, + values: new object[,] + { + { 1, "https://th.bing.com/th/id/OIP.TJuWNCsibz8MVmhdNQEdMwHaE8?w=244&h=180&c=7&r=0&o=5&pid=1.7" }, + { 2, "https://th.bing.com/th/id/OIP.NgXRQ5-IknA6_qOPFhLWIwHaHK?w=165&h=180&c=7&r=0&o=5&pid=1.7" }, + { 3, "https://th.bing.com/th/id/OIP.XcJoJ6bC9sAMjol1pJn5UQHaLH?w=118&h=180&c=7&r=0&o=5&pid=1.7" }, + { 4, "https://th.bing.com/th/id/OIP.PPIESqZaNDa-qUcfSDXhdQHaGK?w=210&h=180&c=7&r=0&o=5&pid=1.7" }, + { 5, "https://th.bing.com/th/id/OIP.XBghSl2kfRNNtQoSxc901wHaHa?w=177&h=180&c=7&r=0&o=5&pid=1.7" }, + { 6, "https://th.bing.com/th/id/OIP.af1Aid64cqEKoIOBgCPxtQHaJO?w=145&h=182&c=7&r=0&o=5&pid=1.7" }, + { 7, "https://th.bing.com/th/id/OIP.ri5vSXr5lNTLt4DO6KQXyQHaI4?w=158&h=189&c=7&r=0&o=5&pid=1.7" }, + { 8, "https://th.bing.com/th/id/OIP.uPTRLR8uspCiafiunUqKfQHaMJ?w=115&h=180&c=7&r=0&o=5&pid=1.7" }, + { 9, "https://th.bing.com/th/id/OIP.hcJis4rKbyQtugsoFJU2ngHaM_?w=118&h=207&c=7&r=0&o=5&pid=1.7" }, + { 10, "https://th.bing.com/th/id/OIP.Py1_XfUrKJY_A6tYEmFS5wHaE8?w=280&h=187&c=7&r=0&o=5&pid=1.7" } + }); + + migrationBuilder.InsertData( + table: "question", + columns: new[] { "Id", "AnswerA", "AnswerB", "AnswerC", "AnswerD", "CorrectAnswer", "Text" }, + values: new object[,] + { + { 1, "Gimli", "Aragorn", "Frodon", "Gandalf", "B", "Qui est le leader de la Communauté de l'Anneau ?" }, + { 2, "Serdaigle", "Gryffondor", "Serpentard", "Poufsouffle", "B", "Dans quelle maison Harry Potter est-il ?" }, + { 3, "Saroumane", "Sauron", "Gollum", "Gothmog", "B", "Qui est le Seigneur des Ténèbres dans la saga Le Seigneur des Anneaux ?" }, + { 4, "Han Solo", "Princesse Leia", "Chewbacca", "R2-D2", "A", "Dans le film Star Wars : Episode IV, qui sauve Luke Skywalker de l'Étoile de la Mort ?" }, + { 5, "Reine Jadis", "Aslan", "Edmund", "Lucy", "B", "Qui est le souverain de Narnia dans Le Lion, la Sorcière Blanche et l'Armoire Magique ?" }, + { 6, "Smaug", "Falkor", "Norbert", "Shenron", "A", "Quel est le nom du dragon dans Le Hobbit ?" }, + { 7, "Bella Swan", "Edward Cullen", "Jacob Black", "Victoria", "A", "Qui est la première personne à être mordue par un vampire dans Twilight ?" }, + { 8, "Obi-Wan Kenobi", "Yoda", "Han Solo", "Luke Skywalker", "A", "Quel personnage dit Que la Force soit avec toi dans Star Wars ?" }, + { 9, "Dr. Ellie Sattler", "Alan Grant", "John Hammond", "Dennis Nedry", "B", "Dans Jurassic Park, quel est le nom du paléontologue sur l'île ?" }, + { 10, "Cersei Lannister", "Arya Stark", "Daenerys Targaryen", "Sansa Stark", "C", "Dans Game of Thrones, qui est surnommée la Mère des Dragons ?" } + }); + + migrationBuilder.InsertData( + table: "sources", + columns: new[] { "Id", "Title", "TypeSrc", "Year" }, + values: new object[,] + { + { 1, "Jurassic Park", 0, 1993 }, + { 2, "Le Seigneur des anneaux : La Communauté de l'anneau", 0, 2001 }, + { 3, "Game of throne", 1, 2011 }, + { 4, "Harry Potter à l'école des sorcier", 0, 1997 }, + { 5, "Star Wars, épisode IV : Un nouvel espoir", 0, 1977 } + }); + + migrationBuilder.InsertData( + table: "characters", + columns: new[] { "Id", "IdImage", "Name" }, + values: new object[,] + { + { 1, 1, "Alan Grant" }, + { 2, 2, "Aragorn" }, + { 3, 3, "Legolas" }, + { 4, 4, "Frodon" }, + { 5, 5, "Dobby" }, + { 6, 6, "Jon Snow" }, + { 7, 7, "Daenerys Targaryen" }, + { 8, 8, "Luke Skywalker" }, + { 9, 9, "Princess Leia" }, + { 10, 10, "Harry Potter" } + }); + + migrationBuilder.InsertData( + table: "quizzes", + columns: new[] { "Id", "IdImage", "NbQuestion", "Title" }, + values: new object[,] + { + { 1, 1, 5, "Quiz 1" }, + { 2, 2, 5, "Quiz 2" } + }); + + migrationBuilder.InsertData( + table: "users", + columns: new[] { "Id", "Created", "Email", "IdImage", "Password", "UserName" }, + values: new object[,] + { + { 1, new DateTime(2025, 5, 12, 0, 0, 0, 0, DateTimeKind.Unspecified), "jhonDhoe@gmail.com", 1, "1234", "Jhon-Dhoe" }, + { 2, new DateTime(2025, 3, 19, 0, 0, 0, 0, DateTimeKind.Unspecified), "lucy_rose@outlook.com", 2, "abcd", "Lucy-Rose" }, + { 3, new DateTime(2024, 11, 2, 0, 0, 0, 0, DateTimeKind.Unspecified), "mark.taylor@yahoo.com", 3, "5678", "Mark-Taylor" }, + { 4, new DateTime(2025, 2, 28, 0, 0, 0, 0, DateTimeKind.Unspecified), "sophie.martin@gmail.com", 4, "4321", "Sophie-Martin" }, + { 5, new DateTime(2025, 1, 15, 0, 0, 0, 0, DateTimeKind.Unspecified), "nathan_doe@aol.com", 5, "8765", "Nathan-Doe" }, + { 6, new DateTime(2025, 4, 7, 0, 0, 0, 0, DateTimeKind.Unspecified), "ella.brown@icloud.com", 6, "2468", "Ella-Brown" }, + { 7, new DateTime(2024, 12, 25, 0, 0, 0, 0, DateTimeKind.Unspecified), "oliver_smith@gmail.com", 7, "1357", "Oliver-Smith" }, + { 8, new DateTime(2025, 3, 5, 0, 0, 0, 0, DateTimeKind.Unspecified), "mia.jones@outlook.com", 8, "1122", "Mia-Jones" }, + { 9, new DateTime(2025, 2, 22, 0, 0, 0, 0, DateTimeKind.Unspecified), "kevin_williams@aol.com", 9, "2233", "Kevin-Williams" }, + { 10, new DateTime(2025, 1, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), "olivia.white@yahoo.com", 10, "3344", "Olivia-White" } + }); + + migrationBuilder.InsertData( + table: "QuizQuestion", + columns: new[] { "IdQuestion", "IdQuiz" }, + values: new object[,] + { + { 1, 1 }, + { 2, 1 }, + { 3, 1 }, + { 4, 1 }, + { 5, 1 }, + { 6, 2 }, + { 7, 2 }, + { 8, 2 }, + { 9, 2 }, + { 10, 2 } + }); + + migrationBuilder.InsertData( + table: "quotes", + columns: new[] { "Id", "Content", "IdCharacter", "IdSource", "IdUsersPropose", "IsValid", "Langage", "Likes" }, + values: new object[,] + { + { 1, "Je n'y crois pas. Je n'y crois pas. Ce n'est pas possible", 1, 1, 1, true, 1, 11025 }, + { 2, "There is always hope", 2, 2, 1, true, 0, 11025 }, + { 3, "A red sun rises. Blood has been spilled this night.", 3, 2, 1, true, 0, 11025 }, + { 4, "I wish the Ring had never come to me.I wish none of this had happened.", 4, 2, 1, true, 0, 11025 }, + { 5, "Dobby is a free elf!", 5, 4, 1, true, 0, 11025 }, + { 6, "Winter is comming", 6, 3, 1, true, 0, 11025 }, + { 7, "Je suis la dernière Targaryen. Je suis la reine des dragons", 7, 3, 1, true, 1, 11025 }, + { 8, "Je ne suis pas prêt à affronter ça. C'est trop pour moi.", 8, 5, 1, true, 1, 11025 }, + { 9, "Aidez-moi, Obi-Wan Kenobi, vous êtes mon seul espoir.", 9, 5, 1, true, 1, 11025 }, + { 10, "La quoi ?", 10, 4, 1, true, 1, 11025 } + }); + + migrationBuilder.InsertData( + table: "comments", + columns: new[] { "Id", "Comment", "DateCommentary", "IdQuote", "IdUsers" }, + values: new object[,] + { + { 1, "Ce film est le meilleur", new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), 1, 2 }, + { 2, "Very good", new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), 1, 3 } + }); + + migrationBuilder.InsertData( + table: "dailyquotes", + column: "IdQuote", + values: new object[] + { + 1, + 5 + }); + + migrationBuilder.InsertData( + table: "favorites", + columns: new[] { "IdQuote", "IdUsers" }, + values: new object[,] + { + { 1, 6 }, + { 2, 8 }, + { 3, 2 }, + { 4, 10 }, + { 5, 3 }, + { 6, 7 }, + { 8, 9 }, + { 9, 1 }, + { 10, 5 } + }); + + migrationBuilder.CreateIndex( + name: "IX_characters_IdImage", + table: "characters", + column: "IdImage"); + + migrationBuilder.CreateIndex( + name: "IX_comments_IdQuote", + table: "comments", + column: "IdQuote"); + + migrationBuilder.CreateIndex( + name: "IX_comments_IdUsers", + table: "comments", + column: "IdUsers"); + + migrationBuilder.CreateIndex( + name: "IX_favorites_IdUsers", + table: "favorites", + column: "IdUsers"); + + migrationBuilder.CreateIndex( + name: "IX_QuizQuestion_IdQuiz", + table: "QuizQuestion", + column: "IdQuiz"); + + migrationBuilder.CreateIndex( + name: "IX_quizzes_IdImage", + table: "quizzes", + column: "IdImage"); + + migrationBuilder.CreateIndex( + name: "IX_quotes_IdCharacter", + table: "quotes", + column: "IdCharacter"); + + migrationBuilder.CreateIndex( + name: "IX_quotes_IdSource", + table: "quotes", + column: "IdSource"); + + migrationBuilder.CreateIndex( + name: "IX_quotes_IdUsersPropose", + table: "quotes", + column: "IdUsersPropose"); + + migrationBuilder.CreateIndex( + name: "IX_users_IdImage", + table: "users", + column: "IdImage"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "comments"); + + migrationBuilder.DropTable( + name: "dailyquotes"); + + migrationBuilder.DropTable( + name: "favorites"); + + migrationBuilder.DropTable( + name: "QuizQuestion"); + + migrationBuilder.DropTable( + name: "quotes"); + + migrationBuilder.DropTable( + name: "question"); + + migrationBuilder.DropTable( + name: "quizzes"); + + migrationBuilder.DropTable( + name: "characters"); + + migrationBuilder.DropTable( + name: "sources"); + + migrationBuilder.DropTable( + name: "users"); + + migrationBuilder.DropTable( + name: "images"); + } + } +} diff --git a/WF_EF_Api/StubbedContextLib/Migrations/StubWTFContextModelSnapshot.cs b/WF_EF_Api/StubbedContextLib/Migrations/StubWTFContextModelSnapshot.cs index 4a848c7..21818ec 100644 --- a/WF_EF_Api/StubbedContextLib/Migrations/StubWTFContextModelSnapshot.cs +++ b/WF_EF_Api/StubbedContextLib/Migrations/StubWTFContextModelSnapshot.cs @@ -30,13 +30,213 @@ namespace StubbedContextLib.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("IdImage") + .HasColumnType("int"); + b.Property("Name") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("IdImage"); + + b.ToTable("characters"); + + b.HasData( + new + { + Id = 1, + IdImage = 1, + Name = "Alan Grant" + }, + new + { + Id = 2, + IdImage = 2, + Name = "Aragorn" + }, + new + { + Id = 3, + IdImage = 3, + Name = "Legolas" + }, + new + { + Id = 4, + IdImage = 4, + Name = "Frodon" + }, + new + { + Id = 5, + IdImage = 5, + Name = "Dobby" + }, + new + { + Id = 6, + IdImage = 6, + Name = "Jon Snow" + }, + new + { + Id = 7, + IdImage = 7, + Name = "Daenerys Targaryen" + }, + new + { + Id = 8, + IdImage = 8, + Name = "Luke Skywalker" + }, + new + { + Id = 9, + IdImage = 9, + Name = "Princess Leia" + }, + new + { + Id = 10, + IdImage = 10, + Name = "Harry Potter" + }); + }); + + modelBuilder.Entity("Entity.Commentary", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("DateCommentary") + .HasColumnType("date") + .HasColumnName("DateCommentary"); + + b.Property("IdQuote") + .HasColumnType("int"); + + b.Property("IdUsers") + .HasColumnType("int"); b.HasKey("Id"); - b.ToTable("Character"); + b.HasIndex("IdQuote"); + + b.HasIndex("IdUsers"); + + b.ToTable("comments"); + + b.HasData( + new + { + Id = 1, + Comment = "Ce film est le meilleur", + DateCommentary = new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), + IdQuote = 1, + IdUsers = 2 + }, + new + { + Id = 2, + Comment = "Very good", + DateCommentary = new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), + IdQuote = 1, + IdUsers = 3 + }); + }); + + modelBuilder.Entity("Entity.DailyQuote", b => + { + b.Property("IdQuote") + .HasColumnType("int"); + + b.HasKey("IdQuote"); + + b.ToTable("dailyquotes"); + + b.HasData( + new + { + IdQuote = 1 + }, + new + { + IdQuote = 5 + }); + }); + + modelBuilder.Entity("Entity.Favorite", b => + { + b.Property("IdQuote") + .HasColumnType("int"); + + b.Property("IdUsers") + .HasColumnType("int"); + + b.HasKey("IdQuote", "IdUsers"); + + b.HasIndex("IdUsers"); + + b.ToTable("favorites"); + + b.HasData( + new + { + IdQuote = 2, + IdUsers = 8 + }, + new + { + IdQuote = 5, + IdUsers = 3 + }, + new + { + IdQuote = 9, + IdUsers = 1 + }, + new + { + IdQuote = 4, + IdUsers = 10 + }, + new + { + IdQuote = 3, + IdUsers = 2 + }, + new + { + IdQuote = 6, + IdUsers = 7 + }, + new + { + IdQuote = 1, + IdUsers = 6 + }, + new + { + IdQuote = 8, + IdUsers = 9 + }, + new + { + IdQuote = 10, + IdUsers = 5 + }); }); modelBuilder.Entity("Entity.Images", b => @@ -53,18 +253,58 @@ namespace StubbedContextLib.Migrations b.HasKey("Id"); - b.ToTable("Images"); + b.ToTable("images"); b.HasData( new { Id = 1, - ImgPath = "coucou" + ImgPath = "https://th.bing.com/th/id/OIP.TJuWNCsibz8MVmhdNQEdMwHaE8?w=244&h=180&c=7&r=0&o=5&pid=1.7" }, new { Id = 2, - ImgPath = "bonjour" + ImgPath = "https://th.bing.com/th/id/OIP.NgXRQ5-IknA6_qOPFhLWIwHaHK?w=165&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 3, + ImgPath = "https://th.bing.com/th/id/OIP.XcJoJ6bC9sAMjol1pJn5UQHaLH?w=118&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 4, + ImgPath = "https://th.bing.com/th/id/OIP.PPIESqZaNDa-qUcfSDXhdQHaGK?w=210&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 5, + ImgPath = "https://th.bing.com/th/id/OIP.XBghSl2kfRNNtQoSxc901wHaHa?w=177&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 6, + ImgPath = "https://th.bing.com/th/id/OIP.af1Aid64cqEKoIOBgCPxtQHaJO?w=145&h=182&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 7, + ImgPath = "https://th.bing.com/th/id/OIP.ri5vSXr5lNTLt4DO6KQXyQHaI4?w=158&h=189&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 8, + ImgPath = "https://th.bing.com/th/id/OIP.uPTRLR8uspCiafiunUqKfQHaMJ?w=115&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 9, + ImgPath = "https://th.bing.com/th/id/OIP.hcJis4rKbyQtugsoFJU2ngHaM_?w=118&h=207&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 10, + ImgPath = "https://th.bing.com/th/id/OIP.Py1_XfUrKJY_A6tYEmFS5wHaE8?w=280&h=187&c=7&r=0&o=5&pid=1.7" }); }); @@ -78,31 +318,139 @@ namespace StubbedContextLib.Migrations b.Property("AnswerA") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); b.Property("AnswerB") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); b.Property("AnswerC") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); b.Property("AnswerD") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); b.Property("CorrectAnswer") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); b.Property("Text") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); b.HasKey("Id"); - b.ToTable("Question"); + b.ToTable("question"); + + b.HasData( + new + { + Id = 1, + AnswerA = "Gimli", + AnswerB = "Aragorn", + AnswerC = "Frodon", + AnswerD = "Gandalf", + CorrectAnswer = "B", + Text = "Qui est le leader de la Communauté de l'Anneau ?" + }, + new + { + Id = 2, + AnswerA = "Serdaigle", + AnswerB = "Gryffondor", + AnswerC = "Serpentard", + AnswerD = "Poufsouffle", + CorrectAnswer = "B", + Text = "Dans quelle maison Harry Potter est-il ?" + }, + new + { + Id = 3, + AnswerA = "Saroumane", + AnswerB = "Sauron", + AnswerC = "Gollum", + AnswerD = "Gothmog", + CorrectAnswer = "B", + Text = "Qui est le Seigneur des Ténèbres dans la saga Le Seigneur des Anneaux ?" + }, + new + { + Id = 4, + AnswerA = "Han Solo", + AnswerB = "Princesse Leia", + AnswerC = "Chewbacca", + AnswerD = "R2-D2", + CorrectAnswer = "A", + Text = "Dans le film Star Wars : Episode IV, qui sauve Luke Skywalker de l'Étoile de la Mort ?" + }, + new + { + Id = 5, + AnswerA = "Reine Jadis", + AnswerB = "Aslan", + AnswerC = "Edmund", + AnswerD = "Lucy", + CorrectAnswer = "B", + Text = "Qui est le souverain de Narnia dans Le Lion, la Sorcière Blanche et l'Armoire Magique ?" + }, + new + { + Id = 6, + AnswerA = "Smaug", + AnswerB = "Falkor", + AnswerC = "Norbert", + AnswerD = "Shenron", + CorrectAnswer = "A", + Text = "Quel est le nom du dragon dans Le Hobbit ?" + }, + new + { + Id = 7, + AnswerA = "Bella Swan", + AnswerB = "Edward Cullen", + AnswerC = "Jacob Black", + AnswerD = "Victoria", + CorrectAnswer = "A", + Text = "Qui est la première personne à être mordue par un vampire dans Twilight ?" + }, + new + { + Id = 8, + AnswerA = "Obi-Wan Kenobi", + AnswerB = "Yoda", + AnswerC = "Han Solo", + AnswerD = "Luke Skywalker", + CorrectAnswer = "A", + Text = "Quel personnage dit Que la Force soit avec toi dans Star Wars ?" + }, + new + { + Id = 9, + AnswerA = "Dr. Ellie Sattler", + AnswerB = "Alan Grant", + AnswerC = "John Hammond", + AnswerD = "Dennis Nedry", + CorrectAnswer = "B", + Text = "Dans Jurassic Park, quel est le nom du paléontologue sur l'île ?" + }, + new + { + Id = 10, + AnswerA = "Cersei Lannister", + AnswerB = "Arya Stark", + AnswerC = "Daenerys Targaryen", + AnswerD = "Sansa Stark", + CorrectAnswer = "C", + Text = "Dans Game of Thrones, qui est surnommée la Mère des Dragons ?" + }); }); modelBuilder.Entity("Entity.Quiz", b => @@ -113,16 +461,105 @@ namespace StubbedContextLib.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("IdImage") + .HasColumnType("int"); + b.Property("NbQuestion") .HasColumnType("int"); b.Property("Title") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); b.HasKey("Id"); - b.ToTable("Quiz"); + b.HasIndex("IdImage"); + + b.ToTable("quizzes"); + + b.HasData( + new + { + Id = 1, + IdImage = 1, + NbQuestion = 5, + Title = "Quiz 1" + }, + new + { + Id = 2, + IdImage = 2, + NbQuestion = 5, + Title = "Quiz 2" + }); + }); + + modelBuilder.Entity("Entity.QuizQuestion", b => + { + b.Property("IdQuestion") + .HasColumnType("int"); + + b.Property("IdQuiz") + .HasColumnType("int"); + + b.HasKey("IdQuestion", "IdQuiz"); + + b.HasIndex("IdQuiz"); + + b.ToTable("QuizQuestion"); + + b.HasData( + new + { + IdQuestion = 1, + IdQuiz = 1 + }, + new + { + IdQuestion = 2, + IdQuiz = 1 + }, + new + { + IdQuestion = 3, + IdQuiz = 1 + }, + new + { + IdQuestion = 4, + IdQuiz = 1 + }, + new + { + IdQuestion = 5, + IdQuiz = 1 + }, + new + { + IdQuestion = 6, + IdQuiz = 2 + }, + new + { + IdQuestion = 7, + IdQuiz = 2 + }, + new + { + IdQuestion = 8, + IdQuiz = 2 + }, + new + { + IdQuestion = 9, + IdQuiz = 2 + }, + new + { + IdQuestion = 10, + IdQuiz = 2 + }); }); modelBuilder.Entity("Entity.Quote", b => @@ -135,7 +572,17 @@ namespace StubbedContextLib.Migrations b.Property("Content") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IdCharacter") + .HasColumnType("int"); + + b.Property("IdSource") + .HasColumnType("int"); + + b.Property("IdUsersPropose") + .HasColumnType("int"); b.Property("IsValid") .HasColumnType("bit"); @@ -148,7 +595,125 @@ namespace StubbedContextLib.Migrations b.HasKey("Id"); - b.ToTable("Quote"); + b.HasIndex("IdCharacter"); + + b.HasIndex("IdSource"); + + b.HasIndex("IdUsersPropose"); + + b.ToTable("quotes"); + + b.HasData( + new + { + Id = 1, + Content = "Je n'y crois pas. Je n'y crois pas. Ce n'est pas possible", + IdCharacter = 1, + IdSource = 1, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 2, + Content = "There is always hope", + IdCharacter = 2, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 3, + Content = "A red sun rises. Blood has been spilled this night.", + IdCharacter = 3, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 4, + Content = "I wish the Ring had never come to me.I wish none of this had happened.", + IdCharacter = 4, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 5, + Content = "Dobby is a free elf!", + IdCharacter = 5, + IdSource = 4, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 6, + Content = "Winter is comming", + IdCharacter = 6, + IdSource = 3, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 7, + Content = "Je suis la dernière Targaryen. Je suis la reine des dragons", + IdCharacter = 7, + IdSource = 3, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 8, + Content = "Je ne suis pas prêt à affronter ça. C'est trop pour moi.", + IdCharacter = 8, + IdSource = 5, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 9, + Content = "Aidez-moi, Obi-Wan Kenobi, vous êtes mon seul espoir.", + IdCharacter = 9, + IdSource = 5, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 10, + Content = "La quoi ?", + IdCharacter = 10, + IdSource = 4, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }); }); modelBuilder.Entity("Entity.Source", b => @@ -161,14 +726,55 @@ namespace StubbedContextLib.Migrations b.Property("Title") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TypeSrc") + .HasColumnType("int"); b.Property("Year") .HasColumnType("int"); b.HasKey("Id"); - b.ToTable("Source"); + b.ToTable("sources"); + + b.HasData( + new + { + Id = 1, + Title = "Jurassic Park", + TypeSrc = 0, + Year = 1993 + }, + new + { + Id = 2, + Title = "Le Seigneur des anneaux : La Communauté de l'anneau", + TypeSrc = 0, + Year = 2001 + }, + new + { + Id = 3, + Title = "Game of throne", + TypeSrc = 1, + Year = 2011 + }, + new + { + Id = 4, + Title = "Harry Potter à l'école des sorcier", + TypeSrc = 0, + Year = 1997 + }, + new + { + Id = 5, + Title = "Star Wars, épisode IV : Un nouvel espoir", + TypeSrc = 0, + Year = 1977 + }); }); modelBuilder.Entity("Entity.Users", b => @@ -180,50 +786,239 @@ namespace StubbedContextLib.Migrations SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); b.Property("Created") - .HasColumnType("datetime2"); + .HasColumnType("date") + .HasColumnName("Created"); b.Property("Email") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); b.Property("IdImage") .HasColumnType("int"); b.Property("Password") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); b.Property("UserName") .IsRequired() - .HasColumnType("nvarchar(max)"); + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); b.HasKey("Id"); b.HasIndex("IdImage"); - b.ToTable("Users"); + b.ToTable("users"); b.HasData( new { Id = 1, - Created = new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), - Email = "dev@gmail.com", + Created = new DateTime(2025, 5, 12, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "jhonDhoe@gmail.com", IdImage = 1, Password = "1234", - UserName = "Dev" + UserName = "Jhon-Dhoe" }, new { Id = 2, - Created = new DateTime(2000, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified), - Email = "admin@gmail.com", - IdImage = 1, - Password = "1234", - UserName = "Admin" + Created = new DateTime(2025, 3, 19, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "lucy_rose@outlook.com", + IdImage = 2, + Password = "abcd", + UserName = "Lucy-Rose" + }, + new + { + Id = 3, + Created = new DateTime(2024, 11, 2, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "mark.taylor@yahoo.com", + IdImage = 3, + Password = "5678", + UserName = "Mark-Taylor" + }, + new + { + Id = 4, + Created = new DateTime(2025, 2, 28, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "sophie.martin@gmail.com", + IdImage = 4, + Password = "4321", + UserName = "Sophie-Martin" + }, + new + { + Id = 5, + Created = new DateTime(2025, 1, 15, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "nathan_doe@aol.com", + IdImage = 5, + Password = "8765", + UserName = "Nathan-Doe" + }, + new + { + Id = 6, + Created = new DateTime(2025, 4, 7, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "ella.brown@icloud.com", + IdImage = 6, + Password = "2468", + UserName = "Ella-Brown" + }, + new + { + Id = 7, + Created = new DateTime(2024, 12, 25, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "oliver_smith@gmail.com", + IdImage = 7, + Password = "1357", + UserName = "Oliver-Smith" + }, + new + { + Id = 8, + Created = new DateTime(2025, 3, 5, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "mia.jones@outlook.com", + IdImage = 8, + Password = "1122", + UserName = "Mia-Jones" + }, + new + { + Id = 9, + Created = new DateTime(2025, 2, 22, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "kevin_williams@aol.com", + IdImage = 9, + Password = "2233", + UserName = "Kevin-Williams" + }, + new + { + Id = 10, + Created = new DateTime(2025, 1, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "olivia.white@yahoo.com", + IdImage = 10, + Password = "3344", + UserName = "Olivia-White" }); }); + modelBuilder.Entity("Entity.Character", b => + { + b.HasOne("Entity.Images", "Images") + .WithMany("Characters") + .HasForeignKey("IdImage") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Images"); + }); + + modelBuilder.Entity("Entity.Commentary", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany("commentaries") + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Users", "Users") + .WithMany("Commentary") + .HasForeignKey("IdUsers") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Quote"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("Entity.DailyQuote", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany("DailyQuotes") + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Quote"); + }); + + modelBuilder.Entity("Entity.Favorite", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany() + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Users", "Users") + .WithMany() + .HasForeignKey("IdUsers") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Quote"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("Entity.Quiz", b => + { + b.HasOne("Entity.Images", "Images") + .WithMany("Quizs") + .HasForeignKey("IdImage") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Images"); + }); + + modelBuilder.Entity("Entity.QuizQuestion", b => + { + b.HasOne("Entity.Question", null) + .WithMany() + .HasForeignKey("IdQuestion") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Quiz", null) + .WithMany() + .HasForeignKey("IdQuiz") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Entity.Quote", b => + { + b.HasOne("Entity.Character", "Character") + .WithMany("Quotes") + .HasForeignKey("IdCharacter") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Source", "Source") + .WithMany("Quotes") + .HasForeignKey("IdSource") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Users", "User") + .WithMany("Quotes") + .HasForeignKey("IdUsersPropose") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Character"); + + b.Navigation("Source"); + + b.Navigation("User"); + }); + modelBuilder.Entity("Entity.Users", b => { b.HasOne("Entity.Images", "Images") @@ -235,10 +1030,38 @@ namespace StubbedContextLib.Migrations b.Navigation("Images"); }); + modelBuilder.Entity("Entity.Character", b => + { + b.Navigation("Quotes"); + }); + modelBuilder.Entity("Entity.Images", b => { + b.Navigation("Characters"); + + b.Navigation("Quizs"); + b.Navigation("Users"); }); + + modelBuilder.Entity("Entity.Quote", b => + { + b.Navigation("DailyQuotes"); + + b.Navigation("commentaries"); + }); + + modelBuilder.Entity("Entity.Source", b => + { + b.Navigation("Quotes"); + }); + + modelBuilder.Entity("Entity.Users", b => + { + b.Navigation("Commentary"); + + b.Navigation("Quotes"); + }); #pragma warning restore 612, 618 } } diff --git a/WF_EF_Api/StubbedContextLib/StubWTFContext.cs b/WF_EF_Api/StubbedContextLib/StubWTFContext.cs index bd533d8..6df9912 100644 --- a/WF_EF_Api/StubbedContextLib/StubWTFContext.cs +++ b/WF_EF_Api/StubbedContextLib/StubWTFContext.cs @@ -19,6 +19,32 @@ namespace StubbedContextLib new Admin() { IdUsers = 1 } );*/ + modelBuilder.Entity().HasData( + new Images() { Id = 1, ImgPath = "https://th.bing.com/th/id/OIP.TJuWNCsibz8MVmhdNQEdMwHaE8?w=244&h=180&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 2, ImgPath = "https://th.bing.com/th/id/OIP.NgXRQ5-IknA6_qOPFhLWIwHaHK?w=165&h=180&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 3, ImgPath = "https://th.bing.com/th/id/OIP.XcJoJ6bC9sAMjol1pJn5UQHaLH?w=118&h=180&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 4, ImgPath = "https://th.bing.com/th/id/OIP.PPIESqZaNDa-qUcfSDXhdQHaGK?w=210&h=180&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 5, ImgPath = "https://th.bing.com/th/id/OIP.XBghSl2kfRNNtQoSxc901wHaHa?w=177&h=180&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 6, ImgPath = "https://th.bing.com/th/id/OIP.af1Aid64cqEKoIOBgCPxtQHaJO?w=145&h=182&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 7, ImgPath = "https://th.bing.com/th/id/OIP.ri5vSXr5lNTLt4DO6KQXyQHaI4?w=158&h=189&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 8, ImgPath = "https://th.bing.com/th/id/OIP.uPTRLR8uspCiafiunUqKfQHaMJ?w=115&h=180&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 9, ImgPath = "https://th.bing.com/th/id/OIP.hcJis4rKbyQtugsoFJU2ngHaM_?w=118&h=207&c=7&r=0&o=5&pid=1.7" }, + new Images() { Id = 10, ImgPath = "https://th.bing.com/th/id/OIP.Py1_XfUrKJY_A6tYEmFS5wHaE8?w=280&h=187&c=7&r=0&o=5&pid=1.7" } + ); + + modelBuilder.Entity().HasData( + new Users() { Id = 1, Email = "jhonDhoe@gmail.com", Password = "1234", Created = new DateTime(2025, 5, 12), UserName = "Jhon-Dhoe", IdImage = 1 }, + new Users() { Id = 2, Email = "lucy_rose@outlook.com", Password = "abcd", Created = new DateTime(2025, 3, 19), UserName = "Lucy-Rose", IdImage = 2 }, + new Users() { Id = 3, Email = "mark.taylor@yahoo.com", Password = "5678", Created = new DateTime(2024, 11, 2), UserName = "Mark-Taylor", IdImage = 3 }, + new Users() { Id = 4, Email = "sophie.martin@gmail.com", Password = "4321", Created = new DateTime(2025, 2, 28), UserName = "Sophie-Martin", IdImage = 4 }, + new Users() { Id = 5, Email = "nathan_doe@aol.com", Password = "8765", Created = new DateTime(2025, 1, 15), UserName = "Nathan-Doe", IdImage = 5 }, + new Users() { Id = 6, Email = "ella.brown@icloud.com", Password = "2468", Created = new DateTime(2025, 4, 7), UserName = "Ella-Brown", IdImage = 6 }, + new Users() { Id = 7, Email = "oliver_smith@gmail.com", Password = "1357", Created = new DateTime(2024, 12, 25), UserName = "Oliver-Smith", IdImage = 7 }, + new Users() { Id = 8, Email = "mia.jones@outlook.com", Password = "1122", Created = new DateTime(2025, 3, 5), UserName = "Mia-Jones", IdImage = 8 }, + new Users() { Id = 9, Email = "kevin_williams@aol.com", Password = "2233", Created = new DateTime(2025, 2, 22), UserName = "Kevin-Williams", IdImage = 9 }, + new Users() { Id = 10, Email = "olivia.white@yahoo.com", Password = "3344", Created = new DateTime(2025, 1, 3), UserName = "Olivia-White", IdImage = 10 } + ); + modelBuilder.Entity().HasData( new Character() { Id = 1 , Name = "Alan Grant", IdImage = 1}, new Character() { Id = 2, Name = "Aragorn", IdImage = 2 }, @@ -32,6 +58,19 @@ namespace StubbedContextLib new Character() { Id = 10, Name = "Harry Potter", IdImage = 10 } ); + modelBuilder.Entity().HasData( + new Quote() { Id = 1, Content = "Je n'y crois pas. Je n'y crois pas. Ce n'est pas possible", IdCharacter = 1, IdSource = 1, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 }, + new Quote() { Id = 2, Content = "There is always hope", IdCharacter = 2, IdSource = 2, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, + new Quote() { Id = 3, Content = "A red sun rises. Blood has been spilled this night.", IdCharacter = 3, IdSource = 2, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, + new Quote() { Id = 4, Content = "I wish the Ring had never come to me.I wish none of this had happened.", IdCharacter = 4, IdSource = 2, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, + new Quote() { Id = 5, Content = "Dobby is a free elf!", IdCharacter = 5, IdSource = 4, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, + new Quote() { Id = 6, Content = "Winter is comming", IdCharacter = 6, IdSource = 3, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, + new Quote() { Id = 7, Content = "Je suis la dernière Targaryen. Je suis la reine des dragons", IdCharacter = 7, IdSource = 3, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 }, + new Quote() { Id = 8, Content = "Je ne suis pas prêt à affronter ça. C'est trop pour moi.", IdCharacter = 8, IdSource = 5, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 }, + new Quote() { Id = 9, Content = "Aidez-moi, Obi-Wan Kenobi, vous êtes mon seul espoir.", IdCharacter = 9, IdSource = 5, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 }, + new Quote() { Id = 10, Content = "La quoi ?", IdCharacter = 10, IdSource = 4, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 } + ); + modelBuilder.Entity().HasData( new Commentary() { Id = 1, Comment = "Ce film est le meilleur", DateCommentary = new DateTime(2025,2,3), IdQuote = 1, IdUsers = 2 }, new Commentary() { Id = 2, Comment = "Very good", DateCommentary = new DateTime(2025, 3, 11), IdQuote = 1, IdUsers = 3 } @@ -54,35 +93,24 @@ namespace StubbedContextLib new Favorite() { IdQuote = 10, IdUsers = 5 } ); - modelBuilder.Entity().HasData( - new Images() { Id = 1 , ImgPath = "https://th.bing.com/th/id/OIP.TJuWNCsibz8MVmhdNQEdMwHaE8?w=244&h=180&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 2 , ImgPath = "https://th.bing.com/th/id/OIP.NgXRQ5-IknA6_qOPFhLWIwHaHK?w=165&h=180&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 3 , ImgPath = "https://th.bing.com/th/id/OIP.XcJoJ6bC9sAMjol1pJn5UQHaLH?w=118&h=180&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 4 , ImgPath = "https://th.bing.com/th/id/OIP.PPIESqZaNDa-qUcfSDXhdQHaGK?w=210&h=180&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 5 , ImgPath = "https://th.bing.com/th/id/OIP.XBghSl2kfRNNtQoSxc901wHaHa?w=177&h=180&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 6 , ImgPath = "https://th.bing.com/th/id/OIP.af1Aid64cqEKoIOBgCPxtQHaJO?w=145&h=182&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 7 , ImgPath = "https://th.bing.com/th/id/OIP.ri5vSXr5lNTLt4DO6KQXyQHaI4?w=158&h=189&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 8 , ImgPath = "https://th.bing.com/th/id/OIP.uPTRLR8uspCiafiunUqKfQHaMJ?w=115&h=180&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 9 , ImgPath = "https://th.bing.com/th/id/OIP.hcJis4rKbyQtugsoFJU2ngHaM_?w=118&h=207&c=7&r=0&o=5&pid=1.7" }, - new Images() { Id = 10 , ImgPath = "https://th.bing.com/th/id/OIP.Py1_XfUrKJY_A6tYEmFS5wHaE8?w=280&h=187&c=7&r=0&o=5&pid=1.7" } - ); + modelBuilder.Entity().HasData( new Question() { Id = 1, Text = "Qui est le leader de la Communauté de l'Anneau ?", AnswerA = "Gimli", AnswerB = "Aragorn", AnswerC = "Frodon", AnswerD = "Gandalf", CorrectAnswer = "B" }, new Question() { Id = 2, Text = "Dans quelle maison Harry Potter est-il ?", AnswerA = "Serdaigle", AnswerB = "Gryffondor", AnswerC = "Serpentard", AnswerD = "Poufsouffle", CorrectAnswer = "B" }, - new Question() { Id = 3, Text = "Qui est le Seigneur des Ténèbres dans la saga 'Le Seigneur des Anneaux' ?", AnswerA = "Saroumane", AnswerB = "Sauron", AnswerC = "Gollum", AnswerD = "Gothmog", CorrectAnswer = "B" }, - new Question() { Id = 4, Text = "Dans le film 'Star Wars : Episode IV', qui sauve Luke Skywalker de l'Étoile de la Mort ?", AnswerA = "Han Solo", AnswerB = "Princesse Leia", AnswerC = "Chewbacca", AnswerD = "R2-D2", CorrectAnswer = "A" }, - new Question() { Id = 5, Text = "Qui est le souverain de Narnia dans 'Le Lion, la Sorcière Blanche et l'Armoire Magique' ?", AnswerA = "Reine Jadis", AnswerB = "Aslan", AnswerC = "Edmund", AnswerD = "Lucy", CorrectAnswer = "B" }, - new Question() { Id = 6, Text = "Quel est le nom du dragon dans 'Le Hobbit' ?", AnswerA = "Smaug", AnswerB = "Falkor", AnswerC = "Norbert", AnswerD = "Shenron", CorrectAnswer = "A" }, - new Question() { Id = 7, Text = "Qui est la première personne à être mordue par un vampire dans 'Twilight' ?", AnswerA = "Bella Swan", AnswerB = "Edward Cullen", AnswerC = "Jacob Black", AnswerD = "Victoria", CorrectAnswer = "A" }, - new Question() { Id = 8, Text = "Quel personnage dit 'Que la Force soit avec toi' dans 'Star Wars' ?", AnswerA = "Obi-Wan Kenobi", AnswerB = "Yoda", AnswerC = "Han Solo", AnswerD = "Luke Skywalker", CorrectAnswer = "A" }, - new Question() { Id = 9, Text = "Dans 'Jurassic Park', quel est le nom du paléontologue sur l'île ?", AnswerA = "Dr. Ellie Sattler", AnswerB = "Alan Grant", AnswerC = "John Hammond", AnswerD = "Dennis Nedry", CorrectAnswer = "B" }, - new Question() { Id = 10, Text = "Dans 'Game of Thrones', qui est surnommée la Mère des Dragons ?", AnswerA = "Cersei Lannister", AnswerB = "Arya Stark", AnswerC = "Daenerys Targaryen", AnswerD = "Sansa Stark", CorrectAnswer = "C" } + new Question() { Id = 3, Text = "Qui est le Seigneur des Ténèbres dans la saga Le Seigneur des Anneaux ?", AnswerA = "Saroumane", AnswerB = "Sauron", AnswerC = "Gollum", AnswerD = "Gothmog", CorrectAnswer = "B" }, + new Question() { Id = 4, Text = "Dans le film Star Wars : Episode IV, qui sauve Luke Skywalker de l'Étoile de la Mort ?", AnswerA = "Han Solo", AnswerB = "Princesse Leia", AnswerC = "Chewbacca", AnswerD = "R2-D2", CorrectAnswer = "A" }, + new Question() { Id = 5, Text = "Qui est le souverain de Narnia dans Le Lion, la Sorcière Blanche et l'Armoire Magique ?", AnswerA = "Reine Jadis", AnswerB = "Aslan", AnswerC = "Edmund", AnswerD = "Lucy", CorrectAnswer = "B" }, + new Question() { Id = 6, Text = "Quel est le nom du dragon dans Le Hobbit ?", AnswerA = "Smaug", AnswerB = "Falkor", AnswerC = "Norbert", AnswerD = "Shenron", CorrectAnswer = "A" }, + new Question() { Id = 7, Text = "Qui est la première personne à être mordue par un vampire dans Twilight ?", AnswerA = "Bella Swan", AnswerB = "Edward Cullen", AnswerC = "Jacob Black", AnswerD = "Victoria", CorrectAnswer = "A" }, + new Question() { Id = 8, Text = "Quel personnage dit Que la Force soit avec toi dans Star Wars ?", AnswerA = "Obi-Wan Kenobi", AnswerB = "Yoda", AnswerC = "Han Solo", AnswerD = "Luke Skywalker", CorrectAnswer = "A" }, + new Question() { Id = 9, Text = "Dans Jurassic Park, quel est le nom du paléontologue sur l'île ?", AnswerA = "Dr. Ellie Sattler", AnswerB = "Alan Grant", AnswerC = "John Hammond", AnswerD = "Dennis Nedry", CorrectAnswer = "B" }, + new Question() { Id = 10, Text = "Dans Game of Thrones, qui est surnommée la Mère des Dragons ?", AnswerA = "Cersei Lannister", AnswerB = "Arya Stark", AnswerC = "Daenerys Targaryen", AnswerD = "Sansa Stark", CorrectAnswer = "C" } ); modelBuilder.Entity().HasData( new Quiz() { Id = 1, IdImage = 1, Title = "Quiz 1", NbQuestion = 5 }, - new Quiz() { Id = 1, IdImage = 2, Title = "Quiz 2", NbQuestion = 5 } + new Quiz() { Id = 2, IdImage = 2, Title = "Quiz 2", NbQuestion = 5 } ); modelBuilder.Entity().HasData( @@ -98,20 +126,6 @@ namespace StubbedContextLib new QuizQuestion() { IdQuestion = 10, IdQuiz = 2 } ); - modelBuilder.Entity().HasData( - new Quote() { Id = 1, Content = "Je n'y crois pas. Je n'y crois pas. Ce n'est pas possible", IdCharacter = 1, IdSource = 1, IdUsersPropose = 1 , IsValid = true, Langage = LangEnum.vf, Likes = 11025}, - new Quote() { Id = 2, Content = "There is always hope", IdCharacter = 2, IdSource = 2, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, - new Quote() { Id = 3, Content = "A red sun rises. Blood has been spilled this night.", IdCharacter = 3, IdSource = 2, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, - new Quote() { Id = 4, Content = "I wish the Ring had never come to me.I wish none of this had happened.", IdCharacter = 4, IdSource = 2, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, - new Quote() { Id = 5, Content = "Dobby is a free elf!", IdCharacter = 5 , IdSource = 4 , IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, - new Quote() { Id = 6, Content = "Winter is comming", IdCharacter = 6 , IdSource = 3, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vo, Likes = 11025 }, - new Quote() { Id = 7, Content = "Je suis la dernière Targaryen. Je suis la reine des dragons", IdCharacter = 7 , IdSource = 3, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 }, - new Quote() { Id = 8, Content = "Je ne suis pas prêt à affronter ça. C'est trop pour moi.", IdCharacter = 8 , IdSource = 5, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 }, - new Quote() { Id = 9, Content = "Aidez-moi, Obi-Wan Kenobi, vous êtes mon seul espoir.", IdCharacter = 9 , IdSource = 5, IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 }, - new Quote() { Id = 10, Content = "La quoi ?", IdCharacter = 10 , IdSource = 4 , IdUsersPropose = 1, IsValid = true, Langage = LangEnum.vf, Likes = 11025 } - ); - - modelBuilder.Entity().HasData( new Source() { Id = 1, Title = "Jurassic Park", TypeSrc = TypeSrcEnum.movie, Year = 1993 }, new Source() { Id = 2, Title = "Le Seigneur des anneaux : La Communauté de l'anneau", TypeSrc = TypeSrcEnum.movie, Year = 2001 }, @@ -120,18 +134,7 @@ namespace StubbedContextLib new Source() { Id = 5, Title = "Star Wars, épisode IV : Un nouvel espoir", TypeSrc = TypeSrcEnum.movie, Year = 1977 } ); - modelBuilder.Entity().HasData( - new Users() { Id = 1, Email = "jhonDhoe@gmail.com", Password = "1234", Created = new DateTime(2025, 5, 12), UserName = "Jhon-Dhoe", IdImage = 1 }, - new Users() { Id = 2, Email = "lucy_rose@outlook.com", Password = "abcd", Created = new DateTime(2025, 3, 19), UserName = "Lucy-Rose", IdImage = 2 }, - new Users() { Id = 3, Email = "mark.taylor@yahoo.com", Password = "5678", Created = new DateTime(2024, 11, 2), UserName = "Mark-Taylor", IdImage = 3 }, - new Users() { Id = 4, Email = "sophie.martin@gmail.com", Password = "4321", Created = new DateTime(2025, 2, 28), UserName = "Sophie-Martin", IdImage = 4 }, - new Users() { Id = 5, Email = "nathan_doe@aol.com", Password = "8765", Created = new DateTime(2025, 1, 15), UserName = "Nathan-Doe", IdImage = 5 }, - new Users() { Id = 6, Email = "ella.brown@icloud.com", Password = "2468", Created = new DateTime(2025, 4, 7), UserName = "Ella-Brown", IdImage = 6 }, - new Users() { Id = 7, Email = "oliver_smith@gmail.com", Password = "1357", Created = new DateTime(2024, 12, 25), UserName = "Oliver-Smith", IdImage = 7 }, - new Users() { Id = 8, Email = "mia.jones@outlook.com", Password = "1122", Created = new DateTime(2025, 3, 5), UserName = "Mia-Jones", IdImage = 8 }, - new Users() { Id = 9, Email = "kevin_williams@aol.com", Password = "2233", Created = new DateTime(2025, 2, 22), UserName = "Kevin-Williams", IdImage = 9 }, - new Users() { Id = 10, Email = "olivia.white@yahoo.com", Password = "3344", Created = new DateTime(2025, 1, 3), UserName = "Olivia-White", IdImage = 10 } - ); + } -- 2.36.3 From d8f941f8ecb00f7762c316098b2e34dcbb6d136b Mon Sep 17 00:00:00 2001 From: Kevin MONDEJAR Date: Fri, 14 Mar 2025 12:24:43 +0100 Subject: [PATCH 3/8] J'y suis presque (et bah non) --- WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj b/WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj index 9a838f3..4ae6e1b 100644 --- a/WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj +++ b/WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj @@ -18,4 +18,8 @@ + + + + -- 2.36.3 From 8ccde0b1250ee9be57de1150dea4db852c5e0e90 Mon Sep 17 00:00:00 2001 From: kekentin Date: Mon, 17 Mar 2025 17:34:37 +0100 Subject: [PATCH 4/8] Build qui marche , verifier que la supretion / insertion / deplacement marche entre : - User/Commentary/Quote - User/Favorite/Quote --- WF_EF_Api/Contextlib/DbCommentaryManager.cs | 2 +- WF_EF_Api/Contextlib/WTFContext.cs | 21 ++++++ WF_EF_Api/Entity/Commentary.cs | 4 +- WF_EF_Api/Entity/Quote.cs | 13 ++-- WF_EF_Api/Entity/Source.cs | 2 +- WF_EF_Api/Entity/Users.cs | 2 - ...20250317163102_migrationTest1.Designer.cs} | 66 +++++++++---------- ...t1.cs => 20250317163102_migrationTest1.cs} | 39 +++++------ .../Migrations/StubWTFContextModelSnapshot.cs | 64 ++++++++---------- WF_EF_Api/StubbedContextLib/StubWTFContext.cs | 4 +- .../StubbedContextLib.csproj | 4 -- 11 files changed, 108 insertions(+), 113 deletions(-) rename WF_EF_Api/StubbedContextLib/Migrations/{20250314112216_migrationTest1.Designer.cs => 20250317163102_migrationTest1.Designer.cs} (94%) rename WF_EF_Api/StubbedContextLib/Migrations/{20250314112216_migrationTest1.cs => 20250317163102_migrationTest1.cs} (92%) diff --git a/WF_EF_Api/Contextlib/DbCommentaryManager.cs b/WF_EF_Api/Contextlib/DbCommentaryManager.cs index 85c7ac8..002082f 100644 --- a/WF_EF_Api/Contextlib/DbCommentaryManager.cs +++ b/WF_EF_Api/Contextlib/DbCommentaryManager.cs @@ -63,7 +63,7 @@ namespace Contextlib public async Task DeleteCommentForUser(int userId) { // Retrieve comments for the specific userId - var comments = await _context.comments.Where(x => x.IdUsers == userId).ToListAsync(); + var comments = await _context.comments.Where(x => x.IdUser == userId).ToListAsync(); if (!comments.Any()) // If no comments exist for this userId { throw new KeyNotFoundException($"No comments found for the user ID: {userId}."); diff --git a/WF_EF_Api/Contextlib/WTFContext.cs b/WF_EF_Api/Contextlib/WTFContext.cs index f98290d..e0f0a31 100644 --- a/WF_EF_Api/Contextlib/WTFContext.cs +++ b/WF_EF_Api/Contextlib/WTFContext.cs @@ -34,17 +34,38 @@ namespace Contextlib .UsingEntity( l => l.HasOne(f => f.Quote) .WithMany() + .OnDelete(DeleteBehavior.ClientCascade) .HasForeignKey(f => f.IdQuote), r => r.HasOne(f => f.Users) .WithMany() + .OnDelete(DeleteBehavior.ClientCascade) .HasForeignKey(f => f.IdUsers) ); modelBuilder.Entity() .HasMany(u => u.Quotes) .WithOne(q => q.User) + .OnDelete(DeleteBehavior.ClientSetNull) .HasForeignKey(q => q.IdUsersPropose); + modelBuilder.Entity() + .HasMany() + .WithMany() + .UsingEntity( + i => i.HasKey(e => new { e.IdUser, e.IdQuote }) + ); + + modelBuilder.Entity() + .HasOne(c => c.User) + .WithMany() + .HasForeignKey(c => c.IdUser); + + modelBuilder.Entity() + .HasMany(q => q.Commentarys) + .WithOne(c => c.Quote) + .OnDelete(DeleteBehavior.ClientCascade) + .HasForeignKey(c => c.IdQuote); + modelBuilder.Entity() .HasMany(q => q.Questions) .WithMany(u => u.Quizs) diff --git a/WF_EF_Api/Entity/Commentary.cs b/WF_EF_Api/Entity/Commentary.cs index 07649d2..92b2908 100644 --- a/WF_EF_Api/Entity/Commentary.cs +++ b/WF_EF_Api/Entity/Commentary.cs @@ -16,7 +16,7 @@ namespace Entity [Required] [ForeignKey(nameof(Users))] - public int IdUsers { get; set; } + public int IdUser { get; set; } [Required] [ForeignKey(nameof(Quote))] @@ -32,6 +32,6 @@ namespace Entity public Quote Quote { get; set; } = null!; - public Users Users { get; set; } = null!; + public Users User { get; set; } = null!; } } diff --git a/WF_EF_Api/Entity/Quote.cs b/WF_EF_Api/Entity/Quote.cs index 976f62e..37d5f00 100644 --- a/WF_EF_Api/Entity/Quote.cs +++ b/WF_EF_Api/Entity/Quote.cs @@ -15,7 +15,7 @@ namespace Entity public int Id { get; set; } [Required] - [StringLength(50)] + [StringLength(100)] public string Content { get; set; } [Required] @@ -35,11 +35,12 @@ namespace Entity [ForeignKey(nameof(Source))] public int IdSource { get; set; } - [Required] [ForeignKey(nameof(Users))] - public int IdUsersPropose { get; set; } - - public Users User { get; set; } = null!; + public int? IdUsersPropose { get; set; } + //Réson de pour quoi j'ai mis le user en nullable et mis .OnDelete(DeleteBehavior.ClientSetNull) dans WTFContext + //https://learn.microsoft.com/fr-fr/ef/core/saving/cascade-delete + //Les suppressions en cascade sont nécessaires quand une entité dépendante/enfant ne peut plus être associée à son entité principale/parente actuelle. Cela peut se produire à la suite de la suppression de l’entité principale/parente, ou quand l’entité principale/parente existe toujours mais que l’entité dépendante/enfant ne lui est plus associée. + public Users? User { get; set; } = null!; public Source Source { get; set; } = null!; @@ -47,7 +48,7 @@ namespace Entity public ICollection DailyQuotes { get; set; } = new List(); - public ICollection commentaries { get; set; } = new List(); + public ICollection Commentarys { get; set; } = new List(); public ICollection Favorite { get; } = new List(); } diff --git a/WF_EF_Api/Entity/Source.cs b/WF_EF_Api/Entity/Source.cs index 4a9f77c..60cda07 100644 --- a/WF_EF_Api/Entity/Source.cs +++ b/WF_EF_Api/Entity/Source.cs @@ -15,7 +15,7 @@ namespace Entity public int Id { get; set; } [Required] - [StringLength(50)] + [StringLength(100)] public string Title { get; set; } [Required] diff --git a/WF_EF_Api/Entity/Users.cs b/WF_EF_Api/Entity/Users.cs index 80e38a7..e7a8101 100644 --- a/WF_EF_Api/Entity/Users.cs +++ b/WF_EF_Api/Entity/Users.cs @@ -37,8 +37,6 @@ namespace Entity public ICollection Quotes { get; set; } = new List(); - public ICollection Commentary { get; set; } = new List(); - public ICollection Favorite { get; set; } = new List(); } } diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.Designer.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250317163102_migrationTest1.Designer.cs similarity index 94% rename from WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.Designer.cs rename to WF_EF_Api/StubbedContextLib/Migrations/20250317163102_migrationTest1.Designer.cs index d466b28..e352e28 100644 --- a/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.Designer.cs +++ b/WF_EF_Api/StubbedContextLib/Migrations/20250317163102_migrationTest1.Designer.cs @@ -12,7 +12,7 @@ using StubbedContextLib; namespace StubbedContextLib.Migrations { [DbContext(typeof(StubWTFContext))] - [Migration("20250314112216_migrationTest1")] + [Migration("20250317163102_migrationTest1")] partial class migrationTest1 { /// @@ -112,11 +112,11 @@ namespace StubbedContextLib.Migrations modelBuilder.Entity("Entity.Commentary", b => { - b.Property("Id") - .ValueGeneratedOnAdd() + b.Property("IdUser") .HasColumnType("int"); - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("IdQuote") + .HasColumnType("int"); b.Property("Comment") .IsRequired() @@ -127,36 +127,34 @@ namespace StubbedContextLib.Migrations .HasColumnType("date") .HasColumnName("DateCommentary"); - b.Property("IdQuote") + b.Property("Id") + .ValueGeneratedOnAdd() .HasColumnType("int"); - b.Property("IdUsers") - .HasColumnType("int"); + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - b.HasKey("Id"); + b.HasKey("IdUser", "IdQuote"); b.HasIndex("IdQuote"); - b.HasIndex("IdUsers"); - b.ToTable("comments"); b.HasData( new { - Id = 1, + IdUser = 2, + IdQuote = 1, Comment = "Ce film est le meilleur", DateCommentary = new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), - IdQuote = 1, - IdUsers = 2 + Id = 1 }, new { - Id = 2, + IdUser = 3, + IdQuote = 1, Comment = "Very good", DateCommentary = new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), - IdQuote = 1, - IdUsers = 3 + Id = 2 }); }); @@ -575,8 +573,8 @@ namespace StubbedContextLib.Migrations b.Property("Content") .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); b.Property("IdCharacter") .HasColumnType("int"); @@ -584,7 +582,7 @@ namespace StubbedContextLib.Migrations b.Property("IdSource") .HasColumnType("int"); - b.Property("IdUsersPropose") + b.Property("IdUsersPropose") .HasColumnType("int"); b.Property("IsValid") @@ -729,8 +727,8 @@ namespace StubbedContextLib.Migrations b.Property("Title") .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); b.Property("TypeSrc") .HasColumnType("int"); @@ -923,20 +921,20 @@ namespace StubbedContextLib.Migrations modelBuilder.Entity("Entity.Commentary", b => { b.HasOne("Entity.Quote", "Quote") - .WithMany("commentaries") + .WithMany("Commentarys") .HasForeignKey("IdQuote") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.ClientCascade) .IsRequired(); - b.HasOne("Entity.Users", "Users") - .WithMany("Commentary") - .HasForeignKey("IdUsers") + b.HasOne("Entity.Users", "User") + .WithMany() + .HasForeignKey("IdUser") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Quote"); - b.Navigation("Users"); + b.Navigation("User"); }); modelBuilder.Entity("Entity.DailyQuote", b => @@ -955,13 +953,13 @@ namespace StubbedContextLib.Migrations b.HasOne("Entity.Quote", "Quote") .WithMany() .HasForeignKey("IdQuote") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.ClientCascade) .IsRequired(); b.HasOne("Entity.Users", "Users") .WithMany() .HasForeignKey("IdUsers") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.ClientCascade) .IsRequired(); b.Navigation("Quote"); @@ -1011,9 +1009,7 @@ namespace StubbedContextLib.Migrations b.HasOne("Entity.Users", "User") .WithMany("Quotes") - .HasForeignKey("IdUsersPropose") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("IdUsersPropose"); b.Navigation("Character"); @@ -1049,9 +1045,9 @@ namespace StubbedContextLib.Migrations modelBuilder.Entity("Entity.Quote", b => { - b.Navigation("DailyQuotes"); + b.Navigation("Commentarys"); - b.Navigation("commentaries"); + b.Navigation("DailyQuotes"); }); modelBuilder.Entity("Entity.Source", b => @@ -1061,8 +1057,6 @@ namespace StubbedContextLib.Migrations modelBuilder.Entity("Entity.Users", b => { - b.Navigation("Commentary"); - b.Navigation("Quotes"); }); #pragma warning restore 612, 618 diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250317163102_migrationTest1.cs similarity index 92% rename from WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.cs rename to WF_EF_Api/StubbedContextLib/Migrations/20250317163102_migrationTest1.cs index a85f30b..437370b 100644 --- a/WF_EF_Api/StubbedContextLib/Migrations/20250314112216_migrationTest1.cs +++ b/WF_EF_Api/StubbedContextLib/Migrations/20250317163102_migrationTest1.cs @@ -50,7 +50,7 @@ namespace StubbedContextLib.Migrations { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), - Title = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Title = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false), Year = table.Column(type: "int", nullable: false), TypeSrc = table.Column(type: "int", nullable: false) }, @@ -153,13 +153,13 @@ namespace StubbedContextLib.Migrations { Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), - Content = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false), + Content = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false), Likes = table.Column(type: "int", nullable: false), Langage = table.Column(type: "int", nullable: false), IsValid = table.Column(type: "bit", nullable: false), IdCharacter = table.Column(type: "int", nullable: false), IdSource = table.Column(type: "int", nullable: false), - IdUsersPropose = table.Column(type: "int", nullable: false) + IdUsersPropose = table.Column(type: "int", nullable: true) }, constraints: table => { @@ -180,33 +180,31 @@ namespace StubbedContextLib.Migrations name: "FK_quotes_users_IdUsersPropose", column: x => x.IdUsersPropose, principalTable: "users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + principalColumn: "Id"); }); migrationBuilder.CreateTable( name: "comments", columns: table => new { + IdUser = table.Column(type: "int", nullable: false), + IdQuote = table.Column(type: "int", nullable: false), Id = table.Column(type: "int", nullable: false) .Annotation("SqlServer:Identity", "1, 1"), - IdUsers = table.Column(type: "int", nullable: false), - IdQuote = table.Column(type: "int", nullable: false), DateCommentary = table.Column(type: "date", nullable: false), Comment = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false) }, constraints: table => { - table.PrimaryKey("PK_comments", x => x.Id); + table.PrimaryKey("PK_comments", x => new { x.IdUser, x.IdQuote }); table.ForeignKey( name: "FK_comments_quotes_IdQuote", column: x => x.IdQuote, principalTable: "quotes", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + principalColumn: "Id"); table.ForeignKey( - name: "FK_comments_users_IdUsers", - column: x => x.IdUsers, + name: "FK_comments_users_IdUser", + column: x => x.IdUser, principalTable: "users", principalColumn: "Id", onDelete: ReferentialAction.Cascade); @@ -243,14 +241,12 @@ namespace StubbedContextLib.Migrations name: "FK_favorites_quotes_IdQuote", column: x => x.IdQuote, principalTable: "quotes", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + principalColumn: "Id"); table.ForeignKey( name: "FK_favorites_users_IdUsers", column: x => x.IdUsers, principalTable: "users", - principalColumn: "Id", - onDelete: ReferentialAction.Cascade); + principalColumn: "Id"); }); migrationBuilder.InsertData( @@ -378,11 +374,11 @@ namespace StubbedContextLib.Migrations migrationBuilder.InsertData( table: "comments", - columns: new[] { "Id", "Comment", "DateCommentary", "IdQuote", "IdUsers" }, + columns: new[] { "IdQuote", "IdUser", "Comment", "DateCommentary", "Id" }, values: new object[,] { - { 1, "Ce film est le meilleur", new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), 1, 2 }, - { 2, "Very good", new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), 1, 3 } + { 1, 2, "Ce film est le meilleur", new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), 1 }, + { 1, 3, "Very good", new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), 2 } }); migrationBuilder.InsertData( @@ -420,11 +416,6 @@ namespace StubbedContextLib.Migrations table: "comments", column: "IdQuote"); - migrationBuilder.CreateIndex( - name: "IX_comments_IdUsers", - table: "comments", - column: "IdUsers"); - migrationBuilder.CreateIndex( name: "IX_favorites_IdUsers", table: "favorites", diff --git a/WF_EF_Api/StubbedContextLib/Migrations/StubWTFContextModelSnapshot.cs b/WF_EF_Api/StubbedContextLib/Migrations/StubWTFContextModelSnapshot.cs index 21818ec..275cb8a 100644 --- a/WF_EF_Api/StubbedContextLib/Migrations/StubWTFContextModelSnapshot.cs +++ b/WF_EF_Api/StubbedContextLib/Migrations/StubWTFContextModelSnapshot.cs @@ -109,11 +109,11 @@ namespace StubbedContextLib.Migrations modelBuilder.Entity("Entity.Commentary", b => { - b.Property("Id") - .ValueGeneratedOnAdd() + b.Property("IdUser") .HasColumnType("int"); - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + b.Property("IdQuote") + .HasColumnType("int"); b.Property("Comment") .IsRequired() @@ -124,36 +124,34 @@ namespace StubbedContextLib.Migrations .HasColumnType("date") .HasColumnName("DateCommentary"); - b.Property("IdQuote") + b.Property("Id") + .ValueGeneratedOnAdd() .HasColumnType("int"); - b.Property("IdUsers") - .HasColumnType("int"); + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - b.HasKey("Id"); + b.HasKey("IdUser", "IdQuote"); b.HasIndex("IdQuote"); - b.HasIndex("IdUsers"); - b.ToTable("comments"); b.HasData( new { - Id = 1, + IdUser = 2, + IdQuote = 1, Comment = "Ce film est le meilleur", DateCommentary = new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), - IdQuote = 1, - IdUsers = 2 + Id = 1 }, new { - Id = 2, + IdUser = 3, + IdQuote = 1, Comment = "Very good", DateCommentary = new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), - IdQuote = 1, - IdUsers = 3 + Id = 2 }); }); @@ -572,8 +570,8 @@ namespace StubbedContextLib.Migrations b.Property("Content") .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); b.Property("IdCharacter") .HasColumnType("int"); @@ -581,7 +579,7 @@ namespace StubbedContextLib.Migrations b.Property("IdSource") .HasColumnType("int"); - b.Property("IdUsersPropose") + b.Property("IdUsersPropose") .HasColumnType("int"); b.Property("IsValid") @@ -726,8 +724,8 @@ namespace StubbedContextLib.Migrations b.Property("Title") .IsRequired() - .HasMaxLength(50) - .HasColumnType("nvarchar(50)"); + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); b.Property("TypeSrc") .HasColumnType("int"); @@ -920,20 +918,20 @@ namespace StubbedContextLib.Migrations modelBuilder.Entity("Entity.Commentary", b => { b.HasOne("Entity.Quote", "Quote") - .WithMany("commentaries") + .WithMany("Commentarys") .HasForeignKey("IdQuote") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.ClientCascade) .IsRequired(); - b.HasOne("Entity.Users", "Users") - .WithMany("Commentary") - .HasForeignKey("IdUsers") + b.HasOne("Entity.Users", "User") + .WithMany() + .HasForeignKey("IdUser") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Quote"); - b.Navigation("Users"); + b.Navigation("User"); }); modelBuilder.Entity("Entity.DailyQuote", b => @@ -952,13 +950,13 @@ namespace StubbedContextLib.Migrations b.HasOne("Entity.Quote", "Quote") .WithMany() .HasForeignKey("IdQuote") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.ClientCascade) .IsRequired(); b.HasOne("Entity.Users", "Users") .WithMany() .HasForeignKey("IdUsers") - .OnDelete(DeleteBehavior.Cascade) + .OnDelete(DeleteBehavior.ClientCascade) .IsRequired(); b.Navigation("Quote"); @@ -1008,9 +1006,7 @@ namespace StubbedContextLib.Migrations b.HasOne("Entity.Users", "User") .WithMany("Quotes") - .HasForeignKey("IdUsersPropose") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); + .HasForeignKey("IdUsersPropose"); b.Navigation("Character"); @@ -1046,9 +1042,9 @@ namespace StubbedContextLib.Migrations modelBuilder.Entity("Entity.Quote", b => { - b.Navigation("DailyQuotes"); + b.Navigation("Commentarys"); - b.Navigation("commentaries"); + b.Navigation("DailyQuotes"); }); modelBuilder.Entity("Entity.Source", b => @@ -1058,8 +1054,6 @@ namespace StubbedContextLib.Migrations modelBuilder.Entity("Entity.Users", b => { - b.Navigation("Commentary"); - b.Navigation("Quotes"); }); #pragma warning restore 612, 618 diff --git a/WF_EF_Api/StubbedContextLib/StubWTFContext.cs b/WF_EF_Api/StubbedContextLib/StubWTFContext.cs index 6df9912..ffc1d06 100644 --- a/WF_EF_Api/StubbedContextLib/StubWTFContext.cs +++ b/WF_EF_Api/StubbedContextLib/StubWTFContext.cs @@ -72,8 +72,8 @@ namespace StubbedContextLib ); modelBuilder.Entity().HasData( - new Commentary() { Id = 1, Comment = "Ce film est le meilleur", DateCommentary = new DateTime(2025,2,3), IdQuote = 1, IdUsers = 2 }, - new Commentary() { Id = 2, Comment = "Very good", DateCommentary = new DateTime(2025, 3, 11), IdQuote = 1, IdUsers = 3 } + new Commentary() { Id = 1, Comment = "Ce film est le meilleur", DateCommentary = new DateTime(2025,2,3), IdQuote = 1, IdUser = 2 }, + new Commentary() { Id = 2, Comment = "Very good", DateCommentary = new DateTime(2025, 3, 11), IdQuote = 1, IdUser = 3 } ); modelBuilder.Entity().HasData( diff --git a/WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj b/WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj index 4ae6e1b..9a838f3 100644 --- a/WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj +++ b/WF_EF_Api/StubbedContextLib/StubbedContextLib.csproj @@ -18,8 +18,4 @@ - - - - -- 2.36.3 From 61fa6f89d76ff509ec613e03a543d46f6db3764c Mon Sep 17 00:00:00 2001 From: Kevin MONDEJAR Date: Tue, 18 Mar 2025 15:22:36 +0100 Subject: [PATCH 5/8] db manager --- WF_EF_Api/Contextlib/DbCommentaryManager.cs | 73 +- WF_EF_Api/Dto2Entities/Dto2Entities.csproj | 14 + .../20250318135625_migr1.Designer.cs | 1065 +++++++++++++++++ .../Migrations/20250318135625_migr1.cs | 22 + 4 files changed, 1162 insertions(+), 12 deletions(-) create mode 100644 WF_EF_Api/Dto2Entities/Dto2Entities.csproj create mode 100644 WF_EF_Api/StubbedContextLib/Migrations/20250318135625_migr1.Designer.cs create mode 100644 WF_EF_Api/StubbedContextLib/Migrations/20250318135625_migr1.cs diff --git a/WF_EF_Api/Contextlib/DbCommentaryManager.cs b/WF_EF_Api/Contextlib/DbCommentaryManager.cs index 002082f..558aa46 100644 --- a/WF_EF_Api/Contextlib/DbCommentaryManager.cs +++ b/WF_EF_Api/Contextlib/DbCommentaryManager.cs @@ -43,14 +43,13 @@ namespace Contextlib /// Thrown when no comments are found for the provided quote ID. public async Task DeleteCommentForQuote(int quoteId) { - // Retrieve comments for the specific quoteId var comments = await _context.comments.Where(x => x.IdQuote == quoteId).ToListAsync(); - if (!comments.Any()) // If no comments exist for this quoteId + if (!comments.Any()) { throw new KeyNotFoundException($"No comments found for the quote ID: {quoteId}."); } - _context.comments.RemoveRange(comments); // Efficiently remove all comments in one batch + _context.comments.RemoveRange(comments); await _context.SaveChangesAsync(); } @@ -62,45 +61,95 @@ namespace Contextlib /// Thrown when no comments are found for the provided user ID. public async Task DeleteCommentForUser(int userId) { - // Retrieve comments for the specific userId var comments = await _context.comments.Where(x => x.IdUser == userId).ToListAsync(); - if (!comments.Any()) // If no comments exist for this userId + if (!comments.Any()) { throw new KeyNotFoundException($"No comments found for the user ID: {userId}."); } - _context.comments.RemoveRange(comments); // Efficiently remove all comments in one batch + _context.comments.RemoveRange(comments); await _context.SaveChangesAsync(); } public async Task> GetAllComment() { - throw new NotImplementedException(); + var comments = _context.comments.ToList(); + return new PaginationResult(comments.Count, 0, comments.Count, comments); } public async Task GetCommentById(int id) { - throw new NotImplementedException(); + var comment = await _context.comments.Where(x => x.Id == id).FirstOrDefaultAsync(); + if(comment == null) + { + throw new KeyNotFoundException($"No comments found with the given ID: {id}."); + } + return comment; } public async Task> GetCommentByQuote(int quoteId, int index, int pageSize) { - throw new NotImplementedException(); + var comments = await _context.comments.Where(x => x.IdQuote == quoteId).ToListAsync(); + if (!comments.Any()) + { + throw new KeyNotFoundException($"No comments found for the quote ID: {quoteId}."); + } + if ((index * pageSize + pageSize) > comments.Count) + { + if (pageSize > comments.Count) + { + return new PaginationResult(comments.Count(), index, pageSize, comments); + } + else + { + return new PaginationResult(pageSize, index, pageSize, comments.Skip(index * pageSize - (((index * pageSize) + pageSize) - comments.Count)).Take(pageSize).ToList()); + } + + } + return new PaginationResult(comments.Count, index, pageSize, comments.Skip(index * pageSize).Take(pageSize).ToList()); } public async Task> GetCommentByUser(int userId, int index, int pageSize) { - throw new NotImplementedException(); + var comments = await _context.comments.Where(x => x.IdUser == userId).ToListAsync(); + if (!comments.Any()) + { + throw new KeyNotFoundException($"No comments found for the user ID: {userId}."); + } + if ((index * pageSize + pageSize) > comments.Count) + { + if (pageSize > comments.Count) + { + return new PaginationResult(comments.Count(), index, pageSize, comments); + } + else + { + return new PaginationResult(pageSize, index, pageSize, comments.Skip(index * pageSize - (((index * pageSize) + pageSize) - comments.Count)).Take(pageSize).ToList()); + } + + } + return new PaginationResult(comments.Count, index, pageSize, comments.Skip(index * pageSize).Take(pageSize).ToList()); } public async Task LastCommentId() { - throw new NotImplementedException(); + var last = _context.comments.OrderByDescending(x => x.Id).FirstOrDefault(); + if(last == null) + { + return 0; + } + return last.Id; } public async Task RemoveComment(int id) { - throw new NotImplementedException(); + var comment = await _context.comments.Where(x => x.Id == id).FirstOrDefaultAsync(); + if (comment == null) + { + throw new KeyNotFoundException($"No comments found with the given ID: {id}."); + } + _context.comments.Remove(comment); + await _context.SaveChangesAsync(); } public async Task UpdateComment(int id, Commentary comment) diff --git a/WF_EF_Api/Dto2Entities/Dto2Entities.csproj b/WF_EF_Api/Dto2Entities/Dto2Entities.csproj new file mode 100644 index 0000000..beed701 --- /dev/null +++ b/WF_EF_Api/Dto2Entities/Dto2Entities.csproj @@ -0,0 +1,14 @@ + + + + net8.0 + enable + enable + + + + + + + + diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250318135625_migr1.Designer.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250318135625_migr1.Designer.cs new file mode 100644 index 0000000..2ba04f3 --- /dev/null +++ b/WF_EF_Api/StubbedContextLib/Migrations/20250318135625_migr1.Designer.cs @@ -0,0 +1,1065 @@ +// +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using StubbedContextLib; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + [DbContext(typeof(StubWTFContext))] + [Migration("20250318135625_migr1")] + partial class migr1 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "9.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Entity.Character", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdImage") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("IdImage"); + + b.ToTable("characters"); + + b.HasData( + new + { + Id = 1, + IdImage = 1, + Name = "Alan Grant" + }, + new + { + Id = 2, + IdImage = 2, + Name = "Aragorn" + }, + new + { + Id = 3, + IdImage = 3, + Name = "Legolas" + }, + new + { + Id = 4, + IdImage = 4, + Name = "Frodon" + }, + new + { + Id = 5, + IdImage = 5, + Name = "Dobby" + }, + new + { + Id = 6, + IdImage = 6, + Name = "Jon Snow" + }, + new + { + Id = 7, + IdImage = 7, + Name = "Daenerys Targaryen" + }, + new + { + Id = 8, + IdImage = 8, + Name = "Luke Skywalker" + }, + new + { + Id = 9, + IdImage = 9, + Name = "Princess Leia" + }, + new + { + Id = 10, + IdImage = 10, + Name = "Harry Potter" + }); + }); + + modelBuilder.Entity("Entity.Commentary", b => + { + b.Property("IdUser") + .HasColumnType("int"); + + b.Property("IdQuote") + .HasColumnType("int"); + + b.Property("Comment") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("DateCommentary") + .HasColumnType("date") + .HasColumnName("DateCommentary"); + + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.HasKey("IdUser", "IdQuote"); + + b.HasIndex("IdQuote"); + + b.ToTable("comments"); + + b.HasData( + new + { + IdUser = 2, + IdQuote = 1, + Comment = "Ce film est le meilleur", + DateCommentary = new DateTime(2025, 2, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), + Id = 1 + }, + new + { + IdUser = 3, + IdQuote = 1, + Comment = "Very good", + DateCommentary = new DateTime(2025, 3, 11, 0, 0, 0, 0, DateTimeKind.Unspecified), + Id = 2 + }); + }); + + modelBuilder.Entity("Entity.DailyQuote", b => + { + b.Property("IdQuote") + .HasColumnType("int"); + + b.HasKey("IdQuote"); + + b.ToTable("dailyquotes"); + + b.HasData( + new + { + IdQuote = 1 + }, + new + { + IdQuote = 5 + }); + }); + + modelBuilder.Entity("Entity.Favorite", b => + { + b.Property("IdQuote") + .HasColumnType("int"); + + b.Property("IdUsers") + .HasColumnType("int"); + + b.HasKey("IdQuote", "IdUsers"); + + b.HasIndex("IdUsers"); + + b.ToTable("favorites"); + + b.HasData( + new + { + IdQuote = 2, + IdUsers = 8 + }, + new + { + IdQuote = 5, + IdUsers = 3 + }, + new + { + IdQuote = 9, + IdUsers = 1 + }, + new + { + IdQuote = 4, + IdUsers = 10 + }, + new + { + IdQuote = 3, + IdUsers = 2 + }, + new + { + IdQuote = 6, + IdUsers = 7 + }, + new + { + IdQuote = 1, + IdUsers = 6 + }, + new + { + IdQuote = 8, + IdUsers = 9 + }, + new + { + IdQuote = 10, + IdUsers = 5 + }); + }); + + modelBuilder.Entity("Entity.Images", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ImgPath") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("images"); + + b.HasData( + new + { + Id = 1, + ImgPath = "https://th.bing.com/th/id/OIP.TJuWNCsibz8MVmhdNQEdMwHaE8?w=244&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 2, + ImgPath = "https://th.bing.com/th/id/OIP.NgXRQ5-IknA6_qOPFhLWIwHaHK?w=165&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 3, + ImgPath = "https://th.bing.com/th/id/OIP.XcJoJ6bC9sAMjol1pJn5UQHaLH?w=118&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 4, + ImgPath = "https://th.bing.com/th/id/OIP.PPIESqZaNDa-qUcfSDXhdQHaGK?w=210&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 5, + ImgPath = "https://th.bing.com/th/id/OIP.XBghSl2kfRNNtQoSxc901wHaHa?w=177&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 6, + ImgPath = "https://th.bing.com/th/id/OIP.af1Aid64cqEKoIOBgCPxtQHaJO?w=145&h=182&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 7, + ImgPath = "https://th.bing.com/th/id/OIP.ri5vSXr5lNTLt4DO6KQXyQHaI4?w=158&h=189&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 8, + ImgPath = "https://th.bing.com/th/id/OIP.uPTRLR8uspCiafiunUqKfQHaMJ?w=115&h=180&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 9, + ImgPath = "https://th.bing.com/th/id/OIP.hcJis4rKbyQtugsoFJU2ngHaM_?w=118&h=207&c=7&r=0&o=5&pid=1.7" + }, + new + { + Id = 10, + ImgPath = "https://th.bing.com/th/id/OIP.Py1_XfUrKJY_A6tYEmFS5wHaE8?w=280&h=187&c=7&r=0&o=5&pid=1.7" + }); + }); + + modelBuilder.Entity("Entity.Question", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AnswerA") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AnswerB") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AnswerC") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("AnswerD") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CorrectAnswer") + .IsRequired() + .HasMaxLength(1) + .HasColumnType("nvarchar(1)"); + + b.Property("Text") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.HasKey("Id"); + + b.ToTable("question"); + + b.HasData( + new + { + Id = 1, + AnswerA = "Gimli", + AnswerB = "Aragorn", + AnswerC = "Frodon", + AnswerD = "Gandalf", + CorrectAnswer = "B", + Text = "Qui est le leader de la Communauté de l'Anneau ?" + }, + new + { + Id = 2, + AnswerA = "Serdaigle", + AnswerB = "Gryffondor", + AnswerC = "Serpentard", + AnswerD = "Poufsouffle", + CorrectAnswer = "B", + Text = "Dans quelle maison Harry Potter est-il ?" + }, + new + { + Id = 3, + AnswerA = "Saroumane", + AnswerB = "Sauron", + AnswerC = "Gollum", + AnswerD = "Gothmog", + CorrectAnswer = "B", + Text = "Qui est le Seigneur des Ténèbres dans la saga Le Seigneur des Anneaux ?" + }, + new + { + Id = 4, + AnswerA = "Han Solo", + AnswerB = "Princesse Leia", + AnswerC = "Chewbacca", + AnswerD = "R2-D2", + CorrectAnswer = "A", + Text = "Dans le film Star Wars : Episode IV, qui sauve Luke Skywalker de l'Étoile de la Mort ?" + }, + new + { + Id = 5, + AnswerA = "Reine Jadis", + AnswerB = "Aslan", + AnswerC = "Edmund", + AnswerD = "Lucy", + CorrectAnswer = "B", + Text = "Qui est le souverain de Narnia dans Le Lion, la Sorcière Blanche et l'Armoire Magique ?" + }, + new + { + Id = 6, + AnswerA = "Smaug", + AnswerB = "Falkor", + AnswerC = "Norbert", + AnswerD = "Shenron", + CorrectAnswer = "A", + Text = "Quel est le nom du dragon dans Le Hobbit ?" + }, + new + { + Id = 7, + AnswerA = "Bella Swan", + AnswerB = "Edward Cullen", + AnswerC = "Jacob Black", + AnswerD = "Victoria", + CorrectAnswer = "A", + Text = "Qui est la première personne à être mordue par un vampire dans Twilight ?" + }, + new + { + Id = 8, + AnswerA = "Obi-Wan Kenobi", + AnswerB = "Yoda", + AnswerC = "Han Solo", + AnswerD = "Luke Skywalker", + CorrectAnswer = "A", + Text = "Quel personnage dit Que la Force soit avec toi dans Star Wars ?" + }, + new + { + Id = 9, + AnswerA = "Dr. Ellie Sattler", + AnswerB = "Alan Grant", + AnswerC = "John Hammond", + AnswerD = "Dennis Nedry", + CorrectAnswer = "B", + Text = "Dans Jurassic Park, quel est le nom du paléontologue sur l'île ?" + }, + new + { + Id = 10, + AnswerA = "Cersei Lannister", + AnswerB = "Arya Stark", + AnswerC = "Daenerys Targaryen", + AnswerD = "Sansa Stark", + CorrectAnswer = "C", + Text = "Dans Game of Thrones, qui est surnommée la Mère des Dragons ?" + }); + }); + + modelBuilder.Entity("Entity.Quiz", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("IdImage") + .HasColumnType("int"); + + b.Property("NbQuestion") + .HasColumnType("int"); + + b.Property("Title") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("IdImage"); + + b.ToTable("quizzes"); + + b.HasData( + new + { + Id = 1, + IdImage = 1, + NbQuestion = 5, + Title = "Quiz 1" + }, + new + { + Id = 2, + IdImage = 2, + NbQuestion = 5, + Title = "Quiz 2" + }); + }); + + modelBuilder.Entity("Entity.QuizQuestion", b => + { + b.Property("IdQuestion") + .HasColumnType("int"); + + b.Property("IdQuiz") + .HasColumnType("int"); + + b.HasKey("IdQuestion", "IdQuiz"); + + b.HasIndex("IdQuiz"); + + b.ToTable("QuizQuestion"); + + b.HasData( + new + { + IdQuestion = 1, + IdQuiz = 1 + }, + new + { + IdQuestion = 2, + IdQuiz = 1 + }, + new + { + IdQuestion = 3, + IdQuiz = 1 + }, + new + { + IdQuestion = 4, + IdQuiz = 1 + }, + new + { + IdQuestion = 5, + IdQuiz = 1 + }, + new + { + IdQuestion = 6, + IdQuiz = 2 + }, + new + { + IdQuestion = 7, + IdQuiz = 2 + }, + new + { + IdQuestion = 8, + IdQuiz = 2 + }, + new + { + IdQuestion = 9, + IdQuiz = 2 + }, + new + { + IdQuestion = 10, + IdQuiz = 2 + }); + }); + + modelBuilder.Entity("Entity.Quote", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Content") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("IdCharacter") + .HasColumnType("int"); + + b.Property("IdSource") + .HasColumnType("int"); + + b.Property("IdUsersPropose") + .HasColumnType("int"); + + b.Property("IsValid") + .HasColumnType("bit"); + + b.Property("Langage") + .HasColumnType("int"); + + b.Property("Likes") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("IdCharacter"); + + b.HasIndex("IdSource"); + + b.HasIndex("IdUsersPropose"); + + b.ToTable("quotes"); + + b.HasData( + new + { + Id = 1, + Content = "Je n'y crois pas. Je n'y crois pas. Ce n'est pas possible", + IdCharacter = 1, + IdSource = 1, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 2, + Content = "There is always hope", + IdCharacter = 2, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 3, + Content = "A red sun rises. Blood has been spilled this night.", + IdCharacter = 3, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 4, + Content = "I wish the Ring had never come to me.I wish none of this had happened.", + IdCharacter = 4, + IdSource = 2, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 5, + Content = "Dobby is a free elf!", + IdCharacter = 5, + IdSource = 4, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 6, + Content = "Winter is comming", + IdCharacter = 6, + IdSource = 3, + IdUsersPropose = 1, + IsValid = true, + Langage = 0, + Likes = 11025 + }, + new + { + Id = 7, + Content = "Je suis la dernière Targaryen. Je suis la reine des dragons", + IdCharacter = 7, + IdSource = 3, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 8, + Content = "Je ne suis pas prêt à affronter ça. C'est trop pour moi.", + IdCharacter = 8, + IdSource = 5, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 9, + Content = "Aidez-moi, Obi-Wan Kenobi, vous êtes mon seul espoir.", + IdCharacter = 9, + IdSource = 5, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }, + new + { + Id = 10, + Content = "La quoi ?", + IdCharacter = 10, + IdSource = 4, + IdUsersPropose = 1, + IsValid = true, + Langage = 1, + Likes = 11025 + }); + }); + + modelBuilder.Entity("Entity.Source", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Title") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("TypeSrc") + .HasColumnType("int"); + + b.Property("Year") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("sources"); + + b.HasData( + new + { + Id = 1, + Title = "Jurassic Park", + TypeSrc = 0, + Year = 1993 + }, + new + { + Id = 2, + Title = "Le Seigneur des anneaux : La Communauté de l'anneau", + TypeSrc = 0, + Year = 2001 + }, + new + { + Id = 3, + Title = "Game of throne", + TypeSrc = 1, + Year = 2011 + }, + new + { + Id = 4, + Title = "Harry Potter à l'école des sorcier", + TypeSrc = 0, + Year = 1997 + }, + new + { + Id = 5, + Title = "Star Wars, épisode IV : Un nouvel espoir", + TypeSrc = 0, + Year = 1977 + }); + }); + + modelBuilder.Entity("Entity.Users", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Created") + .HasColumnType("date") + .HasColumnName("Created"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("IdImage") + .HasColumnType("int"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("IdImage"); + + b.ToTable("users"); + + b.HasData( + new + { + Id = 1, + Created = new DateTime(2025, 5, 12, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "jhonDhoe@gmail.com", + IdImage = 1, + Password = "1234", + UserName = "Jhon-Dhoe" + }, + new + { + Id = 2, + Created = new DateTime(2025, 3, 19, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "lucy_rose@outlook.com", + IdImage = 2, + Password = "abcd", + UserName = "Lucy-Rose" + }, + new + { + Id = 3, + Created = new DateTime(2024, 11, 2, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "mark.taylor@yahoo.com", + IdImage = 3, + Password = "5678", + UserName = "Mark-Taylor" + }, + new + { + Id = 4, + Created = new DateTime(2025, 2, 28, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "sophie.martin@gmail.com", + IdImage = 4, + Password = "4321", + UserName = "Sophie-Martin" + }, + new + { + Id = 5, + Created = new DateTime(2025, 1, 15, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "nathan_doe@aol.com", + IdImage = 5, + Password = "8765", + UserName = "Nathan-Doe" + }, + new + { + Id = 6, + Created = new DateTime(2025, 4, 7, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "ella.brown@icloud.com", + IdImage = 6, + Password = "2468", + UserName = "Ella-Brown" + }, + new + { + Id = 7, + Created = new DateTime(2024, 12, 25, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "oliver_smith@gmail.com", + IdImage = 7, + Password = "1357", + UserName = "Oliver-Smith" + }, + new + { + Id = 8, + Created = new DateTime(2025, 3, 5, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "mia.jones@outlook.com", + IdImage = 8, + Password = "1122", + UserName = "Mia-Jones" + }, + new + { + Id = 9, + Created = new DateTime(2025, 2, 22, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "kevin_williams@aol.com", + IdImage = 9, + Password = "2233", + UserName = "Kevin-Williams" + }, + new + { + Id = 10, + Created = new DateTime(2025, 1, 3, 0, 0, 0, 0, DateTimeKind.Unspecified), + Email = "olivia.white@yahoo.com", + IdImage = 10, + Password = "3344", + UserName = "Olivia-White" + }); + }); + + modelBuilder.Entity("Entity.Character", b => + { + b.HasOne("Entity.Images", "Images") + .WithMany("Characters") + .HasForeignKey("IdImage") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Images"); + }); + + modelBuilder.Entity("Entity.Commentary", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany("Commentarys") + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.HasOne("Entity.Users", "User") + .WithMany() + .HasForeignKey("IdUser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Quote"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Entity.DailyQuote", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany("DailyQuotes") + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Quote"); + }); + + modelBuilder.Entity("Entity.Favorite", b => + { + b.HasOne("Entity.Quote", "Quote") + .WithMany() + .HasForeignKey("IdQuote") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.HasOne("Entity.Users", "Users") + .WithMany() + .HasForeignKey("IdUsers") + .OnDelete(DeleteBehavior.ClientCascade) + .IsRequired(); + + b.Navigation("Quote"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("Entity.Quiz", b => + { + b.HasOne("Entity.Images", "Images") + .WithMany("Quizs") + .HasForeignKey("IdImage") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Images"); + }); + + modelBuilder.Entity("Entity.QuizQuestion", b => + { + b.HasOne("Entity.Question", null) + .WithMany() + .HasForeignKey("IdQuestion") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Quiz", null) + .WithMany() + .HasForeignKey("IdQuiz") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Entity.Quote", b => + { + b.HasOne("Entity.Character", "Character") + .WithMany("Quotes") + .HasForeignKey("IdCharacter") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Source", "Source") + .WithMany("Quotes") + .HasForeignKey("IdSource") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Entity.Users", "User") + .WithMany("Quotes") + .HasForeignKey("IdUsersPropose"); + + b.Navigation("Character"); + + b.Navigation("Source"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("Entity.Users", b => + { + b.HasOne("Entity.Images", "Images") + .WithMany("Users") + .HasForeignKey("IdImage") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Images"); + }); + + modelBuilder.Entity("Entity.Character", b => + { + b.Navigation("Quotes"); + }); + + modelBuilder.Entity("Entity.Images", b => + { + b.Navigation("Characters"); + + b.Navigation("Quizs"); + + b.Navigation("Users"); + }); + + modelBuilder.Entity("Entity.Quote", b => + { + b.Navigation("Commentarys"); + + b.Navigation("DailyQuotes"); + }); + + modelBuilder.Entity("Entity.Source", b => + { + b.Navigation("Quotes"); + }); + + modelBuilder.Entity("Entity.Users", b => + { + b.Navigation("Quotes"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/WF_EF_Api/StubbedContextLib/Migrations/20250318135625_migr1.cs b/WF_EF_Api/StubbedContextLib/Migrations/20250318135625_migr1.cs new file mode 100644 index 0000000..00b10fb --- /dev/null +++ b/WF_EF_Api/StubbedContextLib/Migrations/20250318135625_migr1.cs @@ -0,0 +1,22 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace StubbedContextLib.Migrations +{ + /// + public partial class migr1 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + + } + } +} -- 2.36.3 From d3bfd171cdfbb9def47f75f4cfc31a62905817b0 Mon Sep 17 00:00:00 2001 From: Kevin MONDEJAR Date: Thu, 20 Mar 2025 10:42:43 +0100 Subject: [PATCH 6/8] =?UTF-8?q?ajout=20suivi=20des=20=C3=A9tape=20readme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/README.md b/README.md index 94b08a7..40e9d37 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,53 @@ # WF-PmAPI +🟨 En cours / ✅ Fait / ❌ Pas fait + +### Critères Entity Framework + +niveau | description | coeff | jalon | État +--- | --- | --- | --- | --- +☢️ | Le dépôt doit être accessible par l'enseignant | ☢️ | J1 | ✅ +☢️ | un .gitignore doit exister au premier push | ☢️ | J1 | ✅ +🎬 | les *projets* et les tests compilent | 1 | J1 & J2 | ✅ +🎬 | le projet et le tests s'exécutent sans bug (concernant la partie persistance) | 3 | J1 & J2 | ✅ +🟢 | Transcription du modèle : Modèle vers entités (et inversement) | 2 | J1 | 🟨 +🟢 | Requêtes CRUD simples (sur une table) | 1 | J1 | 🟨 +🟢 | Utilisation de LINQ to Entities | 2 | J1 | +🟡 | Injection / indépendance du fournisseur | 1 | J1 | ❌ +🟡 | Requêtes CRUD sur des données complexes (images par exemple) | 2 | J1 | 🟨 +🟢 | Tests - Appli Console | 1 | J1 | ❌ +🟢 | Tests - Tests unitaires (avec SQLite in memory) | 2 | J1 | ❌ +🟢 | Tests - Données stubbées et/ou Moq | 1 | J1 | ✅ +🟡 | CI : build, tests, Sonar (doc?) | 1 | J1 | ❌ +🟡 | Utilisation de relations (One-to-One, One-to-Many, Many-to-Many) (+ mapping, TU, Requêtes) | 4 | J1 | 🟨 +🟢 | Liens avec le web service | 2 | J1 | ❌ +🟡 | Utilisation d'un *Logger* | 1 | J1 | ❌ +🟡 | Déploiement | 4 | J2 | ❌ +🔴 | Unit of Work / Repository + extras (héritage, accès concurrents...) | 8 | J2 | ❌ +🟢 | Utilisation dans le projet | 2 | J2 | ❌ +🟢 | mon dépôt possède un readme qui apporte quelque chose... | 2 | J2 | ❌ + + +### Critères Web API + +niveau | description | coeff | jalon | État +--- | --- | --- | --- | --- +☢️ | Le dépôt doit être accessible par l'enseignant | ☢️ | J1 | +☢️ | un .gitignore doit exister au premier push | ☢️ | J1 | +🎬 | les *projets* et les tests compilent | 1 | J1 & J2 | +🎬 | le projet et le tests s'exécutent sans bug (concernant la partie web api) | 4 | J1 & J2 | +🟢 | Modèle <-> DTO | 1 | J1 | +🟢 | Entities <-> DTO | 1 | J1 | 🟨 +🟡 | Authentification | 4 | J1 | +🟢 | Requêtes GET, PUT, POST, DELETE sur des données simples (1 seul type d'objet en retour, propriétés de types natifs) | 2 | J1 | +🟡 | Pagination & filtrage | 2 | J1 | +🟢 | Injection de service | 2 | J1 | +🟡 | Requêtes GET, PUT, POST, DELETE sur des données complexes (plusieurs données complexes en retour) | 4 | J1 | +🟢 | Tests - Appli Console (consommation des requêtes) | 4 | J1 | +🟢 | Tests - Tests unitaires (avec Stub et/ou Moq) | 2 | J1 | +🟡 | CI : build, tests, Sonar, Documentation (en particulier Swagger avec exemples...) | 1 | J1 | +🟢 | Liens avec la persistance en base de données | 4 | J1 | +🟡 | Utilisation d'un *Logger* | 1 | J1 | +🟡 | Déploiement | 4 | J2 | +🟡 | Utilisation dans le projet | 4 | J2 | +🎬 | mon dépôt possède un readme qui apporte quelque chose... | 1 | J2 | \ No newline at end of file -- 2.36.3 From d0c0519ca0c23e6a80f984a8648aaf55e28c1dcc Mon Sep 17 00:00:00 2001 From: Kevin MONDEJAR Date: Thu, 20 Mar 2025 12:01:14 +0100 Subject: [PATCH 7/8] ajout console test + continuation dbmanager + injection fournisseur --- WF_EF_Api/ConsoleTest/ConsoleTest.csproj | 8 ++ WF_EF_Api/ConsoleTest/Program.cs | 42 +++++++- WF_EF_Api/Contextlib/DbCommentaryManager.cs | 19 +++- WF_EF_Api/Contextlib/DbFavoriteManager.cs | 40 +++++++ WF_EF_Api/Contextlib/DbImagesManager.cs | 101 ++++++++++++++++++ WF_EF_Api/Contextlib/DbQuestionSerice.cs | 73 +++++++++++++ WF_EF_Api/Contextlib/WTFContext.cs | 15 ++- WF_EF_Api/Shared/IImagesService.cs | 2 +- WF_EF_Api/StubbedContextLib/StubWTFContext.cs | 14 ++- WF_EF_Api/TestEf/Program.cs | 2 + WF_EF_Api/TestEf/TestEf.csproj | 10 ++ WF_EF_Api/WF_EF_Api.sln | 6 -- WF_EF_Api/XUnitTest/UnitTest1.cs | 11 -- WF_EF_Api/XUnitTest/XUnitTest.csproj | 5 + 14 files changed, 324 insertions(+), 24 deletions(-) create mode 100644 WF_EF_Api/Contextlib/DbFavoriteManager.cs create mode 100644 WF_EF_Api/Contextlib/DbImagesManager.cs create mode 100644 WF_EF_Api/Contextlib/DbQuestionSerice.cs create mode 100644 WF_EF_Api/TestEf/Program.cs create mode 100644 WF_EF_Api/TestEf/TestEf.csproj delete mode 100644 WF_EF_Api/XUnitTest/UnitTest1.cs diff --git a/WF_EF_Api/ConsoleTest/ConsoleTest.csproj b/WF_EF_Api/ConsoleTest/ConsoleTest.csproj index 206b89a..9a4ee54 100644 --- a/WF_EF_Api/ConsoleTest/ConsoleTest.csproj +++ b/WF_EF_Api/ConsoleTest/ConsoleTest.csproj @@ -7,4 +7,12 @@ enable + + + + + + + + diff --git a/WF_EF_Api/ConsoleTest/Program.cs b/WF_EF_Api/ConsoleTest/Program.cs index 127ed44..6a3e921 100644 --- a/WF_EF_Api/ConsoleTest/Program.cs +++ b/WF_EF_Api/ConsoleTest/Program.cs @@ -1 +1,41 @@ -Console.WriteLine("bonjour"); \ No newline at end of file +using Contextlib; +using Microsoft.Data.Sqlite; +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; +using StubbedContextLib; +using static System.Net.WebRequestMethods; + +var connection = new SqliteConnection("DataSource=:memory:"); +connection.Open(); +var options = new DbContextOptionsBuilder() + .UseSqlite(connection) + .Options; + +using (var _context = new StubWTFContext(options)) +{ + _context.Database.EnsureCreated(); + + // ---- Test Image ---- // + + var imageManager = new DbImagesManager(_context); + await imageManager.AddImage(new Entity.Images() { Id = 11, ImgPath = "https://www.bing.com/ck/a?!&&p=390428c2820add92760900204667aa721b17d4eb9e8537c91544d76283d06b14JmltdHM9MTc0MjQyODgwMA&ptn=3&ver=2&hsh=4&fclid=297ef5ed-ac44-66f2-2498-e058adb06776&u=a1aHR0cHM6Ly93d3cucG9rZXBlZGlhLmZyL01hamFzcGlj&ntb=1" }); + + // ---- Test Character ---- // + + var characterManager = new DbCharacterManager(_context); + + + await characterManager.AddCharacter(new Entity.Character() { Id = 11, Name = "Majespic", IdImage = 11}); + + // recupération données + var characters = await characterManager.GetAll(); + // affichage des dponnées récupérer + foreach (var charac in characters.items) + { + Console.WriteLine("(" + charac.Id + ") " + charac.Name + " / Image ref :" + charac.IdImage); + } + + +} + + diff --git a/WF_EF_Api/Contextlib/DbCommentaryManager.cs b/WF_EF_Api/Contextlib/DbCommentaryManager.cs index 558aa46..56c0398 100644 --- a/WF_EF_Api/Contextlib/DbCommentaryManager.cs +++ b/WF_EF_Api/Contextlib/DbCommentaryManager.cs @@ -73,7 +73,7 @@ namespace Contextlib public async Task> GetAllComment() { - var comments = _context.comments.ToList(); + var comments = await _context.comments.ToListAsync(); return new PaginationResult(comments.Count, 0, comments.Count, comments); } @@ -133,7 +133,7 @@ namespace Contextlib public async Task LastCommentId() { - var last = _context.comments.OrderByDescending(x => x.Id).FirstOrDefault(); + var last = await _context.comments.OrderByDescending(x => x.Id).FirstOrDefaultAsync(); if(last == null) { return 0; @@ -154,7 +154,20 @@ namespace Contextlib public async Task UpdateComment(int id, Commentary comment) { - throw new NotImplementedException(); + var com = await _context.comments.Where(x => x.Id == id).FirstOrDefaultAsync(); + if (comment == null) + { + throw new ArgumentNullException(nameof(comment), "The updated comment data cannot be null."); + } + if (com == null) + { + throw new KeyNotFoundException($"No comments found with the given ID: {id}."); + } + com.Comment = comment.Comment; + com.DateCommentary = comment.DateCommentary; + com.IdQuote = comment.IdQuote; + com.IdUser = comment.IdUser; + await _context.SaveChangesAsync(); } } } diff --git a/WF_EF_Api/Contextlib/DbFavoriteManager.cs b/WF_EF_Api/Contextlib/DbFavoriteManager.cs new file mode 100644 index 0000000..314da25 --- /dev/null +++ b/WF_EF_Api/Contextlib/DbFavoriteManager.cs @@ -0,0 +1,40 @@ +using Entity; +using Shared; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Contextlib +{ + public class DbFavoriteManager : IFavoriteService + { + private WTFContext _context; + + public DbFavoriteManager(WTFContext context) + { + _context = context ?? throw new ArgumentNullException(nameof(context), "Database context cannot be null."); + } + + public async Task AddFavorite(int quoteid, int userId) + { + throw new NotImplementedException(); + } + + public async Task RemoveAllFavoriteForQuote(int quoteId) + { + throw new NotImplementedException(); + } + + public async Task RemoveAllFavoriteForUser(int userId) + { + throw new NotImplementedException(); + } + + public async Task RemoveFavorite(int quoteid, int userId) + { + throw new NotImplementedException(); + } + } +} diff --git a/WF_EF_Api/Contextlib/DbImagesManager.cs b/WF_EF_Api/Contextlib/DbImagesManager.cs new file mode 100644 index 0000000..2ef9d7b --- /dev/null +++ b/WF_EF_Api/Contextlib/DbImagesManager.cs @@ -0,0 +1,101 @@ +using Entity; +using Microsoft.EntityFrameworkCore; +using Shared; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using System.Xml.Linq; + +namespace Contextlib +{ + public class DbImagesManager : IImagesService + { + private WTFContext _context; + + public DbImagesManager(WTFContext context) + { + _context = context ?? throw new ArgumentNullException(nameof(context), "Database context cannot be null."); + } + + public async Task AddImage(Images image) + { + await _context.AddAsync(image); + await _context.SaveChangesAsync(); + } + + public async Task> GetAllImage() + { + var images = await _context.images.ToListAsync(); + return new PaginationResult(images.Count, 0, images.Count, images); + } + + public async Task GetImageById(int id) + { + var image = await _context.images.Where(x => x.Id == id).FirstOrDefaultAsync(); + if (image == null) + { + throw new KeyNotFoundException($"No image found with the given ID: {id}."); + } + return image; + } + + public async Task GetLastImageId() + { + var last = await _context.images.OrderByDescending(x => x.Id).FirstOrDefaultAsync(); + if (last == null) + { + return 0; + } + return last.Id; + } + + public async Task> GetSomeImage(int index, int pageSize) + { + var images = await _context.images.ToListAsync(); + if (!images.Any()) + { + throw new KeyNotFoundException($"No images found"); + } + if ((index * pageSize + pageSize) > images.Count) + { + if (pageSize > images.Count) + { + return new PaginationResult(images.Count(), index, pageSize, images); + } + else + { + return new PaginationResult(pageSize, index, pageSize, images.Skip(index * pageSize - (((index * pageSize) + pageSize) - images.Count)).Take(pageSize).ToList()); + } + } + return new PaginationResult(images.Count, index, pageSize, images.Skip(index * pageSize).Take(pageSize).ToList()); + } + + public async Task RemoveImage(int id) + { + var image = await _context.images.Where(x => x.Id == id).FirstOrDefaultAsync(); + if (image == null) + { + throw new KeyNotFoundException($"No image found with the given ID: {id}."); + } + _context.images.Remove(image); + await _context.SaveChangesAsync(); + } + + public async Task UpdateImage(int id, Images image) + { + var img = await _context.images.Where(x => x.Id == id).FirstOrDefaultAsync(); + if (image == null) + { + throw new ArgumentNullException(nameof(image), "The updated image data cannot be null."); + } + if (img == null) + { + throw new KeyNotFoundException($"No image found with the given ID: {id}."); + } + img.ImgPath = image.ImgPath; + await _context.SaveChangesAsync(); + } + } +} diff --git a/WF_EF_Api/Contextlib/DbQuestionSerice.cs b/WF_EF_Api/Contextlib/DbQuestionSerice.cs new file mode 100644 index 0000000..010f38c --- /dev/null +++ b/WF_EF_Api/Contextlib/DbQuestionSerice.cs @@ -0,0 +1,73 @@ +using Entity; +using Shared; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace Contextlib +{ + public class DbQuestionSerice : IQuestionService + { + public Task AddQuestion(Question question) + { + throw new NotImplementedException(); + } + + public Task CountQuestions() + { + throw new NotImplementedException(); + } + + public Task> GetAllQuestion() + { + throw new NotImplementedException(); + } + + public Task> GetInvalidQuestion(int index, int pageSize) + { + throw new NotImplementedException(); + } + + public Task GetQuestionById(int id) + { + throw new NotImplementedException(); + } + + public Task GetRandomQuestion() + { + throw new NotImplementedException(); + } + + public Task GetRandomQuestionQuoteToCharacter() + { + throw new NotImplementedException(); + } + + public Task GetRandomQuestionQuoteToSource() + { + throw new NotImplementedException(); + } + + public Task> GetSomeQuestion(int index, int pageSize) + { + throw new NotImplementedException(); + } + + public Task RemoveQuestion(int id) + { + throw new NotImplementedException(); + } + + public Task UpdateQuestion(int id, Question question) + { + throw new NotImplementedException(); + } + + public Task ValidateQuestion(int id, bool isvalid) + { + throw new NotImplementedException(); + } + } +} diff --git a/WF_EF_Api/Contextlib/WTFContext.cs b/WF_EF_Api/Contextlib/WTFContext.cs index e0f0a31..4b95f3b 100644 --- a/WF_EF_Api/Contextlib/WTFContext.cs +++ b/WF_EF_Api/Contextlib/WTFContext.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; using Entity; @@ -75,7 +76,19 @@ namespace Contextlib ); } + public WTFContext() + { } + + public WTFContext(DbContextOptions options) + : base(options) + { } + protected override void OnConfiguring(DbContextOptionsBuilder options) - => options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Wf-Database.mdf;Trusted_Connection=True;"); + { + if (!options.IsConfigured) + { + options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Wf-Database.mdf;Trusted_Connection=True;"); + } + } } } diff --git a/WF_EF_Api/Shared/IImagesService.cs b/WF_EF_Api/Shared/IImagesService.cs index e2d0465..0bc6bf0 100644 --- a/WF_EF_Api/Shared/IImagesService.cs +++ b/WF_EF_Api/Shared/IImagesService.cs @@ -10,7 +10,7 @@ namespace Shared { // Retrieves an image by its unique identifier (id). // 'id' is the unique identifier of the image. - Task GetImageById(string id); + Task GetImageById(int id); // Retrieves all images, with pagination support. // This returns a list of all images in the system. diff --git a/WF_EF_Api/StubbedContextLib/StubWTFContext.cs b/WF_EF_Api/StubbedContextLib/StubWTFContext.cs index ffc1d06..7c04527 100644 --- a/WF_EF_Api/StubbedContextLib/StubWTFContext.cs +++ b/WF_EF_Api/StubbedContextLib/StubWTFContext.cs @@ -6,6 +6,7 @@ using System.Threading.Tasks; using Contextlib; using Entity; using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.Options; namespace StubbedContextLib { @@ -133,10 +134,21 @@ namespace StubbedContextLib new Source() { Id = 4, Title = "Harry Potter à l'école des sorcier", TypeSrc = TypeSrcEnum.movie, Year = 1997 }, new Source() { Id = 5, Title = "Star Wars, épisode IV : Un nouvel espoir", TypeSrc = TypeSrcEnum.movie, Year = 1977 } ); + } - + public StubWTFContext() + { } + public StubWTFContext(DbContextOptions options) + : base(options) + { } + protected override void OnConfiguring(DbContextOptionsBuilder options) + { + if (!options.IsConfigured) + { + options.UseSqlServer(@"Server=(localdb)\mssqllocaldb;Database=Wf-Database.mdf;Trusted_Connection=True;"); + } } } } diff --git a/WF_EF_Api/TestEf/Program.cs b/WF_EF_Api/TestEf/Program.cs new file mode 100644 index 0000000..83fa4f4 --- /dev/null +++ b/WF_EF_Api/TestEf/Program.cs @@ -0,0 +1,2 @@ +// See https://aka.ms/new-console-template for more information +Console.WriteLine("Hello, World!"); diff --git a/WF_EF_Api/TestEf/TestEf.csproj b/WF_EF_Api/TestEf/TestEf.csproj new file mode 100644 index 0000000..206b89a --- /dev/null +++ b/WF_EF_Api/TestEf/TestEf.csproj @@ -0,0 +1,10 @@ + + + + Exe + net8.0 + enable + enable + + + diff --git a/WF_EF_Api/WF_EF_Api.sln b/WF_EF_Api/WF_EF_Api.sln index 2b163b7..b82d44f 100644 --- a/WF_EF_Api/WF_EF_Api.sln +++ b/WF_EF_Api/WF_EF_Api.sln @@ -13,8 +13,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Contextlib", "Contextlib\Co EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "StubbedContextLib", "StubbedContextLib\StubbedContextLib.csproj", "{5CD69B14-C6AE-4628-A374-996C486E25F2}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TestModel2Entities", "TestModel2Entities\TestModel2Entities.csproj", "{2CF20FAC-C2F1-4048-9D46-F39081B0FBEF}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Model2Entities", "Model2entities\Model2Entities.csproj", "{4A1CBA3D-C798-4E19-865F-39F919F1205A}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "XUnitTest", "XUnitTest\XUnitTest.csproj", "{48002CA2-7CFF-4077-90CF-392476320CE3}" @@ -49,10 +47,6 @@ Global {5CD69B14-C6AE-4628-A374-996C486E25F2}.Debug|Any CPU.Build.0 = Debug|Any CPU {5CD69B14-C6AE-4628-A374-996C486E25F2}.Release|Any CPU.ActiveCfg = Release|Any CPU {5CD69B14-C6AE-4628-A374-996C486E25F2}.Release|Any CPU.Build.0 = Release|Any CPU - {2CF20FAC-C2F1-4048-9D46-F39081B0FBEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CF20FAC-C2F1-4048-9D46-F39081B0FBEF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CF20FAC-C2F1-4048-9D46-F39081B0FBEF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CF20FAC-C2F1-4048-9D46-F39081B0FBEF}.Release|Any CPU.Build.0 = Release|Any CPU {4A1CBA3D-C798-4E19-865F-39F919F1205A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {4A1CBA3D-C798-4E19-865F-39F919F1205A}.Debug|Any CPU.Build.0 = Debug|Any CPU {4A1CBA3D-C798-4E19-865F-39F919F1205A}.Release|Any CPU.ActiveCfg = Release|Any CPU diff --git a/WF_EF_Api/XUnitTest/UnitTest1.cs b/WF_EF_Api/XUnitTest/UnitTest1.cs deleted file mode 100644 index f8a0369..0000000 --- a/WF_EF_Api/XUnitTest/UnitTest1.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace XUnitTest -{ - public class UnitTest1 - { - [Fact] - public void Test1() - { - - } - } -} \ No newline at end of file diff --git a/WF_EF_Api/XUnitTest/XUnitTest.csproj b/WF_EF_Api/XUnitTest/XUnitTest.csproj index 3aa9860..29b8b14 100644 --- a/WF_EF_Api/XUnitTest/XUnitTest.csproj +++ b/WF_EF_Api/XUnitTest/XUnitTest.csproj @@ -11,11 +11,16 @@ + + + + + -- 2.36.3 From 96f55a3532148e468e8b7868b269e1e05eee0905 Mon Sep 17 00:00:00 2001 From: Kevin MONDEJAR Date: Thu, 20 Mar 2025 15:15:13 +0100 Subject: [PATCH 8/8] suite test console (fin image + character) --- WF_EF_Api/ConsoleTest/Program.cs | 105 ++++++++++++++++++-- WF_EF_Api/Contextlib/DbCharacterManager.cs | 29 ++++-- WF_EF_Api/Contextlib/DbCommentaryManager.cs | 40 ++++++-- WF_EF_Api/Contextlib/DbImagesManager.cs | 12 ++- 4 files changed, 159 insertions(+), 27 deletions(-) diff --git a/WF_EF_Api/ConsoleTest/Program.cs b/WF_EF_Api/ConsoleTest/Program.cs index 6a3e921..7a36b87 100644 --- a/WF_EF_Api/ConsoleTest/Program.cs +++ b/WF_EF_Api/ConsoleTest/Program.cs @@ -1,8 +1,10 @@ using Contextlib; +using Entity; using Microsoft.Data.Sqlite; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Options; using StubbedContextLib; +using static System.Net.Mime.MediaTypeNames; using static System.Net.WebRequestMethods; var connection = new SqliteConnection("DataSource=:memory:"); @@ -18,24 +20,115 @@ using (var _context = new StubWTFContext(options)) // ---- Test Image ---- // var imageManager = new DbImagesManager(_context); - await imageManager.AddImage(new Entity.Images() { Id = 11, ImgPath = "https://www.bing.com/ck/a?!&&p=390428c2820add92760900204667aa721b17d4eb9e8537c91544d76283d06b14JmltdHM9MTc0MjQyODgwMA&ptn=3&ver=2&hsh=4&fclid=297ef5ed-ac44-66f2-2498-e058adb06776&u=a1aHR0cHM6Ly93d3cucG9rZXBlZGlhLmZyL01hamFzcGlj&ntb=1" }); + + + await imageManager.AddImage(new Images() { Id = 11, ImgPath = "https://www.bing.com/ck/a?!&&p=390428c2820add92760900204667aa721b17d4eb9e8537c91544d76283d06b14JmltdHM9MTc0MjQyODgwMA&ptn=3&ver=2&hsh=4&fclid=297ef5ed-ac44-66f2-2498-e058adb06776&u=a1aHR0cHM6Ly93d3cucG9rZXBlZGlhLmZyL01hamFzcGlj&ntb=1" }); + await imageManager.AddImage(new Images() { Id = 12, ImgPath = "https://www.bing.com/images/search?view=detailV2&ccid=t57OzeAT&id=1CCCBB65825E5FB93F10CA6D29EFDBBFEB5CDF27&thid=OIP.t57OzeATZKjBDDrzXqbc5gHaE7&mediaurl=https%3a%2f%2fimg-19.commentcamarche.net%2fP51ArxVXHJKsgdTzGDaqajlWJ3s%3d%2f1500x%2fsmart%2f7b5dd43e607643fea1a61960e3f66fc4%2fccmcms-commentcamarche%2f39481621.jpg&cdnurl=https%3a%2f%2fth.bing.com%2fth%2fid%2fR.b79ececde01364a8c10c3af35ea6dce6%3frik%3dJ99c67%252fb7yltyg%26pid%3dImgRaw%26r%3d0&exph=999&expw=1500&q=image&simid=608026907577902968&ck=0D54F216D075AD6E0ABC46B3AAB7E80A&selectedIndex=19&itb=0" }); + Console.WriteLine("---- Test ajout image (id : 11, 12)"); + var images = await imageManager.GetAllImage(); + foreach (var image in images.items) + { + Console.WriteLine($"- ({image.Id}) : {(image.ImgPath.Length <= 40 ? image.ImgPath : image.ImgPath.Substring(0, 40)+"...")}"); + + + } + Console.WriteLine(""); + + + await imageManager.UpdateImage(12, new Images() { ImgPath = "https://testUpdate/stub"}); + Console.WriteLine("---- Test mise a jour image (id : 12)"); + images = await imageManager.GetAllImage(); + foreach (var image in images.items) + { + Console.WriteLine($"- ({image.Id}) : {(image.ImgPath.Length <= 40 ? image.ImgPath : image.ImgPath.Substring(0, 40) + "...")}"); + } + Console.WriteLine(""); + + + await imageManager.RemoveImage(12); + Console.WriteLine("---- Test suppression image (id : 12)"); + images = await imageManager.GetAllImage(); + foreach (var image in images.items) + { + Console.WriteLine($"- ({image.Id}) : {(image.ImgPath.Length <= 40 ? image.ImgPath : image.ImgPath.Substring(0, 40) + "...")}"); + } + Console.WriteLine(""); + + + Console.WriteLine("---- Test getById image (id : 11)"); + var img = await imageManager.GetImageById(11); + Console.WriteLine($"- ({img.Id}) : {(img.ImgPath.Length <= 40 ? img.ImgPath : img.ImgPath.Substring(0, 40) + "...")}"); + Console.WriteLine(""); + + + Console.WriteLine("---- Test getSomme image (nb : 5, page : 1)"); + images = await imageManager.GetSomeImage(1,5); + foreach (var image in images.items) + { + Console.WriteLine($"- ({image.Id}) : {(image.ImgPath.Length <= 40 ? image.ImgPath : image.ImgPath.Substring(0, 40) + "...")}"); + } + Console.WriteLine(""); + + + Console.WriteLine("---- Test LastId image"); + var id = await imageManager.GetLastImageId(); + Console.WriteLine($"- Last image id : {id}"); + Console.WriteLine(""); + + Console.WriteLine("-------------------------------------------------------------------------------"); // ---- Test Character ---- // var characterManager = new DbCharacterManager(_context); - - await characterManager.AddCharacter(new Entity.Character() { Id = 11, Name = "Majespic", IdImage = 11}); - // recupération données + await characterManager.AddCharacter(new Character() { Id = 11, Name = "Vipélière", IdImage = 11 }); + Console.WriteLine("---- Test ajout charcter (id : 11)"); var characters = await characterManager.GetAll(); - // affichage des dponnées récupérer foreach (var charac in characters.items) { - Console.WriteLine("(" + charac.Id + ") " + charac.Name + " / Image ref :" + charac.IdImage); + Console.WriteLine($"- ({charac.Id}) : {charac.Name} -> {charac.IdImage} : {(charac.Images.ImgPath.Length <= 40 ? charac.Images.ImgPath : charac.Images.ImgPath.Substring(0, 40) + "...")}"); + } + Console.WriteLine(""); + + + await characterManager.UpdateCharacter(11,new Character() {Name = "Majespic"}); + Console.WriteLine("---- Test mise a jour charcter (id : 11)"); + characters = await characterManager.GetAll(); + foreach (var charac in characters.items) + { + Console.WriteLine($"- ({charac.Id}) : {charac.Name} -> {charac.IdImage} : {(charac.Images.ImgPath.Length <= 40 ? charac.Images.ImgPath : charac.Images.ImgPath.Substring(0, 40) + "...")}"); } + Console.WriteLine(""); + await characterManager.RemoveCharacter(11); + Console.WriteLine("---- Test sup (id : 5)"); + characters = await characterManager.GetAll(); + foreach (var charac in characters.items) + { + Console.WriteLine($"- ({charac.Id}) : {charac.Name} -> {charac.IdImage} : {(charac.Images.ImgPath.Length <= 40 ? charac.Images.ImgPath : charac.Images.ImgPath.Substring(0, 40) + "...")}"); + } + Console.WriteLine(""); + + + Console.WriteLine("---- Test GetById (id : 5)"); + var chara = await characterManager.GetCharById(5); + Console.WriteLine($"- ({chara.Id}) : {chara.Name} -> {chara.IdImage} : {(chara.Images.ImgPath.Length <= 40 ? chara.Images.ImgPath : chara.Images.ImgPath.Substring(0, 40) + "...")}"); + Console.WriteLine(""); + + + Console.WriteLine("---- Test GetByName (name : Jon Snow)"); + chara = await characterManager.GetCharByName("Jon Snow"); + Console.WriteLine($"- ({chara.Id}) : {chara.Name} -> {chara.IdImage} : {(chara.Images.ImgPath.Length <= 40 ? chara.Images.ImgPath : chara.Images.ImgPath.Substring(0, 40) + "...")}"); + Console.WriteLine(""); + + + Console.WriteLine("---- Test LastId Character"); + id = await characterManager.GetLastCharId(); + Console.WriteLine($"- Last character id : {id}"); + Console.WriteLine(""); } + diff --git a/WF_EF_Api/Contextlib/DbCharacterManager.cs b/WF_EF_Api/Contextlib/DbCharacterManager.cs index db1a7c0..e0d75e1 100644 --- a/WF_EF_Api/Contextlib/DbCharacterManager.cs +++ b/WF_EF_Api/Contextlib/DbCharacterManager.cs @@ -41,7 +41,7 @@ namespace Contextlib /// A task representing the asynchronous operation, with a as its result containing the full list of characters and pagination information. public Task> GetAll() { - List charLst = _context.characters.ToList(); + List charLst = _context.characters.Include(i => i.Images).ToList(); return Task.FromResult(new PaginationResult(charLst.Count, 0, charLst.Count, charLst)); } @@ -55,6 +55,7 @@ namespace Contextlib public async Task GetCharById(int id) { Character? character = await _context.characters + .Include(i => i.Images) .FirstOrDefaultAsync(x => x.Id == id); if (character == null) @@ -73,8 +74,9 @@ namespace Contextlib /// Thrown when no character is found with the given name. public async Task GetCharByName(string name) { - Character? character = await _context.characters - .FirstOrDefaultAsync(x => x.Name.Equals(name, StringComparison.OrdinalIgnoreCase)); + var character = await _context.characters + .Where(c => EF.Functions.Like(c.Name, name)) + .FirstOrDefaultAsync(); if (character == null) { @@ -129,17 +131,26 @@ namespace Contextlib { throw new ArgumentNullException(nameof(character), "The updated character data cannot be null."); } - + var modif = false; Character? charUpdated = await _context.characters.FirstOrDefaultAsync(x => x.Id == id); if (charUpdated == null) { throw new KeyNotFoundException($"Error : Unable to update, no character found with the ID: {id} ."); } - - charUpdated.IdImage = character.IdImage; - charUpdated.Name = character.Name; - - await _context.SaveChangesAsync(); + if (character.IdImage != 0) + { + charUpdated.IdImage = character.IdImage; + modif = true; + } + if (character.Name != null) + { + charUpdated.Name = character.Name; + modif = true; + } + if (modif) + { + await _context.SaveChangesAsync(); + } } } } diff --git a/WF_EF_Api/Contextlib/DbCommentaryManager.cs b/WF_EF_Api/Contextlib/DbCommentaryManager.cs index 56c0398..e5bde4f 100644 --- a/WF_EF_Api/Contextlib/DbCommentaryManager.cs +++ b/WF_EF_Api/Contextlib/DbCommentaryManager.cs @@ -1,5 +1,6 @@ using Entity; using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Update; using Shared; using System; using System.Collections.Generic; @@ -61,7 +62,7 @@ namespace Contextlib /// Thrown when no comments are found for the provided user ID. public async Task DeleteCommentForUser(int userId) { - var comments = await _context.comments.Where(x => x.IdUser == userId).ToListAsync(); + var comments = await _context.comments.Include(c => c.User).Where(x => x.IdUser == userId).ToListAsync(); if (!comments.Any()) { throw new KeyNotFoundException($"No comments found for the user ID: {userId}."); @@ -73,13 +74,13 @@ namespace Contextlib public async Task> GetAllComment() { - var comments = await _context.comments.ToListAsync(); + var comments = await _context.comments.Include(c => c.User).ToListAsync(); return new PaginationResult(comments.Count, 0, comments.Count, comments); } public async Task GetCommentById(int id) { - var comment = await _context.comments.Where(x => x.Id == id).FirstOrDefaultAsync(); + var comment = await _context.comments.Include(c => c.User).Where(x => x.Id == id).FirstOrDefaultAsync(); if(comment == null) { throw new KeyNotFoundException($"No comments found with the given ID: {id}."); @@ -89,7 +90,7 @@ namespace Contextlib public async Task> GetCommentByQuote(int quoteId, int index, int pageSize) { - var comments = await _context.comments.Where(x => x.IdQuote == quoteId).ToListAsync(); + var comments = await _context.comments.Include(c => c.User).Where(x => x.IdQuote == quoteId).ToListAsync(); if (!comments.Any()) { throw new KeyNotFoundException($"No comments found for the quote ID: {quoteId}."); @@ -111,7 +112,7 @@ namespace Contextlib public async Task> GetCommentByUser(int userId, int index, int pageSize) { - var comments = await _context.comments.Where(x => x.IdUser == userId).ToListAsync(); + var comments = await _context.comments.Include(c => c.User).Where(x => x.IdUser == userId).ToListAsync(); if (!comments.Any()) { throw new KeyNotFoundException($"No comments found for the user ID: {userId}."); @@ -154,6 +155,7 @@ namespace Contextlib public async Task UpdateComment(int id, Commentary comment) { + var modif = false; var com = await _context.comments.Where(x => x.Id == id).FirstOrDefaultAsync(); if (comment == null) { @@ -163,11 +165,29 @@ namespace Contextlib { throw new KeyNotFoundException($"No comments found with the given ID: {id}."); } - com.Comment = comment.Comment; - com.DateCommentary = comment.DateCommentary; - com.IdQuote = comment.IdQuote; - com.IdUser = comment.IdUser; - await _context.SaveChangesAsync(); + if (comment.Comment != null) + { + com.Comment = comment.Comment; + modif = true; + } + if(comment.DateCommentary != null){ + com.DateCommentary = comment.DateCommentary; + modif = true; + } + if(comment.IdQuote != 0) + { + com.IdQuote = comment.IdQuote; + modif = true; + } + if (comment.IdUser != 0) + { + com.IdUser = comment.IdUser; + modif = true; + } + if (modif) + { + await _context.SaveChangesAsync(); + } } } } diff --git a/WF_EF_Api/Contextlib/DbImagesManager.cs b/WF_EF_Api/Contextlib/DbImagesManager.cs index 2ef9d7b..ad51785 100644 --- a/WF_EF_Api/Contextlib/DbImagesManager.cs +++ b/WF_EF_Api/Contextlib/DbImagesManager.cs @@ -85,6 +85,7 @@ namespace Contextlib public async Task UpdateImage(int id, Images image) { + var modif = false; var img = await _context.images.Where(x => x.Id == id).FirstOrDefaultAsync(); if (image == null) { @@ -94,8 +95,15 @@ namespace Contextlib { throw new KeyNotFoundException($"No image found with the given ID: {id}."); } - img.ImgPath = image.ImgPath; - await _context.SaveChangesAsync(); + if (image.ImgPath != null) + { + img.ImgPath = image.ImgPath; + modif = true; + } + if (modif) + { + await _context.SaveChangesAsync(); + } } } } -- 2.36.3