289 lines
7.9 KiB
TypeScript
289 lines
7.9 KiB
TypeScript
import type { BigFishWorkSummary } from '../../../packages/shared/src/contracts/bigFishWorkSummary';
|
|
import type { CustomWorldWorkSummary } from '../../../packages/shared/src/contracts/customWorldWorkSummary';
|
|
import type { BabyObjectMatchDraft } from '../../../packages/shared/src/contracts/edutainmentBabyObject';
|
|
import type { Match3DWorkSummary } from '../../../packages/shared/src/contracts/match3dWorks';
|
|
import type { PuzzleWorkSummary } from '../../../packages/shared/src/contracts/puzzleWorkSummary';
|
|
import type { CustomWorldLibraryEntry } from '../../../packages/shared/src/contracts/runtime';
|
|
import type { SquareHoleWorkSummary } from '../../../packages/shared/src/contracts/squareHoleWorks';
|
|
import type { VisualNovelWorkSummary } from '../../../packages/shared/src/contracts/visualNovel';
|
|
import {
|
|
buildPuzzleResultProfileId,
|
|
buildPuzzleResultWorkId,
|
|
collectDraftNoticeKeys,
|
|
} from './platformDraftGenerationShelfModel';
|
|
|
|
const PRIVATE_WORK_DELETE_DETAIL = '删除后会从你的作品列表中移除。';
|
|
const PUBLIC_GALLERY_DELETE_DETAIL = '删除后会从你的作品列表和公开广场中移除。';
|
|
const EDUTAINMENT_PUBLIC_DELETE_DETAIL =
|
|
'删除后会从你的作品列表和寓教于乐板块中移除。';
|
|
|
|
export type PlatformCreationWorkDeleteConfirmationModel = {
|
|
id: string;
|
|
title: string;
|
|
detail: string;
|
|
noticeKeys: string[];
|
|
};
|
|
|
|
export type PlatformCreationWorkDeleteInput =
|
|
| {
|
|
kind: 'rpg-library';
|
|
entry: Pick<CustomWorldLibraryEntry<unknown>, 'profileId' | 'worldName'>;
|
|
}
|
|
| {
|
|
kind: 'rpg';
|
|
work: Pick<
|
|
CustomWorldWorkSummary,
|
|
'workId' | 'title' | 'status' | 'sessionId' | 'profileId'
|
|
>;
|
|
}
|
|
| {
|
|
kind: 'big-fish';
|
|
work: Pick<
|
|
BigFishWorkSummary,
|
|
'workId' | 'title' | 'status' | 'sourceSessionId'
|
|
>;
|
|
}
|
|
| {
|
|
kind: 'puzzle';
|
|
work: Pick<
|
|
PuzzleWorkSummary,
|
|
| 'workId'
|
|
| 'profileId'
|
|
| 'sourceSessionId'
|
|
| 'workTitle'
|
|
| 'levelName'
|
|
| 'publicationStatus'
|
|
>;
|
|
}
|
|
| {
|
|
kind: 'match3d';
|
|
work: Pick<
|
|
Match3DWorkSummary,
|
|
| 'workId'
|
|
| 'profileId'
|
|
| 'sourceSessionId'
|
|
| 'gameName'
|
|
| 'publicationStatus'
|
|
>;
|
|
}
|
|
| {
|
|
kind: 'square-hole';
|
|
work: Pick<
|
|
SquareHoleWorkSummary,
|
|
| 'workId'
|
|
| 'profileId'
|
|
| 'sourceSessionId'
|
|
| 'gameName'
|
|
| 'publicationStatus'
|
|
>;
|
|
}
|
|
| {
|
|
kind: 'visual-novel';
|
|
work: Pick<
|
|
VisualNovelWorkSummary,
|
|
'profileId' | 'title' | 'publishStatus'
|
|
>;
|
|
}
|
|
| {
|
|
kind: 'baby-object-match';
|
|
work: Pick<
|
|
BabyObjectMatchDraft,
|
|
| 'profileId'
|
|
| 'draftId'
|
|
| 'workTitle'
|
|
| 'templateName'
|
|
| 'publicationStatus'
|
|
>;
|
|
};
|
|
|
|
export function resolvePlatformCreationWorkDeleteConfirmationModel(
|
|
input: PlatformCreationWorkDeleteInput,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
switch (input.kind) {
|
|
case 'rpg-library':
|
|
return resolveRpgLibraryDeleteConfirmationModel(input.entry);
|
|
case 'rpg':
|
|
return resolveRpgWorkDeleteConfirmationModel(input.work);
|
|
case 'big-fish':
|
|
return resolveBigFishWorkDeleteConfirmationModel(input.work);
|
|
case 'puzzle':
|
|
return resolvePuzzleWorkDeleteConfirmationModel(input.work);
|
|
case 'match3d':
|
|
return resolveMatch3DWorkDeleteConfirmationModel(input.work);
|
|
case 'square-hole':
|
|
return resolveSquareHoleWorkDeleteConfirmationModel(input.work);
|
|
case 'visual-novel':
|
|
return resolveVisualNovelWorkDeleteConfirmationModel(input.work);
|
|
case 'baby-object-match':
|
|
return resolveBabyObjectMatchDeleteConfirmationModel(input.work);
|
|
default: {
|
|
const exhaustive: never = input;
|
|
return exhaustive;
|
|
}
|
|
}
|
|
}
|
|
|
|
function resolveStatusDeleteDetail(
|
|
status: string,
|
|
publishedDetail = PUBLIC_GALLERY_DELETE_DETAIL,
|
|
) {
|
|
return status === 'published' ? publishedDetail : PRIVATE_WORK_DELETE_DETAIL;
|
|
}
|
|
|
|
function resolveTrimmedTitle(
|
|
value: string | null | undefined,
|
|
fallback: string,
|
|
) {
|
|
const trimmedValue = value?.trim();
|
|
return trimmedValue || fallback;
|
|
}
|
|
|
|
function resolveRpgLibraryDeleteConfirmationModel(
|
|
entry: Pick<CustomWorldLibraryEntry<unknown>, 'profileId' | 'worldName'>,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
return {
|
|
id: entry.profileId,
|
|
title: entry.worldName,
|
|
detail: PUBLIC_GALLERY_DELETE_DETAIL,
|
|
noticeKeys: [],
|
|
};
|
|
}
|
|
|
|
function resolveRpgWorkDeleteConfirmationModel(
|
|
work: Pick<
|
|
CustomWorldWorkSummary,
|
|
'workId' | 'title' | 'status' | 'sessionId' | 'profileId'
|
|
>,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
return {
|
|
id: work.workId,
|
|
title: work.title,
|
|
detail: resolveStatusDeleteDetail(work.status),
|
|
noticeKeys: collectDraftNoticeKeys('rpg', [
|
|
work.workId,
|
|
work.sessionId,
|
|
work.profileId,
|
|
]),
|
|
};
|
|
}
|
|
|
|
function resolveBigFishWorkDeleteConfirmationModel(
|
|
work: Pick<
|
|
BigFishWorkSummary,
|
|
'workId' | 'title' | 'status' | 'sourceSessionId'
|
|
>,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
return {
|
|
id: work.workId,
|
|
title: work.title,
|
|
detail: resolveStatusDeleteDetail(work.status),
|
|
noticeKeys: collectDraftNoticeKeys('big-fish', [
|
|
work.workId,
|
|
work.sourceSessionId,
|
|
]),
|
|
};
|
|
}
|
|
|
|
function resolvePuzzleWorkDeleteConfirmationModel(
|
|
work: Pick<
|
|
PuzzleWorkSummary,
|
|
| 'workId'
|
|
| 'profileId'
|
|
| 'sourceSessionId'
|
|
| 'workTitle'
|
|
| 'levelName'
|
|
| 'publicationStatus'
|
|
>,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
return {
|
|
id: work.workId,
|
|
title: resolveTrimmedTitle(
|
|
work.workTitle,
|
|
resolveTrimmedTitle(work.levelName, '未命名拼图'),
|
|
),
|
|
detail: resolveStatusDeleteDetail(work.publicationStatus),
|
|
noticeKeys: collectDraftNoticeKeys('puzzle', [
|
|
work.workId,
|
|
work.profileId,
|
|
work.sourceSessionId,
|
|
buildPuzzleResultWorkId(work.sourceSessionId),
|
|
buildPuzzleResultProfileId(work.sourceSessionId),
|
|
]),
|
|
};
|
|
}
|
|
|
|
function resolveMatch3DWorkDeleteConfirmationModel(
|
|
work: Pick<
|
|
Match3DWorkSummary,
|
|
| 'workId'
|
|
| 'profileId'
|
|
| 'sourceSessionId'
|
|
| 'gameName'
|
|
| 'publicationStatus'
|
|
>,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
return {
|
|
id: work.workId,
|
|
title: work.gameName,
|
|
detail: resolveStatusDeleteDetail(work.publicationStatus),
|
|
noticeKeys: collectDraftNoticeKeys('match3d', [
|
|
work.workId,
|
|
work.profileId,
|
|
work.sourceSessionId,
|
|
]),
|
|
};
|
|
}
|
|
|
|
function resolveSquareHoleWorkDeleteConfirmationModel(
|
|
work: Pick<
|
|
SquareHoleWorkSummary,
|
|
| 'workId'
|
|
| 'profileId'
|
|
| 'sourceSessionId'
|
|
| 'gameName'
|
|
| 'publicationStatus'
|
|
>,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
return {
|
|
id: work.workId,
|
|
title: work.gameName,
|
|
detail: resolveStatusDeleteDetail(work.publicationStatus),
|
|
noticeKeys: collectDraftNoticeKeys('square-hole', [
|
|
work.workId,
|
|
work.profileId,
|
|
work.sourceSessionId,
|
|
]),
|
|
};
|
|
}
|
|
|
|
function resolveVisualNovelWorkDeleteConfirmationModel(
|
|
work: Pick<VisualNovelWorkSummary, 'profileId' | 'title' | 'publishStatus'>,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
return {
|
|
id: work.profileId,
|
|
title: work.title || '未命名视觉小说',
|
|
detail: resolveStatusDeleteDetail(work.publishStatus),
|
|
noticeKeys: collectDraftNoticeKeys('visual-novel', [work.profileId]),
|
|
};
|
|
}
|
|
|
|
function resolveBabyObjectMatchDeleteConfirmationModel(
|
|
work: Pick<
|
|
BabyObjectMatchDraft,
|
|
'profileId' | 'draftId' | 'workTitle' | 'templateName' | 'publicationStatus'
|
|
>,
|
|
): PlatformCreationWorkDeleteConfirmationModel {
|
|
return {
|
|
id: work.profileId,
|
|
title: resolveTrimmedTitle(work.workTitle, work.templateName),
|
|
detail: resolveStatusDeleteDetail(
|
|
work.publicationStatus,
|
|
EDUTAINMENT_PUBLIC_DELETE_DETAIL,
|
|
),
|
|
noticeKeys: collectDraftNoticeKeys('baby-object-match', [
|
|
work.profileId,
|
|
work.draftId,
|
|
]),
|
|
};
|
|
}
|