import { inject, injectable } from "tsyringe"; import { IGlobals } from "@spt/models/eft/common/IGlobals"; import { ILocation } from "@spt/models/eft/common/ILocation"; import { IAchievement } from "@spt/models/eft/common/tables/IAchievement"; import { ICustomizationItem } from "@spt/models/eft/common/tables/ICustomizationItem"; import { IHandbookBase } from "@spt/models/eft/common/tables/IHandbookBase"; import { ILocationServices } from "@spt/models/eft/common/tables/ILocationServices"; import { IMatch } from "@spt/models/eft/common/tables/IMatch"; import { IProfileTemplates } from "@spt/models/eft/common/tables/IProfileTemplate"; import { IQuest } from "@spt/models/eft/common/tables/IQuest"; import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem"; import { ITrader } from "@spt/models/eft/common/tables/ITrader"; import { IBots } from "@spt/models/spt/bots/IBots"; import { ILocationConfig } from "@spt/models/spt/config/ILocationConfig"; import { IHideout } from "@spt/models/spt/hideout/IHideout"; import { IDatabaseTables } from "@spt/models/spt/server/IDatabaseTables"; import { ILocaleBase } from "@spt/models/spt/server/ILocaleBase"; import { ILocations } from "@spt/models/spt/server/ILocations"; import { IServerBase } from "@spt/models/spt/server/IServerBase"; import { ISettingsBase } from "@spt/models/spt/server/ISettingsBase"; import { ITemplates } from "@spt/models/spt/templates/ITemplates"; import { ILogger } from "@spt/models/spt/utils/ILogger"; import { DatabaseServer } from "@spt/servers/DatabaseServer"; import { LocalisationService } from "@spt/services/LocalisationService"; @injectable() export class DatabaseService { protected locationConfig: ILocationConfig; constructor( @inject("PrimaryLogger") protected logger: ILogger, @inject("DatabaseServer") protected databaseServer: DatabaseServer, @inject("LocalisationService") protected localisationService: LocalisationService, ) { } /** * @returns assets/database/ */ public getTables(): IDatabaseTables { return this.databaseServer.getTables(); } /** * @returns assets/database/bots/ */ public getBots(): IBots { if (!this.databaseServer.getTables().bots) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/bots")); } return this.databaseServer.getTables().bots!; } /** * @returns assets/database/globals.json */ public getGlobals(): IGlobals { if (!this.databaseServer.getTables().globals) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/globals.json")); } return this.databaseServer.getTables().globals!; } /** * @returns assets/database/hideout/ */ public getHideout(): IHideout { if (!this.databaseServer.getTables().hideout) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/hideout")); } return this.databaseServer.getTables().hideout!; } /** * @returns assets/database/locales/ */ public getLocales(): ILocaleBase { if (!this.databaseServer.getTables().locales) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/locales")); } return this.databaseServer.getTables().locales!; } /** * @returns assets/database/locations */ public getLocations(): ILocations { if (!this.databaseServer.getTables().locales) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/locales")); } return this.databaseServer.getTables().locations!; } /** * Get specific location by its Id * @param locationId Desired location id * @returns assets/database/locations/ */ public getLocation(locationId: string): ILocation { const locations = this.getLocations(); const desiredLocation = locations[locationId.toLowerCase()]; if (!desiredLocation) { throw new Error(this.localisationService.getText("database-no_location_found_with_id", locationId)); } return desiredLocation!; } /** * @returns assets/database/match/ */ public getMatch(): IMatch { if (!this.databaseServer.getTables().locales) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/locales")); } return this.databaseServer.getTables().match!; } /** * @returns assets/database/server.json */ public getServer(): IServerBase { if (!this.databaseServer.getTables().locales) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/server")); } return this.databaseServer.getTables().server!; } /** * @returns assets/database/settings.json */ public getSettings(): ISettingsBase { if (!this.databaseServer.getTables().locales) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/settings")); } return this.databaseServer.getTables().settings!; } /** * @returns assets/database/templates/ */ public getTemplates(): ITemplates { if (!this.databaseServer.getTables().templates) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/templates")); } return this.databaseServer.getTables().templates!; } /** * @returns assets/database/templates/achievements.json */ public getAchievements(): IAchievement[] { if (!this.databaseServer.getTables().templates!.achievements) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/templates/achievements.json")); } return this.databaseServer.getTables().templates!.achievements!; } /** * @returns assets/database/templates/customisation.json */ public getCustomization(): Record { if (!this.databaseServer.getTables().templates!.customization) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/templates/customization.json")); } return this.databaseServer.getTables().templates!.customization!; } /** * @returns assets/database/templates/items.json */ public getHandbook(): IHandbookBase { if (!this.databaseServer.getTables().templates!.handbook) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/templates/handbook.json")); } return this.databaseServer.getTables().templates!.handbook!; } /** * @returns assets/database/templates/items.json */ public getItems(): Record { if (!this.databaseServer.getTables().templates!.items) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/templates/items.json")); } return this.databaseServer.getTables().templates!.items!; } /** * @returns assets/database/templates/prices.json */ public getPrices(): Record { if (!this.databaseServer.getTables().templates!.prices) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/templates/prices.json")); } return this.databaseServer.getTables().templates!.prices!; } /** * @returns assets/database/templates/profiles.json */ public getProfiles(): IProfileTemplates { if (!this.databaseServer.getTables().templates!.profiles) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/templates/profiles.json")); } return this.databaseServer.getTables().templates!.profiles!; } /** * @returns assets/database/templates/items.json */ public getQuests(): Record { if (!this.databaseServer.getTables().templates!.quests) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/templates/quests.json")); } return this.databaseServer.getTables().templates!.quests!; } /** * @returns assets/database/traders/ */ public getTraders(): Record { if (!this.databaseServer.getTables().traders) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/traders")); } return this.databaseServer.getTables().traders!; } /** * Get specific trader by their Id * @param traderId Desired trader id * @returns assets/database/traders/ */ public getTrader(traderId: string): ITrader { const traders = this.getTraders(); const desiredTrader = traders[traderId]; if (!desiredTrader) { throw new Error(this.localisationService.getText("database-no_trader_found_with_id", traderId)); } return desiredTrader!; } /** * @returns assets/database/locationServices/ */ public getLocationServices(): ILocationServices { if (!this.databaseServer.getTables().templates!.locationServices) { throw new Error(this.localisationService.getText("database-data_at_path_missing", "assets/database/locationServices")); } return this.databaseServer.getTables().templates!.locationServices!; } }