diff --git a/.idea/.idea.BeReadyBackend/.idea/dataSources.xml b/.idea/.idea.BeReadyBackend/.idea/dataSources.xml
new file mode 100644
index 0000000..d84601c
--- /dev/null
+++ b/.idea/.idea.BeReadyBackend/.idea/dataSources.xml
@@ -0,0 +1,12 @@
+
+
+
+
+ sqlserver.jb
+ true
+ com.jetbrains.jdbc.sqlserver.SqlServerDriver
+ Server=romaric-thibault.fr,1433
+ $ProjectFileDir$
+
+
+
\ No newline at end of file
diff --git a/.idea/config/applicationhost.config b/.idea/config/applicationhost.config
new file mode 100644
index 0000000..1849da7
--- /dev/null
+++ b/.idea/config/applicationhost.config
@@ -0,0 +1,983 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/BeReadyBackend/BeReadyBackend.csproj b/BeReadyBackend/BeReadyBackend.csproj
index d7c0365..58002fa 100644
--- a/BeReadyBackend/BeReadyBackend.csproj
+++ b/BeReadyBackend/BeReadyBackend.csproj
@@ -17,4 +17,8 @@
+
+
+
+
diff --git a/BeReadyBackend/BeReadyBackend.http b/BeReadyBackend/BeReadyBackend.http
deleted file mode 100644
index c8117d2..0000000
--- a/BeReadyBackend/BeReadyBackend.http
+++ /dev/null
@@ -1,6 +0,0 @@
-@BeReadyBackend_HostAddress = http://localhost:5235
-
-GET {{BeReadyBackend_HostAddress}}/weatherforecast/
-Accept: application/json
-
-###
diff --git a/BeReadyBackend/BeReadyDbContext.cs b/BeReadyBackend/BeReadyDbContext.cs
new file mode 100644
index 0000000..c1236a7
--- /dev/null
+++ b/BeReadyBackend/BeReadyDbContext.cs
@@ -0,0 +1,46 @@
+using BeReadyBackend.Models;
+using Microsoft.EntityFrameworkCore;
+
+namespace BeReadyBackend;
+
+public class BeReadyDbContext : DbContext
+{
+ public DbSet Achievements { get; set; }
+ public DbSet Designations { get; set; }
+ 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; }
+ public DbSet UserGroups { get; set; }
+ public DbSet UserRandomChallenges { get; set; }
+
+ protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
+ {
+ string connectionString =
+ "Server=romaric-thibault.fr;" +
+ "Database=beready;" +
+ "User Id=beready;" +
+ "Password=beready;" +
+ "TrustServerCertificate=true;";
+
+ optionsBuilder.UseSqlServer(connectionString);
+ }
+
+ protected override void OnModelCreating(ModelBuilder modelBuilder)
+ {
+ modelBuilder.Entity()
+ .HasOne(x => x.User)
+ .WithMany(x => x.UserFriends)
+ .HasForeignKey(x => x.UserId)
+ .OnDelete(DeleteBehavior.Restrict);
+
+ modelBuilder.Entity()
+ .HasOne(x => x.Friend)
+ .WithMany()
+ .HasForeignKey(x => x.FriendId)
+ .OnDelete(DeleteBehavior.Restrict);
+ }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Migrations/20260220174541_InitialDatabase.Designer.cs b/BeReadyBackend/Migrations/20260220174541_InitialDatabase.Designer.cs
new file mode 100644
index 0000000..25b1729
--- /dev/null
+++ b/BeReadyBackend/Migrations/20260220174541_InitialDatabase.Designer.cs
@@ -0,0 +1,473 @@
+//
+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("20260220174541_InitialDatabase")]
+ partial class InitialDatabase
+ {
+ ///
+ 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("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("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");
+ });
+
+ 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.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")
+ .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.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.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")
+ .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.Status", b =>
+ {
+ b.Navigation("Groups");
+ });
+
+ 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/20260220174541_InitialDatabase.cs b/BeReadyBackend/Migrations/20260220174541_InitialDatabase.cs
new file mode 100644
index 0000000..1766bcf
--- /dev/null
+++ b/BeReadyBackend/Migrations/20260220174541_InitialDatabase.cs
@@ -0,0 +1,332 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+#nullable disable
+
+namespace BeReadyBackend.Migrations
+{
+ ///
+ public partial class InitialDatabase : Migration
+ {
+ ///
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Achievements",
+ 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_Achievements", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Designations",
+ 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_Designations", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "RandomChallenges",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ Libelle = table.Column(type: "nvarchar(max)", nullable: false),
+ Duration = table.Column(type: "int", nullable: false),
+ IsAlreadyPast = table.Column(type: "bit", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_RandomChallenges", x => x.Id);
+ });
+
+ 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.CreateTable(
+ name: "Users",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ FirstName = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false),
+ Name = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false),
+ Username = table.Column(type: "nvarchar(50)", maxLength: 50, nullable: false),
+ Email = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
+ CreationDate = table.Column(type: "datetime2", nullable: false),
+ Password = table.Column(type: "nvarchar(60)", maxLength: 60, nullable: false),
+ Salt = table.Column(type: "nvarchar(max)", nullable: false),
+ Score = table.Column(type: "int", nullable: false),
+ TotalWin = table.Column(type: "int", nullable: false),
+ TotalChallenge = table.Column(type: "int", nullable: false),
+ TotalPodium = table.Column(type: "int", nullable: false),
+ TotalBonusChallenge = table.Column(type: "int", nullable: false),
+ Series = table.Column(type: "int", nullable: false),
+ DesignationId = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Users", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Users_Designations_DesignationId",
+ column: x => x.DesignationId,
+ principalTable: "Designations",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Groups",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ Label = table.Column(type: "nvarchar(100)", maxLength: 100, nullable: false),
+ StatusId = table.Column(type: "int", nullable: false),
+ Title = table.Column(type: "nvarchar(max)", nullable: false),
+ Description = table.Column(type: "nvarchar(max)", nullable: false),
+ Duration = table.Column(type: "int", nullable: false),
+ CreationDate = table.Column(type: "datetime2", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Groups", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Groups_Status_StatusId",
+ column: x => x.StatusId,
+ principalTable: "Status",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "UserAchievements",
+ columns: table => new
+ {
+ UserId = table.Column(type: "int", nullable: false),
+ AchievementId = table.Column(type: "int", nullable: false),
+ IsActive = table.Column(type: "bit", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_UserAchievements", x => new { x.UserId, x.AchievementId });
+ table.ForeignKey(
+ name: "FK_UserAchievements_Achievements_AchievementId",
+ column: x => x.AchievementId,
+ principalTable: "Achievements",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_UserAchievements_Users_UserId",
+ column: x => x.UserId,
+ principalTable: "Users",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "UserFriends",
+ columns: table => new
+ {
+ UserId = table.Column(type: "int", nullable: false),
+ FriendId = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_UserFriends", x => new { x.UserId, x.FriendId });
+ table.ForeignKey(
+ name: "FK_UserFriends_Users_FriendId",
+ column: x => x.FriendId,
+ principalTable: "Users",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ table.ForeignKey(
+ name: "FK_UserFriends_Users_UserId",
+ column: x => x.UserId,
+ principalTable: "Users",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "UserRandomChallenges",
+ columns: table => new
+ {
+ UserId = table.Column(type: "int", nullable: false),
+ RandomChallengeId = table.Column(type: "int", nullable: false),
+ Proof = table.Column(type: "nvarchar(max)", nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_UserRandomChallenges", x => new { x.UserId, x.RandomChallengeId });
+ table.ForeignKey(
+ name: "FK_UserRandomChallenges_RandomChallenges_RandomChallengeId",
+ column: x => x.RandomChallengeId,
+ principalTable: "RandomChallenges",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_UserRandomChallenges_Users_UserId",
+ column: x => x.UserId,
+ principalTable: "Users",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Messages",
+ columns: table => new
+ {
+ Id = table.Column(type: "int", nullable: false)
+ .Annotation("SqlServer:Identity", "1, 1"),
+ Libelle = table.Column(type: "nvarchar(max)", nullable: false),
+ SendDate = table.Column(type: "datetime2", nullable: false),
+ UserId = table.Column(type: "int", nullable: false),
+ GroupId = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Messages", x => x.Id);
+ table.ForeignKey(
+ name: "FK_Messages_Groups_GroupId",
+ column: x => x.GroupId,
+ principalTable: "Groups",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_Messages_Users_UserId",
+ column: x => x.UserId,
+ principalTable: "Users",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "UserGroups",
+ columns: table => new
+ {
+ UserId = table.Column(type: "int", nullable: false),
+ GroupId = table.Column(type: "int", nullable: false),
+ Proof = table.Column(type: "nvarchar(max)", nullable: true),
+ Grade = table.Column(type: "nvarchar(max)", nullable: false),
+ VotedProofId = table.Column(type: "int", nullable: true),
+ Score = table.Column(type: "int", nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_UserGroups", x => new { x.UserId, x.GroupId });
+ table.ForeignKey(
+ name: "FK_UserGroups_Groups_GroupId",
+ column: x => x.GroupId,
+ principalTable: "Groups",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_UserGroups_Users_UserId",
+ column: x => x.UserId,
+ principalTable: "Users",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Groups_StatusId",
+ table: "Groups",
+ column: "StatusId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Messages_GroupId",
+ table: "Messages",
+ column: "GroupId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Messages_UserId",
+ table: "Messages",
+ column: "UserId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_UserAchievements_AchievementId",
+ table: "UserAchievements",
+ column: "AchievementId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_UserFriends_FriendId",
+ table: "UserFriends",
+ column: "FriendId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_UserGroups_GroupId",
+ table: "UserGroups",
+ column: "GroupId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_UserRandomChallenges_RandomChallengeId",
+ table: "UserRandomChallenges",
+ column: "RandomChallengeId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Users_DesignationId",
+ table: "Users",
+ column: "DesignationId");
+ }
+
+ ///
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Messages");
+
+ migrationBuilder.DropTable(
+ name: "UserAchievements");
+
+ migrationBuilder.DropTable(
+ name: "UserFriends");
+
+ migrationBuilder.DropTable(
+ name: "UserGroups");
+
+ migrationBuilder.DropTable(
+ name: "UserRandomChallenges");
+
+ migrationBuilder.DropTable(
+ name: "Achievements");
+
+ migrationBuilder.DropTable(
+ name: "Groups");
+
+ migrationBuilder.DropTable(
+ name: "RandomChallenges");
+
+ migrationBuilder.DropTable(
+ name: "Users");
+
+ migrationBuilder.DropTable(
+ name: "Status");
+
+ migrationBuilder.DropTable(
+ name: "Designations");
+ }
+ }
+}
diff --git a/BeReadyBackend/Migrations/BeReadyDbContextModelSnapshot.cs b/BeReadyBackend/Migrations/BeReadyDbContextModelSnapshot.cs
new file mode 100644
index 0000000..5ade79c
--- /dev/null
+++ b/BeReadyBackend/Migrations/BeReadyDbContextModelSnapshot.cs
@@ -0,0 +1,470 @@
+//
+using System;
+using BeReadyBackend;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+
+#nullable disable
+
+namespace BeReadyBackend.Migrations
+{
+ [DbContext(typeof(BeReadyDbContext))]
+ partial class BeReadyDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(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("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("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");
+ });
+
+ 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.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")
+ .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.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.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")
+ .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.Status", b =>
+ {
+ b.Navigation("Groups");
+ });
+
+ 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/Models/Achievement.cs b/BeReadyBackend/Models/Achievement.cs
new file mode 100644
index 0000000..36e1c17
--- /dev/null
+++ b/BeReadyBackend/Models/Achievement.cs
@@ -0,0 +1,11 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace BeReadyBackend.Models;
+
+public class Achievement
+{
+ [Key] public int Id { get; set; }
+ [Required] public string? Label { get; set; }
+
+ public List? UserAchievements { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/Designation.cs b/BeReadyBackend/Models/Designation.cs
new file mode 100644
index 0000000..db6c576
--- /dev/null
+++ b/BeReadyBackend/Models/Designation.cs
@@ -0,0 +1,11 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace BeReadyBackend.Models;
+
+public class Designation
+{
+ [Key] public int Id { get; set; }
+ [Required] public string? Label { get; set; }
+
+ public List? Users { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/Group.cs b/BeReadyBackend/Models/Group.cs
new file mode 100644
index 0000000..f852bf7
--- /dev/null
+++ b/BeReadyBackend/Models/Group.cs
@@ -0,0 +1,19 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace BeReadyBackend.Models;
+
+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 string? Title { get; set; }
+ [Required] public string? Description { get; set; }
+ [Required] public int Duration { get; set; }
+ [Required] public DateTime CreationDate { get; set; }
+
+ public List? Messages { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/Message.cs b/BeReadyBackend/Models/Message.cs
new file mode 100644
index 0000000..aa18bc6
--- /dev/null
+++ b/BeReadyBackend/Models/Message.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace BeReadyBackend.Models;
+
+public class Message
+{
+ [Key] public int Id { get; set; }
+ [Required] public string? Libelle { get; set; }
+ [Required] public DateTime SendDate { get; set; }
+
+ public User? User { get; set; }
+ [Required] public int UserId { get; set; }
+
+ public Group? Group { get; set; }
+ [Required] public int GroupId { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/RandomChallenge.cs b/BeReadyBackend/Models/RandomChallenge.cs
new file mode 100644
index 0000000..cc272c7
--- /dev/null
+++ b/BeReadyBackend/Models/RandomChallenge.cs
@@ -0,0 +1,13 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace BeReadyBackend.Models;
+
+public class RandomChallenge
+{
+ [Key] public int Id { get; set; }
+ [Required] public string? Libelle { get; set; }
+ [Required] public int Duration {get; set;}
+ [Required] public bool IsAlreadyPast { get; set; }
+
+ public List? UserRandomChallenges { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/Status.cs b/BeReadyBackend/Models/Status.cs
new file mode 100644
index 0000000..ec291ff
--- /dev/null
+++ b/BeReadyBackend/Models/Status.cs
@@ -0,0 +1,11 @@
+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/Models/User.cs b/BeReadyBackend/Models/User.cs
new file mode 100644
index 0000000..0e74ff8
--- /dev/null
+++ b/BeReadyBackend/Models/User.cs
@@ -0,0 +1,30 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace BeReadyBackend.Models;
+
+public class User
+{
+ [Key] public int Id { get; set; }
+ [Required, MaxLength(50)] public string? FirstName { get; set; }
+ [Required, MaxLength(50)] public string? Name { get; set; }
+ [Required, MaxLength(50)] public string? Username { get; set; }
+ [Required, MaxLength(100)] public string? Email { get; set; }
+ [Required] public DateTime CreationDate { get; set; }
+ [Required, MaxLength(60)] public string? Password { get; set; }
+ [Required] public string? Salt { get; set; }
+ [Required, ] public int Score { get; set; }
+ [Required] public int TotalWin { get; set; }
+ [Required] public int TotalChallenge { get; set; }
+ [Required] public int TotalPodium { get; set; }
+ [Required] public int TotalBonusChallenge { get; set; }
+ [Required] public int Series { get; set; }
+
+ public Designation? Designation { get; set; }
+ [Required] public int DesignationId { get; set; }
+
+ public List? UserFriends { get; set; }
+ public List? Messages { get; set; }
+ public List? UserRandomChallenges { get; set; }
+ public List? UserAchievements { get; set; }
+ public List? UserGroups { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/UserAchievement.cs b/BeReadyBackend/Models/UserAchievement.cs
new file mode 100644
index 0000000..8a1c732
--- /dev/null
+++ b/BeReadyBackend/Models/UserAchievement.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+using Microsoft.EntityFrameworkCore;
+
+namespace BeReadyBackend.Models;
+
+[PrimaryKey(nameof(UserId), nameof(AchievementId))]
+public class UserAchievement
+{
+ public User? User { get; set; }
+ [Required] public int UserId { get; set; }
+
+ public Achievement? Achievement { get; set; }
+ [Required] public int AchievementId { get; set; }
+
+ [Required] public bool IsActive { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/UserFriend.cs b/BeReadyBackend/Models/UserFriend.cs
new file mode 100644
index 0000000..995f50e
--- /dev/null
+++ b/BeReadyBackend/Models/UserFriend.cs
@@ -0,0 +1,13 @@
+using Microsoft.EntityFrameworkCore;
+
+namespace BeReadyBackend.Models;
+
+[PrimaryKey(nameof(UserId), nameof(FriendId))]
+public class UserFriend
+{
+ public User? User { get; set; }
+ public int UserId { get; set; }
+
+ public User? Friend { get; set; }
+ public int FriendId { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/UserGroup.cs b/BeReadyBackend/Models/UserGroup.cs
new file mode 100644
index 0000000..f0f1f91
--- /dev/null
+++ b/BeReadyBackend/Models/UserGroup.cs
@@ -0,0 +1,20 @@
+using System.ComponentModel.DataAnnotations;
+using Microsoft.EntityFrameworkCore;
+
+namespace BeReadyBackend.Models;
+
+[PrimaryKey(nameof(UserId), nameof(GroupId))]
+public class UserGroup
+{
+ public User? User { get; set; }
+ [Required] public int UserId { get; set; }
+
+ public Group? Group { get; set; }
+ [Required] public int GroupId { get; set; }
+
+ public string? Proof { get; set; }
+
+ [Required] public string? Grade { get; set; }
+ public int? VotedProofId { get; set; }
+ [Required] public int Score { get; set; }
+}
\ No newline at end of file
diff --git a/BeReadyBackend/Models/UserRandomChallenge.cs b/BeReadyBackend/Models/UserRandomChallenge.cs
new file mode 100644
index 0000000..c1d6aef
--- /dev/null
+++ b/BeReadyBackend/Models/UserRandomChallenge.cs
@@ -0,0 +1,16 @@
+using System.ComponentModel.DataAnnotations;
+using Microsoft.EntityFrameworkCore;
+
+namespace BeReadyBackend.Models;
+
+[PrimaryKey(nameof(UserId), nameof(RandomChallengeId))]
+public class UserRandomChallenge
+{
+ public User? User { get; set; }
+ [Required] public int UserId { get; set; }
+
+ public RandomChallenge? RandomChallenge { get; set; }
+ [Required] public int RandomChallengeId { get; set; }
+
+ public string? Proof { get; set; }
+}
\ No newline at end of file
diff --git a/obj/--Context.EntityFrameworkCore.targets b/obj/--Context.EntityFrameworkCore.targets
new file mode 100644
index 0000000..7d6485d
--- /dev/null
+++ b/obj/--Context.EntityFrameworkCore.targets
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+