feat: add baby object match edutainment flow
Some checks failed
CI / verify (push) Has been cancelled
Some checks failed
CI / verify (push) Has been cancelled
This commit is contained in:
89
packages/shared/src/contracts/edutainmentBabyObject.ts
Normal file
89
packages/shared/src/contracts/edutainmentBabyObject.ts
Normal file
@@ -0,0 +1,89 @@
|
||||
export const BABY_OBJECT_MATCH_TEMPLATE_ID = 'baby-object-match';
|
||||
export const BABY_OBJECT_MATCH_TEMPLATE_NAME = '宝贝识物';
|
||||
export const BABY_OBJECT_MATCH_EDUTAINMENT_TAG = '寓教于乐';
|
||||
|
||||
export type BabyObjectMatchTemplateId =
|
||||
typeof BABY_OBJECT_MATCH_TEMPLATE_ID;
|
||||
|
||||
export type BabyObjectMatchAssetProvider =
|
||||
| 'vector-engine-gpt-image-2'
|
||||
| 'placeholder';
|
||||
|
||||
export type BabyObjectMatchPublicationStatus = 'draft' | 'published';
|
||||
|
||||
export type BabyObjectMatchItemAsset = {
|
||||
itemId: string;
|
||||
itemName: string;
|
||||
imageSrc: string;
|
||||
assetObjectId: string | null;
|
||||
generationProvider: BabyObjectMatchAssetProvider;
|
||||
prompt: string;
|
||||
};
|
||||
|
||||
export type BabyObjectMatchDraft = {
|
||||
draftId: string;
|
||||
profileId: string;
|
||||
templateId: BabyObjectMatchTemplateId;
|
||||
templateName: typeof BABY_OBJECT_MATCH_TEMPLATE_NAME;
|
||||
workTitle: string;
|
||||
workDescription: string;
|
||||
itemNames: [string, string];
|
||||
itemAssets: [BabyObjectMatchItemAsset, BabyObjectMatchItemAsset];
|
||||
themeTags: string[];
|
||||
publicationStatus: BabyObjectMatchPublicationStatus;
|
||||
createdAt: string;
|
||||
updatedAt: string;
|
||||
publishedAt: string | null;
|
||||
};
|
||||
|
||||
export type CreateBabyObjectMatchDraftRequest = {
|
||||
itemAName: string;
|
||||
itemBName: string;
|
||||
};
|
||||
|
||||
export type BabyObjectMatchDraftResponse = {
|
||||
draft: BabyObjectMatchDraft;
|
||||
};
|
||||
|
||||
export type SaveBabyObjectMatchDraftRequest = {
|
||||
draft: BabyObjectMatchDraft;
|
||||
};
|
||||
|
||||
export type BabyObjectMatchPublishRequest = {
|
||||
draft: BabyObjectMatchDraft;
|
||||
};
|
||||
|
||||
export type BabyObjectMatchPublishResponse = {
|
||||
draft: BabyObjectMatchDraft;
|
||||
publicWorkCode: string;
|
||||
};
|
||||
|
||||
export function normalizeBabyObjectMatchItemName(value: string) {
|
||||
return value.trim();
|
||||
}
|
||||
|
||||
export function normalizeBabyObjectMatchTags(tags: string[]) {
|
||||
return [
|
||||
...new Set([
|
||||
BABY_OBJECT_MATCH_EDUTAINMENT_TAG,
|
||||
...tags.map((tag) => tag.trim()).filter(Boolean),
|
||||
]),
|
||||
];
|
||||
}
|
||||
|
||||
export function hasBabyObjectMatchRequiredTag(tags: string[]) {
|
||||
return tags.some((tag) => tag === BABY_OBJECT_MATCH_EDUTAINMENT_TAG);
|
||||
}
|
||||
|
||||
export function validateBabyObjectMatchItemNames(
|
||||
payload: CreateBabyObjectMatchDraftRequest,
|
||||
) {
|
||||
const itemAName = normalizeBabyObjectMatchItemName(payload.itemAName);
|
||||
const itemBName = normalizeBabyObjectMatchItemName(payload.itemBName);
|
||||
|
||||
return {
|
||||
itemAName,
|
||||
itemBName,
|
||||
valid: Boolean(itemAName && itemBName),
|
||||
};
|
||||
}
|
||||
@@ -6,6 +6,7 @@ export type * from './contracts/creationAgentDocumentInput';
|
||||
export type * from './contracts/creationAudio';
|
||||
export type * from './contracts/creativeAgent';
|
||||
export type * from './contracts/customWorldAgent';
|
||||
export * from './contracts/edutainmentBabyObject';
|
||||
export type * from './contracts/hyper3d';
|
||||
export * from './contracts/match3dAgent';
|
||||
export * from './contracts/match3dRuntime';
|
||||
@@ -13,8 +14,8 @@ export * from './contracts/match3dWorks';
|
||||
export * from './contracts/puzzleAgentActions';
|
||||
export * from './contracts/puzzleAgentDraft';
|
||||
export * from './contracts/puzzleAgentSession';
|
||||
export * from './contracts/puzzleOnboarding';
|
||||
export type * from './contracts/puzzleCreativeTemplate';
|
||||
export * from './contracts/puzzleOnboarding';
|
||||
export * from './contracts/puzzleResultPreview';
|
||||
export * from './contracts/puzzleRuntimeSession';
|
||||
export * from './contracts/puzzleWorkSummary';
|
||||
|
||||
Reference in New Issue
Block a user