From 36ea0cc6d62afa254dbbd0e1f9004440972ea9ec Mon Sep 17 00:00:00 2001 From: Sam Lord Date: Fri, 17 Feb 2023 17:01:20 +0000 Subject: [PATCH] Added labels to data-generator no issue --- ghost/data-generator/lib/data-generator.js | 14 +++++++- ghost/data-generator/lib/tables/index.js | 4 ++- ghost/data-generator/lib/tables/labels.js | 29 ++++++++++++++++ .../lib/tables/members-labels.js | 34 +++++++++++++++++++ 4 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 ghost/data-generator/lib/tables/labels.js create mode 100644 ghost/data-generator/lib/tables/members-labels.js diff --git a/ghost/data-generator/lib/data-generator.js b/ghost/data-generator/lib/data-generator.js index 3e785b0d7c..6c17770e80 100644 --- a/ghost/data-generator/lib/data-generator.js +++ b/ghost/data-generator/lib/data-generator.js @@ -31,7 +31,9 @@ const { EmailRecipientsImporter, RedirectsImporter, MembersClickEventsImporter, - OffersImporter + OffersImporter, + LabelsImporter, + MembersLabelsImporter } = tables; const path = require('path'); const fs = require('fs/promises'); @@ -382,6 +384,16 @@ class DataGenerator { const offersImporter = new OffersImporter(transaction, {products: products.filter(product => product.name !== 'Free')}); await offersImporter.import({amount: 2}); + const labelsImporter = new LabelsImporter(transaction); + const labels = await labelsImporter.import({amount: 10}); + + const membersLabelsImporter = new MembersLabelsImporter(transaction, {labels}); + await membersLabelsImporter.importForEach(members, { + amount: 1 + }); + + // TODO: Members labels + // TODO: Email clicks - redirect, members_click_events (relies on emails) // TODO: Feedback - members_feedback (relies on members and posts) diff --git a/ghost/data-generator/lib/tables/index.js b/ghost/data-generator/lib/tables/index.js index 1cc260f6b7..892da3f87b 100644 --- a/ghost/data-generator/lib/tables/index.js +++ b/ghost/data-generator/lib/tables/index.js @@ -30,5 +30,7 @@ module.exports = { EmailRecipientsImporter: require('./email-recipients'), RedirectsImporter: require('./redirects'), MembersClickEventsImporter: require('./members-click-events'), - OffersImporter: require('./offers') + OffersImporter: require('./offers'), + LabelsImporter: require('./labels'), + MembersLabelsImporter: require('./members-labels') }; diff --git a/ghost/data-generator/lib/tables/labels.js b/ghost/data-generator/lib/tables/labels.js new file mode 100644 index 0000000000..94228e4459 --- /dev/null +++ b/ghost/data-generator/lib/tables/labels.js @@ -0,0 +1,29 @@ +const TableImporter = require('./base'); +const {faker} = require('@faker-js/faker'); +const {slugify} = require('@tryghost/string'); +const {blogStartDate} = require('../utils/blog-info'); +const dateToDatabaseString = require('../utils/database-date'); + +class LabelsImporter extends TableImporter { + static table = 'labels'; + + constructor(knex) { + super(LabelsImporter.table, knex); + } + + generate() { + let name = `${faker.color.human()} ${faker.name.jobType()}`; + name = `${name[0].toUpperCase()}${name.slice(1)}`; + return { + id: faker.database.mongodbObjectId(), + name: name, + slug: `${slugify(name)}`, + created_at: dateToDatabaseString(blogStartDate), + created_by: '1', + updated_at: dateToDatabaseString(blogStartDate), + updated_by: '1' + }; + } +} + +module.exports = LabelsImporter; diff --git a/ghost/data-generator/lib/tables/members-labels.js b/ghost/data-generator/lib/tables/members-labels.js new file mode 100644 index 0000000000..e3a3176c3a --- /dev/null +++ b/ghost/data-generator/lib/tables/members-labels.js @@ -0,0 +1,34 @@ +const TableImporter = require('./base'); +const {faker} = require('@faker-js/faker'); +const {luck} = require('../utils/random'); + +class MembersLabelsImporter extends TableImporter { + static table = 'members_labels'; + + constructor(knex, {labels}) { + super(MembersLabelsImporter.table, knex); + this.labels = labels; + } + + setImportOptions({model}) { + this.model = model; + } + + generate() { + if (luck(90)) { + // 90% of members don't have labels + return; + } + return { + id: faker.database.mongodbObjectId(), + member_id: this.model.id, + label_id: this.labels[faker.datatype.number({ + min: 0, + max: this.labels.length - 1 + })].id, + sort_order: 0 + }; + } +} + +module.exports = MembersLabelsImporter;