From 62c7219b00d878f7451b208f8a4604fd925bc589 Mon Sep 17 00:00:00 2001 From: Muhiddin Kurbonov Date: Wed, 15 Oct 2025 13:59:15 -0500 Subject: [PATCH 1/6] Add Room model --- Project.App/Project.Api/Models/Room.cs | 38 ++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 3 deletions(-) diff --git a/Project.App/Project.Api/Models/Room.cs b/Project.App/Project.Api/Models/Room.cs index c407182..b1b2bf6 100644 --- a/Project.App/Project.Api/Models/Room.cs +++ b/Project.App/Project.Api/Models/Room.cs @@ -1,14 +1,46 @@ namespace Project.Api.Models; using System.ComponentModel.DataAnnotations; +using System.ComponentModel.DataAnnotations.Schema; public class Room { - [Key] public Guid Id {get; set;} + [Key] + public Guid Id { get; set; } - public long HostId {get;set;} - public User Host {get; set;} + public Guid HostId { get; set; } + public bool isPublic { get; set; } + public bool isActive { get; set; } + public DateTime CreatedAt { get; set; } + + public DateTime? StartedAt { get; set; } + + public DateTime? EndedAt { get; set; } + + [MaxLength(50)] + public required string GameMode { get; set; } + + [MaxLength(50)] + public required string GameState { get; set; } + + [MaxLength(500)] + public string? Description { get; set; } + + public int MaxPlayers { get; set; } + + public int MinPlayers { get; set; } + + public int DeckId { get; set; } + + public int Round { get; set; } + + public string State { get; set; } = string.Empty; + + [ForeignKey("HostId")] + public virtual User? Host { get; set; } + + public virtual ICollection RoomPlayers { get; set; } = []; } \ No newline at end of file From da2c27a32a5c58d88840b481af4a01bb5e836cd9 Mon Sep 17 00:00:00 2001 From: Muhiddin Kurbonov Date: Wed, 15 Oct 2025 14:05:42 -0500 Subject: [PATCH 2/6] Remove PlayerRole property and incomplete property declaration that was causing build failure --- Project.App/Project.Api/Models/RoomPlayer.cs | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Project.App/Project.Api/Models/RoomPlayer.cs b/Project.App/Project.Api/Models/RoomPlayer.cs index 362e322..26fe2e5 100644 --- a/Project.App/Project.Api/Models/RoomPlayer.cs +++ b/Project.App/Project.Api/Models/RoomPlayer.cs @@ -10,7 +10,5 @@ public class RoomPlayer public Guid RoomId { get; set; } [Required] public long UserId { get; set; } - [Required] - public PlayerRole Role { get; set; } - public + } From 67bbb9fdea472244bb6e397f89044421705d499b Mon Sep 17 00:00:00 2001 From: Muhiddin Kurbonov Date: Wed, 15 Oct 2025 14:19:41 -0500 Subject: [PATCH 3/6] fix build fails --- .../Project.Api/Controllers/ExampleController.cs | 8 ++++---- Project.App/Project.Api/Data/MappingProfile.cs | 4 ++-- Project.App/Project.Api/Models/Hand.cs | 2 +- Project.App/Project.Api/Models/RoomPlayer.cs | 13 +++++++++++-- Project.App/Project.Api/Program.cs | 6 +++--- .../Repositories/Interface/IRepositoryExample.cs | 4 ++-- .../Project.Api/Repositories/RepositoryExample.cs | 6 +++--- .../Services/Interface/IServiceExample.cs | 4 ++-- 8 files changed, 28 insertions(+), 19 deletions(-) diff --git a/Project.App/Project.Api/Controllers/ExampleController.cs b/Project.App/Project.Api/Controllers/ExampleController.cs index 450478e..d70da71 100644 --- a/Project.App/Project.Api/Controllers/ExampleController.cs +++ b/Project.App/Project.Api/Controllers/ExampleController.cs @@ -1,12 +1,12 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore.Metadata; using Project.DTOs; -using Project.Models; -using Project.Repositories; -using Project.Services; +using Project.Api.Models; +using Project.Api.Repositories; +using Project.Api.Services; using Serilog; -namespace Project.Controllers +namespace Project.Api.Controllers { public class ExampleController : ControllerBase { diff --git a/Project.App/Project.Api/Data/MappingProfile.cs b/Project.App/Project.Api/Data/MappingProfile.cs index 22b9362..d0c7652 100644 --- a/Project.App/Project.Api/Data/MappingProfile.cs +++ b/Project.App/Project.Api/Data/MappingProfile.cs @@ -1,9 +1,9 @@ using System.Net.Http.Headers; using AutoMapper; using Project.DTOs; -using Project.Models; +using Project.Api.Models; -namespace Project.Data +namespace Project.Api.Data { public class MappingProfile : Profile { diff --git a/Project.App/Project.Api/Models/Hand.cs b/Project.App/Project.Api/Models/Hand.cs index 04d479d..4634291 100644 --- a/Project.App/Project.Api/Models/Hand.cs +++ b/Project.App/Project.Api/Models/Hand.cs @@ -9,7 +9,7 @@ public class Hand [Key] public long Id { get; set; } - public int RoomPlayerId { get; set; } + public long RoomPlayerId { get; set; } public int Order { get; set; } diff --git a/Project.App/Project.Api/Models/RoomPlayer.cs b/Project.App/Project.Api/Models/RoomPlayer.cs index 26fe2e5..5231ce2 100644 --- a/Project.App/Project.Api/Models/RoomPlayer.cs +++ b/Project.App/Project.Api/Models/RoomPlayer.cs @@ -6,9 +6,18 @@ public class RoomPlayer { [Key] public long Id { get; set; } + [Required] public Guid RoomId { get; set; } + [Required] - public long UserId { get; set; } - + public int UserId { get; set; } + + [ForeignKey("RoomId")] + public virtual Room? Room { get; set; } + + [ForeignKey("UserId")] + public virtual User? User { get; set; } + + public virtual ICollection Hands { get; set; } = []; } diff --git a/Project.App/Project.Api/Program.cs b/Project.App/Project.Api/Program.cs index 29ba97f..941066c 100644 --- a/Project.App/Project.Api/Program.cs +++ b/Project.App/Project.Api/Program.cs @@ -1,9 +1,9 @@ using System.Text; using AutoMapper; using Microsoft.EntityFrameworkCore; -using Project.Data; -using Project.Repositories; -using Project.Services; +using Project.Api.Data; +using Project.Api.Repositories; +using Project.Api.Services; using Serilog; namespace Project.Api; diff --git a/Project.App/Project.Api/Repositories/Interface/IRepositoryExample.cs b/Project.App/Project.Api/Repositories/Interface/IRepositoryExample.cs index a356f17..af353e4 100644 --- a/Project.App/Project.Api/Repositories/Interface/IRepositoryExample.cs +++ b/Project.App/Project.Api/Repositories/Interface/IRepositoryExample.cs @@ -1,6 +1,6 @@ -using Project.Models; +using Project.Api.Models; -namespace Project.Repositories +namespace Project.Api.Repositories { public interface IRepositoryExample { } } diff --git a/Project.App/Project.Api/Repositories/RepositoryExample.cs b/Project.App/Project.Api/Repositories/RepositoryExample.cs index 505a686..da61415 100644 --- a/Project.App/Project.Api/Repositories/RepositoryExample.cs +++ b/Project.App/Project.Api/Repositories/RepositoryExample.cs @@ -1,8 +1,8 @@ using Microsoft.EntityFrameworkCore; -using Project.Data; -using Project.Models; +using Project.Api.Data; +using Project.Api.Models; -namespace Project.Repositories +namespace Project.Api.Repositories { public class RepositoryExample : IRepositoryExample { } } diff --git a/Project.App/Project.Api/Services/Interface/IServiceExample.cs b/Project.App/Project.Api/Services/Interface/IServiceExample.cs index d0f5b2e..65b9574 100644 --- a/Project.App/Project.Api/Services/Interface/IServiceExample.cs +++ b/Project.App/Project.Api/Services/Interface/IServiceExample.cs @@ -1,6 +1,6 @@ -using Project.Models; +using Project.Api.Models; -namespace Project.Services +namespace Project.Api.Services { public interface IServiceExample { } } From 5267aead821c50dcf7b79d70e0766fbc0f3cf1e0 Mon Sep 17 00:00:00 2001 From: Muhiddin Kurbonov Date: Wed, 15 Oct 2025 14:24:47 -0500 Subject: [PATCH 4/6] fix formatting with csharpier --- .../Project.Api/Controllers/ExampleController.cs | 2 +- Project.App/Project.Api/Data/AppDbContext.cs | 1 - Project.App/Project.Api/Data/MappingProfile.cs | 2 +- Project.App/Project.Api/Models/Room.cs | 6 +++--- Project.App/Project.Api/Models/RoomPlayer.cs | 1 + Project.App/Project.Api/Models/User.cs | 13 ++++++++----- 6 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Project.App/Project.Api/Controllers/ExampleController.cs b/Project.App/Project.Api/Controllers/ExampleController.cs index d70da71..67e6d5b 100644 --- a/Project.App/Project.Api/Controllers/ExampleController.cs +++ b/Project.App/Project.Api/Controllers/ExampleController.cs @@ -1,9 +1,9 @@ using Microsoft.AspNetCore.Mvc; using Microsoft.EntityFrameworkCore.Metadata; -using Project.DTOs; using Project.Api.Models; using Project.Api.Repositories; using Project.Api.Services; +using Project.DTOs; using Serilog; namespace Project.Api.Controllers diff --git a/Project.App/Project.Api/Data/AppDbContext.cs b/Project.App/Project.Api/Data/AppDbContext.cs index 0497cf8..c565f6a 100644 --- a/Project.App/Project.Api/Data/AppDbContext.cs +++ b/Project.App/Project.Api/Data/AppDbContext.cs @@ -14,7 +14,6 @@ public AppDbContext(DbContextOptions options) public DbSet Rooms { get; set; } public DbSet RoomPlayers { get; set; } public DbSet Hands { get; set; } - /// /// Provides the configuration for TradeHubContext models. diff --git a/Project.App/Project.Api/Data/MappingProfile.cs b/Project.App/Project.Api/Data/MappingProfile.cs index d0c7652..ea1438f 100644 --- a/Project.App/Project.Api/Data/MappingProfile.cs +++ b/Project.App/Project.Api/Data/MappingProfile.cs @@ -1,7 +1,7 @@ using System.Net.Http.Headers; using AutoMapper; -using Project.DTOs; using Project.Api.Models; +using Project.DTOs; namespace Project.Api.Data { diff --git a/Project.App/Project.Api/Models/Room.cs b/Project.App/Project.Api/Models/Room.cs index b1b2bf6..51bf737 100644 --- a/Project.App/Project.Api/Models/Room.cs +++ b/Project.App/Project.Api/Models/Room.cs @@ -1,10 +1,11 @@ namespace Project.Api.Models; + using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; public class Room { - [Key] + [Key] public Guid Id { get; set; } public Guid HostId { get; set; } @@ -42,5 +43,4 @@ public class Room public virtual User? Host { get; set; } public virtual ICollection RoomPlayers { get; set; } = []; - -} \ No newline at end of file +} diff --git a/Project.App/Project.Api/Models/RoomPlayer.cs b/Project.App/Project.Api/Models/RoomPlayer.cs index 5231ce2..9a79460 100644 --- a/Project.App/Project.Api/Models/RoomPlayer.cs +++ b/Project.App/Project.Api/Models/RoomPlayer.cs @@ -1,4 +1,5 @@ namespace Project.Api.Models; + using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; diff --git a/Project.App/Project.Api/Models/User.cs b/Project.App/Project.Api/Models/User.cs index fb98911..9c61f20 100644 --- a/Project.App/Project.Api/Models/User.cs +++ b/Project.App/Project.Api/Models/User.cs @@ -7,13 +7,16 @@ namespace Project.Api.Models public class User { [Key] - public int Id {get; set;} + public int Id { get; set; } + [Required, MaxLength(50)] - public string Name { get; set;} = null!; + public string Name { get; set; } = null!; + [Required, MaxLength(255)] - public string Email {get; set;} = null!; + public string Email { get; set; } = null!; + [Required] - public string PasswordHash {get; set;} = null!; - public int Balance {get; set;} = 0; + public string PasswordHash { get; set; } = null!; + public int Balance { get; set; } = 0; } } From f02264bb143486863774f521bd7e99828cd3fe40 Mon Sep 17 00:00:00 2001 From: Salvarez99 Date: Wed, 15 Oct 2025 15:32:42 -0400 Subject: [PATCH 5/6] Fix build issues --- Project.App/Project.Api/Models/RoomPlayer.cs | 27 ++++++++++--------- .../Repositories/RepositoryExample.cs | 8 ------ 2 files changed, 15 insertions(+), 20 deletions(-) delete mode 100644 Project.App/Project.Api/Repositories/RepositoryExample.cs diff --git a/Project.App/Project.Api/Models/RoomPlayer.cs b/Project.App/Project.Api/Models/RoomPlayer.cs index 7f4de0f..15f7370 100644 --- a/Project.App/Project.Api/Models/RoomPlayer.cs +++ b/Project.App/Project.Api/Models/RoomPlayer.cs @@ -1,24 +1,27 @@ -namespace Project.Api.Models; + using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; namespace Project.Api.Models { - [Key] - public long Id { get; set; } + public class RoomPlayer{ + [Key] + public long Id { get; set; } + + [Required] + public Guid RoomId { get; set; } - [Required] - public Guid RoomId { get; set; } + [Required] + public int UserId { get; set; } - [Required] - public int UserId { get; set; } + [ForeignKey("RoomId")] + public virtual Room? Room { get; set; } - [ForeignKey("RoomId")] - public virtual Room? Room { get; set; } + [ForeignKey("UserId")] + public virtual User? User { get; set; } - [ForeignKey("UserId")] - public virtual User? User { get; set; } + public virtual ICollection Hands { get; set; } = []; - public virtual ICollection Hands { get; set; } = []; + } } diff --git a/Project.App/Project.Api/Repositories/RepositoryExample.cs b/Project.App/Project.Api/Repositories/RepositoryExample.cs deleted file mode 100644 index 0deb086..0000000 --- a/Project.App/Project.Api/Repositories/RepositoryExample.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Microsoft.EntityFrameworkCore; -using Project.Api.Data; -using Project.Api.Models; - -namespace Project.Api.Repositories -{ - public class IRepositoryExample { } -} From 4b569a5605ef726dc2b22d4fd9c17e3b8a6b93c4 Mon Sep 17 00:00:00 2001 From: Muhiddin Kurbonov Date: Wed, 15 Oct 2025 18:01:05 -0500 Subject: [PATCH 6/6] Add Fluent API configuration to use SQL Server's JSON column type --- Project.App/Project.Api/Data/AppDbContext.cs | 4 ++++ Project.App/Project.Api/Models/Room.cs | 1 - Project.App/Project.Api/Models/User.cs | 12 +++++++----- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/Project.App/Project.Api/Data/AppDbContext.cs b/Project.App/Project.Api/Data/AppDbContext.cs index c565f6a..caf9415 100644 --- a/Project.App/Project.Api/Data/AppDbContext.cs +++ b/Project.App/Project.Api/Data/AppDbContext.cs @@ -22,6 +22,10 @@ public AppDbContext(DbContextOptions options) protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); + + // Configure GameState as JSON column for SQL Server + modelBuilder.Entity().Property(r => r.GameState).HasColumnType("nvarchar(max)"); + OnModelCreatingPartial(modelBuilder); } diff --git a/Project.App/Project.Api/Models/Room.cs b/Project.App/Project.Api/Models/Room.cs index 51bf737..9cc521a 100644 --- a/Project.App/Project.Api/Models/Room.cs +++ b/Project.App/Project.Api/Models/Room.cs @@ -23,7 +23,6 @@ public class Room [MaxLength(50)] public required string GameMode { get; set; } - [MaxLength(50)] public required string GameState { get; set; } [MaxLength(500)] diff --git a/Project.App/Project.Api/Models/User.cs b/Project.App/Project.Api/Models/User.cs index 8017e3d..e026434 100644 --- a/Project.App/Project.Api/Models/User.cs +++ b/Project.App/Project.Api/Models/User.cs @@ -7,16 +7,18 @@ namespace Project.Api.Models public class User { [Key] - public int Id {get; set;} + public int Id { get; set; } + [Required, MaxLength(256)] - public string Name { get; set;} = null!; + public string Name { get; set; } = null!; + [Required, MaxLength(256)] - public string Email {get; set;} = null!; + public string Email { get; set; } = null!; + [Required, MaxLength(256)] - public string PasswordHash {get; set;} = null!; + public string PasswordHash { get; set; } = null!; public double Balance { get; set; } = 1000; public ICollection RoomPlayers { get; set; } = new List(); - } }