发布页媒体提交只合成一次

- buildPublishGameMetadata / buildPublishMediaParts 改为接收调用方算好的 submission,元数据槽位与上传 part 单一来源
This commit is contained in:
2026-10-07 14:15:05 +08:00
parent 5bc52a3441
commit 53750ac31e
@@ -31,6 +31,7 @@ import {
import {
buildGamePublishMediaSubmission,
type GamePublishImage,
type GamePublishMediaSubmission,
revokeGamePublishImagePreview,
} from './gamePublishAssets';
import { GamePublishClientGuide } from './GamePublishClientGuide';
@@ -313,11 +314,10 @@ export function GamePublishPage({
* 组装提交给服务端的资料 DTO。
*
* 媒体槽位只描述来源:本地新图写 `null`(由对应的二进制 part 补位),沿用线上图写 objectKey;
* 原始字节另由 `buildPublishMediaParts` 作为 multipart part 提交。两者共用
* `buildGamePublishMediaSubmission`,槽位映射与 part 组装不会各改各的。
* 原始字节另由 `buildPublishMediaParts` 作为 multipart part 提交。两者消费调用方算好的
* 同一个 `buildGamePublishMediaSubmission` 结果,槽位映射与 part 组装不会各改各的。
*/
function buildPublishGameMetadata() {
const media = buildGamePublishMediaSubmission(coverImage, screenshotImages);
function buildPublishGameMetadata(media: GamePublishMediaSubmission) {
return {
title: title.trim(),
summary: summary.trim(),
@@ -332,8 +332,8 @@ export function GamePublishPage({
};
}
function buildPublishMediaParts() {
return buildGamePublishMediaSubmission(coverImage, screenshotImages).parts;
function buildPublishMediaParts(media: GamePublishMediaSubmission) {
return media.parts;
}
/** 是否已有封面:本地新图或沿用线上图都算。 */
@@ -431,8 +431,12 @@ export function GamePublishPage({
try {
const prepared = await prepareGamePackage(packageFile);
const updateKey = resolvePublishKey();
const gameMetadata = buildPublishGameMetadata();
const media = buildPublishMediaParts();
const submission = buildGamePublishMediaSubmission(
coverImage,
screenshotImages,
);
const gameMetadata = buildPublishGameMetadata(submission);
const media = buildPublishMediaParts(submission);
const version = await createGameVersion(
updateContext.gameId,
{
@@ -511,8 +515,12 @@ export function GamePublishPage({
setError('');
try {
const prepared = await prepareGamePackage(packageFile);
const gameMetadata = buildPublishGameMetadata();
const media = buildPublishMediaParts();
const submission = buildGamePublishMediaSubmission(
coverImage,
screenshotImages,
);
const gameMetadata = buildPublishGameMetadata(submission);
const media = buildPublishMediaParts(submission);
const publishKey = resolvePublishKey();
const game = await createGame(gameMetadata, `${publishKey}:game`, media);
const version = await createGameVersion(