diff --git a/Api/Controllers/v1/VsDuelLeaguesController.cs b/Api/Controllers/v1/VsDuelLeaguesController.cs new file mode 100644 index 0000000..5206e96 --- /dev/null +++ b/Api/Controllers/v1/VsDuelLeaguesController.cs @@ -0,0 +1,35 @@ +using Application.DataTransferObjects.VsDuelLeague; +using Application.Interfaces; +using Asp.Versioning; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace Api.Controllers.v1 +{ + [Route("api/v{version:apiVersion}/[controller]")] + [ApiController] + [ApiVersion("1.0")] + [Authorize] + public class VsDuelLeaguesController(IVsDuelLeagueRepository vsDuelLeagueRepository, ILogger logger) : ControllerBase + { + [HttpGet] + public async Task>> GetVsDuelLeagues(CancellationToken cancellationToken) + { + try + { + var vsDuelLeaguesResult = await vsDuelLeagueRepository.GetVsDuelLeaguesAsync(cancellationToken); + + if (vsDuelLeaguesResult.IsFailure) return BadRequest(vsDuelLeaguesResult.Error); + + return vsDuelLeaguesResult.Value.Count > 0 + ? Ok(vsDuelLeaguesResult.Value) + : NoContent(); + } + catch (Exception e) + { + logger.LogError(e, e.Message); + return StatusCode(StatusCodes.Status500InternalServerError); + } + } + } +} diff --git a/Application/ApplicationDependencyInjection.cs b/Application/ApplicationDependencyInjection.cs index 35d62ac..dc3cc75 100644 --- a/Application/ApplicationDependencyInjection.cs +++ b/Application/ApplicationDependencyInjection.cs @@ -30,6 +30,7 @@ public static class ApplicationDependencyInjection services.AddScoped(); services.AddScoped(); services.AddScoped(); + services.AddScoped(); services.AddTransient(); diff --git a/Application/DataTransferObjects/CustomEvent/CreateCustomEventDto.cs b/Application/DataTransferObjects/CustomEvent/CreateCustomEventDto.cs index e138acc..5ada09b 100644 --- a/Application/DataTransferObjects/CustomEvent/CreateCustomEventDto.cs +++ b/Application/DataTransferObjects/CustomEvent/CreateCustomEventDto.cs @@ -23,4 +23,6 @@ public class CreateCustomEventDto [Required] public required string EventDateString { get; set; } + + public bool IsInProgress { get; set; } } \ No newline at end of file diff --git a/Application/DataTransferObjects/CustomEvent/CustomEventDto.cs b/Application/DataTransferObjects/CustomEvent/CustomEventDto.cs index 36912e8..bd2dd71 100644 --- a/Application/DataTransferObjects/CustomEvent/CustomEventDto.cs +++ b/Application/DataTransferObjects/CustomEvent/CustomEventDto.cs @@ -22,4 +22,6 @@ public class CustomEventDto public string? ModifiedBy { get; set; } + public bool IsInProgress { get; set; } + } \ No newline at end of file diff --git a/Application/DataTransferObjects/CustomEvent/UpdateCustomEventDto.cs b/Application/DataTransferObjects/CustomEvent/UpdateCustomEventDto.cs index 52b404f..687472f 100644 --- a/Application/DataTransferObjects/CustomEvent/UpdateCustomEventDto.cs +++ b/Application/DataTransferObjects/CustomEvent/UpdateCustomEventDto.cs @@ -24,4 +24,7 @@ public class UpdateCustomEventDto [Required] public required string EventDateString { get; set; } + [Required] + public bool IsInProgress { get; set; } + } \ No newline at end of file diff --git a/Application/DataTransferObjects/DesertStorm/CreateDesertStormDto.cs b/Application/DataTransferObjects/DesertStorm/CreateDesertStormDto.cs index f8b4062..cca48ee 100644 --- a/Application/DataTransferObjects/DesertStorm/CreateDesertStormDto.cs +++ b/Application/DataTransferObjects/DesertStorm/CreateDesertStormDto.cs @@ -22,4 +22,6 @@ public class CreateDesertStormDto [Required] [MaxLength(150)] public required string OpponentName { get; set; } + + public bool IsInProgress { get; set; } } \ No newline at end of file diff --git a/Application/DataTransferObjects/DesertStorm/DesertStormDto.cs b/Application/DataTransferObjects/DesertStorm/DesertStormDto.cs index 9ee55d6..bf81ce9 100644 --- a/Application/DataTransferObjects/DesertStorm/DesertStormDto.cs +++ b/Application/DataTransferObjects/DesertStorm/DesertStormDto.cs @@ -23,4 +23,6 @@ public class DesertStormDto public required string CreatedBy { get; set; } public int Participants { get; set; } + + public bool IsInProgress { get; set; } } \ No newline at end of file diff --git a/Application/DataTransferObjects/DesertStorm/UpdateDesertStormDto.cs b/Application/DataTransferObjects/DesertStorm/UpdateDesertStormDto.cs index 8d6dbb1..2ab6e67 100644 --- a/Application/DataTransferObjects/DesertStorm/UpdateDesertStormDto.cs +++ b/Application/DataTransferObjects/DesertStorm/UpdateDesertStormDto.cs @@ -20,4 +20,7 @@ public class UpdateDesertStormDto [Required] [MaxLength(150)] public required string OpponentName { get; set; } + + [Required] + public bool IsInProgress { get; set; } } \ No newline at end of file diff --git a/Application/DataTransferObjects/VsDuel/CreateVsDuelDto.cs b/Application/DataTransferObjects/VsDuel/CreateVsDuelDto.cs index cc2dae0..d846d16 100644 --- a/Application/DataTransferObjects/VsDuel/CreateVsDuelDto.cs +++ b/Application/DataTransferObjects/VsDuel/CreateVsDuelDto.cs @@ -7,6 +7,9 @@ public class CreateVsDuelDto [Required] public Guid AllianceId { get; set; } + [Required] + public Guid VsDuelLeagueId { get; set; } + [Required] public required string EventDate { get; set; } @@ -26,4 +29,6 @@ public class CreateVsDuelDto [Required] public int OpponentSize { get; set; } + public bool IsInProgress { get; set; } + } \ No newline at end of file diff --git a/Application/DataTransferObjects/VsDuel/UpdateVsDuelDto.cs b/Application/DataTransferObjects/VsDuel/UpdateVsDuelDto.cs index 95d14d1..cb1aea7 100644 --- a/Application/DataTransferObjects/VsDuel/UpdateVsDuelDto.cs +++ b/Application/DataTransferObjects/VsDuel/UpdateVsDuelDto.cs @@ -10,6 +10,9 @@ public class UpdateVsDuelDto [Required] public Guid AllianceId { get; set; } + [Required] + public Guid VsDuelLeagueId { get; set; } + [Required] public required string EventDate { get; set; } @@ -28,4 +31,7 @@ public class UpdateVsDuelDto [Required] public int OpponentSize { get; set; } + + [Required] + public bool IsInProgress { get; set; } } \ No newline at end of file diff --git a/Application/DataTransferObjects/VsDuel/VsDuelDto.cs b/Application/DataTransferObjects/VsDuel/VsDuelDto.cs index 88890bf..c518186 100644 --- a/Application/DataTransferObjects/VsDuel/VsDuelDto.cs +++ b/Application/DataTransferObjects/VsDuel/VsDuelDto.cs @@ -12,6 +12,10 @@ public class VsDuelDto public required string CreatedBy { get; set; } + public Guid VsDuelLeagueId { get; set; } + + public required string VsDuelLeague { get; set; } + public bool Won { get; set; } public required string OpponentName { get; set; } @@ -26,4 +30,6 @@ public class VsDuelDto public string? ModifiedBy { get; set; } + public bool IsInProgress { get; set; } + } \ No newline at end of file diff --git a/Application/DataTransferObjects/VsDuelLeague/VsDuelLeagueDto.cs b/Application/DataTransferObjects/VsDuelLeague/VsDuelLeagueDto.cs new file mode 100644 index 0000000..b1196ac --- /dev/null +++ b/Application/DataTransferObjects/VsDuelLeague/VsDuelLeagueDto.cs @@ -0,0 +1,10 @@ +namespace Application.DataTransferObjects.VsDuelLeague; + +public class VsDuelLeagueDto +{ + public Guid Id { get; set; } + + public required string Name { get; set; } + + public int Code { get; set; } +} \ No newline at end of file diff --git a/Application/Interfaces/IVsDuelLeagueRepository.cs b/Application/Interfaces/IVsDuelLeagueRepository.cs new file mode 100644 index 0000000..4b92e4b --- /dev/null +++ b/Application/Interfaces/IVsDuelLeagueRepository.cs @@ -0,0 +1,9 @@ +using Application.Classes; +using Application.DataTransferObjects.VsDuelLeague; + +namespace Application.Interfaces; + +public interface IVsDuelLeagueRepository +{ + Task>> GetVsDuelLeaguesAsync(CancellationToken cancellationToken); +} \ No newline at end of file diff --git a/Application/Profiles/VsDuelLeagueProfile.cs b/Application/Profiles/VsDuelLeagueProfile.cs new file mode 100644 index 0000000..ae70531 --- /dev/null +++ b/Application/Profiles/VsDuelLeagueProfile.cs @@ -0,0 +1,13 @@ +using Application.DataTransferObjects.VsDuelLeague; +using AutoMapper; +using Database.Entities; + +namespace Application.Profiles; + +public class VsDuelLeagueProfile : Profile +{ + public VsDuelLeagueProfile() + { + CreateMap(); + } +} \ No newline at end of file diff --git a/Application/Profiles/VsDuelProfile.cs b/Application/Profiles/VsDuelProfile.cs index 25231a2..1a50289 100644 --- a/Application/Profiles/VsDuelProfile.cs +++ b/Application/Profiles/VsDuelProfile.cs @@ -8,9 +8,11 @@ public class VsDuelProfile : Profile { public VsDuelProfile() { - CreateMap(); + CreateMap() + .ForMember(des => des.VsDuelLeague, opt => opt.MapFrom(src => src.VsDuelLeague.Name)); - CreateMap(); + CreateMap() + .ForMember(des => des.VsDuelLeague, opt => opt.MapFrom(src => src.VsDuelLeague.Name)); CreateMap() .ForMember(des => des.ModifiedOn, opt => opt.MapFrom(src => DateTime.Now)) diff --git a/Application/Repositories/VsDuelLeagueRepository.cs b/Application/Repositories/VsDuelLeagueRepository.cs new file mode 100644 index 0000000..54cffb7 --- /dev/null +++ b/Application/Repositories/VsDuelLeagueRepository.cs @@ -0,0 +1,23 @@ +using Application.Classes; +using Application.DataTransferObjects.VsDuelLeague; +using Application.Interfaces; +using AutoMapper; +using AutoMapper.QueryableExtensions; +using Database; +using Microsoft.EntityFrameworkCore; + +namespace Application.Repositories; + +public class VsDuelLeagueRepository(ApplicationContext context, IMapper mapper) : IVsDuelLeagueRepository +{ + public async Task>> GetVsDuelLeaguesAsync(CancellationToken cancellationToken) + { + var vsDuelLeagues = await context.VsDuelLeagues + .ProjectTo(mapper.ConfigurationProvider) + .AsNoTracking() + .OrderBy(vsDuelLeague => vsDuelLeague.Code) + .ToListAsync(cancellationToken); + + return Result.Success(vsDuelLeagues); + } +} \ No newline at end of file diff --git a/Database/ApplicationContext.cs b/Database/ApplicationContext.cs index d83ac61..8efa7e7 100644 --- a/Database/ApplicationContext.cs +++ b/Database/ApplicationContext.cs @@ -40,6 +40,8 @@ public class ApplicationContext(DbContextOptions options) : public DbSet ZombieSiegeParticipants { get; set; } + public DbSet VsDuelLeagues { get; set; } + protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { base.OnConfiguring(optionsBuilder); diff --git a/Database/Configurations/CustomEventConfiguration.cs b/Database/Configurations/CustomEventConfiguration.cs index a84ac07..2766c43 100644 --- a/Database/Configurations/CustomEventConfiguration.cs +++ b/Database/Configurations/CustomEventConfiguration.cs @@ -16,6 +16,7 @@ public class CustomEventConfiguration : IEntityTypeConfiguration builder.Property(customEvent => customEvent.EventDate).IsRequired(); builder.Property(customEvent => customEvent.IsParticipationEvent).IsRequired(); builder.Property(customEvent => customEvent.IsPointsEvent).IsRequired(); + builder.Property(customEvent => customEvent.IsInProgress).IsRequired(); builder.Property(customEvent => customEvent.CreatedBy).IsRequired().HasMaxLength(150); builder.Property(customEvent => customEvent.ModifiedBy).IsRequired(false).HasMaxLength(150); builder.Property(customEvent => customEvent.ModifiedOn).IsRequired(false); diff --git a/Database/Configurations/DesertStormConfiguration.cs b/Database/Configurations/DesertStormConfiguration.cs index b88f7df..27d4e65 100644 --- a/Database/Configurations/DesertStormConfiguration.cs +++ b/Database/Configurations/DesertStormConfiguration.cs @@ -14,6 +14,7 @@ public class DesertStormConfiguration : IEntityTypeConfiguration builder.Property(desertStorm => desertStorm.EventDate).IsRequired(); builder.Property(desertStorm => desertStorm.OpponentServer).IsRequired(); builder.Property(desertStorm => desertStorm.Won).IsRequired(); + builder.Property(desertStorm => desertStorm.IsInProgress).IsRequired(); builder.Property(desertStorm => desertStorm.OpposingParticipants).IsRequired(); builder.Property(desertStorm => desertStorm.CreatedBy).IsRequired().HasMaxLength(150); builder.Property(desertStorm => desertStorm.OpponentName).IsRequired().HasMaxLength(150); diff --git a/Database/Configurations/VsDuelConfiguration.cs b/Database/Configurations/VsDuelConfiguration.cs index fd11c79..1d34f0b 100644 --- a/Database/Configurations/VsDuelConfiguration.cs +++ b/Database/Configurations/VsDuelConfiguration.cs @@ -13,6 +13,7 @@ public class VsDuelConfiguration : IEntityTypeConfiguration builder.Property(vsDuel => vsDuel.EventDate).IsRequired(); builder.Property(vsDuel => vsDuel.Won).IsRequired(); + builder.Property(vsDuel => vsDuel.IsInProgress).IsRequired(); builder.Property(vsDuel => vsDuel.OpponentName).IsRequired().HasMaxLength(150); builder.Property(vsDuel => vsDuel.OpponentServer).IsRequired(); builder.Property(vsDuel => vsDuel.OpponentPower).IsRequired(); @@ -25,5 +26,10 @@ public class VsDuelConfiguration : IEntityTypeConfiguration .WithMany(alliance => alliance.VsDuels) .HasForeignKey(vsDuel => vsDuel.AllianceId) .OnDelete(DeleteBehavior.Cascade); + + builder.HasOne(vsDuel => vsDuel.VsDuelLeague) + .WithMany(vsDuelLeague => vsDuelLeague.VsDuels) + .HasForeignKey(vsDuel => vsDuel.VsDuelLeagueId) + .OnDelete(DeleteBehavior.Cascade); } } \ No newline at end of file diff --git a/Database/Configurations/VsDuelLeagueConfiguration.cs b/Database/Configurations/VsDuelLeagueConfiguration.cs new file mode 100644 index 0000000..0cbe2ad --- /dev/null +++ b/Database/Configurations/VsDuelLeagueConfiguration.cs @@ -0,0 +1,41 @@ +using Database.Entities; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace Database.Configurations; + +public class VsDuelLeagueConfiguration : IEntityTypeConfiguration +{ + public void Configure(EntityTypeBuilder builder) + { + builder.HasKey(vsDuelLeague => vsDuelLeague.Id); + builder.Property(vsDuelLeague => vsDuelLeague.Id).ValueGeneratedNever(); + + builder.Property(vsDuelLeague => vsDuelLeague.Name).IsRequired().HasMaxLength(150); + builder.Property(vsDuelLeague => vsDuelLeague.Code).IsRequired(); + + var vsDuelLeagues = new List() + { + new() + { + Id = Guid.CreateVersion7(), + Name = "Silver League", + Code = 1 + }, + new() + { + Id = Guid.CreateVersion7(), + Name = "Gold League", + Code = 2 + }, + new() + { + Id = Guid.CreateVersion7(), + Name = "Diamond League", + Code = 3 + } + }; + + builder.HasData(vsDuelLeagues); + } +} \ No newline at end of file diff --git a/Database/Entities/CustomEvent.cs b/Database/Entities/CustomEvent.cs index fb62db0..4d3e9b6 100644 --- a/Database/Entities/CustomEvent.cs +++ b/Database/Entities/CustomEvent.cs @@ -14,6 +14,8 @@ public class CustomEvent : BaseEntity public bool IsParticipationEvent { get; set; } + public bool IsInProgress { get; set; } + public DateTime EventDate { get; set; } public required string CreatedBy { get; set; } diff --git a/Database/Entities/DesertStorm.cs b/Database/Entities/DesertStorm.cs index 17cfdd3..9761941 100644 --- a/Database/Entities/DesertStorm.cs +++ b/Database/Entities/DesertStorm.cs @@ -22,5 +22,7 @@ public class DesertStorm : BaseEntity public int OpposingParticipants { get; set; } + public bool IsInProgress { get; set; } + public ICollection DesertStormParticipants { get; set; } = []; } \ No newline at end of file diff --git a/Database/Entities/VsDuel.cs b/Database/Entities/VsDuel.cs index ab5feac..35763e0 100644 --- a/Database/Entities/VsDuel.cs +++ b/Database/Entities/VsDuel.cs @@ -4,8 +4,12 @@ public class VsDuel : BaseEntity { public Guid AllianceId { get; set; } + public Guid? VsDuelLeagueId { get; set; } + public Alliance Alliance { get; set; } = null!; + public VsDuelLeague? VsDuelLeague { get; set; } + public DateTime EventDate { get; set; } public required string CreatedBy { get; set; } @@ -24,5 +28,7 @@ public class VsDuel : BaseEntity public int OpponentSize { get; set; } + public bool IsInProgress { get; set; } + public ICollection VsDuelParticipants { get; set; } = []; } \ No newline at end of file diff --git a/Database/Entities/VsDuelLeague.cs b/Database/Entities/VsDuelLeague.cs new file mode 100644 index 0000000..7ccb930 --- /dev/null +++ b/Database/Entities/VsDuelLeague.cs @@ -0,0 +1,10 @@ +namespace Database.Entities; + +public class VsDuelLeague : BaseEntity +{ + public required string Name { get; set; } + + public int Code { get; set; } + + public ICollection VsDuels { get; set; } = []; +} \ No newline at end of file diff --git a/Database/Migrations/20241203065528_AddVsDuelLeague.Designer.cs b/Database/Migrations/20241203065528_AddVsDuelLeague.Designer.cs new file mode 100644 index 0000000..26cb22d --- /dev/null +++ b/Database/Migrations/20241203065528_AddVsDuelLeague.Designer.cs @@ -0,0 +1,1155 @@ +// +using System; +using Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Database.Migrations +{ + [DbContext(typeof(ApplicationContext))] + [Migration("20241203065528_AddVsDuelLeague")] + partial class AddVsDuelLeague + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("dbo") + .HasAnnotation("ProductVersion", "9.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Database.Entities.Admonition", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Reason") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.ToTable("Admonitions", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Alliance", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Abbreviation") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("Server") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Alliances", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("IsParticipationEvent") + .HasColumnType("bit"); + + b.Property("IsPointsEvent") + .HasColumnType("bit"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("CustomEvents", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.CustomEventParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AchievedPoints") + .HasColumnType("bigint"); + + b.Property("CustomEventId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CustomEventId"); + + b.HasIndex("PlayerId"); + + b.ToTable("CustomEventParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("OpponentName") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("OpponentServer") + .HasColumnType("int"); + + b.Property("OpposingParticipants") + .HasColumnType("int"); + + b.Property("Won") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("DesertStorms", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.DesertStormParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DesertStormId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Registered") + .HasColumnType("bit"); + + b.Property("StartPlayer") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("DesertStormId"); + + b.HasIndex("PlayerId"); + + b.ToTable("DesertStormParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceSize") + .HasColumnType("int"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("RewardPhase") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("MarshalGuards", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuardParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("MarshalGuardId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("MarshalGuardId"); + + b.HasIndex("PlayerId"); + + b.ToTable("MarshalGuardParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Note", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerNote") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.ToTable("Notes", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerName") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("RankId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("RankId"); + + b.ToTable("Players", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Rank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.HasKey("Id"); + + b.ToTable("Ranks", "dbo"); + + b.HasData( + new + { + Id = new Guid("b1c10a1c-5cf3-4e22-9fc1-d9b165b85dd3"), + Name = "R5" + }, + new + { + Id = new Guid("0fc2f68a-0a4d-4922-981e-c624e4c39024"), + Name = "R4" + }, + new + { + Id = new Guid("4970e1f5-f7f5-43e8-88cc-7f8fc4075418"), + Name = "R3" + }, + new + { + Id = new Guid("d8d0c587-f269-45ff-b13e-4631298bf0af"), + Name = "R2" + }, + new + { + Id = new Guid("326edef0-5074-43a5-9db9-edc71221a0f7"), + Name = "R1" + }); + }); + + modelBuilder.Entity("Database.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("PlayerName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("Users", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("OpponentName") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("OpponentPower") + .HasColumnType("bigint"); + + b.Property("OpponentServer") + .HasColumnType("int"); + + b.Property("OpponentSize") + .HasColumnType("int"); + + b.Property("VsDuelLeagueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Won") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("VsDuelLeagueId"); + + b.ToTable("VsDuels", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelLeague", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.ToTable("VsDuelLeagues", "dbo"); + + b.HasData( + new + { + Id = new Guid("01938b4d-6cb9-7e61-b46b-781659ca5694"), + Name = "Silver League" + }, + new + { + Id = new Guid("01938b4d-6cb9-7813-a409-475c9338f970"), + Name = "Gold League" + }, + new + { + Id = new Guid("01938b4d-6cb9-7c03-afef-5767a2132543"), + Name = "Diamond League" + }); + }); + + modelBuilder.Entity("Database.Entities.VsDuelParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("VsDuelId") + .HasColumnType("uniqueidentifier"); + + b.Property("WeeklyPoints") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.HasIndex("VsDuelId"); + + b.ToTable("VsDuelParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceSize") + .HasColumnType("int"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("ZombieSieges", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiegeParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("SurvivedWaves") + .HasColumnType("int"); + + b.Property("ZombieSiegeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.HasIndex("ZombieSiegeId"); + + b.ToTable("ZombieSiegeParticipants", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("Roles", "dbo"); + + b.HasData( + new + { + Id = new Guid("d8b9f882-95f0-4ba0-80ed-9c22c27ac88a"), + Name = "SystemAdministrator", + NormalizedName = "SYSTEMADMINISTRATOR" + }, + new + { + Id = new Guid("47de05ba-ff1e-46b6-9995-269084006c24"), + Name = "Administrator", + NormalizedName = "ADMINISTRATOR" + }, + new + { + Id = new Guid("5cc27946-5601-4a25-b9a9-75b8a11c0cf4"), + Name = "User", + NormalizedName = "USER" + }, + new + { + Id = new Guid("207bb0a3-ad50-49bb-bc41-b266fce66529"), + Name = "ReadOnly", + NormalizedName = "READONLY" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleClaims", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserClaims", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("UserLogins", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("UserRoles", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("UserTokens", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Admonition", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("Admonitions") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("CustomEvents") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.CustomEventParticipant", b => + { + b.HasOne("Database.Entities.CustomEvent", "CustomEvent") + .WithMany("CustomEventParticipants") + .HasForeignKey("CustomEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("CustomEventParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CustomEvent"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("DesertStorms") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.DesertStormParticipant", b => + { + b.HasOne("Database.Entities.DesertStorm", "DesertStorm") + .WithMany("DesertStormParticipants") + .HasForeignKey("DesertStormId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("DesertStormParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("DesertStorm"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("MarshalGuards") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuardParticipant", b => + { + b.HasOne("Database.Entities.MarshalGuard", "MarshalGuard") + .WithMany("MarshalGuardParticipants") + .HasForeignKey("MarshalGuardId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("MarshalGuardParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("MarshalGuard"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.Note", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("Notes") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("Players") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Rank", "Rank") + .WithMany("Players") + .HasForeignKey("RankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Database.Entities.User", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("Users") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("VsDuels") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.VsDuelLeague", "VsDuelLeague") + .WithMany("VsDuels") + .HasForeignKey("VsDuelLeagueId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Alliance"); + + b.Navigation("VsDuelLeague"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelParticipant", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("VsDuelParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Database.Entities.VsDuel", "VsDuel") + .WithMany("VsDuelParticipants") + .HasForeignKey("VsDuelId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + + b.Navigation("VsDuel"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("ZombieSieges") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiegeParticipant", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("ZombieSiegeParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Database.Entities.ZombieSiege", "ZombieSiege") + .WithMany("ZombieSiegeParticipants") + .HasForeignKey("ZombieSiegeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + + b.Navigation("ZombieSiege"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Database.Entities.Alliance", b => + { + b.Navigation("CustomEvents"); + + b.Navigation("DesertStorms"); + + b.Navigation("MarshalGuards"); + + b.Navigation("Players"); + + b.Navigation("Users"); + + b.Navigation("VsDuels"); + + b.Navigation("ZombieSieges"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.Navigation("CustomEventParticipants"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.Navigation("DesertStormParticipants"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.Navigation("MarshalGuardParticipants"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.Navigation("Admonitions"); + + b.Navigation("CustomEventParticipants"); + + b.Navigation("DesertStormParticipants"); + + b.Navigation("MarshalGuardParticipants"); + + b.Navigation("Notes"); + + b.Navigation("VsDuelParticipants"); + + b.Navigation("ZombieSiegeParticipants"); + }); + + modelBuilder.Entity("Database.Entities.Rank", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.Navigation("VsDuelParticipants"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelLeague", b => + { + b.Navigation("VsDuels"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.Navigation("ZombieSiegeParticipants"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Database/Migrations/20241203065528_AddVsDuelLeague.cs b/Database/Migrations/20241203065528_AddVsDuelLeague.cs new file mode 100644 index 0000000..67926d9 --- /dev/null +++ b/Database/Migrations/20241203065528_AddVsDuelLeague.cs @@ -0,0 +1,87 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace Database.Migrations +{ + /// + public partial class AddVsDuelLeague : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "VsDuelLeagueId", + schema: "dbo", + table: "VsDuels", + type: "uniqueidentifier", + nullable: true); + + migrationBuilder.CreateTable( + name: "VsDuelLeagues", + schema: "dbo", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + Name = table.Column(type: "nvarchar(150)", maxLength: 150, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_VsDuelLeagues", x => x.Id); + }); + + migrationBuilder.InsertData( + schema: "dbo", + table: "VsDuelLeagues", + columns: new[] { "Id", "Name" }, + values: new object[,] + { + { new Guid("01938b4d-6cb9-7813-a409-475c9338f970"), "Gold League" }, + { new Guid("01938b4d-6cb9-7c03-afef-5767a2132543"), "Diamond League" }, + { new Guid("01938b4d-6cb9-7e61-b46b-781659ca5694"), "Silver League" } + }); + + migrationBuilder.CreateIndex( + name: "IX_VsDuels_VsDuelLeagueId", + schema: "dbo", + table: "VsDuels", + column: "VsDuelLeagueId"); + + migrationBuilder.AddForeignKey( + name: "FK_VsDuels_VsDuelLeagues_VsDuelLeagueId", + schema: "dbo", + table: "VsDuels", + column: "VsDuelLeagueId", + principalSchema: "dbo", + principalTable: "VsDuelLeagues", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropForeignKey( + name: "FK_VsDuels_VsDuelLeagues_VsDuelLeagueId", + schema: "dbo", + table: "VsDuels"); + + migrationBuilder.DropTable( + name: "VsDuelLeagues", + schema: "dbo"); + + migrationBuilder.DropIndex( + name: "IX_VsDuels_VsDuelLeagueId", + schema: "dbo", + table: "VsDuels"); + + migrationBuilder.DropColumn( + name: "VsDuelLeagueId", + schema: "dbo", + table: "VsDuels"); + } + } +} diff --git a/Database/Migrations/20241203072948_addIsInProgressToEvents.Designer.cs b/Database/Migrations/20241203072948_addIsInProgressToEvents.Designer.cs new file mode 100644 index 0000000..c26ef0a --- /dev/null +++ b/Database/Migrations/20241203072948_addIsInProgressToEvents.Designer.cs @@ -0,0 +1,1164 @@ +// +using System; +using Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Database.Migrations +{ + [DbContext(typeof(ApplicationContext))] + [Migration("20241203072948_addIsInProgressToEvents")] + partial class addIsInProgressToEvents + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("dbo") + .HasAnnotation("ProductVersion", "9.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Database.Entities.Admonition", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Reason") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.ToTable("Admonitions", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Alliance", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Abbreviation") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("Server") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Alliances", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("IsInProgress") + .HasColumnType("bit"); + + b.Property("IsParticipationEvent") + .HasColumnType("bit"); + + b.Property("IsPointsEvent") + .HasColumnType("bit"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("CustomEvents", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.CustomEventParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AchievedPoints") + .HasColumnType("bigint"); + + b.Property("CustomEventId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CustomEventId"); + + b.HasIndex("PlayerId"); + + b.ToTable("CustomEventParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("IsInProgress") + .HasColumnType("bit"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("OpponentName") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("OpponentServer") + .HasColumnType("int"); + + b.Property("OpposingParticipants") + .HasColumnType("int"); + + b.Property("Won") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("DesertStorms", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.DesertStormParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DesertStormId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Registered") + .HasColumnType("bit"); + + b.Property("StartPlayer") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("DesertStormId"); + + b.HasIndex("PlayerId"); + + b.ToTable("DesertStormParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceSize") + .HasColumnType("int"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("RewardPhase") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("MarshalGuards", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuardParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("MarshalGuardId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("MarshalGuardId"); + + b.HasIndex("PlayerId"); + + b.ToTable("MarshalGuardParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Note", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerNote") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.ToTable("Notes", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerName") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("RankId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("RankId"); + + b.ToTable("Players", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Rank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.HasKey("Id"); + + b.ToTable("Ranks", "dbo"); + + b.HasData( + new + { + Id = new Guid("b1c10a1c-5cf3-4e22-9fc1-d9b165b85dd3"), + Name = "R5" + }, + new + { + Id = new Guid("0fc2f68a-0a4d-4922-981e-c624e4c39024"), + Name = "R4" + }, + new + { + Id = new Guid("4970e1f5-f7f5-43e8-88cc-7f8fc4075418"), + Name = "R3" + }, + new + { + Id = new Guid("d8d0c587-f269-45ff-b13e-4631298bf0af"), + Name = "R2" + }, + new + { + Id = new Guid("326edef0-5074-43a5-9db9-edc71221a0f7"), + Name = "R1" + }); + }); + + modelBuilder.Entity("Database.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("PlayerName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("Users", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("IsInProgress") + .HasColumnType("bit"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("OpponentName") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("OpponentPower") + .HasColumnType("bigint"); + + b.Property("OpponentServer") + .HasColumnType("int"); + + b.Property("OpponentSize") + .HasColumnType("int"); + + b.Property("VsDuelLeagueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Won") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("VsDuelLeagueId"); + + b.ToTable("VsDuels", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelLeague", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.ToTable("VsDuelLeagues", "dbo"); + + b.HasData( + new + { + Id = new Guid("01938b6c-dd30-7182-9fe6-9df201e0586d"), + Name = "Silver League" + }, + new + { + Id = new Guid("01938b6c-dd30-7a97-9bfc-e4f49c245b7a"), + Name = "Gold League" + }, + new + { + Id = new Guid("01938b6c-dd30-7b55-8254-12337beebc73"), + Name = "Diamond League" + }); + }); + + modelBuilder.Entity("Database.Entities.VsDuelParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("VsDuelId") + .HasColumnType("uniqueidentifier"); + + b.Property("WeeklyPoints") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.HasIndex("VsDuelId"); + + b.ToTable("VsDuelParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceSize") + .HasColumnType("int"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("ZombieSieges", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiegeParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("SurvivedWaves") + .HasColumnType("int"); + + b.Property("ZombieSiegeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.HasIndex("ZombieSiegeId"); + + b.ToTable("ZombieSiegeParticipants", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("Roles", "dbo"); + + b.HasData( + new + { + Id = new Guid("d8b9f882-95f0-4ba0-80ed-9c22c27ac88a"), + Name = "SystemAdministrator", + NormalizedName = "SYSTEMADMINISTRATOR" + }, + new + { + Id = new Guid("47de05ba-ff1e-46b6-9995-269084006c24"), + Name = "Administrator", + NormalizedName = "ADMINISTRATOR" + }, + new + { + Id = new Guid("5cc27946-5601-4a25-b9a9-75b8a11c0cf4"), + Name = "User", + NormalizedName = "USER" + }, + new + { + Id = new Guid("207bb0a3-ad50-49bb-bc41-b266fce66529"), + Name = "ReadOnly", + NormalizedName = "READONLY" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleClaims", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserClaims", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("UserLogins", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("UserRoles", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("UserTokens", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Admonition", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("Admonitions") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("CustomEvents") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.CustomEventParticipant", b => + { + b.HasOne("Database.Entities.CustomEvent", "CustomEvent") + .WithMany("CustomEventParticipants") + .HasForeignKey("CustomEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("CustomEventParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CustomEvent"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("DesertStorms") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.DesertStormParticipant", b => + { + b.HasOne("Database.Entities.DesertStorm", "DesertStorm") + .WithMany("DesertStormParticipants") + .HasForeignKey("DesertStormId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("DesertStormParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("DesertStorm"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("MarshalGuards") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuardParticipant", b => + { + b.HasOne("Database.Entities.MarshalGuard", "MarshalGuard") + .WithMany("MarshalGuardParticipants") + .HasForeignKey("MarshalGuardId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("MarshalGuardParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("MarshalGuard"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.Note", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("Notes") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("Players") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Rank", "Rank") + .WithMany("Players") + .HasForeignKey("RankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Database.Entities.User", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("Users") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("VsDuels") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.VsDuelLeague", "VsDuelLeague") + .WithMany("VsDuels") + .HasForeignKey("VsDuelLeagueId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Alliance"); + + b.Navigation("VsDuelLeague"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelParticipant", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("VsDuelParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Database.Entities.VsDuel", "VsDuel") + .WithMany("VsDuelParticipants") + .HasForeignKey("VsDuelId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + + b.Navigation("VsDuel"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("ZombieSieges") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiegeParticipant", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("ZombieSiegeParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Database.Entities.ZombieSiege", "ZombieSiege") + .WithMany("ZombieSiegeParticipants") + .HasForeignKey("ZombieSiegeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + + b.Navigation("ZombieSiege"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Database.Entities.Alliance", b => + { + b.Navigation("CustomEvents"); + + b.Navigation("DesertStorms"); + + b.Navigation("MarshalGuards"); + + b.Navigation("Players"); + + b.Navigation("Users"); + + b.Navigation("VsDuels"); + + b.Navigation("ZombieSieges"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.Navigation("CustomEventParticipants"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.Navigation("DesertStormParticipants"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.Navigation("MarshalGuardParticipants"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.Navigation("Admonitions"); + + b.Navigation("CustomEventParticipants"); + + b.Navigation("DesertStormParticipants"); + + b.Navigation("MarshalGuardParticipants"); + + b.Navigation("Notes"); + + b.Navigation("VsDuelParticipants"); + + b.Navigation("ZombieSiegeParticipants"); + }); + + modelBuilder.Entity("Database.Entities.Rank", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.Navigation("VsDuelParticipants"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelLeague", b => + { + b.Navigation("VsDuels"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.Navigation("ZombieSiegeParticipants"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Database/Migrations/20241203072948_addIsInProgressToEvents.cs b/Database/Migrations/20241203072948_addIsInProgressToEvents.cs new file mode 100644 index 0000000..6599cb5 --- /dev/null +++ b/Database/Migrations/20241203072948_addIsInProgressToEvents.cs @@ -0,0 +1,118 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace Database.Migrations +{ + /// + public partial class addIsInProgressToEvents : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b4d-6cb9-7813-a409-475c9338f970")); + + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b4d-6cb9-7c03-afef-5767a2132543")); + + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b4d-6cb9-7e61-b46b-781659ca5694")); + + migrationBuilder.AddColumn( + name: "IsInProgress", + schema: "dbo", + table: "VsDuels", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsInProgress", + schema: "dbo", + table: "DesertStorms", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AddColumn( + name: "IsInProgress", + schema: "dbo", + table: "CustomEvents", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.InsertData( + schema: "dbo", + table: "VsDuelLeagues", + columns: new[] { "Id", "Name" }, + values: new object[,] + { + { new Guid("01938b6c-dd30-7182-9fe6-9df201e0586d"), "Silver League" }, + { new Guid("01938b6c-dd30-7a97-9bfc-e4f49c245b7a"), "Gold League" }, + { new Guid("01938b6c-dd30-7b55-8254-12337beebc73"), "Diamond League" } + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b6c-dd30-7182-9fe6-9df201e0586d")); + + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b6c-dd30-7a97-9bfc-e4f49c245b7a")); + + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b6c-dd30-7b55-8254-12337beebc73")); + + migrationBuilder.DropColumn( + name: "IsInProgress", + schema: "dbo", + table: "VsDuels"); + + migrationBuilder.DropColumn( + name: "IsInProgress", + schema: "dbo", + table: "DesertStorms"); + + migrationBuilder.DropColumn( + name: "IsInProgress", + schema: "dbo", + table: "CustomEvents"); + + migrationBuilder.InsertData( + schema: "dbo", + table: "VsDuelLeagues", + columns: new[] { "Id", "Name" }, + values: new object[,] + { + { new Guid("01938b4d-6cb9-7813-a409-475c9338f970"), "Gold League" }, + { new Guid("01938b4d-6cb9-7c03-afef-5767a2132543"), "Diamond League" }, + { new Guid("01938b4d-6cb9-7e61-b46b-781659ca5694"), "Silver League" } + }); + } + } +} diff --git a/Database/Migrations/20241203095606_AddCodeToVsDuelLeague.Designer.cs b/Database/Migrations/20241203095606_AddCodeToVsDuelLeague.Designer.cs new file mode 100644 index 0000000..e7bbd43 --- /dev/null +++ b/Database/Migrations/20241203095606_AddCodeToVsDuelLeague.Designer.cs @@ -0,0 +1,1170 @@ +// +using System; +using Database; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; + +#nullable disable + +namespace Database.Migrations +{ + [DbContext(typeof(ApplicationContext))] + [Migration("20241203095606_AddCodeToVsDuelLeague")] + partial class AddCodeToVsDuelLeague + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasDefaultSchema("dbo") + .HasAnnotation("ProductVersion", "9.0.0") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("Database.Entities.Admonition", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Reason") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.ToTable("Admonitions", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Alliance", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Abbreviation") + .IsRequired() + .HasMaxLength(5) + .HasColumnType("nvarchar(5)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("Server") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("Alliances", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("Description") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("IsInProgress") + .HasColumnType("bit"); + + b.Property("IsParticipationEvent") + .HasColumnType("bit"); + + b.Property("IsPointsEvent") + .HasColumnType("bit"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("CustomEvents", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.CustomEventParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AchievedPoints") + .HasColumnType("bigint"); + + b.Property("CustomEventId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("CustomEventId"); + + b.HasIndex("PlayerId"); + + b.ToTable("CustomEventParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("IsInProgress") + .HasColumnType("bit"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("OpponentName") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("OpponentServer") + .HasColumnType("int"); + + b.Property("OpposingParticipants") + .HasColumnType("int"); + + b.Property("Won") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("DesertStorms", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.DesertStormParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DesertStormId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("Registered") + .HasColumnType("bit"); + + b.Property("StartPlayer") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("DesertStormId"); + + b.HasIndex("PlayerId"); + + b.ToTable("DesertStormParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceSize") + .HasColumnType("int"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("RewardPhase") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("MarshalGuards", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuardParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("MarshalGuardId") + .HasColumnType("uniqueidentifier"); + + b.Property("Participated") + .HasColumnType("bit"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("MarshalGuardId"); + + b.HasIndex("PlayerId"); + + b.ToTable("MarshalGuardParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Note", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerNote") + .IsRequired() + .HasMaxLength(500) + .HasColumnType("nvarchar(500)"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.ToTable("Notes", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("CreatedOn") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("PlayerName") + .IsRequired() + .HasMaxLength(250) + .HasColumnType("nvarchar(250)"); + + b.Property("RankId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("RankId"); + + b.ToTable("Players", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Rank", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("nvarchar(2)"); + + b.HasKey("Id"); + + b.ToTable("Ranks", "dbo"); + + b.HasData( + new + { + Id = new Guid("b1c10a1c-5cf3-4e22-9fc1-d9b165b85dd3"), + Name = "R5" + }, + new + { + Id = new Guid("0fc2f68a-0a4d-4922-981e-c624e4c39024"), + Name = "R4" + }, + new + { + Id = new Guid("4970e1f5-f7f5-43e8-88cc-7f8fc4075418"), + Name = "R3" + }, + new + { + Id = new Guid("d8d0c587-f269-45ff-b13e-4631298bf0af"), + Name = "R2" + }, + new + { + Id = new Guid("326edef0-5074-43a5-9db9-edc71221a0f7"), + Name = "R1" + }); + }); + + modelBuilder.Entity("Database.Entities.User", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .HasColumnType("int"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Email") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("EmailConfirmed") + .HasColumnType("bit"); + + b.Property("LockoutEnabled") + .HasColumnType("bit"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("NormalizedEmail") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("PasswordHash") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumber") + .HasColumnType("nvarchar(max)"); + + b.Property("PhoneNumberConfirmed") + .HasColumnType("bit"); + + b.Property("PlayerName") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("SecurityStamp") + .HasColumnType("nvarchar(max)"); + + b.Property("TwoFactorEnabled") + .HasColumnType("bit"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("NormalizedEmail") + .HasDatabaseName("EmailIndex"); + + b.HasIndex("NormalizedUserName") + .IsUnique() + .HasDatabaseName("UserNameIndex") + .HasFilter("[NormalizedUserName] IS NOT NULL"); + + b.ToTable("Users", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("IsInProgress") + .HasColumnType("bit"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.Property("OpponentName") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("OpponentPower") + .HasColumnType("bigint"); + + b.Property("OpponentServer") + .HasColumnType("int"); + + b.Property("OpponentSize") + .HasColumnType("int"); + + b.Property("VsDuelLeagueId") + .HasColumnType("uniqueidentifier"); + + b.Property("Won") + .HasColumnType("bit"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.HasIndex("VsDuelLeagueId"); + + b.ToTable("VsDuels", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelLeague", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.ToTable("VsDuelLeagues", "dbo"); + + b.HasData( + new + { + Id = new Guid("01938bf2-cf1b-742f-b3d6-824dbed7bf25"), + Code = 1, + Name = "Silver League" + }, + new + { + Id = new Guid("01938bf2-cf1b-7a69-8607-87b1987a19b0"), + Code = 2, + Name = "Gold League" + }, + new + { + Id = new Guid("01938bf2-cf1b-7cde-961e-e8cb35890551"), + Code = 3, + Name = "Diamond League" + }); + }); + + modelBuilder.Entity("Database.Entities.VsDuelParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("VsDuelId") + .HasColumnType("uniqueidentifier"); + + b.Property("WeeklyPoints") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.HasIndex("VsDuelId"); + + b.ToTable("VsDuelParticipants", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceId") + .HasColumnType("uniqueidentifier"); + + b.Property("AllianceSize") + .HasColumnType("int"); + + b.Property("CreatedBy") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("EventDate") + .HasColumnType("datetime2"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("ModifiedBy") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.Property("ModifiedOn") + .HasColumnType("datetime2"); + + b.HasKey("Id"); + + b.HasIndex("AllianceId"); + + b.ToTable("ZombieSieges", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiegeParticipant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("PlayerId") + .HasColumnType("uniqueidentifier"); + + b.Property("SurvivedWaves") + .HasColumnType("int"); + + b.Property("ZombieSiegeId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("PlayerId"); + + b.HasIndex("ZombieSiegeId"); + + b.ToTable("ZombieSiegeParticipants", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasColumnType("nvarchar(max)"); + + b.Property("Name") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName") + .IsUnique() + .HasDatabaseName("RoleNameIndex") + .HasFilter("[NormalizedName] IS NOT NULL"); + + b.ToTable("Roles", "dbo"); + + b.HasData( + new + { + Id = new Guid("d8b9f882-95f0-4ba0-80ed-9c22c27ac88a"), + Name = "SystemAdministrator", + NormalizedName = "SYSTEMADMINISTRATOR" + }, + new + { + Id = new Guid("47de05ba-ff1e-46b6-9995-269084006c24"), + Name = "Administrator", + NormalizedName = "ADMINISTRATOR" + }, + new + { + Id = new Guid("5cc27946-5601-4a25-b9a9-75b8a11c0cf4"), + Name = "User", + NormalizedName = "USER" + }, + new + { + Id = new Guid("207bb0a3-ad50-49bb-bc41-b266fce66529"), + Name = "ReadOnly", + NormalizedName = "READONLY" + }); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("RoleClaims", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ClaimType") + .HasColumnType("nvarchar(max)"); + + b.Property("ClaimValue") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("UserClaims", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderKey") + .HasColumnType("nvarchar(450)"); + + b.Property("ProviderDisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("LoginProvider", "ProviderKey"); + + b.HasIndex("UserId"); + + b.ToTable("UserLogins", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId"); + + b.ToTable("UserRoles", "dbo"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasColumnType("nvarchar(450)"); + + b.Property("Name") + .HasColumnType("nvarchar(450)"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("UserTokens", "dbo"); + }); + + modelBuilder.Entity("Database.Entities.Admonition", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("Admonitions") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("CustomEvents") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.CustomEventParticipant", b => + { + b.HasOne("Database.Entities.CustomEvent", "CustomEvent") + .WithMany("CustomEventParticipants") + .HasForeignKey("CustomEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("CustomEventParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("CustomEvent"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("DesertStorms") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.DesertStormParticipant", b => + { + b.HasOne("Database.Entities.DesertStorm", "DesertStorm") + .WithMany("DesertStormParticipants") + .HasForeignKey("DesertStormId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("DesertStormParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("DesertStorm"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("MarshalGuards") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuardParticipant", b => + { + b.HasOne("Database.Entities.MarshalGuard", "MarshalGuard") + .WithMany("MarshalGuardParticipants") + .HasForeignKey("MarshalGuardId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Player", "Player") + .WithMany("MarshalGuardParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.Navigation("MarshalGuard"); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.Note", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("Notes") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("Players") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.Rank", "Rank") + .WithMany("Players") + .HasForeignKey("RankId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + + b.Navigation("Rank"); + }); + + modelBuilder.Entity("Database.Entities.User", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("Users") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.NoAction) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("VsDuels") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.VsDuelLeague", "VsDuelLeague") + .WithMany("VsDuels") + .HasForeignKey("VsDuelLeagueId") + .OnDelete(DeleteBehavior.Cascade); + + b.Navigation("Alliance"); + + b.Navigation("VsDuelLeague"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelParticipant", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("VsDuelParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Database.Entities.VsDuel", "VsDuel") + .WithMany("VsDuelParticipants") + .HasForeignKey("VsDuelId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + + b.Navigation("VsDuel"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.HasOne("Database.Entities.Alliance", "Alliance") + .WithMany("ZombieSieges") + .HasForeignKey("AllianceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Alliance"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiegeParticipant", b => + { + b.HasOne("Database.Entities.Player", "Player") + .WithMany("ZombieSiegeParticipants") + .HasForeignKey("PlayerId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired(); + + b.HasOne("Database.Entities.ZombieSiege", "ZombieSiege") + .WithMany("ZombieSiegeParticipants") + .HasForeignKey("ZombieSiegeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Player"); + + b.Navigation("ZombieSiege"); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b => + { + b.HasOne("Microsoft.AspNetCore.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b => + { + b.HasOne("Database.Entities.User", null) + .WithMany() + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Database.Entities.Alliance", b => + { + b.Navigation("CustomEvents"); + + b.Navigation("DesertStorms"); + + b.Navigation("MarshalGuards"); + + b.Navigation("Players"); + + b.Navigation("Users"); + + b.Navigation("VsDuels"); + + b.Navigation("ZombieSieges"); + }); + + modelBuilder.Entity("Database.Entities.CustomEvent", b => + { + b.Navigation("CustomEventParticipants"); + }); + + modelBuilder.Entity("Database.Entities.DesertStorm", b => + { + b.Navigation("DesertStormParticipants"); + }); + + modelBuilder.Entity("Database.Entities.MarshalGuard", b => + { + b.Navigation("MarshalGuardParticipants"); + }); + + modelBuilder.Entity("Database.Entities.Player", b => + { + b.Navigation("Admonitions"); + + b.Navigation("CustomEventParticipants"); + + b.Navigation("DesertStormParticipants"); + + b.Navigation("MarshalGuardParticipants"); + + b.Navigation("Notes"); + + b.Navigation("VsDuelParticipants"); + + b.Navigation("ZombieSiegeParticipants"); + }); + + modelBuilder.Entity("Database.Entities.Rank", b => + { + b.Navigation("Players"); + }); + + modelBuilder.Entity("Database.Entities.VsDuel", b => + { + b.Navigation("VsDuelParticipants"); + }); + + modelBuilder.Entity("Database.Entities.VsDuelLeague", b => + { + b.Navigation("VsDuels"); + }); + + modelBuilder.Entity("Database.Entities.ZombieSiege", b => + { + b.Navigation("ZombieSiegeParticipants"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/Database/Migrations/20241203095606_AddCodeToVsDuelLeague.cs b/Database/Migrations/20241203095606_AddCodeToVsDuelLeague.cs new file mode 100644 index 0000000..587652c --- /dev/null +++ b/Database/Migrations/20241203095606_AddCodeToVsDuelLeague.cs @@ -0,0 +1,92 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +#pragma warning disable CA1814 // Prefer jagged arrays over multidimensional + +namespace Database.Migrations +{ + /// + public partial class AddCodeToVsDuelLeague : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b6c-dd30-7182-9fe6-9df201e0586d")); + + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b6c-dd30-7a97-9bfc-e4f49c245b7a")); + + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938b6c-dd30-7b55-8254-12337beebc73")); + + migrationBuilder.AddColumn( + name: "Code", + schema: "dbo", + table: "VsDuelLeagues", + type: "int", + nullable: false, + defaultValue: 0); + + migrationBuilder.InsertData( + schema: "dbo", + table: "VsDuelLeagues", + columns: new[] { "Id", "Code", "Name" }, + values: new object[,] + { + { new Guid("01938bf2-cf1b-742f-b3d6-824dbed7bf25"), 1, "Silver League" }, + { new Guid("01938bf2-cf1b-7a69-8607-87b1987a19b0"), 2, "Gold League" }, + { new Guid("01938bf2-cf1b-7cde-961e-e8cb35890551"), 3, "Diamond League" } + }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938bf2-cf1b-742f-b3d6-824dbed7bf25")); + + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938bf2-cf1b-7a69-8607-87b1987a19b0")); + + migrationBuilder.DeleteData( + schema: "dbo", + table: "VsDuelLeagues", + keyColumn: "Id", + keyValue: new Guid("01938bf2-cf1b-7cde-961e-e8cb35890551")); + + migrationBuilder.DropColumn( + name: "Code", + schema: "dbo", + table: "VsDuelLeagues"); + + migrationBuilder.InsertData( + schema: "dbo", + table: "VsDuelLeagues", + columns: new[] { "Id", "Name" }, + values: new object[,] + { + { new Guid("01938b6c-dd30-7182-9fe6-9df201e0586d"), "Silver League" }, + { new Guid("01938b6c-dd30-7a97-9bfc-e4f49c245b7a"), "Gold League" }, + { new Guid("01938b6c-dd30-7b55-8254-12337beebc73"), "Diamond League" } + }); + } + } +} diff --git a/Database/Migrations/ApplicationContextModelSnapshot.cs b/Database/Migrations/ApplicationContextModelSnapshot.cs index 5a613dd..b67e8dd 100644 --- a/Database/Migrations/ApplicationContextModelSnapshot.cs +++ b/Database/Migrations/ApplicationContextModelSnapshot.cs @@ -112,6 +112,9 @@ namespace Database.Migrations b.Property("EventDate") .HasColumnType("datetime2"); + b.Property("IsInProgress") + .HasColumnType("bit"); + b.Property("IsParticipationEvent") .HasColumnType("bit"); @@ -179,6 +182,9 @@ namespace Database.Migrations b.Property("EventDate") .HasColumnType("datetime2"); + b.Property("IsInProgress") + .HasColumnType("bit"); + b.Property("ModifiedBy") .HasMaxLength(150) .HasColumnType("nvarchar(150)"); @@ -511,6 +517,9 @@ namespace Database.Migrations b.Property("EventDate") .HasColumnType("datetime2"); + b.Property("IsInProgress") + .HasColumnType("bit"); + b.Property("ModifiedBy") .HasMaxLength(150) .HasColumnType("nvarchar(150)"); @@ -532,6 +541,9 @@ namespace Database.Migrations b.Property("OpponentSize") .HasColumnType("int"); + b.Property("VsDuelLeagueId") + .HasColumnType("uniqueidentifier"); + b.Property("Won") .HasColumnType("bit"); @@ -539,9 +551,49 @@ namespace Database.Migrations b.HasIndex("AllianceId"); + b.HasIndex("VsDuelLeagueId"); + b.ToTable("VsDuels", "dbo"); }); + modelBuilder.Entity("Database.Entities.VsDuelLeague", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.ToTable("VsDuelLeagues", "dbo"); + + b.HasData( + new + { + Id = new Guid("01938bf2-cf1b-742f-b3d6-824dbed7bf25"), + Code = 1, + Name = "Silver League" + }, + new + { + Id = new Guid("01938bf2-cf1b-7a69-8607-87b1987a19b0"), + Code = 2, + Name = "Gold League" + }, + new + { + Id = new Guid("01938bf2-cf1b-7cde-961e-e8cb35890551"), + Code = 3, + Name = "Diamond League" + }); + }); + modelBuilder.Entity("Database.Entities.VsDuelParticipant", b => { b.Property("Id") @@ -931,7 +983,14 @@ namespace Database.Migrations .OnDelete(DeleteBehavior.Cascade) .IsRequired(); + b.HasOne("Database.Entities.VsDuelLeague", "VsDuelLeague") + .WithMany("VsDuels") + .HasForeignKey("VsDuelLeagueId") + .OnDelete(DeleteBehavior.Cascade); + b.Navigation("Alliance"); + + b.Navigation("VsDuelLeague"); }); modelBuilder.Entity("Database.Entities.VsDuelParticipant", b => @@ -1093,6 +1152,11 @@ namespace Database.Migrations b.Navigation("VsDuelParticipants"); }); + modelBuilder.Entity("Database.Entities.VsDuelLeague", b => + { + b.Navigation("VsDuels"); + }); + modelBuilder.Entity("Database.Entities.ZombieSiege", b => { b.Navigation("ZombieSiegeParticipants"); diff --git a/Ui/src/app/modals/vs-duel-create-modal/vs-duel-create-modal.component.html b/Ui/src/app/modals/vs-duel-create-modal/vs-duel-create-modal.component.html index 46c9785..2e06908 100644 --- a/Ui/src/app/modals/vs-duel-create-modal/vs-duel-create-modal.component.html +++ b/Ui/src/app/modals/vs-duel-create-modal/vs-duel-create-modal.component.html @@ -66,10 +66,36 @@ } +
+ + + @if (f['vsDuelLeagueId'].invalid && (f['vsDuelLeagueId'].dirty || f['vsDuelLeagueId'].touched)) { +
+ @if (f['vsDuelLeagueId'].hasError('required')) { +

Vs Duel League is required

+ } +
+ } +
+ @if (f['isInProgress'].value === false) { +
+ + +
+ } +
- -
diff --git a/Ui/src/app/modals/vs-duel-create-modal/vs-duel-create-modal.component.ts b/Ui/src/app/modals/vs-duel-create-modal/vs-duel-create-modal.component.ts index 873ceef..1507edc 100644 --- a/Ui/src/app/modals/vs-duel-create-modal/vs-duel-create-modal.component.ts +++ b/Ui/src/app/modals/vs-duel-create-modal/vs-duel-create-modal.component.ts @@ -4,6 +4,8 @@ import {FormControl, FormGroup, Validators} from "@angular/forms"; import {VsDuelModel} from "../../models/vsDuel.model"; import {VsDuelService} from "../../services/vs-duel.service"; import {ToastrService} from "ngx-toastr"; +import {VsDuelLeagueService} from "../../services/vs-duel-league.service"; +import {VsDuelLeagueModel} from "../../models/vsDuelLeague.model"; @Component({ selector: 'app-vs-duel-edit-modal', @@ -14,9 +16,11 @@ export class VsDuelCreateModalComponent implements OnInit { private readonly _vsDuelService: VsDuelService = inject(VsDuelService); private readonly _toastr: ToastrService = inject(ToastrService); + private readonly _vsDuelLeagueService: VsDuelLeagueService = inject(VsDuelLeagueService); public activeModal: NgbActiveModal = inject(NgbActiveModal); public vsDuelForm!: FormGroup; + public vsDuelLeagues: VsDuelLeagueModel[] = []; @Input({required: true}) isUpdate!: boolean; @Input({required: true}) vsDuelModel!: VsDuelModel; @@ -26,12 +30,16 @@ export class VsDuelCreateModalComponent implements OnInit { } ngOnInit() { + this.getVsDuelLeagues(); + const d = new Date(this.vsDuelModel.eventDate); this.vsDuelForm = new FormGroup({ id: new FormControl(this.vsDuelModel.id), + vsDuelLeagueId: new FormControl(this.vsDuelModel.vsDuelLeagueId, [Validators.required]), allianceId: new FormControl(this.vsDuelModel.allianceId), eventDate: new FormControl(new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())).toISOString().substring(0, 10)), won: new FormControl(this.vsDuelModel.won), + isInProgress: new FormControl(this.vsDuelModel.isInProgress), opponentName: new FormControl(this.vsDuelModel.opponentName, [Validators.required]), opponentServer: new FormControl(this.vsDuelModel.opponentServer, [Validators.required]), opponentPower: new FormControl(this.vsDuelModel.opponentPower, [Validators.required]), @@ -39,6 +47,20 @@ export class VsDuelCreateModalComponent implements OnInit { }); } + getVsDuelLeagues() { + this._vsDuelLeagueService.getVsDuelLeagues().subscribe({ + next: ((response) => { + if (response) { + this.vsDuelLeagues = response; + } + }), + error: (error) => { + console.log(error); + this._toastr.error('Could not load vsDuelLeagues', 'Load VsDuelLeagues'); + } + }); + } + onSubmit() { if (this.vsDuelForm.invalid) { return; diff --git a/Ui/src/app/models/customEvent.model.ts b/Ui/src/app/models/customEvent.model.ts index b1439e0..7cd5a27 100644 --- a/Ui/src/app/models/customEvent.model.ts +++ b/Ui/src/app/models/customEvent.model.ts @@ -8,6 +8,7 @@ export interface CustomEventModel { isPointsEvent?: boolean; isParticipationEvent?: boolean; eventDate: Date; + isInProgress: boolean; } export interface CustomEventDetailModel extends CustomEventModel { diff --git a/Ui/src/app/models/desertStorm.model.ts b/Ui/src/app/models/desertStorm.model.ts index 4ff1ab8..c3be55e 100644 --- a/Ui/src/app/models/desertStorm.model.ts +++ b/Ui/src/app/models/desertStorm.model.ts @@ -12,6 +12,7 @@ export interface DesertStormModel { eventDate: Date; opponentName: string; participants: number; + isInProgress: boolean; } export interface DesertStormDetailModel extends DesertStormModel { @@ -25,4 +26,5 @@ export interface CreateDesertStormModel { opponentServer: number; eventDate: string; opponentName: string; + isInProgress: boolean; } diff --git a/Ui/src/app/models/vsDuel.model.ts b/Ui/src/app/models/vsDuel.model.ts index 2657d29..ae7ce1e 100644 --- a/Ui/src/app/models/vsDuel.model.ts +++ b/Ui/src/app/models/vsDuel.model.ts @@ -3,6 +3,8 @@ import {VsDuelParticipantModel} from "./vsDuelParticipant.model"; export interface VsDuelModel { id: string; allianceId: string; + vsDuelLeagueId: string; + vsDuelLeague: string; eventDate: Date; won: boolean; opponentName: string; @@ -12,6 +14,7 @@ export interface VsDuelModel { createdBy: string; modifiedOn?: Date; modifiedBy?: string; + isInProgress: boolean; } export interface VsDuelDetailModel extends VsDuelModel { diff --git a/Ui/src/app/models/vsDuelLeague.model.ts b/Ui/src/app/models/vsDuelLeague.model.ts new file mode 100644 index 0000000..a53f3bd --- /dev/null +++ b/Ui/src/app/models/vsDuelLeague.model.ts @@ -0,0 +1,4 @@ +export interface VsDuelLeagueModel { + id: string; + name: string; +} diff --git a/Ui/src/app/pages/desert-storm/desert-storm-detail/desert-storm-detail.component.html b/Ui/src/app/pages/desert-storm/desert-storm-detail/desert-storm-detail.component.html index e4d4c16..41d85a4 100644 --- a/Ui/src/app/pages/desert-storm/desert-storm-detail/desert-storm-detail.component.html +++ b/Ui/src/app/pages/desert-storm/desert-storm-detail/desert-storm-detail.component.html @@ -5,10 +5,14 @@ @if (desertStormDetail) { -
+
Week {{desertStormDetail.eventDate | week}} / {{desertStormDetail.eventDate | date: 'yyyy'}}
-
{{desertStormDetail.won ? 'VICTORY' : 'DEFEAT'}}
+ @if (desertStormDetail.isInProgress) { +
In Progress
+ } @else { +
{{desertStormDetail.won ? 'VICTORY' : 'DEFEAT'}}
+ }
Opponent: {{desertStormDetail.opponentName}}
@@ -37,7 +41,7 @@ @if (player.registered) {
+ [ngClass]="desertStormDetail.isInProgress ? '' : player.participated ? 'border-success' : (player.startPlayer && !player.participated) ? 'border-danger' : 'border-warning'">
{{player.playerName}}
diff --git a/Ui/src/app/pages/desert-storm/desert-storm.component.html b/Ui/src/app/pages/desert-storm/desert-storm.component.html index fed8c54..040d2d5 100644 --- a/Ui/src/app/pages/desert-storm/desert-storm.component.html +++ b/Ui/src/app/pages/desert-storm/desert-storm.component.html @@ -73,10 +73,20 @@ }
+ @if (f['isInProgress'].value === false) { +
+ + +
+ } + +
- -
@@ -125,7 +135,11 @@ {{desertStorm.opposingParticipants}} {{desertStorm.participants}} - + @if (desertStorm.isInProgress) { + In Progress + } @else { + + }
diff --git a/Ui/src/app/pages/desert-storm/desert-storm.component.ts b/Ui/src/app/pages/desert-storm/desert-storm.component.ts index 3e3b9ee..ee5b295 100644 --- a/Ui/src/app/pages/desert-storm/desert-storm.component.ts +++ b/Ui/src/app/pages/desert-storm/desert-storm.component.ts @@ -81,6 +81,7 @@ export class DesertStormComponent implements OnInit { allianceId: new FormControl(desertStormModel ? desertStormModel.allianceId : this._tokenService.getAllianceId()!, [Validators.required]), eventDate: new FormControl(new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())).toISOString().substring(0, 10)), won: new FormControl(desertStormModel ? desertStormModel.won : false), + isInProgress: new FormControl(desertStormModel ? desertStormModel.isInProgress : true), opponentName: new FormControl(desertStormModel ? desertStormModel.opponentName : ''), opponentServer: new FormControl(desertStormModel ? desertStormModel.opponentServer : null), OpposingParticipants: new FormControl(desertStormModel ? desertStormModel.opposingParticipants : null), @@ -163,6 +164,7 @@ export class DesertStormComponent implements OnInit { } onCancel() { + this.isUpdate = false; this.isCreateDessertStorm = false; this.selectedPlayers = 0; this.desertStormPlayers = []; diff --git a/Ui/src/app/pages/marshal-guard/marshal-guard.component.ts b/Ui/src/app/pages/marshal-guard/marshal-guard.component.ts index de84781..adb3425 100644 --- a/Ui/src/app/pages/marshal-guard/marshal-guard.component.ts +++ b/Ui/src/app/pages/marshal-guard/marshal-guard.component.ts @@ -114,6 +114,7 @@ export class MarshalGuardComponent implements OnInit { } onCancel() { + this.isUpdate = false; this.isCreateMarshalGuard = false; } diff --git a/Ui/src/app/pages/vs-duel/vs-duel-detail/vs-duel-detail.component.html b/Ui/src/app/pages/vs-duel/vs-duel-detail/vs-duel-detail.component.html index 81152d5..a2aeba0 100644 --- a/Ui/src/app/pages/vs-duel/vs-duel-detail/vs-duel-detail.component.html +++ b/Ui/src/app/pages/vs-duel/vs-duel-detail/vs-duel-detail.component.html @@ -5,10 +5,25 @@
@if (vsDuelDetail) { -
-
+
+
Week {{vsDuelDetail.eventDate | week}} / {{vsDuelDetail.eventDate | date: 'yyyy'}}
-
{{vsDuelDetail.won ? 'VICTORY' : 'DEFEAT'}}
+ @switch (vsDuelDetail.vsDuelLeague) { + @case ('Gold League') { +
Gold
+ } + @case ('Diamond League') { + Diamond + } + @case ('Silver League') { + Silver + } + } + @if (vsDuelDetail.isInProgress) { +
In Progress
+ } @else { +
{{vsDuelDetail.won ? 'VICTORY' : 'DEFEAT'}}
+ }
Opponent: {{vsDuelDetail.opponentName}}
diff --git a/Ui/src/app/pages/vs-duel/vs-duel-edit/vs-duel-edit.component.html b/Ui/src/app/pages/vs-duel/vs-duel-edit/vs-duel-edit.component.html index d460420..01060ff 100644 --- a/Ui/src/app/pages/vs-duel/vs-duel-edit/vs-duel-edit.component.html +++ b/Ui/src/app/pages/vs-duel/vs-duel-edit/vs-duel-edit.component.html @@ -74,12 +74,37 @@
}
+
+ + + @if (df['opponentSize'].invalid && (df['opponentSize'].dirty || df['opponentSize'].touched)) { +
+ @if (df['opponentSize'].hasError('required')) { +

Opponent size is required

+ } +
+ } +
+ +
+ + +
+
diff --git a/Ui/src/app/pages/vs-duel/vs-duel-edit/vs-duel-edit.component.ts b/Ui/src/app/pages/vs-duel/vs-duel-edit/vs-duel-edit.component.ts index 546c7ed..8a4b520 100644 --- a/Ui/src/app/pages/vs-duel/vs-duel-edit/vs-duel-edit.component.ts +++ b/Ui/src/app/pages/vs-duel/vs-duel-edit/vs-duel-edit.component.ts @@ -7,6 +7,8 @@ import {VsDuelParticipantService} from "../../../services/vs-duel-participant.se import {VsDuelParticipantModel} from "../../../models/vsDuelParticipant.model"; import {forkJoin, Observable} from "rxjs"; import {ToastrService} from "ngx-toastr"; +import {VsDuelLeagueService} from "../../../services/vs-duel-league.service"; +import {VsDuelLeagueModel} from "../../../models/vsDuelLeague.model"; @Component({ selector: 'app-vs-duel-edit', @@ -18,10 +20,12 @@ export class VsDuelEditComponent implements OnInit { private readonly _activatedRote: ActivatedRoute = inject(ActivatedRoute); private readonly _vsDuelService: VsDuelService = inject(VsDuelService); private readonly _vsDuelParticipantService: VsDuelParticipantService = inject(VsDuelParticipantService); + private readonly _vsDuelLeagueService = inject(VsDuelLeagueService); private readonly _toastr: ToastrService = inject(ToastrService); private vsDuelId!: string; private vsDuelDetail!: VsDuelDetailModel; + public vsDuelLeagues: VsDuelLeagueModel[] = []; public vsDuelParticipantsForm: FormGroup = new FormGroup({}); public vsDuelForm: FormGroup = new FormGroup({}); @@ -38,6 +42,21 @@ export class VsDuelEditComponent implements OnInit { ngOnInit() { this.vsDuelId = this._activatedRote.snapshot.params['id']; this.getVsDuelDetail(this.vsDuelId); + this.getVsDuelLeagues(); + } + + getVsDuelLeagues() { + this._vsDuelLeagueService.getVsDuelLeagues().subscribe({ + next: ((response) => { + if (response) { + this.vsDuelLeagues = response; + } + }), + error: (error) => { + console.log(error); + this._toastr.error('Could not load vs duel leagues', 'Load VS duel leagues'); + } + }); } getVsDuelDetail(vsDuelId: string) { @@ -55,8 +74,10 @@ export class VsDuelEditComponent implements OnInit { this.vsDuelForm = new FormGroup({ id: new FormControl(vsDuelDetail.id), allianceId: new FormControl(vsDuelDetail.allianceId), + vsDuelLeagueId: new FormControl(vsDuelDetail.vsDuelLeagueId, [Validators.required]), eventDate: new FormControl(new Date(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate())).toISOString().substring(0, 10)), won: new FormControl(vsDuelDetail.won), + isInProgress: new FormControl(vsDuelDetail.isInProgress), opponentName: new FormControl(vsDuelDetail.opponentName, [Validators.required, Validators.maxLength(150)]), opponentServer: new FormControl(vsDuelDetail.opponentServer, [Validators.required]), opponentPower: new FormControl(vsDuelDetail.opponentPower, [Validators.required]), diff --git a/Ui/src/app/pages/vs-duel/vs-duel.component.html b/Ui/src/app/pages/vs-duel/vs-duel.component.html index b89ef16..5104152 100644 --- a/Ui/src/app/pages/vs-duel/vs-duel.component.html +++ b/Ui/src/app/pages/vs-duel/vs-duel.component.html @@ -31,6 +31,7 @@ Opponent power Opponent size Won + League Action @@ -44,8 +45,23 @@ {{vsDuel.opponentPower}} {{vsDuel.opponentSize}} - + @if (vsDuel.isInProgress) { + In Progress + } @else { + + } + @switch (vsDuel.vsDuelLeague) { + @case ('Silver League') { + Silver + } + @case ('Gold League'){ + Gold + } + @case ('Diamond League') { + Diamond + } + }
diff --git a/Ui/src/app/pages/vs-duel/vs-duel.component.ts b/Ui/src/app/pages/vs-duel/vs-duel.component.ts index 4693943..b20208f 100644 --- a/Ui/src/app/pages/vs-duel/vs-duel.component.ts +++ b/Ui/src/app/pages/vs-duel/vs-duel.component.ts @@ -41,7 +41,10 @@ export class VsDuelComponent implements OnInit { opponentPower: 0, opponentServer: 0, opponentSize: 0, - createdBy: '' + createdBy: '', + isInProgress: true, + vsDuelLeagueId: '', + vsDuelLeague: '' }; this.openVsDuelEditModal(vsDuel, false); } diff --git a/Ui/src/app/services/vs-duel-league.service.ts b/Ui/src/app/services/vs-duel-league.service.ts new file mode 100644 index 0000000..a3c7f26 --- /dev/null +++ b/Ui/src/app/services/vs-duel-league.service.ts @@ -0,0 +1,18 @@ +import {inject, Injectable} from '@angular/core'; +import {environment} from "../../environments/environment"; +import {HttpClient} from "@angular/common/http"; +import {Observable} from "rxjs"; +import {VsDuelLeagueModel} from "../models/vsDuelLeague.model"; + +@Injectable({ + providedIn: 'root' +}) +export class VsDuelLeagueService { + + private readonly _serviceUrl: string = environment.apiBaseUrl + 'VsDuelLeagues/'; + private readonly _httpClient: HttpClient = inject(HttpClient); + + getVsDuelLeagues(): Observable { + return this._httpClient.get(this._serviceUrl); + } +}