Newer
Older
const _ = require('lodash');
const tagsData = require('./ghost/migrations/init/tags.json');
const postsData = require('./ghost/migrations/init/posts.json');

Marlène SIMONDANT
committed
const pagesData = require('./ghost/migrations/init/pages.json');
const path = require('path');
const GhostAdminAPI = require('@tryghost/admin-api');
require('dotenv').config({ path: path.resolve(__dirname, '../.env') });
url: process.env.GHOST_HOST_AND_PORT,
key: process.env.GHOST_ADMIN_API_KEY,
});
async function deleteTags(existingTags) {

Marlène SIMONDANT
committed
await api.tags
return null;
})
.catch((error) => console.error(error));
})
);
}
async function deletePosts(existingPosts) {

Marlène SIMONDANT
committed
await api.posts
return null;
})
.catch((error) => console.error(error));
})
);
}

Marlène SIMONDANT
committed
async function deletePages(existingPages) {

Marlène SIMONDANT
committed
_.forEach(existingPages, async (id) => {
await api.pages
.delete(_.pick(id, ['id']))

Marlène SIMONDANT
committed
return null;
})
.catch((error) => console.error(error));
})
);
}
async function createTags(deleteOnly) {
// Get existing tags
await api.tags
.browse({ limit: 'all' })
.then(async (existingTags) => {
// remove 'meta' key
delete existingTags['meta'];
if (existingTags.length > 0) {
console.log('-- Dropping ' + existingTags.length + ' tags... --');
// Delete existing tags
await deleteTags(existingTags).then(() => {
console.log('-- Tags dropped --');
});
// wait complete deletion of tags or else slugs are messed up when re created before proper deletion
await new Promise((r) => setTimeout(r, 1000));
} else {
console.log('-- No tag to drop --');
}
// Creating new tags
if (!deleteOnly) {
console.log('-- Creating ' + tagsData.tags.length + ' tags --');
_.forEach(tagsData.tags, (tag) => {
api.tags
.add(tag)
.then((res) => {
console.log('-- Tag `' + res.name + '` created --');
})
.catch((error) => console.error(error));
});
// wait complete creation of tags, if not posts are missing tags not yet created
await new Promise((r) => setTimeout(r, 1000));
}
})
.catch((error) => console.error(error));
}

Marlène SIMONDANT
committed
async function uploadPostImage(imagePath) {
let imagePromise = api.images.upload({

Marlène SIMONDANT
committed
ref: imagePath,
file: path.resolve(imagePath),
});

Marlène SIMONDANT
committed
return Promise.resolve(imagePromise)
.then((url) => {
return url.url;
})

Marlène SIMONDANT
committed
.catch((error) => {
console.error(error);
return null;
});
async function createPosts(deleteOnly) {
api.posts
.browse({ limit: 'all' })
.then(async (existingPosts) => {
// remove 'meta' key
delete existingPosts['meta'];
if (existingPosts.length > 0) {
console.log('-- Dropping ' + existingPosts.length + ' posts... --');
// Delete existing posts
await deletePosts(existingPosts).then(() => {
console.log('-- Posts dropped --');
});
// wait complete deletion of post or else slugs are messed up when re created before proper deletion
await new Promise((r) => setTimeout(r, 1000));
} else {
console.log('-- No posts to drop --');
}
// Creating new posts
if (!deleteOnly) {
console.log('-- Creating ' + postsData.length + ' posts --');
_.forEach(postsData, async (post) => {
//upload de l'image en featured_image
if (post.feature_image) {
post.feature_image = await uploadPostImage(post.feature_image);
}
api.posts
.add(post, { source: 'html' })
.then((res) => {
console.log('-- Post `' + res.title + '` created --');
})
.catch((error) => console.error(error));
});
// wait complete creation of posts
await new Promise((r) => setTimeout(r, 1000));
}
})
.catch((error) => console.error(error));
}

Marlène SIMONDANT
committed
async function createPages(deleteOnly) {
api.pages
.browse({ limit: 'all' })
.then(async (existingPages) => {
// remove 'meta' key
delete existingPages['meta'];
if (existingPages.length > 0) {
console.log(`-- Dropping ${existingPages.length} pages... --`);
// Delete existing pages
await deletePages(existingPages).then(() => {
console.log('-- Pages dropped --');
});
} else {
console.log('-- No pages to drop --');
}
// wait complete deletion of pages, if not new pages slugs are appended with '_2'
await new Promise((r) => setTimeout(r, 2000));

Marlène SIMONDANT
committed
// Creating new pages
if (!deleteOnly) {
console.log(`-- Creating ${pagesData.length} pages --`);
_.forEach(pagesData, async (page) => {
//upload de l'image en featured_image
if (page.feature_image) {
page.feature_image = await uploadPostImage(page.feature_image);
}
api.pages
.add(page, { source: 'html' })
.then((res) => {
console.log(`-- Page \`${res.title}\` created --`);
})
.catch((error) => console.error(error));
});
// wait complete creation of pages
await new Promise((r) => setTimeout(r, 1000));

Marlène SIMONDANT
committed
}
})
.catch((error) => console.error(error));
}

Marlène SIMONDANT
committed
createTags(deleteOnly)
.then(() => {
createPosts(deleteOnly);
})
.then(() => {
createPages(deleteOnly);
});