59 lines
1.9 KiB
TypeScript
59 lines
1.9 KiB
TypeScript
'use server'
|
|
|
|
import { createClient } from '@/lib/supabase/server'
|
|
import { verifyAdmin } from '@/lib/actions/auth'
|
|
import { Client } from 'pg'
|
|
|
|
export async function getDatabaseIntegrity() {
|
|
try {
|
|
await verifyAdmin()
|
|
const supabase = await createClient()
|
|
const { data, error } = await supabase.rpc('check_database_integrity')
|
|
if (error) {
|
|
return { success: false, error: error.message }
|
|
}
|
|
return { success: true, data }
|
|
} catch (err: any) {
|
|
console.error("Error in getDatabaseIntegrity:", err)
|
|
return { success: false, error: err.message || "Unerwarteter Fehler beim Integritätsscan." }
|
|
}
|
|
}
|
|
|
|
export async function repairDatabaseSchema() {
|
|
try {
|
|
await verifyAdmin()
|
|
const supabase = await createClient()
|
|
const { data, error } = await supabase.rpc('repair_database_schema')
|
|
if (error) {
|
|
return { success: false, error: error.message }
|
|
}
|
|
return { success: true, data }
|
|
} catch (err: any) {
|
|
console.error("Error in repairDatabaseSchema:", err)
|
|
return { success: false, error: err.message || "Unerwarteter Fehler bei der Schemareparatur." }
|
|
}
|
|
}
|
|
|
|
export async function optimizeDatabaseIndices() {
|
|
try {
|
|
await verifyAdmin()
|
|
|
|
// REINDEX cannot be run inside a transaction block (such as inside a PL/pgSQL function).
|
|
// Therefore, we connect directly using pg client and execute raw query.
|
|
const connectionString = process.env.DATABASE_URL || 'postgresql://postgres:postgres@localhost:54322/postgres';
|
|
const client = new Client({
|
|
connectionString,
|
|
connectionTimeoutMillis: 10000,
|
|
});
|
|
|
|
await client.connect();
|
|
await client.query('REINDEX SCHEMA public;');
|
|
await client.end();
|
|
|
|
return { success: true }
|
|
} catch (err: any) {
|
|
console.error("Error in optimizeDatabaseIndices:", err)
|
|
return { success: false, error: err.message || "Unerwarteter Fehler bei der Indexoptimierung." }
|
|
}
|
|
}
|