82 lines
2.1 KiB
TypeScript
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
|
|
}
|