Files
website-enchun-mgr/apps/backend/scripts/migration/analyze-post.ts
pkupuk be7fc902fb feat(backend): update collections, config and migration tools
Update Payload CMS configuration, collections (Audit, Posts), and add migration scripts/reports.
2026-02-11 11:50:23 +08:00

98 lines
3.5 KiB
TypeScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env tsx
/**
* Analyze Post Data Structure
* Compares migrated posts vs manually created posts
*/
import { config as dotenvConfig } from 'dotenv'
dotenvConfig({ path: '.env' })
import { getPayload } from 'payload'
import config from '../../src/payload.config'
async function main() {
const payload = await getPayload({ config })
console.log('🔍 Fetching posts for analysis...\n')
const posts = await payload.find({
collection: 'posts',
limit: 5,
depth: 0,
})
if (posts.docs.length === 0) {
console.log('No posts found')
return
}
// Analyze first post in detail
const post = posts.docs[0]
console.log('═══════════════════════════════════════════════════════════')
console.log(`POST: "${post.title}"`)
console.log('═══════════════════════════════════════════════════════════\n')
// Basic info
console.log('📋 BASIC INFO:')
console.log(` ID: ${post.id}`)
console.log(` Slug: ${post.slug}`)
console.log(` Status: ${post.status}`)
console.log(` Created: ${post.createdAt}`)
// Content analysis
console.log('\n📝 CONTENT FIELD:')
console.log(` Type: ${typeof post.content}`)
console.log(` Is String: ${typeof post.content === 'string'}`)
console.log(` Is Object: ${typeof post.content === 'object'}`)
if (typeof post.content === 'string') {
console.log(` String Length: ${post.content.length} chars`)
try {
const parsed = JSON.parse(post.content)
console.log(` Parsed Type: ${parsed?.type}`)
console.log(` Parsed Version: ${parsed?.version}`)
console.log(` Children Count: ${parsed?.children?.length}`)
// Show first child structure
if (parsed?.children?.[0]) {
console.log('\n First Child:')
const firstChild = parsed.children[0]
console.log(` Type: ${firstChild.type}`)
console.log(` Version: ${firstChild.version}`)
if (firstChild.children) {
console.log(` Has Children: true (${firstChild.children.length})`)
if (firstChild.children[0]) {
console.log(` First Grandchild: ${JSON.stringify(firstChild.children[0], null, 2).split('\n').join('\n ')}`)
}
}
}
// Show full structure
console.log('\n FULL LEXICAL STRUCTURE:')
console.log(' ' + JSON.stringify(parsed, null, 2).split('\n').join('\n '))
} catch (e) {
console.log(` Parse Error: ${e}`)
console.log(` Raw Content (first 500 chars): ${post.content.substring(0, 500)}...`)
}
} else if (typeof post.content === 'object') {
console.log(' OBJECT STRUCTURE:')
console.log(' ' + JSON.stringify(post.content, null, 2).split('\n').join('\n '))
}
// Other fields
console.log('\n🏷 OTHER FIELDS:')
console.log(` Excerpt: ${post.excerpt?.substring(0, 100) || 'none'}...`)
console.log(` PublishedAt: ${post.publishedAt}`)
console.log(` Categories: ${post.categories?.length || 0} items`)
if (post.heroImage) {
console.log(` HeroImage: ${typeof post.heroImage} = ${post.heroImage}`)
}
console.log('\n═══════════════════════════════════════════════════════════')
}
main().catch(console.error)