diff --git a/.idea/.idea.BeReadyBackend/.idea/data_source_mapping.xml b/.idea/.idea.BeReadyBackend/.idea/data_source_mapping.xml new file mode 100644 index 0000000..301ad4d --- /dev/null +++ b/.idea/.idea.BeReadyBackend/.idea/data_source_mapping.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/BeReadyBackend/BeReadyBackend.csproj b/BeReadyBackend/BeReadyBackend.csproj index ec1fcc4..5435920 100644 --- a/BeReadyBackend/BeReadyBackend.csproj +++ b/BeReadyBackend/BeReadyBackend.csproj @@ -25,8 +25,12 @@ - - + + + + + + diff --git a/BeReadyBackend/BeReadyDbContext.cs b/BeReadyBackend/BeReadyDbContext.cs index c1236a7..dd26986 100644 --- a/BeReadyBackend/BeReadyDbContext.cs +++ b/BeReadyBackend/BeReadyDbContext.cs @@ -10,7 +10,6 @@ public class BeReadyDbContext : DbContext public DbSet Groups { get; set; } public DbSet Messages { get; set; } public DbSet RandomChallenges { get; set; } - public DbSet Status { get; set; } public DbSet Users { get; set; } public DbSet UserAchievements { get; set; } public DbSet UserFriends { get; set; } diff --git a/BeReadyBackend/Migrations/20260221131548_AddedIsFinishedInGroupAndDeletedStatus.Designer.cs b/BeReadyBackend/Migrations/20260221131548_AddedIsFinishedInGroupAndDeletedStatus.Designer.cs new file mode 100644 index 0000000..e24ef8c --- /dev/null +++ b/BeReadyBackend/Migrations/20260221131548_AddedIsFinishedInGroupAndDeletedStatus.Designer.cs @@ -0,0 +1,445 @@ +// +using System; +using BeReadyBackend; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace BeReadyBackend.Migrations +{ + [DbContext(typeof(BeReadyDbContext))] + [Migration("20260221131548_AddedIsFinishedInGroupAndDeletedStatus")] + partial class AddedIsFinishedInGroupAndDeletedStatus + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "8.0.20") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("BeReadyBackend.Models.Achievement", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Label") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Achievements"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.Designation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Label") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Designations"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.Group", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("Description") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Duration") + .HasColumnType("int"); + + b.Property("IsFinished") + .HasColumnType("bit"); + + b.Property("Label") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Title") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("Groups"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.Message", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("GroupId") + .HasColumnType("int"); + + b.Property("Libelle") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("SendDate") + .HasColumnType("datetime2"); + + b.Property("UserId") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("GroupId"); + + b.HasIndex("UserId"); + + b.ToTable("Messages"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.RandomChallenge", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Duration") + .HasColumnType("int"); + + b.Property("IsAlreadyPast") + .HasColumnType("bit"); + + b.Property("Libelle") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.ToTable("RandomChallenges"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("DesignationId") + .HasColumnType("int"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("FirstName") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Password") + .IsRequired() + .HasMaxLength(60) + .HasColumnType("nvarchar(60)"); + + b.Property("Salt") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Score") + .HasColumnType("int"); + + b.Property("Series") + .HasColumnType("int"); + + b.Property("TotalBonusChallenge") + .HasColumnType("int"); + + b.Property("TotalChallenge") + .HasColumnType("int"); + + b.Property("TotalPodium") + .HasColumnType("int"); + + b.Property("TotalWin") + .HasColumnType("int"); + + b.Property("Username") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("DesignationId"); + + b.ToTable("Users"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.UserAchievement", b => + { + b.Property("UserId") + .HasColumnType("int"); + + b.Property("AchievementId") + .HasColumnType("int"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.HasKey("UserId", "AchievementId"); + + b.HasIndex("AchievementId"); + + b.ToTable("UserAchievements"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.UserFriend", b => + { + b.Property("UserId") + .HasColumnType("int"); + + b.Property("FriendId") + .HasColumnType("int"); + + b.Property("IsAccepted") + .HasColumnType("bit"); + + b.HasKey("UserId", "FriendId"); + + b.HasIndex("FriendId"); + + b.ToTable("UserFriends"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.UserGroup", b => + { + b.Property("UserId") + .HasColumnType("int"); + + b.Property("GroupId") + .HasColumnType("int"); + + b.Property("Grade") + .IsRequired() + .HasColumnType("nvarchar(max)"); + + b.Property("Proof") + .HasColumnType("nvarchar(max)"); + + b.Property("Score") + .HasColumnType("int"); + + b.Property("VotedProofId") + .HasColumnType("int"); + + b.HasKey("UserId", "GroupId"); + + b.HasIndex("GroupId"); + + b.ToTable("UserGroups"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.UserRandomChallenge", b => + { + b.Property("UserId") + .HasColumnType("int"); + + b.Property("RandomChallengeId") + .HasColumnType("int"); + + b.Property("Proof") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "RandomChallengeId"); + + b.HasIndex("RandomChallengeId"); + + b.ToTable("UserRandomChallenges"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.Message", b => + { + b.HasOne("BeReadyBackend.Models.Group", "Group") + .WithMany("Messages") + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BeReadyBackend.Models.User", "User") + .WithMany("Messages") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.User", b => + { + b.HasOne("BeReadyBackend.Models.Designation", "Designation") + .WithMany("Users") + .HasForeignKey("DesignationId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Designation"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.UserAchievement", b => + { + b.HasOne("BeReadyBackend.Models.Achievement", "Achievement") + .WithMany("UserAchievements") + .HasForeignKey("AchievementId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BeReadyBackend.Models.User", "User") + .WithMany("UserAchievements") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Achievement"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.UserFriend", b => + { + b.HasOne("BeReadyBackend.Models.User", "Friend") + .WithMany() + .HasForeignKey("FriendId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("BeReadyBackend.Models.User", "User") + .WithMany("UserFriends") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("Friend"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.UserGroup", b => + { + b.HasOne("BeReadyBackend.Models.Group", "Group") + .WithMany() + .HasForeignKey("GroupId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BeReadyBackend.Models.User", "User") + .WithMany("UserGroups") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Group"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.UserRandomChallenge", b => + { + b.HasOne("BeReadyBackend.Models.RandomChallenge", "RandomChallenge") + .WithMany("UserRandomChallenges") + .HasForeignKey("RandomChallengeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("BeReadyBackend.Models.User", "User") + .WithMany("UserRandomChallenges") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("RandomChallenge"); + + b.Navigation("User"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.Achievement", b => + { + b.Navigation("UserAchievements"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.Designation", b => + { + b.Navigation("Users"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.Group", b => + { + b.Navigation("Messages"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.RandomChallenge", b => + { + b.Navigation("UserRandomChallenges"); + }); + + modelBuilder.Entity("BeReadyBackend.Models.User", b => + { + b.Navigation("Messages"); + + b.Navigation("UserAchievements"); + + b.Navigation("UserFriends"); + + b.Navigation("UserGroups"); + + b.Navigation("UserRandomChallenges"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/BeReadyBackend/Migrations/20260221131548_AddedIsFinishedInGroupAndDeletedStatus.cs b/BeReadyBackend/Migrations/20260221131548_AddedIsFinishedInGroupAndDeletedStatus.cs new file mode 100644 index 0000000..f13fa0e --- /dev/null +++ b/BeReadyBackend/Migrations/20260221131548_AddedIsFinishedInGroupAndDeletedStatus.cs @@ -0,0 +1,77 @@ +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace BeReadyBackend.Migrations +{ + /// + public partial class AddedIsFinishedInGroupAndDeletedStatus : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_Groups_Status_StatusId", + table: "Groups"); + + migrationBuilder.DropTable( + name: "Status"); + + migrationBuilder.DropIndex( + name: "IX_Groups_StatusId", + table: "Groups"); + + migrationBuilder.DropColumn( + name: "StatusId", + table: "Groups"); + + migrationBuilder.AddColumn( + name: "IsFinished", + table: "Groups", + type: "bit", + nullable: false, + defaultValue: false); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropColumn( + name: "IsFinished", + table: "Groups"); + + migrationBuilder.AddColumn( + name: "StatusId", + table: "Groups", + type: "int", + nullable: false, + defaultValue: 0); + + migrationBuilder.CreateTable( + name: "Status", + columns: table => new + { + Id = table.Column(type: "int", nullable: false) + .Annotation("SqlServer:Identity", "1, 1"), + Label = table.Column(type: "nvarchar(max)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Status", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_Groups_StatusId", + table: "Groups", + column: "StatusId"); + + migrationBuilder.AddForeignKey( + name: "FK_Groups_Status_StatusId", + table: "Groups", + column: "StatusId", + principalTable: "Status", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + } +} diff --git a/BeReadyBackend/Migrations/BeReadyDbContextModelSnapshot.cs b/BeReadyBackend/Migrations/BeReadyDbContextModelSnapshot.cs index b04cdc4..32ff219 100644 --- a/BeReadyBackend/Migrations/BeReadyDbContextModelSnapshot.cs +++ b/BeReadyBackend/Migrations/BeReadyDbContextModelSnapshot.cs @@ -78,22 +78,20 @@ namespace BeReadyBackend.Migrations b.Property("Duration") .HasColumnType("int"); + b.Property("IsFinished") + .HasColumnType("bit"); + b.Property("Label") .IsRequired() .HasMaxLength(100) .HasColumnType("nvarchar(100)"); - b.Property("StatusId") - .HasColumnType("int"); - b.Property("Title") .IsRequired() .HasColumnType("nvarchar(max)"); b.HasKey("Id"); - b.HasIndex("StatusId"); - b.ToTable("Groups"); }); @@ -150,23 +148,6 @@ namespace BeReadyBackend.Migrations b.ToTable("RandomChallenges"); }); - modelBuilder.Entity("BeReadyBackend.Models.Status", b => - { - b.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("int"); - - SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); - - b.Property("Label") - .IsRequired() - .HasColumnType("nvarchar(max)"); - - b.HasKey("Id"); - - b.ToTable("Status"); - }); - modelBuilder.Entity("BeReadyBackend.Models.User", b => { b.Property("Id") @@ -317,17 +298,6 @@ namespace BeReadyBackend.Migrations b.ToTable("UserRandomChallenges"); }); - modelBuilder.Entity("BeReadyBackend.Models.Group", b => - { - b.HasOne("BeReadyBackend.Models.Status", "Status") - .WithMany("Groups") - .HasForeignKey("StatusId") - .OnDelete(DeleteBehavior.Cascade) - .IsRequired(); - - b.Navigation("Status"); - }); - modelBuilder.Entity("BeReadyBackend.Models.Message", b => { b.HasOne("BeReadyBackend.Models.Group", "Group") @@ -454,11 +424,6 @@ namespace BeReadyBackend.Migrations b.Navigation("UserRandomChallenges"); }); - modelBuilder.Entity("BeReadyBackend.Models.Status", b => - { - b.Navigation("Groups"); - }); - modelBuilder.Entity("BeReadyBackend.Models.User", b => { b.Navigation("Messages"); diff --git a/BeReadyBackend/Models/Group.cs b/BeReadyBackend/Models/Group.cs index f852bf7..93a4c5c 100644 --- a/BeReadyBackend/Models/Group.cs +++ b/BeReadyBackend/Models/Group.cs @@ -6,9 +6,7 @@ public class Group { [Key] public int Id { get; set; } [Required, MaxLength(100)] public string? Label { get; set; } - - public Status? Status { get; set; } - [Required] public int StatusId { get; set; } + [Required] public bool IsFinished { get; set; } [Required] public string? Title { get; set; } [Required] public string? Description { get; set; } diff --git a/BeReadyBackend/Models/Status.cs b/BeReadyBackend/Models/Status.cs deleted file mode 100644 index ec291ff..0000000 --- a/BeReadyBackend/Models/Status.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace BeReadyBackend.Models; - -public class Status -{ - [Key] public int Id { get; set; } - [Required] public string? Label { get; set; } - - public List? Groups { get; set; } -} \ No newline at end of file diff --git a/BeReadyBackend/Program.cs b/BeReadyBackend/Program.cs index 4d27d20..e0d096a 100644 --- a/BeReadyBackend/Program.cs +++ b/BeReadyBackend/Program.cs @@ -38,7 +38,6 @@ builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); -builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); builder.Services.AddScoped(); diff --git a/BeReadyBackend/Repositories/StatusRepository.cs b/BeReadyBackend/Repositories/StatusRepository.cs deleted file mode 100644 index 3e6edb7..0000000 --- a/BeReadyBackend/Repositories/StatusRepository.cs +++ /dev/null @@ -1,5 +0,0 @@ -using BeReadyBackend.Models; - -namespace BeReadyBackend.Repositories; - -public class StatusRepository(BeReadyDbContext beReadyDbContext, AutoMapper.IMapper mapper) : BeReadyRepository(beReadyDbContext, mapper); \ No newline at end of file