ai-wpa/lib/system-settings.ts

82 lines
2.1 KiB
TypeScript

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
}