huge commit for advanced stats feature.
broke data out into its own library. may be breaking changes with existing plugins
This commit is contained in:
parent
db2e1deb2f
commit
c5375b661b
@ -56,7 +56,7 @@
|
|||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Update="DefaultSettings.json">
|
<None Update="DefaultSettings.json">
|
||||||
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
</None>
|
</None>
|
||||||
<None Update="Configuration\LoggingConfiguration.json">
|
<None Update="Configuration\LoggingConfiguration.json">
|
||||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||||
|
@ -6,7 +6,6 @@ using SharedLibraryCore;
|
|||||||
using SharedLibraryCore.Commands;
|
using SharedLibraryCore.Commands;
|
||||||
using SharedLibraryCore.Configuration;
|
using SharedLibraryCore.Configuration;
|
||||||
using SharedLibraryCore.Configuration.Validation;
|
using SharedLibraryCore.Configuration.Validation;
|
||||||
using SharedLibraryCore.Database;
|
|
||||||
using SharedLibraryCore.Database.Models;
|
using SharedLibraryCore.Database.Models;
|
||||||
using SharedLibraryCore.Exceptions;
|
using SharedLibraryCore.Exceptions;
|
||||||
using SharedLibraryCore.Helpers;
|
using SharedLibraryCore.Helpers;
|
||||||
@ -21,6 +20,8 @@ using System.Reflection;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Abstractions;
|
||||||
|
using Data.Context;
|
||||||
using IW4MAdmin.Application.Migration;
|
using IW4MAdmin.Application.Migration;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
@ -291,6 +292,15 @@ namespace IW4MAdmin.Application
|
|||||||
IsRunning = true;
|
IsRunning = true;
|
||||||
ExternalIPAddress = await Utilities.GetExternalIP();
|
ExternalIPAddress = await Utilities.GetExternalIP();
|
||||||
|
|
||||||
|
#region DATABASE
|
||||||
|
_logger.LogInformation("Beginning database migration sync");
|
||||||
|
Console.WriteLine(_translationLookup["MANAGER_MIGRATION_START"]);
|
||||||
|
await ContextSeed.Seed(_serviceProvider.GetRequiredService<IDatabaseContextFactory>(), _tokenSource.Token);
|
||||||
|
await DatabaseHousekeeping.RemoveOldRatings(_serviceProvider.GetRequiredService<IDatabaseContextFactory>(), _tokenSource.Token);
|
||||||
|
_logger.LogInformation("Finished database migration sync");
|
||||||
|
Console.WriteLine(_translationLookup["MANAGER_MIGRATION_END"]);
|
||||||
|
#endregion
|
||||||
|
|
||||||
#region PLUGINS
|
#region PLUGINS
|
||||||
foreach (var plugin in Plugins)
|
foreach (var plugin in Plugins)
|
||||||
{
|
{
|
||||||
@ -331,7 +341,7 @@ namespace IW4MAdmin.Application
|
|||||||
// copy over default config if it doesn't exist
|
// copy over default config if it doesn't exist
|
||||||
if (!_appConfig.Servers?.Any() ?? true)
|
if (!_appConfig.Servers?.Any() ?? true)
|
||||||
{
|
{
|
||||||
var defaultConfig = new BaseConfigurationHandler<DefaultConfiguration>("DefaultSettings").Configuration();
|
var defaultConfig = new BaseConfigurationHandler<DefaultSettings>("DefaultSettings").Configuration();
|
||||||
//ConfigHandler.Set((ApplicationConfiguration)new ApplicationConfiguration().Generate());
|
//ConfigHandler.Set((ApplicationConfiguration)new ApplicationConfiguration().Generate());
|
||||||
//var newConfig = ConfigHandler.Configuration();
|
//var newConfig = ConfigHandler.Configuration();
|
||||||
|
|
||||||
@ -424,15 +434,6 @@ namespace IW4MAdmin.Application
|
|||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region DATABASE
|
|
||||||
_logger.LogInformation("Beginning database migration sync");
|
|
||||||
Console.WriteLine(_translationLookup["MANAGER_MIGRATION_START"]);
|
|
||||||
await ContextSeed.Seed(_serviceProvider.GetRequiredService<IDatabaseContextFactory>(), _tokenSource.Token);
|
|
||||||
await DatabaseHousekeeping.RemoveOldRatings(_serviceProvider.GetRequiredService<IDatabaseContextFactory>(), _tokenSource.Token);
|
|
||||||
_logger.LogInformation("Finished database migration sync");
|
|
||||||
Console.WriteLine(_translationLookup["MANAGER_MIGRATION_END"]);
|
|
||||||
#endregion
|
|
||||||
|
|
||||||
#region COMMANDS
|
#region COMMANDS
|
||||||
if (await ClientSvc.HasOwnerAsync(_tokenSource.Token))
|
if (await ClientSvc.HasOwnerAsync(_tokenSource.Token))
|
||||||
{
|
{
|
||||||
@ -517,7 +518,7 @@ namespace IW4MAdmin.Application
|
|||||||
// add the start event for this server
|
// add the start event for this server
|
||||||
var e = new GameEvent()
|
var e = new GameEvent()
|
||||||
{
|
{
|
||||||
Type = GameEvent.EventType.Start,
|
Type = EventType.Start,
|
||||||
Data = $"{ServerInstance.GameName} started",
|
Data = $"{ServerInstance.GameName} started",
|
||||||
Owner = ServerInstance
|
Owner = ServerInstance
|
||||||
};
|
};
|
||||||
|
@ -16,7 +16,13 @@
|
|||||||
"Keep grenade launcher use to a minimum",
|
"Keep grenade launcher use to a minimum",
|
||||||
"Balance teams at ALL times"
|
"Balance teams at ALL times"
|
||||||
],
|
],
|
||||||
"DisallowedClientNames": [ "Unknown Soldier", "VickNet", "UnknownSoldier", "CHEATER", "Play77" ],
|
"DisallowedClientNames": [
|
||||||
|
"Unknown Soldier",
|
||||||
|
"VickNet",
|
||||||
|
"UnknownSoldier",
|
||||||
|
"CHEATER",
|
||||||
|
"Play77"
|
||||||
|
],
|
||||||
"QuickMessages": [
|
"QuickMessages": [
|
||||||
{
|
{
|
||||||
"Game": "IW4",
|
"Game": "IW4",
|
||||||
@ -248,222 +254,178 @@
|
|||||||
"Alias": "Rust",
|
"Alias": "Rust",
|
||||||
"Name": "mp_rust"
|
"Name": "mp_rust"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Terminal",
|
"Alias": "Terminal",
|
||||||
"Name": "mp_terminal"
|
"Name": "mp_terminal"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Crash",
|
"Alias": "Crash",
|
||||||
"Name": "mp_crash"
|
"Name": "mp_crash"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Afghan",
|
"Alias": "Afghan",
|
||||||
"Name": "mp_afghan"
|
"Name": "mp_afghan"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Derail",
|
"Alias": "Derail",
|
||||||
"Name": "mp_derail"
|
"Name": "mp_derail"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Estate",
|
"Alias": "Estate",
|
||||||
"Name": "mp_estate"
|
"Name": "mp_estate"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Favela",
|
"Alias": "Favela",
|
||||||
"Name": "mp_favela"
|
"Name": "mp_favela"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Highrise",
|
"Alias": "Highrise",
|
||||||
"Name": "mp_highrise"
|
"Name": "mp_highrise"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Invasion",
|
"Alias": "Invasion",
|
||||||
"Name": "mp_invasion"
|
"Name": "mp_invasion"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Karachi",
|
"Alias": "Karachi",
|
||||||
"Name": "mp_checkpoint"
|
"Name": "mp_checkpoint"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Quarry",
|
"Alias": "Quarry",
|
||||||
"Name": "mp_quarry"
|
"Name": "mp_quarry"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Rundown",
|
"Alias": "Rundown",
|
||||||
"Name": "mp_rundown"
|
"Name": "mp_rundown"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Scrapyard",
|
"Alias": "Scrapyard",
|
||||||
"Name": "mp_boneyard"
|
"Name": "mp_boneyard"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Skidrow",
|
"Alias": "Skidrow",
|
||||||
"Name": "mp_nightshift"
|
"Name": "mp_nightshift"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Sub Base",
|
"Alias": "Sub Base",
|
||||||
"Name": "mp_subbase"
|
"Name": "mp_subbase"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Underpass",
|
"Alias": "Underpass",
|
||||||
"Name": "mp_underpass"
|
"Name": "mp_underpass"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Wasteland",
|
"Alias": "Wasteland",
|
||||||
"Name": "mp_brecourt"
|
"Name": "mp_brecourt"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Overgrown",
|
"Alias": "Overgrown",
|
||||||
"Name": "mp_overgrown"
|
"Name": "mp_overgrown"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Strike",
|
"Alias": "Strike",
|
||||||
"Name": "mp_strike"
|
"Name": "mp_strike"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Vacant",
|
"Alias": "Vacant",
|
||||||
"Name": "mp_vacant"
|
"Name": "mp_vacant"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Carnival",
|
"Alias": "Carnival",
|
||||||
"Name": "mp_abandon"
|
"Name": "mp_abandon"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Trailer Park",
|
"Alias": "Trailer Park",
|
||||||
"Name": "mp_trailerpark"
|
"Name": "mp_trailerpark"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Fuel",
|
"Alias": "Fuel",
|
||||||
"Name": "mp_fuel2"
|
"Name": "mp_fuel2"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Storm",
|
"Alias": "Storm",
|
||||||
"Name": "mp_storm"
|
"Name": "mp_storm"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Bailout",
|
"Alias": "Bailout",
|
||||||
"Name": "mp_complex"
|
"Name": "mp_complex"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Salvage",
|
"Alias": "Salvage",
|
||||||
"Name": "mp_compact"
|
"Name": "mp_compact"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Nuketown",
|
"Alias": "Nuketown",
|
||||||
"Name": "mp_nuked"
|
"Name": "mp_nuked"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Test map",
|
"Alias": "Test map",
|
||||||
"Name": "iw4_credits"
|
"Name": "iw4_credits"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Killhouse",
|
"Alias": "Killhouse",
|
||||||
"Name": "mp_killhouse"
|
"Name": "mp_killhouse"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Bog",
|
"Alias": "Bog",
|
||||||
"Name": "mp_bog_sh"
|
"Name": "mp_bog_sh"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Freighter",
|
"Alias": "Freighter",
|
||||||
"Name": "mp_cargoship_sh"
|
"Name": "mp_cargoship_sh"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Cargoship",
|
"Alias": "Cargoship",
|
||||||
"Name": "mp_cargoship"
|
"Name": "mp_cargoship"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Shipment",
|
"Alias": "Shipment",
|
||||||
"Name": "mp_shipment"
|
"Name": "mp_shipment"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Shipment - Long",
|
"Alias": "Shipment - Long",
|
||||||
"Name": "mp_shipment_long"
|
"Name": "mp_shipment_long"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Rust - Long",
|
"Alias": "Rust - Long",
|
||||||
"Name": "mp_rust_long"
|
"Name": "mp_rust_long"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Firing Range",
|
"Alias": "Firing Range",
|
||||||
"Name": "mp_firingrange"
|
"Name": "mp_firingrange"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Chemical Plant",
|
"Alias": "Chemical Plant",
|
||||||
"Name": "mp_storm_spring"
|
"Name": "mp_storm_spring"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Tropical Favela",
|
"Alias": "Tropical Favela",
|
||||||
"Name": "mp_fav_tropical"
|
"Name": "mp_fav_tropical"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Tropical Estate",
|
"Alias": "Tropical Estate",
|
||||||
"Name": "mp_estate_tropical"
|
"Name": "mp_estate_tropical"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Tropical Crash",
|
"Alias": "Tropical Crash",
|
||||||
"Name": "mp_crash_tropical"
|
"Name": "mp_crash_tropical"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Forgotten City",
|
"Alias": "Forgotten City",
|
||||||
"Name": "mp_bloc_sh"
|
"Name": "mp_bloc_sh"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Crossfire",
|
"Alias": "Crossfire",
|
||||||
"Name": "mp_cross_fire"
|
"Name": "mp_cross_fire"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Bloc",
|
"Alias": "Bloc",
|
||||||
"Name": "mp_bloc"
|
"Name": "mp_bloc"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Alias": "Oilrig",
|
"Alias": "Oilrig",
|
||||||
"Name": "oilrig"
|
"Name": "oilrig"
|
||||||
},
|
},
|
||||||
|
|
||||||
{
|
{
|
||||||
"Name": "Village",
|
"Name": "Village",
|
||||||
"Alias": "co_hunted"
|
"Alias": "co_hunted"
|
||||||
@ -519,7 +481,7 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Alias": "Havana",
|
"Alias": "Havana",
|
||||||
"Name": "mp_cairo"
|
"Name": "mp_cairo"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"Alias": "Hazard",
|
"Alias": "Hazard",
|
||||||
@ -885,5 +847,79 @@
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"GameStrings": {
|
||||||
|
"IW4": {
|
||||||
|
"torso_upper": "Upper Torso",
|
||||||
|
"torso_lower": "Lower Torso",
|
||||||
|
"right_leg_upper": "Upper Right Leg",
|
||||||
|
"right_leg_lower": "Lower Right Leg",
|
||||||
|
"right_hand": "Right Hand",
|
||||||
|
"right_foot": "Right Foot",
|
||||||
|
"right_arm_upper": "Upper Right Arm",
|
||||||
|
"right_arm_lower": "Lower Right Arm",
|
||||||
|
"left_leg_upper": "Upper Left Leg",
|
||||||
|
"left_leg_lower": "Lower Left Leg",
|
||||||
|
"left_hand": "Left Hand",
|
||||||
|
"left_foot": "Left Foot",
|
||||||
|
"left_arm_upper": "Upper Left Arm",
|
||||||
|
"left_arm_lower": "Lower Left Arm",
|
||||||
|
"acog": "ACOG Sight",
|
||||||
|
"eotech": "Holographic Sight",
|
||||||
|
"fmj": "FMJ",
|
||||||
|
"gl": "Grenade Launcher",
|
||||||
|
"heartbeat": "Heartbeat Sensor",
|
||||||
|
"reflex": "Red Dot Sight",
|
||||||
|
"rof": "Rapid Fire",
|
||||||
|
"thermal": "Thermal",
|
||||||
|
"xmags": "Extended Mags",
|
||||||
|
"m4": "M4A1",
|
||||||
|
"m40a3": "M40A3",
|
||||||
|
"ak47": "AK-47",
|
||||||
|
"ak47classic": "AK-47 Classic",
|
||||||
|
"fn2000": "F2000",
|
||||||
|
"masada": "ACR",
|
||||||
|
"famas": "FAMAS",
|
||||||
|
"fal": "FAL",
|
||||||
|
"scar": "SCAR-H",
|
||||||
|
"tavor": "TAR-21",
|
||||||
|
"m16": "M16A4",
|
||||||
|
"mp5k": "MP5K",
|
||||||
|
"ump45": "UMP45",
|
||||||
|
"kriss": "Vector",
|
||||||
|
"uzi": "Mini-Uzi",
|
||||||
|
"rpd": "RPD",
|
||||||
|
"sa80": "L86 LSW",
|
||||||
|
"mg4": "MG4",
|
||||||
|
"aug": "AUG HBAR",
|
||||||
|
"cheytac": "Intervention",
|
||||||
|
"barrett": "Barrett .50cal",
|
||||||
|
"wa2000": "WA2000",
|
||||||
|
"m21": "M21 EBR",
|
||||||
|
"pp2000": "PP2000",
|
||||||
|
"glock": "G18",
|
||||||
|
"beretta": "M93 Raffica",
|
||||||
|
"tmp": "TMP",
|
||||||
|
"spas12": "SPAS-12",
|
||||||
|
"aa12": "AA-12",
|
||||||
|
"model1887": "Model 1887",
|
||||||
|
"usp": "USP .45",
|
||||||
|
"coltanaconda": ".44 Magnum",
|
||||||
|
"deserteagle": "Desert Eagle",
|
||||||
|
"deserteaglegold": "Desert Eagle Gold",
|
||||||
|
"at4": "AT4-HS",
|
||||||
|
"m79": "Thumper",
|
||||||
|
"rpg": "RPG-7",
|
||||||
|
"concussion": "Stun",
|
||||||
|
"throwingknife": "Throwing Knife",
|
||||||
|
"ffar": "Airstrike",
|
||||||
|
"pavelow": "Pave Low",
|
||||||
|
"cobra": "Attack Helicopter",
|
||||||
|
"ac130": "AC-130",
|
||||||
|
"remotemissile": "Predator Missile",
|
||||||
|
"artillery": "Precision Airstrike",
|
||||||
|
"player": "",
|
||||||
|
"attach": ""
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -5,6 +5,7 @@ using SharedLibraryCore.Interfaces;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Data.Models;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using static SharedLibraryCore.Server;
|
using static SharedLibraryCore.Server;
|
||||||
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
@ -310,7 +311,7 @@ namespace IW4MAdmin.Application.EventParsers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eventType.Contains("ExitLevel"))
|
if (eventType.Contains("ExitLevel") || eventType.Contains("ShutdownGame"))
|
||||||
{
|
{
|
||||||
return new GameEvent()
|
return new GameEvent()
|
||||||
{
|
{
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Runtime.InteropServices;
|
using System.Runtime.InteropServices;
|
||||||
|
using Data.MigrationContext;
|
||||||
using Microsoft.Data.Sqlite;
|
using Microsoft.Data.Sqlite;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Configuration;
|
using Microsoft.Extensions.Configuration;
|
||||||
@ -10,7 +11,6 @@ using Serilog;
|
|||||||
using Serilog.Events;
|
using Serilog.Events;
|
||||||
using SharedLibraryCore;
|
using SharedLibraryCore;
|
||||||
using SharedLibraryCore.Configuration;
|
using SharedLibraryCore.Configuration;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
|
||||||
using ILogger = Serilog.ILogger;
|
using ILogger = Serilog.ILogger;
|
||||||
|
|
||||||
namespace IW4MAdmin.Application.Extensions
|
namespace IW4MAdmin.Application.Extensions
|
||||||
@ -32,13 +32,12 @@ namespace IW4MAdmin.Application.Extensions
|
|||||||
.ReadFrom.Configuration(configuration)
|
.ReadFrom.Configuration(configuration)
|
||||||
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning);
|
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning);
|
||||||
|
|
||||||
|
|
||||||
if (Utilities.IsDevelopment)
|
if (Utilities.IsDevelopment)
|
||||||
{
|
{
|
||||||
loggerConfig = loggerConfig.WriteTo.Console(
|
loggerConfig = loggerConfig.WriteTo.Console(
|
||||||
outputTemplate:
|
outputTemplate:
|
||||||
"[{Timestamp:yyyy-MM-dd HH:mm:ss.fff} {Server} {Level:u3}] {Message:lj}{NewLine}{Exception}")
|
"[{Timestamp:yyyy-MM-dd HH:mm:ss.fff} {Server} {Level:u3}] {Message:lj}{NewLine}{Exception}")
|
||||||
.MinimumLevel.Override("Microsoft", LogEventLevel.Warning)
|
.MinimumLevel.Override("Microsoft", LogEventLevel.Information)
|
||||||
.MinimumLevel.Debug();
|
.MinimumLevel.Debug();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -67,10 +66,10 @@ namespace IW4MAdmin.Application.Extensions
|
|||||||
{DataSource = Path.Join(currentPath, "Database", "Database.db")};
|
{DataSource = Path.Join(currentPath, "Database", "Database.db")};
|
||||||
var connectionString = connectionStringBuilder.ToString();
|
var connectionString = connectionStringBuilder.ToString();
|
||||||
|
|
||||||
var builder = new DbContextOptionsBuilder<SqliteDatabaseContext>()
|
services.AddSingleton(sp => (DbContextOptions) new DbContextOptionsBuilder<SqliteDatabaseContext>()
|
||||||
.UseSqlite(connectionString);
|
.UseSqlite(connectionString)
|
||||||
|
.UseLoggerFactory(sp.GetRequiredService<ILoggerFactory>())
|
||||||
services.AddSingleton((DbContextOptions) builder.Options);
|
.EnableSensitiveDataLogging().Options);
|
||||||
return services;
|
return services;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -90,7 +89,11 @@ namespace IW4MAdmin.Application.Extensions
|
|||||||
services.AddSingleton(sp =>
|
services.AddSingleton(sp =>
|
||||||
(DbContextOptions) new DbContextOptionsBuilder<PostgresqlDatabaseContext>()
|
(DbContextOptions) new DbContextOptionsBuilder<PostgresqlDatabaseContext>()
|
||||||
.UseNpgsql(appConfig.ConnectionString + (appendTimeout ? ";Command Timeout=0" : ""),
|
.UseNpgsql(appConfig.ConnectionString + (appendTimeout ? ";Command Timeout=0" : ""),
|
||||||
postgresqlOptions => postgresqlOptions.EnableRetryOnFailure())
|
postgresqlOptions =>
|
||||||
|
{
|
||||||
|
postgresqlOptions.EnableRetryOnFailure();
|
||||||
|
postgresqlOptions.SetPostgresVersion(new Version("9.4"));
|
||||||
|
})
|
||||||
.UseLoggerFactory(sp.GetRequiredService<ILoggerFactory>()).Options);
|
.UseLoggerFactory(sp.GetRequiredService<ILoggerFactory>()).Options);
|
||||||
return services;
|
return services;
|
||||||
default:
|
default:
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using Data.Abstractions;
|
||||||
|
using Data.Context;
|
||||||
|
using Data.MigrationContext;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using SharedLibraryCore.Configuration;
|
using SharedLibraryCore.Configuration;
|
||||||
using SharedLibraryCore.Database;
|
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
|
||||||
using SharedLibraryCore.Interfaces;
|
|
||||||
|
|
||||||
namespace IW4MAdmin.Application.Factories
|
namespace IW4MAdmin.Application.Factories
|
||||||
{
|
{
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using Data.Abstractions;
|
||||||
|
using Data.Models.Server;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using SharedLibraryCore;
|
using SharedLibraryCore;
|
||||||
using SharedLibraryCore.Configuration;
|
using SharedLibraryCore.Configuration;
|
||||||
@ -37,7 +39,7 @@ namespace IW4MAdmin.Application.Factories
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public Server CreateServer(ServerConfiguration config, IManager manager)
|
public Server CreateServer(ServerConfiguration config, IManager manager)
|
||||||
{
|
{
|
||||||
return new IW4MServer(config, _translationLookup, _metaService, _serviceProvider, _serviceProvider.GetRequiredService<IClientNoticeMessageFormatter>());
|
return new IW4MServer(config, _translationLookup, _metaService, _serviceProvider, _serviceProvider.GetRequiredService<IClientNoticeMessageFormatter>(), _serviceProvider.GetRequiredService<ILookupCache<EFServer>>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -6,9 +6,9 @@ using SharedLibraryCore.Interfaces;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
|
using Data.Models.Client;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using static SharedLibraryCore.Database.Models.EFClient;
|
|
||||||
|
|
||||||
namespace IW4MAdmin.Application.Factories
|
namespace IW4MAdmin.Application.Factories
|
||||||
{
|
{
|
||||||
@ -32,7 +32,7 @@ namespace IW4MAdmin.Application.Factories
|
|||||||
public IManagerCommand CreateScriptCommand(string name, string alias, string description, string permission,
|
public IManagerCommand CreateScriptCommand(string name, string alias, string description, string permission,
|
||||||
bool isTargetRequired, IEnumerable<(string, bool)> args, Action<GameEvent> executeAction)
|
bool isTargetRequired, IEnumerable<(string, bool)> args, Action<GameEvent> executeAction)
|
||||||
{
|
{
|
||||||
var permissionEnum = Enum.Parse<Permission>(permission);
|
var permissionEnum = Enum.Parse<EFClient.Permission>(permission);
|
||||||
var argsArray = args.Select(_arg => new CommandArgument
|
var argsArray = args.Select(_arg => new CommandArgument
|
||||||
{
|
{
|
||||||
Name = _arg.Item1,
|
Name = _arg.Item1,
|
||||||
|
@ -15,10 +15,14 @@ using System.Runtime.InteropServices;
|
|||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Abstractions;
|
||||||
using Microsoft.Extensions.DependencyInjection;
|
using Microsoft.Extensions.DependencyInjection;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using Serilog.Context;
|
using Serilog.Context;
|
||||||
using static SharedLibraryCore.Database.Models.EFClient;
|
using static SharedLibraryCore.Database.Models.EFClient;
|
||||||
|
using Data.Models;
|
||||||
|
using Data.Models.Server;
|
||||||
|
using static Data.Models.Client.EFClient;
|
||||||
|
|
||||||
namespace IW4MAdmin
|
namespace IW4MAdmin
|
||||||
{
|
{
|
||||||
@ -34,13 +38,15 @@ namespace IW4MAdmin
|
|||||||
public int Id { get; private set; }
|
public int Id { get; private set; }
|
||||||
private readonly IServiceProvider _serviceProvider;
|
private readonly IServiceProvider _serviceProvider;
|
||||||
private readonly IClientNoticeMessageFormatter _messageFormatter;
|
private readonly IClientNoticeMessageFormatter _messageFormatter;
|
||||||
|
private readonly ILookupCache<EFServer> _serverCache;
|
||||||
|
|
||||||
public IW4MServer(
|
public IW4MServer(
|
||||||
ServerConfiguration serverConfiguration,
|
ServerConfiguration serverConfiguration,
|
||||||
ITranslationLookup lookup,
|
ITranslationLookup lookup,
|
||||||
IMetaService metaService,
|
IMetaService metaService,
|
||||||
IServiceProvider serviceProvider,
|
IServiceProvider serviceProvider,
|
||||||
IClientNoticeMessageFormatter messageFormatter) : base(serviceProvider.GetRequiredService<ILogger<Server>>(),
|
IClientNoticeMessageFormatter messageFormatter,
|
||||||
|
ILookupCache<EFServer> serverCache) : base(serviceProvider.GetRequiredService<ILogger<Server>>(),
|
||||||
serviceProvider.GetRequiredService<SharedLibraryCore.Interfaces.ILogger>(),
|
serviceProvider.GetRequiredService<SharedLibraryCore.Interfaces.ILogger>(),
|
||||||
serverConfiguration,
|
serverConfiguration,
|
||||||
serviceProvider.GetRequiredService<IManager>(),
|
serviceProvider.GetRequiredService<IManager>(),
|
||||||
@ -51,6 +57,7 @@ namespace IW4MAdmin
|
|||||||
_metaService = metaService;
|
_metaService = metaService;
|
||||||
_serviceProvider = serviceProvider;
|
_serviceProvider = serviceProvider;
|
||||||
_messageFormatter = messageFormatter;
|
_messageFormatter = messageFormatter;
|
||||||
|
_serverCache = serverCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override async Task<EFClient> OnClientConnected(EFClient clientFromLog)
|
public override async Task<EFClient> OnClientConnected(EFClient clientFromLog)
|
||||||
@ -250,6 +257,28 @@ namespace IW4MAdmin
|
|||||||
{
|
{
|
||||||
ServerLogger.LogDebug("processing event of type {type}", E.Type);
|
ServerLogger.LogDebug("processing event of type {type}", E.Type);
|
||||||
|
|
||||||
|
if (E.Type == GameEvent.EventType.Start)
|
||||||
|
{
|
||||||
|
var existingServer = (await _serverCache
|
||||||
|
.FirstAsync(server => server.Id == EndPoint));
|
||||||
|
|
||||||
|
var serverId = await GetIdForServer(E.Owner);
|
||||||
|
|
||||||
|
if (existingServer == null)
|
||||||
|
{
|
||||||
|
var server = new EFServer()
|
||||||
|
{
|
||||||
|
Port = Port,
|
||||||
|
EndPoint = ToString(),
|
||||||
|
ServerId = serverId,
|
||||||
|
GameName = (Reference.Game?)GameName,
|
||||||
|
HostName = Hostname
|
||||||
|
};
|
||||||
|
|
||||||
|
await _serverCache.AddAsync(server);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (E.Type == GameEvent.EventType.ConnectionLost)
|
if (E.Type == GameEvent.EventType.ConnectionLost)
|
||||||
{
|
{
|
||||||
var exception = E.Extra as Exception;
|
var exception = E.Extra as Exception;
|
||||||
@ -734,6 +763,25 @@ namespace IW4MAdmin
|
|||||||
updatedClients.ToList()
|
updatedClients.ToList()
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async Task<long> GetIdForServer(Server server)
|
||||||
|
{
|
||||||
|
if ($"{server.IP}:{server.Port.ToString()}" == "66.150.121.184:28965")
|
||||||
|
{
|
||||||
|
return 886229536;
|
||||||
|
}
|
||||||
|
|
||||||
|
// todo: this is not stable and will need to be migrated again...
|
||||||
|
long id = HashCode.Combine(server.IP, server.Port);
|
||||||
|
id = id < 0 ? Math.Abs(id) : id;
|
||||||
|
|
||||||
|
var serverId = (await _serverCache
|
||||||
|
.FirstAsync(_server => _server.ServerId == server.EndPoint ||
|
||||||
|
_server.EndPoint == server.ToString() ||
|
||||||
|
_server.ServerId == id))?.ServerId;
|
||||||
|
|
||||||
|
return !serverId.HasValue ? id : serverId.Value;
|
||||||
|
}
|
||||||
|
|
||||||
private void UpdateMap(string mapname)
|
private void UpdateMap(string mapname)
|
||||||
{
|
{
|
||||||
@ -1113,6 +1161,7 @@ namespace IW4MAdmin
|
|||||||
this,
|
this,
|
||||||
GenerateUriForLog(LogPath, ServerConfig.GameLogServerUrl?.AbsoluteUri), gameLogReaderFactory);
|
GenerateUriForLog(LogPath, ServerConfig.GameLogServerUrl?.AbsoluteUri), gameLogReaderFactory);
|
||||||
|
|
||||||
|
await _serverCache.InitializeAsync();
|
||||||
_ = Task.Run(() => LogEvent.PollForChanges());
|
_ = Task.Run(() => LogEvent.PollForChanges());
|
||||||
|
|
||||||
if (!Utilities.IsDevelopment)
|
if (!Utilities.IsDevelopment)
|
||||||
|
@ -23,10 +23,18 @@ using System.Linq;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Abstractions;
|
||||||
|
using Data.Helpers;
|
||||||
using IW4MAdmin.Application.Extensions;
|
using IW4MAdmin.Application.Extensions;
|
||||||
using IW4MAdmin.Application.Localization;
|
using IW4MAdmin.Application.Localization;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
|
using IW4MAdmin.Plugins.Stats.Client.Abstractions;
|
||||||
|
using IW4MAdmin.Plugins.Stats.Client;
|
||||||
|
using IW4MAdmin.Plugins.Stats.Client.Game;
|
||||||
|
using Stats.Client.Abstractions;
|
||||||
|
using Stats.Client;
|
||||||
|
using Stats.Helpers;
|
||||||
|
|
||||||
namespace IW4MAdmin.Application
|
namespace IW4MAdmin.Application
|
||||||
{
|
{
|
||||||
@ -80,13 +88,13 @@ namespace IW4MAdmin.Application
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static async Task LaunchAsync(string[] args)
|
private static async Task LaunchAsync(string[] args)
|
||||||
{
|
{
|
||||||
restart:
|
restart:
|
||||||
ITranslationLookup translationLookup = null;
|
ITranslationLookup translationLookup = null;
|
||||||
var logger = BuildDefaultLogger<Program>(new ApplicationConfiguration());
|
var logger = BuildDefaultLogger<Program>(new ApplicationConfiguration());
|
||||||
Utilities.DefaultLogger = logger;
|
Utilities.DefaultLogger = logger;
|
||||||
IServiceCollection services = null;
|
IServiceCollection services = null;
|
||||||
logger.LogInformation("Begin IW4MAdmin startup. Version is {version} {@args}", Version, args);
|
logger.LogInformation("Begin IW4MAdmin startup. Version is {version} {@args}", Version, args);
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
// do any needed housekeeping file/folder migrations
|
// do any needed housekeeping file/folder migrations
|
||||||
@ -96,7 +104,7 @@ namespace IW4MAdmin.Application
|
|||||||
services = ConfigureServices(args);
|
services = ConfigureServices(args);
|
||||||
serviceProvider = services.BuildServiceProvider();
|
serviceProvider = services.BuildServiceProvider();
|
||||||
var versionChecker = serviceProvider.GetRequiredService<IMasterCommunication>();
|
var versionChecker = serviceProvider.GetRequiredService<IMasterCommunication>();
|
||||||
ServerManager = (ApplicationManager)serviceProvider.GetRequiredService<IManager>();
|
ServerManager = (ApplicationManager) serviceProvider.GetRequiredService<IManager>();
|
||||||
translationLookup = serviceProvider.GetRequiredService<ITranslationLookup>();
|
translationLookup = serviceProvider.GetRequiredService<ITranslationLookup>();
|
||||||
|
|
||||||
await versionChecker.CheckVersion();
|
await versionChecker.CheckVersion();
|
||||||
@ -105,8 +113,12 @@ namespace IW4MAdmin.Application
|
|||||||
|
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
string failMessage = translationLookup == null ? "Failed to initialize IW4MAdmin" : translationLookup["MANAGER_INIT_FAIL"];
|
string failMessage = translationLookup == null
|
||||||
string exitMessage = translationLookup == null ? "Press enter to exit..." : translationLookup["MANAGER_EXIT"];
|
? "Failed to initialize IW4MAdmin"
|
||||||
|
: translationLookup["MANAGER_INIT_FAIL"];
|
||||||
|
string exitMessage = translationLookup == null
|
||||||
|
? "Press enter to exit..."
|
||||||
|
: translationLookup["MANAGER_EXIT"];
|
||||||
|
|
||||||
logger.LogCritical(e, "Failed to initialize IW4MAdmin");
|
logger.LogCritical(e, "Failed to initialize IW4MAdmin");
|
||||||
Console.WriteLine(failMessage);
|
Console.WriteLine(failMessage);
|
||||||
@ -120,7 +132,8 @@ namespace IW4MAdmin.Application
|
|||||||
{
|
{
|
||||||
if (translationLookup != null)
|
if (translationLookup != null)
|
||||||
{
|
{
|
||||||
Console.WriteLine(translationLookup[configException.Message].FormatExt(configException.ConfigurationFileName));
|
Console.WriteLine(translationLookup[configException.Message]
|
||||||
|
.FormatExt(configException.ConfigurationFileName));
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (string error in configException.Errors)
|
foreach (string error in configException.Errors)
|
||||||
@ -148,7 +161,9 @@ namespace IW4MAdmin.Application
|
|||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
logger.LogCritical(e, "Failed to launch IW4MAdmin");
|
logger.LogCritical(e, "Failed to launch IW4MAdmin");
|
||||||
string failMessage = translationLookup == null ? "Failed to launch IW4MAdmin" : translationLookup["MANAGER_INIT_FAIL"];
|
string failMessage = translationLookup == null
|
||||||
|
? "Failed to launch IW4MAdmin"
|
||||||
|
: translationLookup["MANAGER_INIT_FAIL"];
|
||||||
Console.WriteLine($"{failMessage}: {e.GetExceptionInfo()}");
|
Console.WriteLine($"{failMessage}: {e.GetExceptionInfo()}");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -166,9 +181,9 @@ namespace IW4MAdmin.Application
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
private static async Task RunApplicationTasksAsync(ILogger logger, IServiceCollection services)
|
private static async Task RunApplicationTasksAsync(ILogger logger, IServiceCollection services)
|
||||||
{
|
{
|
||||||
var webfrontTask = ServerManager.GetApplicationSettings().Configuration().EnableWebFront ?
|
var webfrontTask = ServerManager.GetApplicationSettings().Configuration().EnableWebFront
|
||||||
WebfrontCore.Program.Init(ServerManager, serviceProvider, services, ServerManager.CancellationToken) :
|
? WebfrontCore.Program.Init(ServerManager, serviceProvider, services, ServerManager.CancellationToken)
|
||||||
Task.CompletedTask;
|
: Task.CompletedTask;
|
||||||
|
|
||||||
// we want to run this one on a manual thread instead of letting the thread pool handle it,
|
// we want to run this one on a manual thread instead of letting the thread pool handle it,
|
||||||
// because we can't exit early from waiting on console input, and it prevents us from restarting
|
// because we can't exit early from waiting on console input, and it prevents us from restarting
|
||||||
@ -179,7 +194,8 @@ namespace IW4MAdmin.Application
|
|||||||
{
|
{
|
||||||
ServerManager.Start(),
|
ServerManager.Start(),
|
||||||
webfrontTask,
|
webfrontTask,
|
||||||
serviceProvider.GetRequiredService<IMasterCommunication>().RunUploadStatus(ServerManager.CancellationToken)
|
serviceProvider.GetRequiredService<IMasterCommunication>()
|
||||||
|
.RunUploadStatus(ServerManager.CancellationToken)
|
||||||
};
|
};
|
||||||
|
|
||||||
logger.LogDebug("Starting webfront and input tasks");
|
logger.LogDebug("Starting webfront and input tasks");
|
||||||
@ -231,11 +247,12 @@ namespace IW4MAdmin.Application
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (OperationCanceledException)
|
catch (OperationCanceledException)
|
||||||
{ }
|
{
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static IServiceCollection HandlePluginRegistration(ApplicationConfiguration appConfig,
|
private static IServiceCollection HandlePluginRegistration(ApplicationConfiguration appConfig,
|
||||||
IServiceCollection serviceCollection,
|
IServiceCollection serviceCollection,
|
||||||
IMasterApi masterApi)
|
IMasterApi masterApi)
|
||||||
{
|
{
|
||||||
var defaultLogger = BuildDefaultLogger<Program>(appConfig);
|
var defaultLogger = BuildDefaultLogger<Program>(appConfig);
|
||||||
@ -248,33 +265,44 @@ namespace IW4MAdmin.Application
|
|||||||
.BuildServiceProvider();
|
.BuildServiceProvider();
|
||||||
|
|
||||||
var pluginImporter = pluginServiceProvider.GetRequiredService<IPluginImporter>();
|
var pluginImporter = pluginServiceProvider.GetRequiredService<IPluginImporter>();
|
||||||
|
|
||||||
// we need to register the rest client with regular collection
|
// we need to register the rest client with regular collection
|
||||||
serviceCollection.AddSingleton(masterApi);
|
serviceCollection.AddSingleton(masterApi);
|
||||||
|
|
||||||
// register the native commands
|
// register the native commands
|
||||||
foreach (var commandType in typeof(SharedLibraryCore.Commands.QuitCommand).Assembly.GetTypes()
|
foreach (var commandType in typeof(SharedLibraryCore.Commands.QuitCommand).Assembly.GetTypes()
|
||||||
.Where(_command => _command.BaseType == typeof(Command)))
|
.Where(_command => _command.BaseType == typeof(Command)))
|
||||||
{
|
{
|
||||||
defaultLogger.LogDebug("Registered native command type {name}", commandType.Name);
|
defaultLogger.LogDebug("Registered native command type {name}", commandType.Name);
|
||||||
serviceCollection.AddSingleton(typeof(IManagerCommand), commandType);
|
serviceCollection.AddSingleton(typeof(IManagerCommand), commandType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// register the plugin implementations
|
// register the plugin implementations
|
||||||
var pluginImplementations = pluginImporter.DiscoverAssemblyPluginImplementations();
|
var (plugins, commands, configurations) = pluginImporter.DiscoverAssemblyPluginImplementations();
|
||||||
foreach (var pluginType in pluginImplementations.Item1)
|
foreach (var pluginType in plugins)
|
||||||
{
|
{
|
||||||
defaultLogger.LogDebug("Registered plugin type {name}", pluginType.FullName);
|
defaultLogger.LogDebug("Registered plugin type {name}", pluginType.FullName);
|
||||||
serviceCollection.AddSingleton(typeof(IPlugin), pluginType);
|
serviceCollection.AddSingleton(typeof(IPlugin), pluginType);
|
||||||
}
|
}
|
||||||
|
|
||||||
// register the plugin commands
|
// register the plugin commands
|
||||||
foreach (var commandType in pluginImplementations.Item2)
|
foreach (var commandType in commands)
|
||||||
{
|
{
|
||||||
defaultLogger.LogDebug("Registered plugin command type {name}", commandType.FullName);
|
defaultLogger.LogDebug("Registered plugin command type {name}", commandType.FullName);
|
||||||
serviceCollection.AddSingleton(typeof(IManagerCommand), commandType);
|
serviceCollection.AddSingleton(typeof(IManagerCommand), commandType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
foreach (var configurationType in configurations)
|
||||||
|
{
|
||||||
|
defaultLogger.LogDebug("Registered plugin config type {name}", configurationType.Name);
|
||||||
|
var configInstance = (IBaseConfiguration) Activator.CreateInstance(configurationType);
|
||||||
|
var handlerType = typeof(BaseConfigurationHandler<>).MakeGenericType(configurationType);
|
||||||
|
var handlerInstance = Activator.CreateInstance(handlerType, new[] {configInstance.Name()});
|
||||||
|
var genericInterfaceType = typeof(IConfigurationHandler<>).MakeGenericType(configurationType);
|
||||||
|
|
||||||
|
serviceCollection.AddSingleton(genericInterfaceType, handlerInstance);
|
||||||
|
}
|
||||||
|
|
||||||
// register any script plugins
|
// register any script plugins
|
||||||
foreach (var scriptPlugin in pluginImporter.DiscoverScriptPlugins())
|
foreach (var scriptPlugin in pluginImporter.DiscoverScriptPlugins())
|
||||||
{
|
{
|
||||||
@ -284,10 +312,9 @@ namespace IW4MAdmin.Application
|
|||||||
// register any eventable types
|
// register any eventable types
|
||||||
foreach (var assemblyType in typeof(Program).Assembly.GetTypes()
|
foreach (var assemblyType in typeof(Program).Assembly.GetTypes()
|
||||||
.Where(_asmType => typeof(IRegisterEvent).IsAssignableFrom(_asmType))
|
.Where(_asmType => typeof(IRegisterEvent).IsAssignableFrom(_asmType))
|
||||||
.Union(pluginImplementations
|
.Union(plugins.SelectMany(_asm => _asm.Assembly.GetTypes())
|
||||||
.Item1.SelectMany(_asm => _asm.Assembly.GetTypes())
|
.Distinct()
|
||||||
.Distinct()
|
.Where(_asmType => typeof(IRegisterEvent).IsAssignableFrom(_asmType))))
|
||||||
.Where(_asmType => typeof(IRegisterEvent).IsAssignableFrom(_asmType))))
|
|
||||||
{
|
{
|
||||||
var instance = Activator.CreateInstance(assemblyType) as IRegisterEvent;
|
var instance = Activator.CreateInstance(assemblyType) as IRegisterEvent;
|
||||||
serviceCollection.AddSingleton(instance);
|
serviceCollection.AddSingleton(instance);
|
||||||
@ -295,7 +322,7 @@ namespace IW4MAdmin.Application
|
|||||||
|
|
||||||
return serviceCollection;
|
return serviceCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Configures the dependency injection services
|
/// Configures the dependency injection services
|
||||||
@ -310,7 +337,7 @@ namespace IW4MAdmin.Application
|
|||||||
? new Uri("http://127.0.0.1:8080")
|
? new Uri("http://127.0.0.1:8080")
|
||||||
: appConfig?.MasterUrl ?? new ApplicationConfiguration().MasterUrl;
|
: appConfig?.MasterUrl ?? new ApplicationConfiguration().MasterUrl;
|
||||||
var masterRestClient = RestClient.For<IMasterApi>(masterUri);
|
var masterRestClient = RestClient.For<IMasterApi>(masterUri);
|
||||||
var translationLookup = Configure.Initialize(Utilities.DefaultLogger, masterRestClient, appConfig);
|
var translationLookup = Configure.Initialize(Utilities.DefaultLogger, masterRestClient, appConfig);
|
||||||
|
|
||||||
if (appConfig == null)
|
if (appConfig == null)
|
||||||
{
|
{
|
||||||
@ -327,13 +354,14 @@ namespace IW4MAdmin.Application
|
|||||||
Utilities.PermissionLevelOverrides.Add(key, value);
|
Utilities.PermissionLevelOverrides.Add(key, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// build the dependency list
|
// build the dependency list
|
||||||
HandlePluginRegistration(appConfig, serviceCollection, masterRestClient);
|
HandlePluginRegistration(appConfig, serviceCollection, masterRestClient);
|
||||||
|
|
||||||
serviceCollection
|
serviceCollection
|
||||||
.AddBaseLogger(appConfig)
|
.AddBaseLogger(appConfig)
|
||||||
.AddSingleton<IServiceCollection>(_serviceProvider => serviceCollection)
|
.AddSingleton<IServiceCollection>(_serviceProvider => serviceCollection)
|
||||||
|
.AddSingleton<IConfigurationHandler<DefaultSettings>, BaseConfigurationHandler<DefaultSettings>>()
|
||||||
.AddSingleton((IConfigurationHandler<ApplicationConfiguration>) appConfigHandler)
|
.AddSingleton((IConfigurationHandler<ApplicationConfiguration>) appConfigHandler)
|
||||||
.AddSingleton(
|
.AddSingleton(
|
||||||
new BaseConfigurationHandler<CommandConfiguration>("CommandConfiguration") as
|
new BaseConfigurationHandler<CommandConfiguration>("CommandConfiguration") as
|
||||||
@ -372,6 +400,12 @@ namespace IW4MAdmin.Application
|
|||||||
.AddSingleton<IManager, ApplicationManager>()
|
.AddSingleton<IManager, ApplicationManager>()
|
||||||
.AddSingleton<SharedLibraryCore.Interfaces.ILogger, Logger>()
|
.AddSingleton<SharedLibraryCore.Interfaces.ILogger, Logger>()
|
||||||
.AddSingleton<IClientNoticeMessageFormatter, ClientNoticeMessageFormatter>()
|
.AddSingleton<IClientNoticeMessageFormatter, ClientNoticeMessageFormatter>()
|
||||||
|
.AddSingleton<IClientStatisticCalculator, HitCalculator>()
|
||||||
|
.AddSingleton<IServerDistributionCalculator, ServerDistributionCalculator>()
|
||||||
|
.AddSingleton<IWeaponNameParser, WeaponNameParser>()
|
||||||
|
.AddSingleton<IHitInfoBuilder, HitInfoBuilder>()
|
||||||
|
.AddSingleton(typeof(ILookupCache<>), typeof(LookupCache<>))
|
||||||
|
.AddSingleton(typeof(IDataValueCache<,>), typeof(DataValueCache<,>))
|
||||||
.AddSingleton(translationLookup)
|
.AddSingleton(translationLookup)
|
||||||
.AddDatabaseContextOptions(appConfig);
|
.AddDatabaseContextOptions(appConfig);
|
||||||
|
|
||||||
@ -386,7 +420,7 @@ namespace IW4MAdmin.Application
|
|||||||
|
|
||||||
return serviceCollection;
|
return serviceCollection;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static ILogger BuildDefaultLogger<T>(ApplicationConfiguration appConfig)
|
private static ILogger BuildDefaultLogger<T>(ApplicationConfiguration appConfig)
|
||||||
{
|
{
|
||||||
var collection = new ServiceCollection()
|
var collection = new ServiceCollection()
|
||||||
@ -396,4 +430,4 @@ namespace IW4MAdmin.Application
|
|||||||
return collection.GetRequiredService<ILogger<T>>();
|
return collection.GetRequiredService<ILogger<T>>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,8 +1,9 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Abstractions;
|
||||||
|
using Data.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using SharedLibraryCore.Database.Models;
|
|
||||||
using SharedLibraryCore.Dtos.Meta.Responses;
|
using SharedLibraryCore.Dtos.Meta.Responses;
|
||||||
using SharedLibraryCore.Helpers;
|
using SharedLibraryCore.Helpers;
|
||||||
using SharedLibraryCore.Interfaces;
|
using SharedLibraryCore.Interfaces;
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
using System;
|
using System.Linq;
|
||||||
using System.Linq;
|
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Abstractions;
|
||||||
|
using Data.Models;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using SharedLibraryCore;
|
using SharedLibraryCore;
|
||||||
using SharedLibraryCore.Database.Models;
|
|
||||||
using SharedLibraryCore.Dtos.Meta.Responses;
|
using SharedLibraryCore.Dtos.Meta.Responses;
|
||||||
using SharedLibraryCore.Helpers;
|
using SharedLibraryCore.Helpers;
|
||||||
using SharedLibraryCore.Interfaces;
|
using SharedLibraryCore.Interfaces;
|
||||||
|
@ -6,6 +6,7 @@ using SharedLibraryCore.Interfaces;
|
|||||||
using SharedLibraryCore.QueryHelper;
|
using SharedLibraryCore.QueryHelper;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Abstractions;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
|
|
||||||
|
@ -2,7 +2,8 @@
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using IW4MAdmin.Plugins.Stats.Models;
|
using Data.Abstractions;
|
||||||
|
using Data.Models.Client.Stats;
|
||||||
using SharedLibraryCore.Database;
|
using SharedLibraryCore.Database;
|
||||||
using SharedLibraryCore.Interfaces;
|
using SharedLibraryCore.Interfaces;
|
||||||
|
|
||||||
|
@ -22,6 +22,11 @@ namespace IW4MAdmin.Application.Misc
|
|||||||
Build();
|
Build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public BaseConfigurationHandler() : this(typeof(T).Name)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public string FileName { get; }
|
public string FileName { get; }
|
||||||
|
|
||||||
public void Build()
|
public void Build()
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
|
using Data.Models;
|
||||||
using SharedLibraryCore;
|
using SharedLibraryCore;
|
||||||
using SharedLibraryCore.Configuration;
|
using SharedLibraryCore.Configuration;
|
||||||
using SharedLibraryCore.Database.Models;
|
|
||||||
using SharedLibraryCore.Interfaces;
|
using SharedLibraryCore.Interfaces;
|
||||||
|
|
||||||
namespace IW4MAdmin.Application.Misc
|
namespace IW4MAdmin.Application.Misc
|
||||||
|
@ -7,8 +7,10 @@ using System;
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Abstractions;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
|
using Data.Models;
|
||||||
|
|
||||||
namespace IW4MAdmin.Application.Misc
|
namespace IW4MAdmin.Application.Misc
|
||||||
{
|
{
|
||||||
|
@ -63,11 +63,12 @@ namespace IW4MAdmin.Application.Misc
|
|||||||
/// discovers all the C# assembly plugins and commands
|
/// discovers all the C# assembly plugins and commands
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public (IEnumerable<Type>, IEnumerable<Type>) DiscoverAssemblyPluginImplementations()
|
public (IEnumerable<Type>, IEnumerable<Type>, IEnumerable<Type>) DiscoverAssemblyPluginImplementations()
|
||||||
{
|
{
|
||||||
string pluginDir = $"{Utilities.OperatingDirectory}{PLUGIN_DIR}{Path.DirectorySeparatorChar}";
|
var pluginDir = $"{Utilities.OperatingDirectory}{PLUGIN_DIR}{Path.DirectorySeparatorChar}";
|
||||||
var pluginTypes = Enumerable.Empty<Type>();
|
var pluginTypes = Enumerable.Empty<Type>();
|
||||||
var commandTypes = Enumerable.Empty<Type>();
|
var commandTypes = Enumerable.Empty<Type>();
|
||||||
|
var configurationTypes = Enumerable.Empty<Type>();
|
||||||
|
|
||||||
if (Directory.Exists(pluginDir))
|
if (Directory.Exists(pluginDir))
|
||||||
{
|
{
|
||||||
@ -92,10 +93,17 @@ namespace IW4MAdmin.Application.Misc
|
|||||||
.Where(_assemblyType => _assemblyType.IsClass && _assemblyType.BaseType == typeof(Command));
|
.Where(_assemblyType => _assemblyType.IsClass && _assemblyType.BaseType == typeof(Command));
|
||||||
|
|
||||||
_logger.LogDebug("Discovered {count} plugin commands", commandTypes.Count());
|
_logger.LogDebug("Discovered {count} plugin commands", commandTypes.Count());
|
||||||
|
|
||||||
|
configurationTypes = assemblies
|
||||||
|
.SelectMany(asm => asm.GetTypes())
|
||||||
|
.Where(asmType =>
|
||||||
|
asmType.IsClass && asmType.GetInterface(nameof(IBaseConfiguration), false) != null);
|
||||||
|
|
||||||
|
_logger.LogDebug("Discovered {count} configuration implementations", configurationTypes.Count());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return (pluginTypes, commandTypes);
|
return (pluginTypes, commandTypes, configurationTypes);
|
||||||
}
|
}
|
||||||
|
|
||||||
private IEnumerable<Assembly> GetRemoteAssemblies()
|
private IEnumerable<Assembly> GetRemoteAssemblies()
|
||||||
|
@ -4,6 +4,7 @@ using SharedLibraryCore.Configuration;
|
|||||||
using SharedLibraryCore.Interfaces;
|
using SharedLibraryCore.Interfaces;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Models.Client;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using static SharedLibraryCore.Database.Models.EFClient;
|
using static SharedLibraryCore.Database.Models.EFClient;
|
||||||
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
@ -18,7 +19,7 @@ namespace IW4MAdmin.Application.Misc
|
|||||||
private readonly Action<GameEvent> _executeAction;
|
private readonly Action<GameEvent> _executeAction;
|
||||||
private readonly ILogger _logger;
|
private readonly ILogger _logger;
|
||||||
|
|
||||||
public ScriptCommand(string name, string alias, string description, bool isTargetRequired, Permission permission,
|
public ScriptCommand(string name, string alias, string description, bool isTargetRequired, EFClient.Permission permission,
|
||||||
CommandArgument[] args, Action<GameEvent> executeAction, CommandConfiguration config, ITranslationLookup layout, ILogger<ScriptCommand> logger)
|
CommandArgument[] args, Action<GameEvent> executeAction, CommandConfiguration config, ITranslationLookup layout, ILogger<ScriptCommand> logger)
|
||||||
: base(config, layout)
|
: base(config, layout)
|
||||||
{
|
{
|
||||||
|
@ -4,6 +4,7 @@ using SharedLibraryCore;
|
|||||||
using SharedLibraryCore.Database.Models;
|
using SharedLibraryCore.Database.Models;
|
||||||
using System;
|
using System;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
using Data.Models;
|
||||||
using static SharedLibraryCore.Database.Models.EFClient;
|
using static SharedLibraryCore.Database.Models.EFClient;
|
||||||
using static SharedLibraryCore.GameEvent;
|
using static SharedLibraryCore.GameEvent;
|
||||||
|
|
||||||
|
@ -8,6 +8,7 @@ using System.Collections.Generic;
|
|||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using Data.Models;
|
||||||
using Microsoft.Extensions.Logging;
|
using Microsoft.Extensions.Logging;
|
||||||
using static SharedLibraryCore.Server;
|
using static SharedLibraryCore.Server;
|
||||||
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
|
12
Data/Abstractions/IDataValueCache.cs
Normal file
12
Data/Abstractions/IDataValueCache.cs
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
using System;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
|
namespace Data.Abstractions
|
||||||
|
{
|
||||||
|
public interface IDataValueCache<T, V> where T : class
|
||||||
|
{
|
||||||
|
void SetCacheItem(Func<DbSet<T>, Task<V>> itemGetter, string keyName, TimeSpan? expirationTime = null);
|
||||||
|
Task<V> GetCacheItem(string keyName);
|
||||||
|
}
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
using SharedLibraryCore.Database;
|
using Data.Context;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Interfaces
|
namespace Data.Abstractions
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// describes the capabilities of the database context factory
|
/// describes the capabilities of the database context factory
|
14
Data/Abstractions/ILookupCache.cs
Normal file
14
Data/Abstractions/ILookupCache.cs
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Data.Abstractions
|
||||||
|
{
|
||||||
|
public interface ILookupCache<T> where T : class
|
||||||
|
{
|
||||||
|
Task InitializeAsync();
|
||||||
|
Task<T> AddAsync(T item);
|
||||||
|
Task<T> FirstAsync(Func<T, bool> query);
|
||||||
|
IEnumerable<T> GetAll();
|
||||||
|
}
|
||||||
|
}
|
@ -1,4 +1,4 @@
|
|||||||
namespace SharedLibraryCore.Interfaces
|
namespace Data.Abstractions
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// describes the capability of extending properties by name
|
/// describes the capability of extending properties by name
|
13
Data/Abstractions/IUniqueId.cs
Normal file
13
Data/Abstractions/IUniqueId.cs
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
using System.ComponentModel.DataAnnotations.Schema;
|
||||||
|
|
||||||
|
namespace Data.Abstractions
|
||||||
|
{
|
||||||
|
public interface IUniqueId
|
||||||
|
{
|
||||||
|
[NotMapped]
|
||||||
|
long Id { get; }
|
||||||
|
|
||||||
|
[NotMapped]
|
||||||
|
string Value { get; }
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +1,12 @@
|
|||||||
using Microsoft.EntityFrameworkCore;
|
using System;
|
||||||
using SharedLibraryCore.Database.Models;
|
|
||||||
using System;
|
|
||||||
using System.Linq;
|
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using SharedLibraryCore.Interfaces;
|
using Data.Abstractions;
|
||||||
using static SharedLibraryCore.Database.Models.EFClient;
|
using Data.Models;
|
||||||
|
using Data.Models.Client;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Database
|
namespace Data.Context
|
||||||
{
|
{
|
||||||
public static class ContextSeed
|
public static class ContextSeed
|
||||||
{
|
{
|
||||||
@ -30,7 +29,7 @@ namespace SharedLibraryCore.Database
|
|||||||
Connections = 0,
|
Connections = 0,
|
||||||
FirstConnection = DateTime.UtcNow,
|
FirstConnection = DateTime.UtcNow,
|
||||||
LastConnection = DateTime.UtcNow,
|
LastConnection = DateTime.UtcNow,
|
||||||
Level = Permission.Console,
|
Level = EFClient.Permission.Console,
|
||||||
Masked = true,
|
Masked = true,
|
||||||
NetworkId = 0,
|
NetworkId = 0,
|
||||||
AliasLink = link,
|
AliasLink = link,
|
135
Data/Context/DatabaseContext.cs
Normal file
135
Data/Context/DatabaseContext.cs
Normal file
@ -0,0 +1,135 @@
|
|||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using System;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Data.Extensions;
|
||||||
|
using Data.Models;
|
||||||
|
using Data.Models.Client;
|
||||||
|
using Data.Models.Client.Stats;
|
||||||
|
using Data.Models.Client.Stats.Reference;
|
||||||
|
using Data.Models.Server;
|
||||||
|
|
||||||
|
namespace Data.Context
|
||||||
|
{
|
||||||
|
public abstract class DatabaseContext : DbContext
|
||||||
|
{
|
||||||
|
public DbSet<EFClient> Clients { get; set; }
|
||||||
|
public DbSet<EFAlias> Aliases { get; set; }
|
||||||
|
public DbSet<EFAliasLink> AliasLinks { get; set; }
|
||||||
|
public DbSet<EFPenalty> Penalties { get; set; }
|
||||||
|
public DbSet<EFMeta> EFMeta { get; set; }
|
||||||
|
public DbSet<EFChangeHistory> EFChangeHistory { get; set; }
|
||||||
|
|
||||||
|
#region STATS
|
||||||
|
|
||||||
|
public DbSet<Models.Vector3> Vector3s { get; set; }
|
||||||
|
public DbSet<EFACSnapshotVector3> SnapshotVector3s { get; set; }
|
||||||
|
public DbSet<EFACSnapshot> ACSnapshots { get; set; }
|
||||||
|
public DbSet<EFServer> Servers { get; set; }
|
||||||
|
public DbSet<EFClientKill> ClientKills { get; set; }
|
||||||
|
public DbSet<EFClientMessage> ClientMessages { get; set; }
|
||||||
|
|
||||||
|
public DbSet<EFServerStatistics> ServerStatistics { get; set; }
|
||||||
|
public DbSet<EFHitLocation> HitLocations { get; set; }
|
||||||
|
public DbSet<EFClientHitStatistic> HitStatistics { get; set; }
|
||||||
|
public DbSet<EFWeapon> Weapons { get; set; }
|
||||||
|
public DbSet<EFWeaponAttachment> WeaponAttachments { get; set; }
|
||||||
|
public DbSet<EFMap> Maps { get; set; }
|
||||||
|
|
||||||
|
#endregion
|
||||||
|
|
||||||
|
private void SetAuditColumns()
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatabaseContext()
|
||||||
|
{
|
||||||
|
if (!MigrationExtensions.IsMigration)
|
||||||
|
{
|
||||||
|
throw new InvalidOperationException();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public DatabaseContext(DbContextOptions<DatabaseContext> options) : base(options)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected DatabaseContext(DbContextOptions options) : base(options)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess,
|
||||||
|
CancellationToken cancellationToken = default)
|
||||||
|
{
|
||||||
|
SetAuditColumns();
|
||||||
|
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
|
||||||
|
}
|
||||||
|
|
||||||
|
public override int SaveChanges()
|
||||||
|
{
|
||||||
|
SetAuditColumns();
|
||||||
|
return base.SaveChanges();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnModelCreating(ModelBuilder modelBuilder)
|
||||||
|
{
|
||||||
|
// make network id unique
|
||||||
|
modelBuilder.Entity<EFClient>(entity => { entity.HasIndex(e => e.NetworkId).IsUnique(); });
|
||||||
|
|
||||||
|
modelBuilder.Entity<EFPenalty>(entity =>
|
||||||
|
{
|
||||||
|
entity.HasOne(p => p.Offender)
|
||||||
|
.WithMany(c => c.ReceivedPenalties)
|
||||||
|
.HasForeignKey(c => c.OffenderId)
|
||||||
|
.OnDelete(DeleteBehavior.Restrict);
|
||||||
|
|
||||||
|
entity.HasOne(p => p.Punisher)
|
||||||
|
.WithMany(p => p.AdministeredPenalties)
|
||||||
|
.HasForeignKey(c => c.PunisherId)
|
||||||
|
.OnDelete(DeleteBehavior.Restrict);
|
||||||
|
|
||||||
|
entity.Property(p => p.Expires)
|
||||||
|
.IsRequired(false);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity<EFAliasLink>(entity =>
|
||||||
|
{
|
||||||
|
entity.HasMany(e => e.Children)
|
||||||
|
.WithOne(a => a.Link)
|
||||||
|
.HasForeignKey(k => k.LinkId)
|
||||||
|
.OnDelete(DeleteBehavior.Restrict);
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity<EFAlias>(ent =>
|
||||||
|
{
|
||||||
|
ent.Property(a => a.IPAddress).IsRequired(false);
|
||||||
|
ent.HasIndex(a => a.IPAddress);
|
||||||
|
ent.Property(a => a.Name).HasMaxLength(24);
|
||||||
|
ent.HasIndex(a => a.Name);
|
||||||
|
ent.Property(_alias => _alias.SearchableName).HasMaxLength(24);
|
||||||
|
ent.HasIndex(_alias => _alias.SearchableName);
|
||||||
|
ent.HasIndex(_alias => new {_alias.Name, _alias.IPAddress}).IsUnique();
|
||||||
|
});
|
||||||
|
|
||||||
|
modelBuilder.Entity<EFMeta>(ent =>
|
||||||
|
{
|
||||||
|
ent.HasIndex(_meta => _meta.Key);
|
||||||
|
ent.HasIndex(_meta => _meta.LinkedMetaId);
|
||||||
|
ent.HasOne(_meta => _meta.LinkedMeta)
|
||||||
|
.WithMany()
|
||||||
|
.OnDelete(DeleteBehavior.SetNull);
|
||||||
|
});
|
||||||
|
|
||||||
|
// force full name for database conversion
|
||||||
|
modelBuilder.Entity<EFClient>().ToTable("EFClients");
|
||||||
|
modelBuilder.Entity<EFAlias>().ToTable("EFAlias");
|
||||||
|
modelBuilder.Entity<EFAliasLink>().ToTable("EFAliasLinks");
|
||||||
|
modelBuilder.Entity<EFPenalty>().ToTable("EFPenalties");
|
||||||
|
|
||||||
|
Models.Configuration.StatsModelConfiguration.Configure(modelBuilder);
|
||||||
|
|
||||||
|
base.OnModelCreating(modelBuilder);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
82
Data/Data.csproj
Normal file
82
Data/Data.csproj
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<Project Sdk="Microsoft.NET.Sdk">
|
||||||
|
|
||||||
|
<PropertyGroup>
|
||||||
|
<TargetFramework>netcoreapp3.1</TargetFramework>
|
||||||
|
<Configurations>Debug;Release;Prerelease</Configurations>
|
||||||
|
<Platforms>AnyCPU</Platforms>
|
||||||
|
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
|
||||||
|
<PackageId>RaidMax.IW4MAdmin.Data</PackageId>
|
||||||
|
<Title>RaidMax.IW4MAdmin.Data</Title>
|
||||||
|
<Authors />
|
||||||
|
</PropertyGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Compile Remove="Migrations\MySql\20210210221342_AddAdditionalClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\MySql\20210210221342_AddAdditionalClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210224014503_AddAdditionalClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210224014503_AddAdditionalClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210224030227_AddAdditionalClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210224030227_AddAdditionalClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210224031245_AddAdditionalClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210224031245_AddAdditionalClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210227041237_AddPerformancePercentileToClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210227041237_AddPerformancePercentileToClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210227161333_AddPerformancePercentileToClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210227161333_AddPerformancePercentileToClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210307163752_AddRankingHistory.cs" />
|
||||||
|
<Compile Remove="Migrations\Postgresql\20210307163752_AddRankingHistory.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210209205243_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210209205243_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210209205948_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210209205948_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210209211745_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210209211745_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210209212725_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210209212725_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210020314_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210020314_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210140835_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210140835_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210154738_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210154738_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210163803_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210163803_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210193852_AddAdditionaClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210210193852_AddAdditionaClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210211033835_AddAdditionalClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210211033835_AddAdditionalClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210219013429_AddAdditionalClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210219013429_AddAdditionalClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210220171950_AddAdditionalClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210220171950_AddAdditionalClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210223163022_AddAdditionalClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210223163022_AddAdditionalClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210226215929_AddPerformancePercentileToClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210226215929_AddPerformancePercentileToClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210227160800_AddPerformancePercentileToClientStats.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210227160800_AddPerformancePercentileToClientStats.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210305033616_AddRankingHistory.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210305033616_AddRankingHistory.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210305033846_AddRankingHistory.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210305033846_AddRankingHistory.Designer.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210306223712_AddRankingHistory.cs" />
|
||||||
|
<Compile Remove="Migrations\Sqlite\20210306223712_AddRankingHistory.Designer.cs" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.10" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="3.1.10">
|
||||||
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
<IncludeAssets>runtime; build; native; contentfiles</IncludeAssets>
|
||||||
|
</PackageReference>
|
||||||
|
<PackageReference Include="Npgsql" Version="4.1.7" />
|
||||||
|
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="3.1.4" />
|
||||||
|
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="3.2.4" />
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="3.1.10" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup Condition="'$(Configuration)'=='Debug'">
|
||||||
|
<PackageReference Include="Microsoft.EntityFrameworkCore.InMemory" Version="3.1.10" />
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
|
</Project>
|
10
Data/Extensions/Extensions.cs
Normal file
10
Data/Extensions/Extensions.cs
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
|
||||||
|
namespace Data.Extensions
|
||||||
|
{
|
||||||
|
public static class MigrationExtensions
|
||||||
|
{
|
||||||
|
public static bool IsMigration => Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT") == "Migration";
|
||||||
|
}
|
||||||
|
}
|
84
Data/Helpers/DataValueCache.cs
Normal file
84
Data/Helpers/DataValueCache.cs
Normal file
@ -0,0 +1,84 @@
|
|||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using Data.Abstractions;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
|
||||||
|
namespace Data.Helpers
|
||||||
|
{
|
||||||
|
public class DataValueCache<T, V> : IDataValueCache<T, V> where T : class
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
private readonly IDatabaseContextFactory _contextFactory;
|
||||||
|
private readonly Dictionary<string, CacheState> _cacheStates = new Dictionary<string, CacheState>();
|
||||||
|
private const int DefaultExpireMinutes = 15;
|
||||||
|
|
||||||
|
private class CacheState
|
||||||
|
{
|
||||||
|
public string Key { get; set; }
|
||||||
|
public DateTime LastRetrieval { get; set; }
|
||||||
|
public TimeSpan ExpirationTime { get; set; }
|
||||||
|
public Func<DbSet<T>, Task<V>> Getter { get; set; }
|
||||||
|
public V Value { get; set; }
|
||||||
|
public bool IsExpired => (DateTime.Now - LastRetrieval.Add(ExpirationTime)).TotalSeconds > 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
public DataValueCache(ILogger<DataValueCache<T, V>> logger, IDatabaseContextFactory contextFactory)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_contextFactory = contextFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void SetCacheItem(Func<DbSet<T>, Task<V>> getter, string key, TimeSpan? expirationTime = null)
|
||||||
|
{
|
||||||
|
if (_cacheStates.ContainsKey(key))
|
||||||
|
{
|
||||||
|
_logger.LogDebug("Cache key {key} is already added", key);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
var state = new CacheState()
|
||||||
|
{
|
||||||
|
Key = key,
|
||||||
|
Getter = getter,
|
||||||
|
ExpirationTime = expirationTime ?? TimeSpan.FromMinutes(DefaultExpireMinutes)
|
||||||
|
};
|
||||||
|
|
||||||
|
_cacheStates.Add(key, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<V> GetCacheItem(string keyName)
|
||||||
|
{
|
||||||
|
if (!_cacheStates.ContainsKey(keyName))
|
||||||
|
{
|
||||||
|
throw new ArgumentException("No cache found for key {key}", keyName);
|
||||||
|
}
|
||||||
|
|
||||||
|
var state = _cacheStates[keyName];
|
||||||
|
|
||||||
|
if (state.IsExpired)
|
||||||
|
{
|
||||||
|
await RunCacheUpdate(state);
|
||||||
|
}
|
||||||
|
|
||||||
|
return state.Value;
|
||||||
|
}
|
||||||
|
|
||||||
|
private async Task RunCacheUpdate(CacheState state)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await using var context = _contextFactory.CreateContext(false);
|
||||||
|
var set = context.Set<T>();
|
||||||
|
var value = await state.Getter(set);
|
||||||
|
state.Value = value;
|
||||||
|
state.LastRetrieval = DateTime.Now;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Could not get cached value for {key}", state.Key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
114
Data/Helpers/LookupCache.cs
Normal file
114
Data/Helpers/LookupCache.cs
Normal file
@ -0,0 +1,114 @@
|
|||||||
|
using Data.Abstractions;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Microsoft.Extensions.Logging;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
using ILogger = Microsoft.Extensions.Logging.ILogger;
|
||||||
|
|
||||||
|
namespace Data.Helpers
|
||||||
|
{
|
||||||
|
public class LookupCache<T> : ILookupCache<T> where T : class, IUniqueId
|
||||||
|
{
|
||||||
|
private readonly ILogger _logger;
|
||||||
|
private readonly IDatabaseContextFactory _contextFactory;
|
||||||
|
private Dictionary<long, T> _cachedItems;
|
||||||
|
private readonly SemaphoreSlim _onOperation = new SemaphoreSlim(1, 1);
|
||||||
|
|
||||||
|
public LookupCache(ILogger<LookupCache<T>> logger, IDatabaseContextFactory contextFactory)
|
||||||
|
{
|
||||||
|
_logger = logger;
|
||||||
|
_contextFactory = contextFactory;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<T> AddAsync(T item)
|
||||||
|
{
|
||||||
|
await _onOperation.WaitAsync();
|
||||||
|
T existingItem = null;
|
||||||
|
|
||||||
|
if (_cachedItems.ContainsKey(item.Id))
|
||||||
|
{
|
||||||
|
existingItem = _cachedItems[item.Id];
|
||||||
|
}
|
||||||
|
|
||||||
|
if (existingItem != null)
|
||||||
|
{
|
||||||
|
_logger.LogDebug("Cached item already added for {type} {id} {value}", typeof(T).Name, item.Id,
|
||||||
|
item.Value);
|
||||||
|
_onOperation.Release();
|
||||||
|
return existingItem;
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
_logger.LogDebug("Adding new {type} with {id} {value}", typeof(T).Name, item.Id, item.Value);
|
||||||
|
await using var context = _contextFactory.CreateContext();
|
||||||
|
context.Set<T>().Add(item);
|
||||||
|
await context.SaveChangesAsync();
|
||||||
|
_cachedItems.Add(item.Id, item);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Could not add item to cache for {type}", typeof(T).Name);
|
||||||
|
throw new Exception("Could not add item to cache");
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (_onOperation.CurrentCount == 0)
|
||||||
|
{
|
||||||
|
_onOperation.Release();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<T> FirstAsync(Func<T, bool> query)
|
||||||
|
{
|
||||||
|
await _onOperation.WaitAsync();
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var cachedResult = _cachedItems.Values.Where(query);
|
||||||
|
|
||||||
|
if (cachedResult.Any())
|
||||||
|
{
|
||||||
|
return cachedResult.FirstOrDefault();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
catch
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
if (_onOperation.CurrentCount == 0)
|
||||||
|
{
|
||||||
|
_onOperation.Release(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public IEnumerable<T> GetAll()
|
||||||
|
{
|
||||||
|
return _cachedItems.Values;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task InitializeAsync()
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
await using var context = _contextFactory.CreateContext();
|
||||||
|
_cachedItems = await context.Set<T>().ToDictionaryAsync(item => item.Id);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
_logger.LogError(ex, "Could not initialize caching for {cacheType}", typeof(T).Name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -1,13 +1,15 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using Data.Context;
|
||||||
|
using Data.Extensions;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Database.MigrationContext
|
namespace Data.MigrationContext
|
||||||
{
|
{
|
||||||
public class MySqlDatabaseContext : DatabaseContext
|
public class MySqlDatabaseContext : DatabaseContext
|
||||||
{
|
{
|
||||||
public MySqlDatabaseContext()
|
public MySqlDatabaseContext()
|
||||||
{
|
{
|
||||||
if (!Utilities.IsMigration)
|
if (!MigrationExtensions.IsMigration)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException();
|
throw new InvalidOperationException();
|
||||||
}
|
}
|
||||||
@ -20,7 +22,7 @@ namespace SharedLibraryCore.Database.MigrationContext
|
|||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
if (Utilities.IsMigration)
|
if (MigrationExtensions.IsMigration)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseMySql("Server=127.0.0.1;Database=IW4MAdmin_Migration;Uid=root;Pwd=password;")
|
optionsBuilder.UseMySql("Server=127.0.0.1;Database=IW4MAdmin_Migration;Uid=root;Pwd=password;")
|
||||||
.EnableDetailedErrors(true)
|
.EnableDetailedErrors(true)
|
@ -1,33 +1,34 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using Data.Context;
|
||||||
|
using Data.Extensions;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Database.MigrationContext
|
namespace Data.MigrationContext
|
||||||
{
|
{
|
||||||
public class PostgresqlDatabaseContext : DatabaseContext
|
public class PostgresqlDatabaseContext : DatabaseContext
|
||||||
{
|
{
|
||||||
public PostgresqlDatabaseContext()
|
public PostgresqlDatabaseContext()
|
||||||
{
|
{
|
||||||
if (!Utilities.IsMigration)
|
if (!MigrationExtensions.IsMigration)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException();
|
throw new InvalidOperationException();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public PostgresqlDatabaseContext(DbContextOptions options) : base(options)
|
public PostgresqlDatabaseContext(DbContextOptions options) : base(options)
|
||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
if (Utilities.IsMigration)
|
if (MigrationExtensions.IsMigration)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseNpgsql(
|
optionsBuilder.UseNpgsql(
|
||||||
"Host=127.0.0.1;Database=IW4MAdmin_Migration;Username=postgres;Password=password;")
|
"Host=127.0.0.1;Database=IW4MAdmin_Migration;Username=postgres;Password=password;",
|
||||||
|
options => options.SetPostgresVersion(new Version("9.4")))
|
||||||
.EnableDetailedErrors(true)
|
.EnableDetailedErrors(true)
|
||||||
.EnableSensitiveDataLogging(true);
|
.EnableSensitiveDataLogging(true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -1,13 +1,15 @@
|
|||||||
using System;
|
using System;
|
||||||
|
using Data.Context;
|
||||||
|
using Data.Extensions;
|
||||||
using Microsoft.EntityFrameworkCore;
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Database.MigrationContext
|
namespace Data.MigrationContext
|
||||||
{
|
{
|
||||||
public class SqliteDatabaseContext : DatabaseContext
|
public class SqliteDatabaseContext : DatabaseContext
|
||||||
{
|
{
|
||||||
public SqliteDatabaseContext()
|
public SqliteDatabaseContext()
|
||||||
{
|
{
|
||||||
if (!Utilities.IsMigration)
|
if (!MigrationExtensions.IsMigration)
|
||||||
{
|
{
|
||||||
throw new InvalidOperationException();
|
throw new InvalidOperationException();
|
||||||
}
|
}
|
||||||
@ -20,7 +22,7 @@ namespace SharedLibraryCore.Database.MigrationContext
|
|||||||
|
|
||||||
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
|
||||||
{
|
{
|
||||||
if (Utilities.IsMigration)
|
if (MigrationExtensions.IsMigration)
|
||||||
{
|
{
|
||||||
optionsBuilder.UseSqlite("Data Source=IW4MAdmin_Migration.db")
|
optionsBuilder.UseSqlite("Data Source=IW4MAdmin_Migration.db")
|
||||||
.EnableDetailedErrors(true)
|
.EnableDetailedErrors(true)
|
@ -5,11 +5,11 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database;
|
using Data;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180409183408_InitialCreate")]
|
[Migration("20180409183408_InitialCreate")]
|
@ -4,7 +4,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class InitialCreate : Migration
|
public partial class InitialCreate : Migration
|
||||||
{
|
{
|
@ -5,11 +5,11 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database;
|
using Data;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180502195450_Update")]
|
[Migration("20180502195450_Update")]
|
@ -2,7 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class Update : Migration
|
public partial class Update : Migration
|
||||||
{
|
{
|
@ -5,11 +5,11 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database;
|
using Data;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180516023249_AddEloField")]
|
[Migration("20180516023249_AddEloField")]
|
@ -2,7 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddEloField : Migration
|
public partial class AddEloField : Migration
|
||||||
{
|
{
|
@ -5,11 +5,11 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database;
|
using Data;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180517223349_AddRollingKDR")]
|
[Migration("20180517223349_AddRollingKDR")]
|
@ -2,7 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddRollingKDR : Migration
|
public partial class AddRollingKDR : Migration
|
||||||
{
|
{
|
@ -5,10 +5,10 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180531212903_AddAutomatedOffenseAndRatingHistory")]
|
[Migration("20180531212903_AddAutomatedOffenseAndRatingHistory")]
|
@ -4,7 +4,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddAutomatedOffenseAndRatingHistory : Migration
|
public partial class AddAutomatedOffenseAndRatingHistory : Migration
|
||||||
{
|
{
|
@ -5,10 +5,10 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180601172317_AddActivityAmount")]
|
[Migration("20180601172317_AddActivityAmount")]
|
@ -2,7 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddActivityAmount : Migration
|
public partial class AddActivityAmount : Migration
|
||||||
{
|
{
|
@ -5,10 +5,10 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180602041758_AddClientMeta")]
|
[Migration("20180602041758_AddClientMeta")]
|
@ -4,7 +4,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddClientMeta : Migration
|
public partial class AddClientMeta : Migration
|
||||||
{
|
{
|
@ -5,10 +5,10 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180605191706_AddEFACSnapshots")]
|
[Migration("20180605191706_AddEFACSnapshots")]
|
@ -4,7 +4,7 @@ using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddEFACSnapshots : Migration
|
public partial class AddEFACSnapshots : Migration
|
||||||
{
|
{
|
@ -5,10 +5,10 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage;
|
using Microsoft.EntityFrameworkCore.Storage;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
using Microsoft.EntityFrameworkCore.Storage.Internal;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
using System;
|
using System;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180614014303_IndexForEFAlias")]
|
[Migration("20180614014303_IndexForEFAlias")]
|
@ -2,7 +2,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class IndexForEFAlias : Migration
|
public partial class IndexForEFAlias : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180902035612_AddFractionAndIsKill")]
|
[Migration("20180902035612_AddFractionAndIsKill")]
|
@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddFractionAndIsKill : Migration
|
public partial class AddFractionAndIsKill : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180904154622_AddVisibilityPercentage")]
|
[Migration("20180904154622_AddVisibilityPercentage")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddVisibilityPercentage : Migration
|
public partial class AddVisibilityPercentage : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180907020706_AddVision")]
|
[Migration("20180907020706_AddVision")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddVision : Migration
|
public partial class AddVision : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180908004053_AddWhenToRating")]
|
[Migration("20180908004053_AddWhenToRating")]
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddWhenToRating : Migration
|
public partial class AddWhenToRating : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180910221749_AddRatingIndexes")]
|
[Migration("20180910221749_AddRatingIndexes")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddRatingIndexes : Migration
|
public partial class AddRatingIndexes : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180911184224_AddEFAliasNameIndex")]
|
[Migration("20180911184224_AddEFAliasNameIndex")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddEFAliasNameIndex : Migration
|
public partial class AddEFAliasNameIndex : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180911190823_AddEFAliasNameMaxLength24")]
|
[Migration("20180911190823_AddEFAliasNameMaxLength24")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddEFAliasNameMaxLength24 : Migration
|
public partial class AddEFAliasNameMaxLength24 : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180912015012_AddPreviousCurrentValueToEFChangeHistory")]
|
[Migration("20180912015012_AddPreviousCurrentValueToEFChangeHistory")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddPreviousCurrentValueToEFChangeHistory : Migration
|
public partial class AddPreviousCurrentValueToEFChangeHistory : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180915163111_AddIndexToMessageTimeSent")]
|
[Migration("20180915163111_AddIndexToMessageTimeSent")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddIndexToMessageTimeSent : Migration
|
public partial class AddIndexToMessageTimeSent : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180922231310_RemoveACSnapShot")]
|
[Migration("20180922231310_RemoveACSnapShot")]
|
@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class RemoveACSnapShot : Migration
|
public partial class RemoveACSnapShot : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20180922231600_ReaddACSnapshot")]
|
[Migration("20180922231600_ReaddACSnapshot")]
|
@ -3,7 +3,7 @@ using Microsoft.EntityFrameworkCore.Metadata;
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class ReaddACSnapshot : Migration
|
public partial class ReaddACSnapshot : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20181014171848_MakePenaltyExpirationNullable")]
|
[Migration("20181014171848_MakePenaltyExpirationNullable")]
|
@ -1,7 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class MakePenaltyExpirationNullable : Migration
|
public partial class MakePenaltyExpirationNullable : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20181125193243_MakeClientIPNullable")]
|
[Migration("20181125193243_MakeClientIPNullable")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class MakeClientIPNullable : Migration
|
public partial class MakeClientIPNullable : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20181127144417_AddEndpointToEFServerUpdateServerIdType")]
|
[Migration("20181127144417_AddEndpointToEFServerUpdateServerIdType")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddEndpointToEFServerUpdateServerIdType : Migration
|
public partial class AddEndpointToEFServerUpdateServerIdType : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20181216214513_AddEvadePenaltyFlag")]
|
[Migration("20181216214513_AddEvadePenaltyFlag")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddEvadePenaltyFlag : Migration
|
public partial class AddEvadePenaltyFlag : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190222234742_AddIndexToEFMeta-KeyAndClientId")]
|
[Migration("20190222234742_AddIndexToEFMeta-KeyAndClientId")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddIndexToEFMetaKeyAndClientId : Migration
|
public partial class AddIndexToEFMetaKeyAndClientId : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190423142128_AddGameNameToEFServer")]
|
[Migration("20190423142128_AddGameNameToEFServer")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddGameNameToEFServer : Migration
|
public partial class AddGameNameToEFServer : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190615145212_AddAvgRecoilOffset")]
|
[Migration("20190615145212_AddAvgRecoilOffset")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddAvgRecoilOffset : Migration
|
public partial class AddAvgRecoilOffset : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190615214055_AddRecoilOffsetToSnapshot")]
|
[Migration("20190615214055_AddRecoilOffsetToSnapshot")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddRecoilOffsetToSnapshot : Migration
|
public partial class AddRecoilOffsetToSnapshot : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190725000309_AlterEFRatingIndex")]
|
[Migration("20190725000309_AlterEFRatingIndex")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AlterEFRatingIndex : Migration
|
public partial class AlterEFRatingIndex : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190802174908_AddSearchNameToEFAlias")]
|
[Migration("20190802174908_AddSearchNameToEFAlias")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddSearchNameToEFAlias : Migration
|
public partial class AddSearchNameToEFAlias : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190831210503_AvgSnapValueToClientStatistics")]
|
[Migration("20190831210503_AvgSnapValueToClientStatistics")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AvgSnapValueToClientStatistics : Migration
|
public partial class AvgSnapValueToClientStatistics : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190901180209_AddSnapHitCountToClientStatistics")]
|
[Migration("20190901180209_AddSnapHitCountToClientStatistics")]
|
@ -1,6 +1,6 @@
|
|||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
public partial class AddSnapHitCountToClientStatistics : Migration
|
public partial class AddSnapHitCountToClientStatistics : Migration
|
||||||
{
|
{
|
@ -4,9 +4,9 @@ using Microsoft.EntityFrameworkCore;
|
|||||||
using Microsoft.EntityFrameworkCore.Infrastructure;
|
using Microsoft.EntityFrameworkCore.Infrastructure;
|
||||||
using Microsoft.EntityFrameworkCore.Migrations;
|
using Microsoft.EntityFrameworkCore.Migrations;
|
||||||
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
using Microsoft.EntityFrameworkCore.Storage.ValueConversion;
|
||||||
using SharedLibraryCore.Database.MigrationContext;
|
using Data.MigrationContext;
|
||||||
|
|
||||||
namespace SharedLibraryCore.Migrations.MySql
|
namespace Data.Migrations.MySql
|
||||||
{
|
{
|
||||||
[DbContext(typeof(MySqlDatabaseContext))]
|
[DbContext(typeof(MySqlDatabaseContext))]
|
||||||
[Migration("20190901223620_UseJunctionTableForSnapshotVector3")]
|
[Migration("20190901223620_UseJunctionTableForSnapshotVector3")]
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user