setup middleware for language detection

This commit is contained in:
Moriz Wahl 2021-01-19 02:38:24 +01:00 committed by Ulf Gebhardt
parent 9130b2bb50
commit f3847e5c97
No known key found for this signature in database
GPG Key ID: 81308EFE29ABFEBD
5 changed files with 107 additions and 0 deletions

View File

@ -69,6 +69,7 @@
"helmet": "~3.22.0",
"ioredis": "^4.16.1",
"jsonwebtoken": "~8.5.1",
"languagedetect": "^2.0.0",
"linkifyjs": "~2.1.8",
"lodash": "~4.17.14",
"merge-graphql-schemas": "^1.7.7",

View File

@ -14,6 +14,7 @@ import notifications from './notifications/notificationsMiddleware'
import hashtags from './hashtags/hashtagsMiddleware'
import email from './email/emailMiddleware'
import sentry from './sentryMiddleware'
import languages from './languages/languages'
export default (schema) => {
const middlewares = {
@ -30,6 +31,7 @@ export default (schema) => {
softDelete,
includedFields,
orderBy,
languages,
}
let order = [
@ -39,6 +41,7 @@ export default (schema) => {
// 'activityPub', disabled temporarily
'validation',
'sluggify',
'languages',
'excerpt',
'email',
'notifications',

View File

@ -0,0 +1,24 @@
import LanguageDetect from 'languagedetect'
const setPostLanguage = (text) => {
console.log(text)
const lngDetector = new LanguageDetect()
lngDetector.setLanguageType('iso2')
const result = lngDetector.detect(text, 2)
console.log(result)
return result[0][0]
}
export default {
Mutation: {
CreatePost: async (resolve, root, args, context, info) => {
console.log('CreatePost, language', args)
args.language = await setPostLanguage(args.content)
return resolve(root, args, context, info)
},
UpdatePost: async (resolve, root, args, context, info) => {
args.language = await setPostLanguage(args.content)
return resolve(root, args, context, info)
},
},
}

View File

@ -0,0 +1,74 @@
import Factory, { cleanDatabase } from '../../db/factories'
import { gql } from '../../helpers/jest'
import { getNeode, getDriver } from '../../db/neo4j'
import createServer from '../../server'
import { createTestClient } from 'apollo-server-testing'
let mutate
let authenticatedUser
let variables
const driver = getDriver()
const neode = getNeode()
beforeAll(async () => {
const { server } = createServer({
context: () => {
return {
driver,
neode,
user: authenticatedUser,
}
},
})
mutate = createTestClient(server).mutate
await cleanDatabase()
variables = {}
const user = await Factory.build('user')
authenticatedUser = await user.toJson()
await Factory.build('category', {
id: 'cat9',
name: 'Democracy & Politics',
icon: 'university',
})
})
afterAll(async () => {
//await cleanDatabase()
})
const createPostMutation = gql`
mutation($title: String!, $content: String!, $categoryIds: [ID]) {
CreatePost(title: $title, content: $content, categoryIds: $categoryIds) {
language
}
}
`
describe('languagesMiddleware', () => {
variables = {
title: 'Test post languages',
categoryIds: ['cat9'],
}
it('detects German', async () => {
variables = {
...variables,
content: 'Jeder sollte vor seiner eigenen Tür kehren.',
}
await expect(mutate({
mutation: createPostMutation,
variables,
})).resolves.toMatchObject({
data: {
CreatePost: {
language: 'de',
},
},
})
})
})

View File

@ -6302,6 +6302,11 @@ knuth-shuffle-seeded@^1.0.6:
dependencies:
seed-random "~2.2.0"
languagedetect@^2.0.0:
version "2.0.0"
resolved "https://registry.yarnpkg.com/languagedetect/-/languagedetect-2.0.0.tgz#4b8fa2b7593b2a3a02fb1100891041c53238936c"
integrity sha512-AZb/liiQ+6ZoTj4f1J0aE6OkzhCo8fyH+tuSaPfSo8YHCWLFJrdSixhtO2TYdIkjcDQNaR4RmGaV2A5FJklDMQ==
latest-version@^3.0.0:
version "3.1.0"
resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15"