feat: add config preset manager
This commit is contained in:
@@ -19,7 +19,7 @@ export async function loginAction(prevState: LoginResult, formData: FormData) {
|
||||
if (!loginData.success) {
|
||||
return {
|
||||
success: false,
|
||||
message: loginData.error.message
|
||||
message: loginData.error.issues[0]?.message ?? 'Validation failed'
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
import { revalidatePath } from 'next/cache';
|
||||
import { requireAuth } from '@/lib/auth/server';
|
||||
import { updateServerConfiguration, bulkUpdateServerConfigurations } from '@/lib/api/server/configuration';
|
||||
import { getServerConfigurations, updateServerConfiguration, bulkUpdateServerConfigurations } from '@/lib/api/server/configuration';
|
||||
import {
|
||||
assistRulesSchema,
|
||||
ConfigFile,
|
||||
@@ -19,6 +19,21 @@ import type {
|
||||
EventRules,
|
||||
ServerSettings
|
||||
} from '@/lib/schemas/config';
|
||||
|
||||
export async function getConfigurationsAction(
|
||||
serverId: string
|
||||
): Promise<{ success: true; data: Configurations } | { success: false; message: string }> {
|
||||
try {
|
||||
const session = await requireAuth();
|
||||
const data = await getServerConfigurations(session.token!, serverId);
|
||||
return { success: true, data };
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
message: error instanceof Error ? error.message : 'Failed to fetch configurations'
|
||||
};
|
||||
}
|
||||
}
|
||||
import { boolToInt } from '@/lib/utils';
|
||||
|
||||
export async function updateConfigurationAction(serverId: string, formData: FormData) {
|
||||
@@ -72,7 +87,7 @@ export async function updateAssistRulesAction(serverId: string, formData: FormDa
|
||||
|
||||
const config = assistRulesSchema.safeParse(rawConfig);
|
||||
if (!config.success) {
|
||||
return { success: false, message: config.error.message };
|
||||
return { success: false, message: config.error.issues[0]?.message ?? 'Validation failed' };
|
||||
}
|
||||
|
||||
await updateServerConfiguration(
|
||||
@@ -120,7 +135,7 @@ export async function updateServerSettingsAction(serverId: string, formData: For
|
||||
};
|
||||
const config = serverSettingsSchema.safeParse(rawConfig);
|
||||
if (!config.success) {
|
||||
return { success: false, message: config.error.message };
|
||||
return { success: false, message: config.error.issues[0]?.message ?? 'Validation failed' };
|
||||
}
|
||||
|
||||
await updateServerConfiguration(
|
||||
@@ -167,7 +182,7 @@ export async function updateEventConfigAction(serverId: string, formData: FormDa
|
||||
};
|
||||
const config = eventConfigSchema.safeParse(rawConfig);
|
||||
if (!config.success) {
|
||||
return { success: false, message: config.error.message };
|
||||
return { success: false, message: config.error.issues[0]?.message ?? 'Validation failed' };
|
||||
}
|
||||
|
||||
await updateServerConfiguration(
|
||||
@@ -216,7 +231,7 @@ export async function updateEventRulesAction(serverId: string, formData: FormDat
|
||||
|
||||
const config = eventRulesSchema.safeParse(rawConfig);
|
||||
if (!config.success) {
|
||||
return { success: false, message: config.error.message };
|
||||
return { success: false, message: config.error.issues[0]?.message ?? 'Validation failed' };
|
||||
}
|
||||
|
||||
await updateServerConfiguration(
|
||||
@@ -247,7 +262,7 @@ export async function bulkUpdateConfigurationsAction(
|
||||
|
||||
const validated = configurationsSchema.partial().safeParse(configs);
|
||||
if (!validated.success) {
|
||||
return { success: false, message: validated.error.message };
|
||||
return { success: false, message: validated.error.issues[0]?.message ?? 'Validation failed' };
|
||||
}
|
||||
|
||||
await bulkUpdateServerConfigurations(session.token!, serverId, validated.data, restart);
|
||||
|
||||
@@ -10,7 +10,7 @@ export async function saveLeaderboardAction(serverId: string, data: Leaderboard)
|
||||
const session = await requireAuth();
|
||||
const validated = leaderboardSchema.safeParse(data);
|
||||
if (!validated.success) {
|
||||
return { success: false, message: validated.error.message };
|
||||
return { success: false, message: validated.error.issues[0]?.message ?? 'Validation failed' };
|
||||
}
|
||||
await fetchServerAPI(`/server/${serverId}/leaderboard`, session.token!, 'PUT', validated.data);
|
||||
revalidatePath(`/dashboard/server/${serverId}`);
|
||||
|
||||
@@ -15,7 +15,7 @@ export async function createUserAction(formData: FormData) {
|
||||
const rawData = { username, password, role };
|
||||
const data = userCreateSchema.safeParse(rawData);
|
||||
if (!data.success) {
|
||||
return { success: false, message: data.error.message };
|
||||
return { success: false, message: data.error.issues[0]?.message ?? 'Validation failed' };
|
||||
}
|
||||
|
||||
await createUser(session.token!, data.data);
|
||||
|
||||
54
src/lib/actions/presets.ts
Normal file
54
src/lib/actions/presets.ts
Normal file
@@ -0,0 +1,54 @@
|
||||
'use server';
|
||||
|
||||
import { revalidatePath } from 'next/cache';
|
||||
import { requireAuth } from '@/lib/auth/server';
|
||||
import { listPresets, createPreset, applyPreset, type ConfigPresetCreateRequest } from '@/lib/api/server/presets';
|
||||
import type { ConfigPreset } from '@/lib/schemas/preset';
|
||||
|
||||
export async function listPresetsAction(
|
||||
name?: string
|
||||
): Promise<{ success: true; data: ConfigPreset[] } | { success: false; message: string }> {
|
||||
try {
|
||||
const session = await requireAuth();
|
||||
const data = await listPresets(session.token!, name);
|
||||
return { success: true, data };
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
message: error instanceof Error ? error.message : 'Failed to fetch presets'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export async function createPresetAction(
|
||||
data: ConfigPresetCreateRequest
|
||||
): Promise<{ success: true; data: ConfigPreset } | { success: false; message: string }> {
|
||||
try {
|
||||
const session = await requireAuth();
|
||||
const preset = await createPreset(session.token!, data);
|
||||
return { success: true, data: preset };
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
message: error instanceof Error ? error.message : 'Failed to save preset'
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
export async function applyPresetAction(
|
||||
serverId: string,
|
||||
presetId: string,
|
||||
restart = false
|
||||
): Promise<{ success: true; message: string } | { success: false; message: string }> {
|
||||
try {
|
||||
const session = await requireAuth();
|
||||
await applyPreset(session.token!, serverId, presetId, restart);
|
||||
revalidatePath(`/dashboard/server/${serverId}`);
|
||||
return { success: true, message: 'Preset applied successfully' };
|
||||
} catch (error) {
|
||||
return {
|
||||
success: false,
|
||||
message: error instanceof Error ? error.message : 'Failed to apply preset'
|
||||
};
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user