このコミットが含まれているのは:
2026-07-14 18:39:24 +09:00
コミット d035da99ad
14個のファイルの変更188行の追加232行の削除
+22 -4
ファイルの表示
@@ -5,6 +5,7 @@ export type PostImportStatus =
| 'created'
| 'skipped'
| 'failed'
export type PostImportSkipReason = 'existing'
export type PostImportResultStatus = 'created' | 'skipped' | 'failed'
export type PostImportAttributeValue = string | number
@@ -19,6 +20,8 @@ export type PostImportRow = {
provenance: Record<string, PostImportOrigin>
tagSources?: Record<PostImportOrigin, string>
status: 'ready' | 'warning' | 'error'
skipReason?: PostImportSkipReason
existingPostId?: number
metadataUrl?: string
createdPostId?: number
importStatus?: PostImportStatus }
@@ -185,6 +188,12 @@ const isValidOrigin = (
value === 'automatic' || value === 'manual'
const isValidSkipReason = (
value: unknown,
): value is PostImportSkipReason =>
value === 'existing'
const sanitiseRow = (value: unknown): PostImportRow | null => {
if (!(isPlainObject (value)))
return null
@@ -200,6 +209,8 @@ const sanitiseRow = (value: unknown): PostImportRow | null => {
return null
if (value.importStatus != null && !(isValidImportStatus (value.importStatus)))
return null
if (value.skipReason != null && !(isValidSkipReason (value.skipReason)))
return null
const validationErrors = ensureStringListRecord (value.validationErrors)
const fieldWarnings = ensureStringListRecord (value.fieldWarnings)
@@ -239,6 +250,9 @@ const sanitiseRow = (value: unknown): PostImportRow | null => {
provenance: value.provenance as Record<string, PostImportOrigin>,
tagSources: value.tagSources as Record<PostImportOrigin, string> | undefined,
status: value.status,
skipReason: value.skipReason,
existingPostId:
Number.isInteger (value.existingPostId) ? Number (value.existingPostId) : undefined,
metadataUrl: typeof value.metadataUrl === 'string' ? value.metadataUrl : undefined,
createdPostId:
Number.isInteger (value.createdPostId) ? Number (value.createdPostId) : undefined,
@@ -422,6 +436,8 @@ export const mergeValidatedImportRows = (
attributes: row.attributes,
provenance: row.provenance,
tagSources: row.tagSources,
skipReason: row.skipReason,
existingPostId: row.existingPostId,
fieldWarnings,
baseWarnings:
row.baseWarnings.length > 0 || row.metadataUrl !== previous.metadataUrl
@@ -469,6 +485,8 @@ export const mergePreviewImportRows = (
attributes: mergedAttributes,
provenance: mergedProvenance,
tagSources: mergedTagSources,
skipReason: row.skipReason,
existingPostId: row.existingPostId,
createdPostId: previous.createdPostId,
importStatus: previous.importStatus,
importErrors: previous.importErrors }
@@ -584,8 +602,8 @@ export const validateImportSource = (
}
const hasSkipWarning = (row: PostImportRow): boolean =>
(row.fieldWarnings.url ?? []).includes ('既存投稿のためスキップします.')
const hasSkipReason = (row: PostImportRow): boolean =>
row.skipReason === 'existing'
export const submittableImportRows = (rows: PostImportRow[]): PostImportRow[] =>
@@ -594,7 +612,7 @@ export const submittableImportRows = (rows: PostImportRow[]): PostImportRow[] =>
return false
if (row.importStatus === 'skipped')
return false
if (hasSkipWarning (row))
if (hasSkipReason (row))
return false
if (row.importStatus === 'failed')
return false
@@ -609,6 +627,6 @@ export const reviewSummaryCounts = (rows: PostImportRow[]) => ({
&& Object.keys (row.validationErrors ?? { }).length === 0).length,
invalid: rows.filter (row => Object.keys (row.validationErrors ?? { }).length > 0).length,
skipPlanned: rows.filter (row =>
hasSkipWarning (row) && row.importStatus !== 'created').length,
hasSkipReason (row) && row.importStatus !== 'created').length,
created: rows.filter (row => row.importStatus === 'created').length,
failed: rows.filter (row => row.importStatus === 'failed').length })