Created
July 10, 2020 21:18
-
-
Save dmgallardo/f3c9d0726c64af1ab63bd83ebbc7dcca to your computer and use it in GitHub Desktop.
strapi-starter-blog/config/functions/bootstrap.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
"use strict"; | |
require("dotenv").config(); | |
/** | |
* An asynchronous bootstrap function that runs before | |
* your application gets started. | |
* | |
* This gives you an opportunity to set up your data model, | |
* run jobs, or perform some special logic. | |
* | |
* See more details here: https://strapi.io/documentation/3.0.0-beta.x/concepts/configurations.html#bootstrap | |
*/ | |
const fs = require("fs"); | |
const path = require("path"); | |
const { articles, categories } = require("../../seed/seed"); | |
const findPublicRole = async () => { | |
const result = await strapi | |
.query("role", "users-permissions") | |
.findOne({ type: "public" }); | |
return result; | |
}; | |
const setDefaultPermissions = async () => { | |
const role = await findPublicRole(); | |
const permissions = await strapi | |
.query("permission", "users-permissions") | |
.find({ type: "application", role: role.id }); | |
await Promise.all( | |
permissions.map(p => | |
strapi | |
.query("permission", "users-permissions") | |
.update({ id: p.id }, { enabled: true }) | |
) | |
); | |
}; | |
const isFirstRun = async () => { | |
const pluginStore = strapi.store({ | |
environment: strapi.config.environment, | |
type: "type", | |
name: "setup" | |
}); | |
const initHasRun = await pluginStore.get({ key: "initHasRun" }); | |
await pluginStore.set({ key: "initHasRun", value: true }); | |
return !initHasRun; | |
}; | |
const getFilesizeInBytes = filepath => { | |
var stats = fs.statSync(filepath); | |
var fileSizeInBytes = stats["size"]; | |
return fileSizeInBytes; | |
}; | |
const createSeedData = async () => { | |
const categoriesPromises = categories.map(({ ...rest }) => { | |
return strapi.services.category.create({ | |
...rest | |
}); | |
}); | |
const articlesPromises = articles.map(article => { | |
const { imageFileName, mimeType, ...rest } = article; | |
const filepath = `./seed/images/${imageFileName}`; | |
const size = getFilesizeInBytes(filepath); | |
const image = { | |
path: filepath, | |
name: imageFileName, | |
size, | |
type: mimeType | |
}; | |
const files = { | |
image | |
}; | |
return strapi.services.article.create( | |
{ | |
author: null, | |
...rest | |
}, | |
{ files } | |
); | |
}); | |
await Promise.all(categoriesPromises); | |
await Promise.all(articlesPromises); | |
}; | |
module.exports = async () => { | |
const shouldSetDefaultPermissions = await isFirstRun(); | |
if (shouldSetDefaultPermissions) { | |
await setDefaultPermissions(); | |
await createSeedData(); | |
} | |
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment