From 924a57a7ca021e8b20882d3246aa944276ea1bc9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Mon, 18 Feb 2019 18:33:30 +0100 Subject: [PATCH] Seed badges and tags --- src/middleware/slugify/uniqueSlug.js | 8 +-- src/seed/data/badges.js | 12 ---- src/seed/data/index.js | 2 - src/seed/factories/badges.js | 22 +++++++ src/seed/factories/index.js | 5 +- src/seed/factories/posts.js | 10 +++- src/seed/factories/tags.js | 17 ++++++ src/seed/seed-db.js | 89 +++++++++++++++++----------- 8 files changed, 111 insertions(+), 54 deletions(-) delete mode 100644 src/seed/data/badges.js create mode 100644 src/seed/factories/badges.js create mode 100644 src/seed/factories/tags.js diff --git a/src/middleware/slugify/uniqueSlug.js b/src/middleware/slugify/uniqueSlug.js index 0f5b264a7..0f66fac5f 100644 --- a/src/middleware/slugify/uniqueSlug.js +++ b/src/middleware/slugify/uniqueSlug.js @@ -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 } diff --git a/src/seed/data/badges.js b/src/seed/data/badges.js deleted file mode 100644 index bb3ad06c7..000000000 --- a/src/seed/data/badges.js +++ /dev/null @@ -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 } - } - ` -} diff --git a/src/seed/data/index.js b/src/seed/data/index.js index 329aa7c03..d9706a6a9 100644 --- a/src/seed/data/index.js +++ b/src/seed/data/index.js @@ -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, diff --git a/src/seed/factories/badges.js b/src/seed/factories/badges.js new file mode 100644 index 000000000..2aabe2014 --- /dev/null +++ b/src/seed/factories/badges.js @@ -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 } + } + ` +} diff --git a/src/seed/factories/index.js b/src/seed/factories/index.js index c7a00a145..886dd2ad9 100644 --- a/src/seed/factories/index.js +++ b/src/seed/factories/index.js @@ -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) => { diff --git a/src/seed/factories/posts.js b/src/seed/factories/posts.js index ca25f69e9..4b15ee359 100644 --- a/src/seed/factories/posts.js +++ b/src/seed/factories/posts.js @@ -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')} } ` } diff --git a/src/seed/factories/tags.js b/src/seed/factories/tags.js new file mode 100644 index 000000000..0854cc0cd --- /dev/null +++ b/src/seed/factories/tags.js @@ -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 } + } + ` +} diff --git a/src/seed/seed-db.js b/src/seed/seed-db.js index 187dacec6..9f6c994ba 100644 --- a/src/seed/seed-db.js +++ b/src/seed/seed-db.js @@ -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...') })() -