feat(editor) : notify peers of draft overwrite
This commit is contained in:
+25
-17
@@ -43,6 +43,13 @@ type GuideActionResult =
|
||||
| { status: "error"; message: string };
|
||||
|
||||
type CreateGuideActionResult = Exclude<GuideActionResult, { status: "conflict" }>;
|
||||
type SaveIntent = { overwrite?: boolean };
|
||||
|
||||
function overwriteDetails(admin: Awaited<ReturnType<typeof requireAdmin>>, intent?: SaveIntent) {
|
||||
return intent?.overwrite
|
||||
? { operation: "overwrite" as const, actorName: (admin.user.name?.trim() || admin.user.email).slice(0, 100) }
|
||||
: undefined;
|
||||
}
|
||||
|
||||
async function runGuideAction(action: () => Promise<{ version?: number }>): Promise<GuideActionResult> {
|
||||
try {
|
||||
@@ -69,29 +76,29 @@ export async function createStructuredGuide(input: unknown): Promise<CreateGuide
|
||||
}
|
||||
}
|
||||
|
||||
export async function saveWeaponSection(guideId: string, input: unknown) {
|
||||
await requireAdmin();
|
||||
return runGuideAction(() => saveWeapons(guideId, input));
|
||||
export async function saveWeaponSection(guideId: string, input: unknown, intent?: SaveIntent) {
|
||||
const admin = await requireAdmin();
|
||||
return runGuideAction(() => saveWeapons(guideId, input, overwriteDetails(admin, intent)));
|
||||
}
|
||||
|
||||
export async function saveGuideOverview(guideId: string, input: unknown) {
|
||||
await requireAdmin();
|
||||
return runGuideAction(() => updateGuideBasics(guideId, input));
|
||||
export async function saveGuideOverview(guideId: string, input: unknown, intent?: SaveIntent) {
|
||||
const admin = await requireAdmin();
|
||||
return runGuideAction(() => updateGuideBasics(guideId, input, overwriteDetails(admin, intent)));
|
||||
}
|
||||
|
||||
export async function saveArtifactSection(guideId: string, input: unknown) {
|
||||
await requireAdmin();
|
||||
return runGuideAction(() => saveArtifacts(guideId, input));
|
||||
export async function saveArtifactSection(guideId: string, input: unknown, intent?: SaveIntent) {
|
||||
const admin = await requireAdmin();
|
||||
return runGuideAction(() => saveArtifacts(guideId, input, overwriteDetails(admin, intent)));
|
||||
}
|
||||
|
||||
export async function saveConstellationSection(guideId: string, input: unknown) {
|
||||
await requireAdmin();
|
||||
return runGuideAction(() => saveConstellations(guideId, input));
|
||||
export async function saveConstellationSection(guideId: string, input: unknown, intent?: SaveIntent) {
|
||||
const admin = await requireAdmin();
|
||||
return runGuideAction(() => saveConstellations(guideId, input, overwriteDetails(admin, intent)));
|
||||
}
|
||||
|
||||
export async function saveTeamSection(guideId: string, input: unknown) {
|
||||
await requireAdmin();
|
||||
return runGuideAction(() => saveTeams(guideId, input));
|
||||
export async function saveTeamSection(guideId: string, input: unknown, intent?: SaveIntent) {
|
||||
const admin = await requireAdmin();
|
||||
return runGuideAction(() => saveTeams(guideId, input, overwriteDetails(admin, intent)));
|
||||
}
|
||||
|
||||
export async function listTeamImportGuides(currentGuideId: string) {
|
||||
@@ -152,12 +159,13 @@ export async function saveGuideExtra(
|
||||
guideId: string,
|
||||
sectionId: string,
|
||||
input: unknown,
|
||||
intent?: SaveIntent,
|
||||
) {
|
||||
await requireAdmin();
|
||||
const admin = await requireAdmin();
|
||||
const parsedGuideId = z.string().uuid().parse(guideId);
|
||||
const parsedSectionId = z.string().uuid().parse(sectionId);
|
||||
const result = await runGuideAction(() =>
|
||||
saveExtraSection(parsedGuideId, parsedSectionId, input),
|
||||
saveExtraSection(parsedGuideId, parsedSectionId, input, overwriteDetails(admin, intent)),
|
||||
);
|
||||
if (result.status === "saved") updateTag(pageCacheTag(guideId));
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user