Seed badges and tags

This commit is contained in:
Robert Schäfer 2019-02-18 18:33:30 +01:00
parent 437e8589f8
commit 924a57a7ca
8 changed files with 111 additions and 54 deletions

View File

@ -1,15 +1,15 @@
import slugify from 'slug'
export default function uniqueSlug(string, isUnique) {
export default function uniqueSlug (string, isUnique) {
let slug = slugify(string, {
lower: true
})
if (isUnique(slug)) return slug;
if (isUnique(slug)) return slug
let count = 0
let uniqueSlug
do {
count += 1
uniqueSlug = `${slug}-${count}`
} while(!isUnique(uniqueSlug));
return uniqueSlug;
} while (!isUnique(uniqueSlug))
return uniqueSlug
}

View File

@ -1,12 +0,0 @@
export default function (data) {
return `
mutation {
b1: CreateBadge(id: "b1", key: "indiegogo_en_racoon", type: crowdfunding, status: permanent, icon: "/img/badges/indiegogo_en_racoon.svg") { id }
b2: CreateBadge(id: "b2", key: "indiegogo_en_rabbit", type: crowdfunding, status: permanent, icon: "/img/badges/indiegogo_en_rabbit.svg") { id }
b3: CreateBadge(id: "b3", key: "indiegogo_en_wolf", type: crowdfunding, status: permanent, icon: "/img/badges/indiegogo_en_wolf.svg") { id }
b4: CreateBadge(id: "b4", key: "indiegogo_en_bear", type: crowdfunding, status: permanent, icon: "/img/badges/indiegogo_en_bear.svg") { id }
b5: CreateBadge(id: "b5", key: "indiegogo_en_turtle", type: crowdfunding, status: permanent, icon: "/img/badges/indiegogo_en_turtle.svg") { id }
b6: CreateBadge(id: "b6", key: "indiegogo_en_rhino", type: crowdfunding, status: permanent, icon: "/img/badges/indiegogo_en_rhino.svg") { id }
}
`
}

View File

