55 lines
1.9 KiB
TypeScript
55 lines
1.9 KiB
TypeScript
|
|
import { WordPressClient } from '../../frontend/src/lib/wordpress/WordPressClient.js';
|
|
|
|
// Note: In a real monorepo we'd share the client code, but for now I'll adapt or re-import.
|
|
// Actually, backend needs its own HTTP client logic usually, or we pass the WP Client from frontend?
|
|
// No, backend must run the ignition.
|
|
// I will create a backend-specific simple deployer.
|
|
|
|
export class WordPressDeployer {
|
|
private domain: string;
|
|
private auth: string; // Basic base64 info
|
|
|
|
constructor(domain: string, auth: string) {
|
|
this.domain = domain;
|
|
this.auth = auth;
|
|
}
|
|
|
|
async backupContent(postId: number, currentContent: string): Promise<boolean> {
|
|
// Post to meta 'legacy_content_reference'
|
|
// First get current metas or just update
|
|
// We'll try updating the post meta directly if API supports it, or use a custom endpoint/plugin.
|
|
// Standard WP REST API allows updating meta if registered.
|
|
// Fallback: Store in Directus 'legacy_backups' table?
|
|
// User spec says: "Store legacy... meta_key = 'legacy_content_reference'"
|
|
|
|
try {
|
|
await this.updatePost(postId, {
|
|
meta: {
|
|
legacy_content_reference: currentContent
|
|
}
|
|
});
|
|
return true;
|
|
} catch (e) {
|
|
console.error("Backup Failed", e);
|
|
return false;
|
|
}
|
|
}
|
|
|
|
async updatePost(postId: number, data: any): Promise<any> {
|
|
const url = `${this.domain}/wp-json/wp/v2/posts/${postId}`;
|
|
const res = await fetch(url, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Authorization': `Basic ${this.auth}`,
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify(data)
|
|
});
|
|
if (!res.ok) throw new Error(`WP Update Failed: ${res.statusText}`);
|
|
return await res.json();
|
|
}
|
|
|
|
// Future: Image upload logic
|
|
}
|