// using System; using MetaCourse.Api.Data; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Migrations; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; #nullable disable namespace MetaCourse.Api.Migrations { [DbContext(typeof(AppDbContext))] [Migration("20260326141046_InitialCreate")] partial class InitialCreate { /// protected override void BuildTargetModel(ModelBuilder modelBuilder) { #pragma warning disable 612, 618 modelBuilder .HasAnnotation("ProductVersion", "9.0.14") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); modelBuilder.Entity("MetaCourse.Api.Entities.Course", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property("CreatedAt") .HasColumnType("datetime2"); b.Property("CreatorId") .HasColumnType("uniqueidentifier"); b.Property("Description") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Status") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Title") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("UpdatedAt") .HasColumnType("datetime2"); b.HasKey("Id"); b.HasIndex("CreatorId"); b.ToTable("Courses"); b.HasData( new { Id = new Guid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"), CreatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), CreatorId = new Guid("11111111-1111-1111-1111-111111111111"), Description = "Maîtrisez React, Tailwind CSS et TypeScript pour créer des applications web performantes.", Status = "Published", Title = "Développement Web Moderne avec React", UpdatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) }, new { Id = new Guid("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"), CreatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), CreatorId = new Guid("22222222-2222-2222-2222-222222222222"), Description = "Apprenez à construire des APIs REST robustes avec ASP.NET Core et FastEndpoints.", Status = "Draft", Title = "API REST avec .NET et FastEndpoints", UpdatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) }); }); modelBuilder.Entity("MetaCourse.Api.Entities.Resource", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property("Content") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("CreatedAt") .HasColumnType("datetime2"); b.Property("Title") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("Type") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.ToTable("Resources"); b.HasData( new { Id = new Guid("ffffffff-ffff-ffff-ffff-ffffffffffff"), Content = "https://youtube.com/watch?v=example1", CreatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), Title = "React en 30 minutes", Type = "Video" }, new { Id = new Guid("00000000-0000-0000-aaaa-000000000001"), Content = "Les hooks permettent d'utiliser le state et d'autres fonctionnalités React dans des composants fonctionnels.", CreatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), Title = "Guide des Hooks", Type = "Text" }, new { Id = new Guid("00000000-0000-0000-aaaa-000000000002"), Content = "https://react.dev", CreatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), Title = "Documentation officielle React", Type = "Url" }); }); modelBuilder.Entity("MetaCourse.Api.Entities.Topic", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property("CourseId") .HasColumnType("uniqueidentifier"); b.Property("Description") .HasColumnType("nvarchar(max)"); b.Property("Position") .HasColumnType("int"); b.Property("Title") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.HasIndex("CourseId"); b.ToTable("Topics"); b.HasData( new { Id = new Guid("cccccccc-cccc-cccc-cccc-cccccccccccc"), CourseId = new Guid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"), Description = "Les bases de React : composants, JSX, props.", Position = 1, Title = "Introduction à React" }, new { Id = new Guid("dddddddd-dddd-dddd-dddd-dddddddddddd"), CourseId = new Guid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"), Description = "useState, useEffect et hooks personnalisés.", Position = 2, Title = "Hooks et State" }, new { Id = new Guid("eeeeeeee-eeee-eeee-eeee-eeeeeeeeeeee"), CourseId = new Guid("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"), Description = "Principes REST et verbes HTTP.", Position = 1, Title = "Fondamentaux REST" }); }); modelBuilder.Entity("MetaCourse.Api.Entities.TopicResource", b => { b.Property("TopicId") .HasColumnType("uniqueidentifier"); b.Property("ResourceId") .HasColumnType("uniqueidentifier"); b.Property("Position") .HasColumnType("int"); b.HasKey("TopicId", "ResourceId"); b.HasIndex("ResourceId"); b.ToTable("TopicResources"); b.HasData( new { TopicId = new Guid("cccccccc-cccc-cccc-cccc-cccccccccccc"), ResourceId = new Guid("ffffffff-ffff-ffff-ffff-ffffffffffff"), Position = 1 }, new { TopicId = new Guid("cccccccc-cccc-cccc-cccc-cccccccccccc"), ResourceId = new Guid("00000000-0000-0000-aaaa-000000000002"), Position = 2 }, new { TopicId = new Guid("dddddddd-dddd-dddd-dddd-dddddddddddd"), ResourceId = new Guid("00000000-0000-0000-aaaa-000000000001"), Position = 1 }); }); modelBuilder.Entity("MetaCourse.Api.Entities.User", b => { b.Property("Id") .ValueGeneratedOnAdd() .HasColumnType("uniqueidentifier"); b.Property("CreatedAt") .HasColumnType("datetime2"); b.Property("Email") .IsRequired() .HasColumnType("nvarchar(450)"); b.Property("Name") .IsRequired() .HasColumnType("nvarchar(max)"); b.Property("PasswordHash") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); b.HasIndex("Email") .IsUnique(); b.ToTable("Users"); b.HasData( new { Id = new Guid("11111111-1111-1111-1111-111111111111"), CreatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), Email = "alice@metacourse.io", Name = "Alice Dupont", PasswordHash = "$2a$11$iVlx6m6E1Nlwe5EuA1m4XeJoWc1P2fgS5i1iwEVo2xYbRNt9gSdFe" }, new { Id = new Guid("22222222-2222-2222-2222-222222222222"), CreatedAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc), Email = "bob@metacourse.io", Name = "Bob Martin", PasswordHash = "$2a$11$LIWuKuO3ful3H1AjoRI1n.kmjW9n05alzfOyMCI0iIIO28q5cSOKu" }); }); modelBuilder.Entity("MetaCourse.Api.Entities.UserCourse", b => { b.Property("UserId") .HasColumnType("uniqueidentifier"); b.Property("CourseId") .HasColumnType("uniqueidentifier"); b.Property("CompletedAt") .HasColumnType("datetime2"); b.Property("EnrolledAt") .HasColumnType("datetime2"); b.HasKey("UserId", "CourseId"); b.HasIndex("CourseId"); b.ToTable("UserCourses"); b.HasData( new { UserId = new Guid("22222222-2222-2222-2222-222222222222"), CourseId = new Guid("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"), EnrolledAt = new DateTime(2025, 1, 1, 0, 0, 0, 0, DateTimeKind.Utc) }); }); modelBuilder.Entity("MetaCourse.Api.Entities.UserResourceProgress", b => { b.Property("UserId") .HasColumnType("uniqueidentifier"); b.Property("ResourceId") .HasColumnType("uniqueidentifier"); b.Property("Completed") .HasColumnType("bit"); b.Property("CompletedAt") .HasColumnType("datetime2"); b.HasKey("UserId", "ResourceId"); b.HasIndex("ResourceId"); b.ToTable("UserResourceProgresses"); }); modelBuilder.Entity("MetaCourse.Api.Entities.UserTopicProgress", b => { b.Property("UserId") .HasColumnType("uniqueidentifier"); b.Property("TopicId") .HasColumnType("uniqueidentifier"); b.Property("Completed") .HasColumnType("bit"); b.Property("CompletedAt") .HasColumnType("datetime2"); b.HasKey("UserId", "TopicId"); b.HasIndex("TopicId"); b.ToTable("UserTopicProgresses"); }); modelBuilder.Entity("MetaCourse.Api.Entities.Course", b => { b.HasOne("MetaCourse.Api.Entities.User", "Creator") .WithMany("CreatedCourses") .HasForeignKey("CreatorId") .OnDelete(DeleteBehavior.Restrict) .IsRequired(); b.Navigation("Creator"); }); modelBuilder.Entity("MetaCourse.Api.Entities.Topic", b => { b.HasOne("MetaCourse.Api.Entities.Course", "Course") .WithMany("Topics") .HasForeignKey("CourseId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Course"); }); modelBuilder.Entity("MetaCourse.Api.Entities.TopicResource", b => { b.HasOne("MetaCourse.Api.Entities.Resource", "Resource") .WithMany("TopicResources") .HasForeignKey("ResourceId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MetaCourse.Api.Entities.Topic", "Topic") .WithMany("TopicResources") .HasForeignKey("TopicId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Resource"); b.Navigation("Topic"); }); modelBuilder.Entity("MetaCourse.Api.Entities.UserCourse", b => { b.HasOne("MetaCourse.Api.Entities.Course", "Course") .WithMany("UserCourses") .HasForeignKey("CourseId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MetaCourse.Api.Entities.User", "User") .WithMany("UserCourses") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Course"); b.Navigation("User"); }); modelBuilder.Entity("MetaCourse.Api.Entities.UserResourceProgress", b => { b.HasOne("MetaCourse.Api.Entities.Resource", "Resource") .WithMany("UserProgresses") .HasForeignKey("ResourceId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MetaCourse.Api.Entities.User", "User") .WithMany("ResourceProgresses") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Resource"); b.Navigation("User"); }); modelBuilder.Entity("MetaCourse.Api.Entities.UserTopicProgress", b => { b.HasOne("MetaCourse.Api.Entities.Topic", "Topic") .WithMany("UserProgresses") .HasForeignKey("TopicId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.HasOne("MetaCourse.Api.Entities.User", "User") .WithMany("TopicProgresses") .HasForeignKey("UserId") .OnDelete(DeleteBehavior.Cascade) .IsRequired(); b.Navigation("Topic"); b.Navigation("User"); }); modelBuilder.Entity("MetaCourse.Api.Entities.Course", b => { b.Navigation("Topics"); b.Navigation("UserCourses"); }); modelBuilder.Entity("MetaCourse.Api.Entities.Resource", b => { b.Navigation("TopicResources"); b.Navigation("UserProgresses"); }); modelBuilder.Entity("MetaCourse.Api.Entities.Topic", b => { b.Navigation("TopicResources"); b.Navigation("UserProgresses"); }); modelBuilder.Entity("MetaCourse.Api.Entities.User", b => { b.Navigation("CreatedCourses"); b.Navigation("ResourceProgresses"); b.Navigation("TopicProgresses"); b.Navigation("UserCourses"); }); #pragma warning restore 612, 618 } } }