Choose another slug is green

This commit is contained in:
Robert Schäfer 2019-02-20 01:30:32 +01:00
parent 7a70b9ece4
commit 3532b473ee
2 changed files with 17 additions and 6 deletions

View File

@ -1,11 +1,22 @@
import uniqueSlug from './slugify/uniqueSlug'
import slug from 'slug'
const isUniqueFor = (context, type) => {
return async (slug) => {
const session = context.driver.session()
const response = await session.run(
`MATCH(p:${type} {slug: $slug }) return p.slug`, {
slug
})
session.close()
return response.records.length === 0
}
}
export default {
Mutation: {
CreatePost: async (resolve, root, args, context, info) => {
args.slug = slug(args.title, {
lower: true
})
args.slug = await uniqueSlug(args.title, isUniqueFor(context, 'Post'))
const result = await resolve(root, args, context, info)
return result
},

View File

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