0
Fork 0
mirror of https://github.com/TryGhost/Ghost.git synced 2025-03-11 02:12:21 -05:00

Added member feedback to data generator

refs: https://github.com/TryGhost/Toolbox/issues/454
This commit is contained in:
Sam Lord 2023-03-14 10:32:27 +00:00
parent 1e435fb328
commit 72ba6ec4af
3 changed files with 47 additions and 7 deletions

View file

@ -34,7 +34,8 @@ const {
OffersImporter,
LabelsImporter,
MembersLabelsImporter,
RolesUsersImporter
RolesUsersImporter,
MembersFeedbackImporter
} = tables;
const path = require('path');
const fs = require('fs/promises');
@ -409,11 +410,8 @@ class DataGenerator {
const rolesUsersImporter = new RolesUsersImporter(transaction, {roles});
await rolesUsersImporter.importForEach(users, {amount: 1});
// TODO: Members labels
// TODO: Email clicks - redirect, members_click_events (relies on emails)
// TODO: Feedback - members_feedback (relies on members and posts)
const membersFeedbackImporter = new MembersFeedbackImporter(transaction, {emails});
await membersFeedbackImporter.importForEach(emailRecipients, {amount: 1});
await transaction.commit();

View file

@ -33,5 +33,6 @@ module.exports = {
OffersImporter: require('./offers'),
LabelsImporter: require('./labels'),
MembersLabelsImporter: require('./members-labels'),
RolesUsersImporter: require('./roles-users')
RolesUsersImporter: require('./roles-users'),
MembersFeedbackImporter: require('./members-feedback')
};

View file

@ -0,0 +1,41 @@
const TableImporter = require('./base');
const {faker} = require('@faker-js/faker');
const {luck} = require('../utils/random');
const dateToDatabaseString = require('../utils/database-date');
class MembersFeedbackImporter extends TableImporter {
static table = 'members_feedback';
constructor(knex, {emails}) {
super(MembersFeedbackImporter.table, knex);
this.emails = emails;
}
setImportOptions({model}) {
this.model = model;
}
generate() {
// ~10% of people who opened the email will leave feedback
if (!this.model.opened_at || luck(90)) {
return null;
}
const openedAt = new Date(this.model.opened_at);
const laterOn = new Date(this.model.opened_at);
laterOn.setMinutes(laterOn.getMinutes() + 60);
const feedbackTime = new Date(openedAt.valueOf() + (Math.random() * (laterOn.valueOf() - openedAt.valueOf())));
const postId = this.emails.find(email => email.id === this.model.email_id).post_id;
return {
id: faker.database.mongodbObjectId(),
score: luck(70) ? 1 : 0,
member_id: this.model.member_id,
post_id: postId,
created_at: dateToDatabaseString(feedbackTime),
updated_at: dateToDatabaseString(feedbackTime)
};
}
}
module.exports = MembersFeedbackImporter;