From 3532b473eeaa2dcfa12e50de5a25cd00c4fda75a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert=20Sch=C3=A4fer?= Date: Wed, 20 Feb 2019 01:30:32 +0100 Subject: [PATCH] Choose another slug is green --- src/middleware/sluggifyMiddleware.js | 17 ++++++++++++++--- src/middleware/slugify/uniqueSlug.js | 6 +++--- 2 files changed, 17 insertions(+), 6 deletions(-) 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 }