diff --git a/code/server/DataBase/Entity/Chat.cs b/code/server/DataBase/Entity/Chat.cs index 3661652..23a0921 100644 --- a/code/server/DataBase/Entity/Chat.cs +++ b/code/server/DataBase/Entity/Chat.cs @@ -1,7 +1,18 @@  +using System.ComponentModel.DataAnnotations.Schema; + namespace DataBase.Entity { public class Chat { + public int chatId { get; set; } + public int sender { get; set; } + public int recipient { get; set; } + + [ForeignKey("sender")] + public Player PlayerSender { get; set; } + + [ForeignKey("recipient")] + public Player PlayerRecipient { get; set; } } } diff --git a/code/server/DataBase/Entity/Game.cs b/code/server/DataBase/Entity/Game.cs index 1dcca72..56ed7b0 100644 --- a/code/server/DataBase/Entity/Game.cs +++ b/code/server/DataBase/Entity/Game.cs @@ -1,7 +1,21 @@  +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + namespace DataBase.Entity { public class Game { + public int gameId { get; set; } + public int durationGame { get; set; } + public int nbMaxEchanges { get; set; } + public int winner { get; set; } + public int loser { get; set; } + + [ForeignKey("winner")] + public Player PlayerWinner { get; set; } + + [ForeignKey("loser")] + public Player PlayerLoser { get; set; } } } diff --git a/code/server/DataBase/Entity/Message.cs b/code/server/DataBase/Entity/Message.cs index 4ba6f65..f3e1e09 100644 --- a/code/server/DataBase/Entity/Message.cs +++ b/code/server/DataBase/Entity/Message.cs @@ -1,7 +1,21 @@  +using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; + namespace DataBase.Entity { public class Message { + public int messageId { get; set; } + public string message { get; set; } + public TimeSpan timestamp { get; set; } + public int player { get; set; } + public int chat { get; set; } + + [ForeignKey("player")] + public Player PlayerId { get; set; } + + [ForeignKey("chat")] + public Chat ChatId { get; set; } } } diff --git a/code/server/DataBase/Entity/Player.cs b/code/server/DataBase/Entity/Player.cs index 37ff6a9..8663ff6 100644 --- a/code/server/DataBase/Entity/Player.cs +++ b/code/server/DataBase/Entity/Player.cs @@ -1,7 +1,13 @@  +using System.ComponentModel.DataAnnotations; + namespace DataBase.Entity { public class Player { + public int playerId { get; set; } + public string name { get; set; } + public int nbBallTouchTotal { get; set; } + public int timePlayed { get; set; } } } diff --git a/code/server/DataBase/Migrations/20230216153344_initMigration.Designer.cs b/code/server/DataBase/Migrations/20230216153344_initMigration.Designer.cs new file mode 100644 index 0000000..0cdd6a2 --- /dev/null +++ b/code/server/DataBase/Migrations/20230216153344_initMigration.Designer.cs @@ -0,0 +1,179 @@ +// +using System; +using DataBase; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace DataBase.Migrations +{ + [DbContext(typeof(PongDbContext))] + [Migration("20230216153344_initMigration")] + partial class initMigration + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder.HasAnnotation("ProductVersion", "7.0.3"); + + modelBuilder.Entity("DataBase.Entity.Chat", b => + { + b.Property("chatId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("recipient") + .HasColumnType("INTEGER"); + + b.Property("sender") + .HasColumnType("INTEGER"); + + b.HasKey("chatId"); + + b.HasIndex("recipient"); + + b.HasIndex("sender"); + + b.ToTable("Chats"); + }); + + modelBuilder.Entity("DataBase.Entity.Game", b => + { + b.Property("gameId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("durationGame") + .HasColumnType("INTEGER"); + + b.Property("loser") + .HasColumnType("INTEGER"); + + b.Property("nbMaxEchanges") + .HasColumnType("INTEGER"); + + b.Property("winner") + .HasColumnType("INTEGER"); + + b.HasKey("gameId"); + + b.HasIndex("loser"); + + b.HasIndex("winner"); + + b.ToTable("Games"); + }); + + modelBuilder.Entity("DataBase.Entity.Message", b => + { + b.Property("messageId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("chat") + .HasColumnType("INTEGER"); + + b.Property("message") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("player") + .HasColumnType("INTEGER"); + + b.Property("timestamp") + .HasColumnType("TEXT"); + + b.HasKey("messageId"); + + b.HasIndex("chat"); + + b.HasIndex("player"); + + b.ToTable("Messages"); + }); + + modelBuilder.Entity("DataBase.Entity.Player", b => + { + b.Property("playerId") + .ValueGeneratedOnAdd() + .HasColumnType("INTEGER"); + + b.Property("name") + .IsRequired() + .HasColumnType("TEXT"); + + b.Property("nbBallTouchTotal") + .HasColumnType("INTEGER"); + + b.Property("timePlayed") + .HasColumnType("INTEGER"); + + b.HasKey("playerId"); + + b.ToTable("Players"); + }); + + modelBuilder.Entity("DataBase.Entity.Chat", b => + { + b.HasOne("DataBase.Entity.Player", "PlayerRecipient") + .WithMany() + .HasForeignKey("recipient") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DataBase.Entity.Player", "PlayerSender") + .WithMany() + .HasForeignKey("sender") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PlayerRecipient"); + + b.Navigation("PlayerSender"); + }); + + modelBuilder.Entity("DataBase.Entity.Game", b => + { + b.HasOne("DataBase.Entity.Player", "PlayerLoser") + .WithMany() + .HasForeignKey("loser") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DataBase.Entity.Player", "PlayerWinner") + .WithMany() + .HasForeignKey("winner") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PlayerLoser"); + + b.Navigation("PlayerWinner"); + }); + + modelBuilder.Entity("DataBase.Entity.Message", b => + { + b.HasOne("DataBase.Entity.Chat", "ChatId") + .WithMany() + .HasForeignKey("chat") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("DataBase.Entity.Player", "PlayerId") + .WithMany() + .HasForeignKey("player") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("ChatId"); + + b.Navigation("PlayerId"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/code/server/DataBase/Migrations/20230216153344_initMigration.cs b/code/server/DataBase/Migrations/20230216153344_initMigration.cs new file mode 100644 index 0000000..4e28989 --- /dev/null +++ b/code/server/DataBase/Migrations/20230216153344_initMigration.cs @@ -0,0 +1,158 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace DataBase.Migrations +{ + /// + public partial class initMigration : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "Players", + columns: table => new + { + playerId = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + name = table.Column(type: "TEXT", nullable: false), + nbBallTouchTotal = table.Column(type: "INTEGER", nullable: false), + timePlayed = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Players", x => x.playerId); + }); + + migrationBuilder.CreateTable( + name: "Chats", + columns: table => new + { + chatId = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + sender = table.Column(type: "INTEGER", nullable: false), + recipient = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Chats", x => x.chatId); + table.ForeignKey( + name: "FK_Chats_Players_recipient", + column: x => x.recipient, + principalTable: "Players", + principalColumn: "playerId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Chats_Players_sender", + column: x => x.sender, + principalTable: "Players", + principalColumn: "playerId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Games", + columns: table => new + { + gameId = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + durationGame = table.Column(type: "INTEGER", nullable: false), + nbMaxEchanges = table.Column(type: "INTEGER", nullable: false), + winner = table.Column(type: "INTEGER", nullable: false), + loser = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Games", x => x.gameId); + table.ForeignKey( + name: "FK_Games_Players_loser", + column: x => x.loser, + principalTable: "Players", + principalColumn: "playerId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Games_Players_winner", + column: x => x.winner, + principalTable: "Players", + principalColumn: "playerId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "Messages", + columns: table => new + { + messageId = table.Column(type: "INTEGER", nullable: false) + .Annotation("Sqlite:Autoincrement", true), + message = table.Column(type: "TEXT", nullable: false), + timestamp = table.Column(type: "TEXT", nullable: false), + player = table.Column(type: "INTEGER", nullable: false), + chat = table.Column(type: "INTEGER", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_Messages", x => x.messageId); + table.ForeignKey( + name: "FK_Messages_Chats_chat", + column: x => x.chat, + principalTable: "Chats", + principalColumn: "chatId", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_Messages_Players_player", + column: x => x.player, + principalTable: "Players", + principalColumn: "playerId", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_Chats_recipient", + table: "Chats", + column: "recipient"); + + migrationBuilder.CreateIndex( + name: "IX_Chats_sender", + table: "Chats", + column: "sender"); + + migrationBuilder.CreateIndex( + name: "IX_Games_loser", + table: "Games", + column: "loser"); + + migrationBuilder.CreateIndex( + name: "IX_Games_winner", + table: "Games", + column: "winner"); + + migrationBuilder.CreateIndex( + name: "IX_Messages_chat", + table: "Messages", + column: "chat"); + + migrationBuilder.CreateIndex( + name: "IX_Messages_player", + table: "Messages", + column: "player"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "Games"); + + migrationBuilder.DropTable( + name: "Messages"); + + migrationBuilder.DropTable( + name: "Chats"); + + migrationBuilder.DropTable( + name: "Players"); + } + } +} diff --git a/code/server/DataBase/PongDB.db b/code/server/DataBase/PongDB.db index ebf1b1d..a920ea8 100644 Binary files a/code/server/DataBase/PongDB.db and b/code/server/DataBase/PongDB.db differ diff --git a/code/server/DataBase/PongDbContext.cs b/code/server/DataBase/PongDbContext.cs index 50fbf6a..233b597 100644 --- a/code/server/DataBase/PongDbContext.cs +++ b/code/server/DataBase/PongDbContext.cs @@ -1,13 +1,18 @@ -using Microsoft.EntityFrameworkCore; +using DataBase.Entity; +using Microsoft.EntityFrameworkCore; namespace DataBase { public class PongDbContext : DbContext { + DbSet Players { get; set; } + DbSet Games { get; set; } + DbSet Messages { get; set; } + DbSet Chats { get; set; } + public PongDbContext() { } public PongDbContext(DbContextOptions options) : base(options) { } - protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { //base.OnConfiguring(optionsBuilder); diff --git a/code/server/DataBase/PongDbContextWithStub.cs b/code/server/DataBase/PongDbContextWithStub.cs new file mode 100644 index 0000000..f902687 --- /dev/null +++ b/code/server/DataBase/PongDbContextWithStub.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; + +namespace DataBase +{ + public class PongDbContextWithStub : PongDbContext + { + + } +}