diff --git a/ShadowedRealmsMobile/src/server/.env b/ShadowedRealmsMobile/src/server/.env
index 02fd9b6..e5d0ea0 100644
--- a/ShadowedRealmsMobile/src/server/.env
+++ b/ShadowedRealmsMobile/src/server/.env
@@ -8,7 +8,7 @@
POSTGRES_HOST=209.25.140.218
POSTGRES_DB=ShadowedRealms
POSTGRES_USER=gameserver
-POSTGRES_PASSWORD=w92oOUPGAR/ZRJaDynLQIq07aFzvTQ6tQzOJsXMStXE=
+POSTGRES_PASSWORD=HakeCeStdE6N5jtP/wokS7ur9KNTDKZf3cOPtYqjwiQ=
# ===============================
# REDIS CONFIGURATION
diff --git a/ShadowedRealmsMobile/src/server/ShadowedRealms.API/Migrations/20251028205529_InitialCreate.Designer.cs b/ShadowedRealmsMobile/src/server/ShadowedRealms.API/Migrations/20251028205529_InitialCreate.Designer.cs
new file mode 100644
index 0000000..ef7bfea
--- /dev/null
+++ b/ShadowedRealmsMobile/src/server/ShadowedRealms.API/Migrations/20251028205529_InitialCreate.Designer.cs
@@ -0,0 +1,1801 @@
+//
+using System;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+using ShadowedRealms.Data.Contexts;
+
+#nullable disable
+
+namespace ShadowedRealms.API.Migrations
+{
+ [DbContext(typeof(GameDbContext))]
+ [Migration("20251028205529_InitialCreate")]
+ partial class InitialCreate
+ {
+ ///
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("ProductVersion", "9.0.10")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder);
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ConcurrencyStamp")
+ .IsConcurrencyToken()
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.Property("NormalizedName")
+ .HasMaxLength(256)
+ .HasColumnType("character varying(256)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("NormalizedName")
+ .IsUnique()
+ .HasDatabaseName("RoleNameIndex");
+
+ b.ToTable("Roles", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityRoleClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("text");
+
+ b.Property("ClaimValue")
+ .HasColumnType("text");
+
+ b.Property("RoleId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("Role_Claims", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserClaim", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("ClaimType")
+ .HasColumnType("text");
+
+ b.Property("ClaimValue")
+ .HasColumnType("text");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Player_Claims", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserLogin", b =>
+ {
+ b.Property("LoginProvider")
+ .HasColumnType("text");
+
+ b.Property("ProviderKey")
+ .HasColumnType("text");
+
+ b.Property("ProviderDisplayName")
+ .HasColumnType("text");
+
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.HasKey("LoginProvider", "ProviderKey");
+
+ b.HasIndex("UserId");
+
+ b.ToTable("Player_Logins", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserRole", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.Property("RoleId")
+ .HasColumnType("integer");
+
+ b.HasKey("UserId", "RoleId");
+
+ b.HasIndex("RoleId");
+
+ b.ToTable("Player_Roles", (string)null);
+ });
+
+ modelBuilder.Entity("Microsoft.AspNetCore.Identity.IdentityUserToken", b =>
+ {
+ b.Property("UserId")
+ .HasColumnType("integer");
+
+ b.Property("LoginProvider")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .HasColumnType("text");
+
+ b.Property("Value")
+ .HasColumnType("text");
+
+ b.HasKey("UserId", "LoginProvider", "Name");
+
+ b.ToTable("Player_Tokens", (string)null);
+ });
+
+ modelBuilder.Entity("ShadowedRealms.Core.Models.Alliance.Alliance", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AcceptsCoalitionInvites")
+ .HasColumnType("boolean");
+
+ b.Property("CoalitionReputationScore")
+ .HasColumnType("integer");
+
+ b.Property("CreatedAt")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("timestamp with time zone")
+ .HasDefaultValueSql("CURRENT_TIMESTAMP");
+
+ b.Property("CurrentCoalitionId")
+ .HasColumnType("integer");
+
+ b.Property("Description")
+ .HasMaxLength(1000)
+ .HasColumnType("character varying(1000)");
+
+ b.Property("EconomicGatheringResearch")
+ .HasColumnType("integer");
+
+ b.Property("EconomicProductionResearch")
+ .HasColumnType("integer");
+
+ b.Property("EconomicStorageResearch")
+ .HasColumnType("integer");
+
+ b.Property("EconomicTaxationResearch")
+ .HasColumnType("integer");
+
+ b.Property("EconomicTradeResearch")
+ .HasColumnType("integer");
+
+ b.Property("ExperiencePoints")
+ .HasColumnType("bigint");
+
+ b.Property("FortressLevel")
+ .HasColumnType("integer");
+
+ b.Property("FortressX")
+ .HasColumnType("integer");
+
+ b.Property("FortressY")
+ .HasColumnType("integer");
+
+ b.Property("HasTerritory")
+ .HasColumnType("boolean");
+
+ b.Property("IsActive")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(true);
+
+ b.Property("IsEligibleForKvK")
+ .HasColumnType("boolean");
+
+ b.Property("IsOpenToJoin")
+ .HasColumnType("boolean");
+
+ b.Property("KingdomId")
+ .HasColumnType("integer");
+
+ b.Property("KvKParticipations")
+ .HasColumnType("integer");
+
+ b.Property("KvKWins")
+ .HasColumnType("integer");
+
+ b.Property("LastKvKParticipation")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("LeaderId")
+ .HasColumnType("integer");
+
+ b.Property("Level")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(1);
+
+ b.Property("MaxMembers")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(50);
+
+ b.Property("MilitaryAttackResearch")
+ .HasColumnType("integer");
+
+ b.Property("MilitaryCapacityResearch")
+ .HasColumnType("integer");
+
+ b.Property("MilitaryDefenseResearch")
+ .HasColumnType("integer");
+
+ b.Property("MilitaryHealthResearch")
+ .HasColumnType("integer");
+
+ b.Property("MilitarySpeedResearch")
+ .HasColumnType("integer");
+
+ b.Property("MinCastleLevelToJoin")
+ .HasColumnType("integer");
+
+ b.Property("MinPowerToJoin")
+ .HasColumnType("bigint");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(50)
+ .HasColumnType("character varying(50)");
+
+ b.Property("Power")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("bigint")
+ .HasDefaultValue(0L);
+
+ b.Property("RequireApproval")
+ .HasColumnType("boolean");
+
+ b.Property("ResourceBuildingCount")
+ .HasColumnType("integer");
+
+ b.Property("ResourcesGathered")
+ .HasColumnType("bigint");
+
+ b.Property("ResourcesShared")
+ .HasColumnType("bigint");
+
+ b.Property("Tag")
+ .IsRequired()
+ .HasMaxLength(5)
+ .HasColumnType("character varying(5)");
+
+ b.Property("TechnologyConstructionResearch")
+ .HasColumnType("integer");
+
+ b.Property("TechnologyHealingResearch")
+ .HasColumnType("integer");
+
+ b.Property("TechnologyResearchResearch")
+ .HasColumnType("integer");
+
+ b.Property("TechnologyTrainingResearch")
+ .HasColumnType("integer");
+
+ b.Property("TechnologyUpgradeResearch")
+ .HasColumnType("integer");
+
+ b.Property("TotalDeaths")
+ .HasColumnType("bigint");
+
+ b.Property("TotalKills")
+ .HasColumnType("bigint");
+
+ b.Property("TowerCount")
+ .HasColumnType("integer");
+
+ b.Property("TreasuryFood")
+ .HasColumnType("bigint");
+
+ b.Property("TreasuryIron")
+ .HasColumnType("bigint");
+
+ b.Property("TreasuryMithril")
+ .HasColumnType("bigint");
+
+ b.Property("TreasurySilver")
+ .HasColumnType("bigint");
+
+ b.Property("TreasuryWood")
+ .HasColumnType("bigint");
+
+ b.Property("WelcomeMessage")
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("KingdomId");
+
+ b.HasIndex("LeaderId")
+ .IsUnique();
+
+ b.HasIndex("Name");
+
+ b.HasIndex("Power");
+
+ b.HasIndex("Tag");
+
+ b.HasIndex("KingdomId", "Power")
+ .HasDatabaseName("IX_Alliances_Kingdom_Power");
+
+ b.ToTable("Alliances");
+ });
+
+ modelBuilder.Entity("ShadowedRealms.Core.Models.Alliance.AllianceInvitation", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AllianceId")
+ .HasColumnType("integer");
+
+ b.Property("CreatedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("ExpiresAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("InvitedById")
+ .HasColumnType("integer");
+
+ b.Property("IsAccepted")
+ .HasColumnType("boolean");
+
+ b.Property("IsRejected")
+ .HasColumnType("boolean");
+
+ b.Property("PlayerId")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AllianceId");
+
+ b.HasIndex("InvitedById");
+
+ b.HasIndex("PlayerId");
+
+ b.ToTable("AllianceInvitation");
+ });
+
+ modelBuilder.Entity("ShadowedRealms.Core.Models.Alliance.AllianceRole", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AllianceId")
+ .HasColumnType("integer");
+
+ b.Property("AssignedAt")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("AssignedById")
+ .HasColumnType("integer");
+
+ b.Property("PlayerId")
+ .HasColumnType("integer");
+
+ b.Property("Rank")
+ .HasColumnType("integer");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AllianceId");
+
+ b.HasIndex("AssignedById");
+
+ b.HasIndex("PlayerId");
+
+ b.ToTable("AllianceRole");
+ });
+
+ modelBuilder.Entity("ShadowedRealms.Core.Models.Combat.CombatLog", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AttackerAllianceAttackBonus")
+ .HasColumnType("double precision");
+
+ b.Property("AttackerAllianceDefenseBonus")
+ .HasColumnType("double precision");
+
+ b.Property("AttackerAllianceHealthBonus")
+ .HasColumnType("double precision");
+
+ b.Property("AttackerAllianceId")
+ .HasColumnType("integer");
+
+ b.Property("AttackerBowmenAfter")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerBowmenBefore")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerCasualties")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerCavalryAfter")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerCavalryBefore")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerDragonBonus")
+ .HasColumnType("double precision");
+
+ b.Property("AttackerDragonSkillsUsed")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)");
+
+ b.Property("AttackerHadDragon")
+ .HasColumnType("boolean");
+
+ b.Property("AttackerHighestTroopTier")
+ .HasColumnType("integer");
+
+ b.Property("AttackerInfantryAfter")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerInfantryBefore")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerPlayerId")
+ .HasColumnType("integer");
+
+ b.Property("AttackerPlayerId1")
+ .HasColumnType("integer");
+
+ b.Property("AttackerPowerBefore")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerSiegeAfter")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerSiegeBefore")
+ .HasColumnType("bigint");
+
+ b.Property("AttackerWoundedTroops")
+ .HasColumnType("bigint");
+
+ b.Property("BattleNotes")
+ .HasMaxLength(1000)
+ .HasColumnType("character varying(1000)");
+
+ b.Property("BattleX")
+ .HasColumnType("integer");
+
+ b.Property("BattleY")
+ .HasColumnType("integer");
+
+ b.Property("CoalitionId")
+ .HasColumnType("integer");
+
+ b.Property("CombatType")
+ .HasColumnType("integer");
+
+ b.Property("DefenderAllianceAttackBonus")
+ .HasColumnType("double precision");
+
+ b.Property("DefenderAllianceDefenseBonus")
+ .HasColumnType("double precision");
+
+ b.Property("DefenderAllianceHealthBonus")
+ .HasColumnType("double precision");
+
+ b.Property("DefenderAllianceId")
+ .HasColumnType("integer");
+
+ b.Property("DefenderBowmenAfter")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderBowmenBefore")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderCasualties")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderCavalryAfter")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderCavalryBefore")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderDragonBonus")
+ .HasColumnType("double precision");
+
+ b.Property("DefenderDragonSkillsUsed")
+ .HasMaxLength(100)
+ .HasColumnType("character varying(100)");
+
+ b.Property("DefenderHadDragon")
+ .HasColumnType("boolean");
+
+ b.Property("DefenderHighestTroopTier")
+ .HasColumnType("integer");
+
+ b.Property("DefenderInfantryAfter")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderInfantryBefore")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderPlayerId")
+ .HasColumnType("integer");
+
+ b.Property("DefenderPlayerId1")
+ .HasColumnType("integer");
+
+ b.Property("DefenderPowerBefore")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderSiegeAfter")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderSiegeBefore")
+ .HasColumnType("bigint");
+
+ b.Property("DefenderWoundedTroops")
+ .HasColumnType("bigint");
+
+ b.Property("DetailedBattleReport")
+ .HasMaxLength(4000)
+ .HasColumnType("character varying(4000)");
+
+ b.Property("FoodTransferred")
+ .HasColumnType("bigint");
+
+ b.Property("ForestSpeedReduction")
+ .HasColumnType("double precision");
+
+ b.Property("InterceptionType")
+ .HasColumnType("integer");
+
+ b.Property("InterceptorPlayerId")
+ .HasColumnType("integer");
+
+ b.Property("IronTransferred")
+ .HasColumnType("bigint");
+
+ b.Property("KingdomId")
+ .HasColumnType("integer");
+
+ b.Property("KingdomId1")
+ .HasColumnType("integer");
+
+ b.Property("KvKEventId")
+ .HasColumnType("integer");
+
+ b.Property("MarchArrivalTime")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("MarchDurationSeconds")
+ .HasColumnType("integer");
+
+ b.Property("MarchStartTime")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("MithrilTransferred")
+ .HasColumnType("bigint");
+
+ b.Property("Result")
+ .HasColumnType("integer");
+
+ b.Property("SilverTransferred")
+ .HasColumnType("bigint");
+
+ b.Property("SpeedBoostLevel")
+ .HasColumnType("integer");
+
+ b.Property("Timestamp")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("timestamp with time zone")
+ .HasDefaultValueSql("CURRENT_TIMESTAMP");
+
+ b.Property("UsedSpeedBoosts")
+ .HasColumnType("boolean");
+
+ b.Property("WasFieldInterception")
+ .HasColumnType("boolean");
+
+ b.Property("WasInForestZone")
+ .HasColumnType("boolean");
+
+ b.Property("WasKvKBattle")
+ .HasColumnType("boolean");
+
+ b.Property("WoodTransferred")
+ .HasColumnType("bigint");
+
+ b.HasKey("Id");
+
+ b.HasIndex("AttackerAllianceId");
+
+ b.HasIndex("AttackerPlayerId");
+
+ b.HasIndex("AttackerPlayerId1");
+
+ b.HasIndex("DefenderAllianceId");
+
+ b.HasIndex("DefenderPlayerId");
+
+ b.HasIndex("DefenderPlayerId1");
+
+ b.HasIndex("InterceptorPlayerId");
+
+ b.HasIndex("KingdomId");
+
+ b.HasIndex("KingdomId1");
+
+ b.HasIndex("Timestamp");
+
+ b.HasIndex("KingdomId", "Timestamp")
+ .HasDatabaseName("IX_CombatLogs_Kingdom_Time");
+
+ b.ToTable("CombatLogs");
+ });
+
+ modelBuilder.Entity("ShadowedRealms.Core.Models.Kingdom.Kingdom", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AcceptingNewPlayers")
+ .HasColumnType("boolean");
+
+ b.Property("AutoKickInactivePlayers")
+ .HasColumnType("boolean");
+
+ b.Property("CreatedAt")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("timestamp with time zone")
+ .HasDefaultValueSql("CURRENT_TIMESTAMP");
+
+ b.Property("CurrentPopulation")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(0);
+
+ b.Property("CurrentPowerRank")
+ .HasColumnType("integer");
+
+ b.Property("Description")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("EnableTaxSystem")
+ .HasColumnType("boolean");
+
+ b.Property("InactivityKickDays")
+ .HasColumnType("integer");
+
+ b.Property("IsActive")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(true);
+
+ b.Property("IsEligibleForKvK")
+ .HasColumnType("boolean");
+
+ b.Property("IsEligibleForMerger")
+ .HasColumnType("boolean");
+
+ b.Property("IsInKvK")
+ .HasColumnType("boolean");
+
+ b.Property("KingdomId")
+ .HasColumnType("integer");
+
+ b.Property("KvKDraws")
+ .HasColumnType("integer");
+
+ b.Property("KvKHostAllianceId")
+ .HasColumnType("integer");
+
+ b.Property("KvKLosses")
+ .HasColumnType("integer");
+
+ b.Property("KvKWins")
+ .HasColumnType("integer");
+
+ b.Property("LastActivity")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("LastKvKDate")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("MaxPopulation")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(1500);
+
+ b.Property("MergerAvailableDate")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasMaxLength(50)
+ .HasColumnType("character varying(50)");
+
+ b.Property("Number")
+ .HasColumnType("integer");
+
+ b.Property("TaxRate")
+ .HasColumnType("numeric");
+
+ b.Property("TotalPower")
+ .HasColumnType("bigint");
+
+ b.Property("TotalTaxCollected")
+ .HasColumnType("numeric");
+
+ b.Property("WelcomeMessage")
+ .HasMaxLength(200)
+ .HasColumnType("character varying(200)");
+
+ b.HasKey("Id");
+
+ b.HasIndex("Name");
+
+ b.HasIndex("Number")
+ .IsUnique();
+
+ b.ToTable("Kingdoms");
+ });
+
+ modelBuilder.Entity("ShadowedRealms.Core.Models.Player.Player", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer");
+
+ NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id"));
+
+ b.Property("AcceptAllianceInvites")
+ .HasColumnType("boolean");
+
+ b.Property("AllianceId")
+ .HasColumnType("integer");
+
+ b.Property("AttacksLost")
+ .HasColumnType("bigint");
+
+ b.Property("AttacksWon")
+ .HasColumnType("bigint");
+
+ b.Property("AutoUseSpeedBoosts")
+ .HasColumnType("boolean");
+
+ b.Property("Biography")
+ .HasMaxLength(500)
+ .HasColumnType("character varying(500)");
+
+ b.Property("BowmenT1")
+ .HasColumnType("bigint");
+
+ b.Property("BowmenT10")
+ .HasColumnType("bigint");
+
+ b.Property("BowmenT11")
+ .HasColumnType("bigint");
+
+ b.Property("BowmenT12")
+ .HasColumnType("bigint");
+
+ b.Property("BowmenT13")
+ .HasColumnType("bigint");
+
+ b.Property("BowmenT2")
+ .HasColumnType("bigint");
+
+ b.Property("BowmenT3")
+ .HasColumnType("bigint");
+
+ b.Property("BowmenT4")
+ .HasColumnType("bigint");
+
+ b.Property("BowmenT5")
+ .HasColumnType("bigint");
+
+ b.Property("CastleLevel")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasDefaultValue(1);
+
+ b.Property("CavalryT1")
+ .HasColumnType("bigint");
+
+ b.Property("CavalryT10")
+ .HasColumnType("bigint");
+
+ b.Property("CavalryT11")
+ .HasColumnType("bigint");
+
+ b.Property("CavalryT12")
+ .HasColumnType("bigint");
+
+ b.Property("CavalryT13")
+ .HasColumnType("bigint");
+
+ b.Property("CavalryT2")
+ .HasColumnType("bigint");
+
+ b.Property("CavalryT3")
+ .HasColumnType("bigint");
+
+ b.Property("CavalryT4")
+ .HasColumnType("bigint");
+
+ b.Property("CavalryT5")
+ .HasColumnType("bigint");
+
+ b.Property("CoordinateX")
+ .HasColumnType("integer");
+
+ b.Property("CoordinateY")
+ .HasColumnType("integer");
+
+ b.Property("CreatedAt")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("timestamp with time zone")
+ .HasDefaultValueSql("CURRENT_TIMESTAMP");
+
+ b.Property("DefensesLost")
+ .HasColumnType("bigint");
+
+ b.Property("DefensesWon")
+ .HasColumnType("bigint");
+
+ b.Property("DragonExpiryDate")
+ .HasColumnType("timestamp with time zone");
+
+ b.Property("EnablePushNotifications")
+ .HasColumnType("boolean");
+
+ b.Property("Food")
+ .HasColumnType("bigint");
+
+ b.Property("FoodProtected")
+ .HasColumnType("bigint");
+
+ b.Property("Gold")
+ .HasColumnType("integer");
+
+ b.Property("HasActiveDragon")
+ .HasColumnType("boolean");
+
+ b.Property("InfantryT1")
+ .HasColumnType("bigint");
+
+ b.Property("InfantryT10")
+ .HasColumnType("bigint");
+
+ b.Property("InfantryT11")
+ .HasColumnType("bigint");
+
+ b.Property("InfantryT12")
+ .HasColumnType("bigint");
+
+ b.Property("InfantryT13")
+ .HasColumnType("bigint");
+
+ b.Property("InfantryT2")
+ .HasColumnType("bigint");
+
+ b.Property("InfantryT3")
+ .HasColumnType("bigint");
+
+ b.Property("InfantryT4")
+ .HasColumnType("bigint");
+
+ b.Property("InfantryT5")
+ .HasColumnType("bigint");
+
+ b.Property("Iron")
+ .HasColumnType("bigint");
+
+ b.Property("IronProtected")
+ .HasColumnType("bigint");
+
+ b.Property("IsActive")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("boolean")
+ .HasDefaultValue(true);
+
+ b.Property("KingdomId")
+ .HasColumnType("integer");
+
+ b.Property("LastActiveAt")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("timestamp with time zone")
+ .HasDefaultValueSql("CURRENT_TIMESTAMP");
+
+ b.Property