diff --git a/src/middleware/sluggifyMiddleware.js b/src/middleware/sluggifyMiddleware.js index f059cb680..e187aa797 100644 --- a/src/middleware/sluggifyMiddleware.js +++ b/src/middleware/sluggifyMiddleware.js @@ -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 }, diff --git a/src/middleware/slugify/uniqueSlug.js b/src/middleware/slugify/uniqueSlug.js index 0f66fac5f..8b04edc6f 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 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 }