From 35568adb0b85dda017781b22a231da21c9fff06a Mon Sep 17 00:00:00 2001 From: Archangel Date: Sun, 17 Aug 2025 17:17:39 +0200 Subject: [PATCH] Handle DB nullability --- .../Database/DatabaseNullException.cs | 10 ++++++ .../DatabaseTablesAlreadySetException.cs | 10 ++++++ .../Models/Spt/Server/DatabaseTables.cs | 20 ++++++------ .../Servers/DatabaseServer.cs | 31 ++++++++++++++++--- 4 files changed, 57 insertions(+), 14 deletions(-) create mode 100644 Libraries/SPTarkov.Server.Core/Exceptions/Database/DatabaseNullException.cs create mode 100644 Libraries/SPTarkov.Server.Core/Exceptions/Database/DatabaseTablesAlreadySetException.cs diff --git a/Libraries/SPTarkov.Server.Core/Exceptions/Database/DatabaseNullException.cs b/Libraries/SPTarkov.Server.Core/Exceptions/Database/DatabaseNullException.cs new file mode 100644 index 00000000..c015ddb8 --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Exceptions/Database/DatabaseNullException.cs @@ -0,0 +1,10 @@ +namespace SPTarkov.Server.Core.Exceptions.Database; + +public class DatabaseNullException : Exception +{ + public DatabaseNullException(string message) + : base(message) { } + + public DatabaseNullException(string message, Exception innerException) + : base(message, innerException) { } +} diff --git a/Libraries/SPTarkov.Server.Core/Exceptions/Database/DatabaseTablesAlreadySetException.cs b/Libraries/SPTarkov.Server.Core/Exceptions/Database/DatabaseTablesAlreadySetException.cs new file mode 100644 index 00000000..7dc76bdb --- /dev/null +++ b/Libraries/SPTarkov.Server.Core/Exceptions/Database/DatabaseTablesAlreadySetException.cs @@ -0,0 +1,10 @@ +namespace SPTarkov.Server.Core.Exceptions.Database; + +internal class DatabaseTablesAlreadySetException : Exception +{ + public DatabaseTablesAlreadySetException(string message) + : base(message) { } + + public DatabaseTablesAlreadySetException(string message, Exception innerException) + : base(message, innerException) { } +} diff --git a/Libraries/SPTarkov.Server.Core/Models/Spt/Server/DatabaseTables.cs b/Libraries/SPTarkov.Server.Core/Models/Spt/Server/DatabaseTables.cs index 53472658..6cf10914 100644 --- a/Libraries/SPTarkov.Server.Core/Models/Spt/Server/DatabaseTables.cs +++ b/Libraries/SPTarkov.Server.Core/Models/Spt/Server/DatabaseTables.cs @@ -10,23 +10,23 @@ public record DatabaseTables [JsonExtensionData] public Dictionary ExtensionData { get; init; } = []; - public Bots.Bots Bots { get; set; } + public required Bots.Bots Bots { get; set; } - public Hideout.Hideout Hideout { get; set; } + public required Hideout.Hideout Hideout { get; set; } - public LocaleBase Locales { get; set; } + public required LocaleBase Locales { get; set; } - public Locations Locations { get; set; } + public required Locations Locations { get; set; } - public Match Match { get; set; } + public required Match Match { get; set; } - public Templates.Templates Templates { get; set; } + public required Templates.Templates Templates { get; set; } - public Dictionary Traders { get; set; } + public required Dictionary Traders { get; set; } - public Globals Globals { get; set; } + public required Globals Globals { get; set; } - public ServerBase Server { get; set; } + public required ServerBase Server { get; set; } - public SettingsBase Settings { get; set; } + public required SettingsBase Settings { get; set; } } diff --git a/Libraries/SPTarkov.Server.Core/Servers/DatabaseServer.cs b/Libraries/SPTarkov.Server.Core/Servers/DatabaseServer.cs index 0f2260b8..573d6bce 100644 --- a/Libraries/SPTarkov.Server.Core/Servers/DatabaseServer.cs +++ b/Libraries/SPTarkov.Server.Core/Servers/DatabaseServer.cs @@ -1,4 +1,5 @@ using SPTarkov.DI.Annotations; +using SPTarkov.Server.Core.Exceptions.Database; using SPTarkov.Server.Core.Models.Spt.Server; namespace SPTarkov.Server.Core.Servers; @@ -6,15 +7,37 @@ namespace SPTarkov.Server.Core.Servers; [Injectable(InjectionType.Singleton)] public class DatabaseServer { - protected DatabaseTables tableData = new(); + protected DatabaseTables? TableData { get; private set; } + /// + /// Gets the database tables. + /// + /// The database tables if they have been initialized. + /// Thrown when the database tables have not been initialized. public DatabaseTables GetTables() { - return tableData; + if (TableData is null) + { + throw new DatabaseNullException("Database tables have not been initialized!"); + } + + return TableData; } - public void SetTables(DatabaseTables tables) + /// + /// Sets the database tables for this instance. Can only be called once. + /// + /// The database tables to set. + /// Thrown if the database tables are already set. + internal void SetTables(DatabaseTables tables) { - tableData = tables; + if (TableData is null) + { + TableData = tables; + } + else + { + throw new DatabaseTablesAlreadySetException("The database is already initialized!"); + } } }