@@ -14,6 +14,7 @@ import { TailscaleConfig } from "src/configs/types/TailscaleConfig";
1414import { DiscordConfig } from "src/configs/types/DiscordConfig" ;
1515import { SteamConfig } from "src/configs/types/SteamConfig" ;
1616import { PostgresService } from "src/postgres/postgres.service" ;
17+ import { SystemSettingName } from "./enums/SystemSettingName" ;
1718
1819@Injectable ( )
1920export class SystemService {
@@ -35,6 +36,30 @@ export class SystemService {
3536 this . appsClient = kc . makeApiClient ( AppsV1Api ) ;
3637 }
3738
39+ public async getSetting < T extends string | number | boolean > (
40+ name : SystemSettingName ,
41+ defaultValue : T ,
42+ ) : Promise < T > {
43+ const [ data ] = await this . postgres . query <
44+ Array < {
45+ value : string ;
46+ } >
47+ > ( `SELECT value FROM public.settings WHERE name = $1 LIMIT 1` , [ name ] ) ;
48+
49+ if ( data ?. value !== undefined && data ?. value !== null ) {
50+ // Try to convert the string value to the type of defaultValue
51+ if ( typeof defaultValue === "boolean" ) {
52+ return ( data . value === "true" ) as T ;
53+ } else if ( typeof defaultValue === "number" ) {
54+ const num = Number ( data . value ) ;
55+ return ( isNaN ( num ) ? defaultValue : num ) as T ;
56+ } else {
57+ return data . value as T ;
58+ }
59+ }
60+ return defaultValue ;
61+ }
62+
3863 public async detectFeatures ( ) {
3964 while ( this . featuresDetected === false ) {
4065 try {
@@ -53,7 +78,7 @@ export class SystemService {
5378 insert_settings_one : {
5479 __args : {
5580 object : {
56- name : "supports_game_server_nodes" ,
81+ name : SystemSettingName . SupportsGameServerNodes ,
5782 value : supportsGameServerNodes . toString ( ) ,
5883 } ,
5984 on_conflict : {
@@ -80,7 +105,7 @@ export class SystemService {
80105 insert_settings_one : {
81106 __args : {
82107 object : {
83- name : "public.supports_discord_bot" ,
108+ name : SystemSettingName . SupportsDiscordBot ,
84109 value : supportsDiscordBot . toString ( ) ,
85110 } ,
86111 on_conflict : {
@@ -103,7 +128,7 @@ export class SystemService {
103128 insert_settings_one : {
104129 __args : {
105130 object : {
106- name : "supports_game_server_version_pinning" ,
131+ name : SystemSettingName . SupportsGameServerVersionPinning ,
107132 value : supportsGameServerNodeVersionPinning . toString ( ) ,
108133 } ,
109134 on_conflict : {
@@ -189,7 +214,7 @@ export class SystemService {
189214 insert_settings_one : {
190215 __args : {
191216 object : {
192- name : "updates" ,
217+ name : SystemSettingName . Updates ,
193218 value : JSON . stringify ( hasUpdates ) ,
194219 } ,
195220 on_conflict : {
@@ -409,7 +434,7 @@ export class SystemService {
409434
410435 for ( const setting of settings ) {
411436 switch ( setting . name ) {
412- case "public.default_models" :
437+ case SystemSettingName . PublicDefaultModels :
413438 await this . postgres . query (
414439 `ALTER TABLE "public"."match_options" ALTER COLUMN "default_models" SET DEFAULT ${ setting . value === "true" ? true : false } ` ,
415440 ) ;
0 commit comments