Prefer persistent pinnedPost filter in backend

This commit is contained in:
mattwr18 2019-10-17 00:23:00 +02:00
parent f871df02ae
commit cbeecce775
2 changed files with 27 additions and 31 deletions

View File

@ -2,10 +2,9 @@ import uuid from 'uuid/v4'
import { neo4jgraphql } from 'neo4j-graphql-js'
import fileUpload from './fileUpload'
import { getBlockedUsers, getBlockedByUsers } from './users.js'
import { mergeWith, isArray } from 'lodash'
import { mergeWith, isArray, isEmpty } from 'lodash'
import { UserInputError } from 'apollo-server'
import Resolver from './helpers/Resolver'
const filterForBlockedUsers = async (params, context) => {
if (!context.user) return params
const [blockedUsers, blockedByUsers] = await Promise.all([
@ -29,10 +28,26 @@ const filterForBlockedUsers = async (params, context) => {
return params
}
const maintainPinnedPosts = params => {
const pinnedPostFilter = { pinnedBy_in: { role_in: ['admin'] } }
if (isEmpty(params.filter)) {
params.filter = { OR: [pinnedPostFilter, {}] }
} else {
const filteredPostsArray = []
Object.keys(params.filter).forEach(key => {
filteredPostsArray.push({ [key]: params.filter[key] })
})
filteredPostsArray.push(pinnedPostFilter)
params.filter = { OR: filteredPostsArray }
}
return params
}
export default {
Query: {
Post: async (object, params, context, resolveInfo) => {
params = await filterForBlockedUsers(params, context)
params = await maintainPinnedPosts(params)
return neo4jgraphql(object, params, context, resolveInfo, false)
},
findPosts: async (object, params, context, resolveInfo) => {

View File

@ -10,31 +10,23 @@ const defaultFilter = {}
export const state = () => {
return {
filter: {
OR: [{ pinnedBy_in: { role_in: ['admin'] } }, {}],
...defaultFilter,
},
}
}
export const mutations = {
TOGGLE_FILTER_BY_FOLLOWED(state, currentUserId) {
let filter = clone(state.filter)
const id = filter.OR.find(object => object.author)
const filter = clone(state.filter)
const id = get(filter, 'author.followedBy_some.id')
if (id) {
filter.OR.forEach(object => delete object.author)
delete filter.author
state.filter = filter
} else {
if (isEmpty(filter.OR[-1])) filter.OR.pop()
filter.OR.map(object => {
for (let key in object) {
if (object.hasOwnProperty(key)) {
object = { key: object[key] }
}
}
})
filter.OR.unshift({
state.filter = {
...filter,
author: { followedBy_some: { id: currentUserId } },
})
state.filter = filter
}
}
},
RESET_CATEGORIES(state) {
@ -43,20 +35,9 @@ export const mutations = {
state.filter = filter
},
TOGGLE_CATEGORY(state, categoryId) {
let filter = clone(state.filter)
if (isEmpty(filter.OR[-1])) filter.OR.pop()
filter.OR.map(object => {
for (let key in object) {
if (object.hasOwnProperty(key)) {
object = { key: object[key] }
}
}
})
filter.OR.unshift({
categories_some: { id_in: [categoryId] },
})
// update(filter, 'categories_some.id_in', categoryIds => xor(categoryIds, [categoryId]))
// if (isEmpty(get(filter.OR[0], 'categories_some.id_in'))) delete filter.OR[0].categories_some
const filter = clone(state.filter)
update(filter, 'categories_some.id_in', categoryIds => xor(categoryIds, [categoryId]))
if (isEmpty(get(filter, 'categories_some.id_in'))) delete filter.categories_some
state.filter = filter
},
TOGGLE_EMOTION(state, emotion) {