initial commit
This commit is contained in:
81
lib/system-settings.ts
Normal file
81
lib/system-settings.ts
Normal file
@@ -0,0 +1,81 @@
|
||||
import { SystemSettings, ISystemSettings } from '@/models/system-settings'
|
||||
import { connectDB } from '@/lib/mongodb'
|
||||
|
||||
// Cache for system settings to avoid database calls on every request
|
||||
let settingsCache: any = null
|
||||
let cacheTimestamp = 0
|
||||
const CACHE_DURATION = 60000 // 1 minute cache
|
||||
|
||||
async function getSettingsFromDB() {
|
||||
await connectDB()
|
||||
let settings = await (SystemSettings as any).findOne({})
|
||||
|
||||
if (!settings) {
|
||||
// Create default settings if none exist
|
||||
settings = new SystemSettings({
|
||||
maintenanceMode: false,
|
||||
registrationEnabled: true,
|
||||
emailVerificationRequired: true,
|
||||
maxUserBalance: 1000000,
|
||||
defaultUserRole: 'user',
|
||||
systemMessage: '',
|
||||
paymentGatewayEnabled: true,
|
||||
developerHireEnabled: true,
|
||||
vpsDeploymentEnabled: true,
|
||||
kubernetesDeploymentEnabled: true,
|
||||
vpnServiceEnabled: true,
|
||||
lastUpdated: new Date(),
|
||||
updatedBy: 'System',
|
||||
})
|
||||
await settings.save()
|
||||
}
|
||||
|
||||
return settings
|
||||
}
|
||||
|
||||
export async function getSystemSettings() {
|
||||
const now = Date.now()
|
||||
|
||||
// Return cached settings if still valid
|
||||
if (settingsCache && now - cacheTimestamp < CACHE_DURATION) {
|
||||
return settingsCache
|
||||
}
|
||||
|
||||
// Fetch fresh settings from database
|
||||
const settings = await getSettingsFromDB()
|
||||
settingsCache = settings.toObject()
|
||||
cacheTimestamp = now
|
||||
|
||||
return settingsCache
|
||||
}
|
||||
|
||||
export async function updateSystemSettings(newSettings: any) {
|
||||
await connectDB()
|
||||
|
||||
const settings = await (SystemSettings as any).findOneAndUpdate(
|
||||
{},
|
||||
{ ...newSettings, lastUpdated: new Date() },
|
||||
{ new: true, upsert: true }
|
||||
)
|
||||
|
||||
// Clear cache to force refresh
|
||||
settingsCache = null
|
||||
cacheTimestamp = 0
|
||||
|
||||
return settings
|
||||
}
|
||||
|
||||
export async function checkServiceAvailability(
|
||||
service: 'vps' | 'developer' | 'kubernetes' | 'vpn'
|
||||
): Promise<boolean> {
|
||||
const serviceMap = {
|
||||
vps: 'vpsDeploymentEnabled',
|
||||
developer: 'developerHireEnabled',
|
||||
kubernetes: 'kubernetesDeploymentEnabled',
|
||||
vpn: 'vpnServiceEnabled',
|
||||
}
|
||||
|
||||
const settings = await getSystemSettings()
|
||||
const settingKey = serviceMap[service]
|
||||
return settings[settingKey] as boolean
|
||||
}
|
||||
Reference in New Issue
Block a user