@ -1,6 +1,4 @@
export default {
Badge: require('./badges.js').default,
Tags: require('./tags.js').default,
UserBadges: require('./users-badges.js').default,
UserBlacklist: require('./users-blacklist.js').default,

View File

@ -0,0 +1,22 @@
import faker from 'faker'
export default function (params) {
const {
id = `cat${faker.random.number()}`,
key,
type = 'crowdfunding',
status = 'permanent',
icon
} = params
return `
mutation {
${id}: CreateBadge(
id: "${id}",
key: "${key}",
type: ${type},
status: ${status},
icon: "${icon}") { id }
}
`
}

View File

@ -1,6 +1,5 @@
import { GraphQLClient } from 'graphql-request'
import ApolloClient from 'apollo-client'
import gql from 'graphql-tag'
import dotenv from 'dotenv'
import { HttpLink } from 'apollo-link-http'
import { InMemoryCache } from 'apollo-cache-inmemory'
@ -19,9 +18,11 @@ const apolloClient = new ApolloClient({
const driver = neo4j().getDriver()
const builders = {
'badge': require('./badges.js').default,
'user': require('./users.js').default,
'post': require('./posts.js').default,
'category': require('./categories.js').default
'category': require('./categories.js').default,
'tag': require('./tags.js').default
}
const buildMutation = (model, parameters) => {

View File

@ -10,7 +10,7 @@ export default function (params) {
faker.lorem.sentence(),
faker.lorem.sentence(),
faker.lorem.sentence(),
faker.lorem.sentence(),
faker.lorem.sentence()
].join('. '),
image = faker.image.image(),
visibility = 'public',
@ -27,6 +27,13 @@ export default function (params) {
) { from { id } }`
})
const tagRelations = tagIds.map((tagId) => {
return `${id}_${tagId}: AddPostTags(
from: {id: "${id}"},
to: {id: "${tagId}"}
) { from { id } }`
})
return `
mutation {
${id}: CreatePost(
@ -39,6 +46,7 @@ export default function (params) {
deleted: ${deleted}
) { id, title }
${categoryRelations.join('\n')}
${tagRelations.join('\n')}
}
`
}

View File

@ -0,0 +1,17 @@
import faker from 'faker'
export default function (params) {
const {
id = `t${faker.random.number()}`,
name
} = params
return `
mutation {
CreateTag(
id: "${id}",
name: "${name}",
) { name }
}
`
}

View File

@ -5,14 +5,13 @@ import asyncForEach from '../helpers/asyncForEach'
import seed from './data'
(async function () {
// prefer factories
try {
const [admin, moderator, user, ...otherUsers] = await Promise.all([
create('user', {id: 'u1', name: 'Peter Lustig' , role: 'admin' , email: 'admin@example.org', password: '1234'}),
create('user', {id: 'u2', name: 'Bob der Baumeister', role: 'moderator', email: 'moderator@example.org'}),
create('user', {id: 'u3', name: 'Jenny Rostock' , role: 'user' , email: 'user@example.org'}),
create('user', {id: 'u4', name: 'Angie Banjie' , role: 'user' , email: 'angie@example.org'}),
await Promise.all([
create('user', { id: 'u1', name: 'Peter Lustig', role: 'admin', email: 'admin@example.org', password: '1234' }),
create('user', { id: 'u2', name: 'Bob der Baumeister', role: 'moderator', email: 'moderator@example.org' }),
create('user', { id: 'u3', name: 'Jenny Rostock', role: 'user', email: 'user@example.org' }),
create('user', { id: 'u4', name: 'Angie Banjie', role: 'user', email: 'angie@example.org' })
])
const asAdmin = await authenticatedHeaders({
@ -28,40 +27,65 @@ import seed from './data'
password: '1234'
}, host)
const categories = await Promise.all([
create('category', { id: "cat1", name: "Just For Fun", slug: "justforfun", icon: "smile" }),
create('category', { id: "cat2", name: "Happyness & Values", slug: "happyness-values", icon: "heart-o" }),
create('category', { id: "cat3", name: "Health & Wellbeing", slug: "health-wellbeing", icon: "medkit" }),
create('category', { id: "cat4", name: "Environment & Nature", slug: "environment-nature", icon: "tree" }),
create('category', { id: "cat5", name: "Animal Protection", slug: "animalprotection", icon: "paw" }),
create('category', { id: "cat6", name: "Humanrights Justice", slug: "humanrights-justice", icon: "balance-scale" }),
create('category', { id: "cat7", name: "Education & Sciences", slug: "education-sciences", icon: "graduation-cap" }),
create('category', { id: "cat8", name: "Cooperation & Development", slug: "cooperation-development", icon: "users" }),
create('category', { id: "cat9", name: "Democracy & Politics", slug: "democracy-politics", icon: "university" }),
create('category', { id: "cat10", name: "Economy & Finances", slug: "economy-finances", icon: "money" }),
create('category', { id: "cat11", name: "Energy & Technology", slug: "energy-technology", icon: "flash" }),
create('category', { id: "cat12", name: "IT, Internet & Data Privacy", slug: "it-internet-dataprivacy", icon: "mouse-pointer" }),
create('category', { id: "cat13", name: "Art, Curlure & Sport", slug: "art-culture-sport", icon: "paint-brush" }),
create('category', { id: "cat14", name: "Freedom of Speech", slug: "freedomofspeech", icon: "bullhorn" }),
create('category', { id: "cat15", name: "Consumption & Sustainability", slug: "consumption-sustainability", icon: "shopping-cart" }),
create('category', { id: "cat16", name: "Global Peace & Nonviolence", slug: "globalpeace-nonviolence", icon: "angellist" })
await Promise.all([
create('category', { id: 'cat1', name: 'Just For Fun', slug: 'justforfun', icon: 'smile' }),
create('category', { id: 'cat2', name: 'Happyness & Values', slug: 'happyness-values', icon: 'heart-o' }),
create('category', { id: 'cat3', name: 'Health & Wellbeing', slug: 'health-wellbeing', icon: 'medkit' }),
create('category', { id: 'cat4', name: 'Environment & Nature', slug: 'environment-nature', icon: 'tree' }),
create('category', { id: 'cat5', name: 'Animal Protection', slug: 'animalprotection', icon: 'paw' }),
create('category', { id: 'cat6', name: 'Humanrights Justice', slug: 'humanrights-justice', icon: 'balance-scale' }),
create('category', { id: 'cat7', name: 'Education & Sciences', slug: 'education-sciences', icon: 'graduation-cap' }),
create('category', { id: 'cat8', name: 'Cooperation & Development', slug: 'cooperation-development', icon: 'users' }),
create('category', { id: 'cat9', name: 'Democracy & Politics', slug: 'democracy-politics', icon: 'university' }),
create('category', { id: 'cat10', name: 'Economy & Finances', slug: 'economy-finances', icon: 'money' }),
create('category', { id: 'cat11', name: 'Energy & Technology', slug: 'energy-technology', icon: 'flash' }),
create('category', { id: 'cat12', name: 'IT, Internet & Data Privacy', slug: 'it-internet-dataprivacy', icon: 'mouse-pointer' }),
create('category', { id: 'cat13', name: 'Art, Curlure & Sport', slug: 'art-culture-sport', icon: 'paint-brush' }),
create('category', { id: 'cat14', name: 'Freedom of Speech', slug: 'freedomofspeech', icon: 'bullhorn' }),
create('category', { id: 'cat15', name: 'Consumption & Sustainability', slug: 'consumption-sustainability', icon: 'shopping-cart' }),
create('category', { id: 'cat16', name: 'Global Peace & Nonviolence', slug: 'globalpeace-nonviolence', icon: 'angellist' })
])
await Promise.all([
create('tag', { id: 't1', name: 'Umwelt' }),
create('tag', { id: 't2', name: 'Naturschutz' }),
create('tag', { id: 't3', name: 'Demokratie' }),
create('tag', { id: 't4', name: 'Freiheit' })
])
await create('post', {id: 'p1', categoryIds: ['cat1']}, { headers: asAdmin } )
await create('post', {id: 'p2', categoryIds: ['cat2']}, { headers: asModerator } )
await create('post', {id: 'p3', categoryIds: ['cat3']}, { headers: asUser } )
await create('post', {id: 'p4', categoryIds: ['cat4']}, { headers: asAdmin } )
await create('post', {id: 'p5', categoryIds: ['cat5']}, { headers: asModerator } )
await create('post', {id: 'p6', categoryIds: ['cat6']}, { headers: asUser } )
} catch(err) {
await Promise.all([
create('badge', { id: 'b1', key: 'indiegogo_en_racoon', type: 'crowdfunding', status: 'permanent', icon: '/img/badges/indiegogo_en_racoon.svg' }),
create('badge', { id: 'b2', key: 'indiegogo_en_rabbit', type: 'crowdfunding', status: 'permanent', icon: '/img/badges/indiegogo_en_rabbit.svg' }),
create('badge', { id: 'b3', key: 'indiegogo_en_wolf', type: 'crowdfunding', status: 'permanent', icon: '/img/badges/indiegogo_en_wolf.svg' }),
create('badge', { id: 'b4', key: 'indiegogo_en_bear', type: 'crowdfunding', status: 'permanent', icon: '/img/badges/indiegogo_en_bear.svg' }),
create('badge', { id: 'b5', key: 'indiegogo_en_turtle', type: 'crowdfunding', status: 'permanent', icon: '/img/badges/indiegogo_en_turtle.svg' }),
create('badge', { id: 'b6', key: 'indiegogo_en_rhino', type: 'crowdfunding', status: 'permanent', icon: '/img/badges/indiegogo_en_rhino.svg' })
])
await Promise.all([
create('post', { id: 'p0', categoryIds: ['cat1'], tagIds: ['t1', 't4'] }, { headers: asAdmin }),
create('post', { id: 'p1', categoryIds: ['cat2'], tagIds: ['t2', 't3'] }, { headers: asModerator }),
create('post', { id: 'p2', categoryIds: ['cat3'], tagIds: ['t3', 't4'] }, { headers: asUser }),
create('post', { id: 'p3', categoryIds: ['cat4'], tagIds: ['t4', 't2'] }, { headers: asAdmin }),
create('post', { id: 'p4', categoryIds: ['cat5'], tagIds: ['t1', 't2'] }, { headers: asModerator }),
create('post', { id: 'p5', categoryIds: ['cat6'], tagIds: ['t2', 't4'] }, { headers: asUser }),
create('post', { id: 'p6', categoryIds: ['cat7'], tagIds: ['t1', 't4'] }, { headers: asAdmin }),
create('post', { id: 'p7', categoryIds: ['cat8'], tagIds: ['t2', 't3'] }, { headers: asModerator }),
create('post', { id: 'p8', categoryIds: ['cat9'], tagIds: ['t3', 't4'] }, { headers: asUser }),
create('post', { id: 'p10', categoryIds: ['cat11'], tagIds: ['t4', 't2'] }, { headers: asAdmin }),
create('post', { id: 'p11', categoryIds: ['cat12'], tagIds: ['t1', 't2'] }, { headers: asModerator }),
create('post', { id: 'p12', categoryIds: ['cat13'], tagIds: ['t2', 't4'] }, { headers: asUser }),
create('post', { id: 'p13', categoryIds: ['cat14'], tagIds: ['t4', 't2'] }, { headers: asAdmin }),
create('post', { id: 'p14', categoryIds: ['cat15'], tagIds: ['t1', 't2'] }, { headers: asModerator }),
create('post', { id: 'p15', categoryIds: ['cat16'], tagIds: ['t2', 't4'] }, { headers: asUser })
])
} catch (err) {
/* eslint-disable-next-line no-console */
console.error(err)
process.exit(1)
}
let data = {}
let data = {}
// legacy seeds
await asyncForEach(Object.keys(seed), async key => {
const mutations = seed[key]
@ -80,4 +104,3 @@ let data = {}
/* eslint-disable-next-line no-console */
console.log('Seeded Data...')
})()