mirror of
https://github.com/IT4Change/Ocelot-Social.git
synced 2025-12-13 07:45:56 +00:00
feat(backend): filter posts of my groups
This commit is contained in:
parent
5b8fcc945c
commit
d41b99b913
@ -0,0 +1,40 @@
|
||||
import { mergeWith, isArray } from 'lodash'
|
||||
|
||||
const getMyGroupIds = async (context) => {
|
||||
const { user } = context
|
||||
if (!(user && user.id)) return []
|
||||
const session = context.driver.session()
|
||||
|
||||
const readTxResultPromise = await session.readTransaction(async (transaction) => {
|
||||
const cypher = `
|
||||
MATCH (group:Group)<-[membership:MEMBER_OF]-(:User { id: $userId })
|
||||
WHERE membership.role IN ['usual', 'admin', 'owner']
|
||||
RETURN collect(group.id) AS myGroupIds`
|
||||
const getMyGroupIdsResponse = await transaction.run(cypher, { userId: user.id })
|
||||
return getMyGroupIdsResponse.records.map((record) => record.get('myGroupIds'))
|
||||
})
|
||||
try {
|
||||
const [myGroupIds] = readTxResultPromise
|
||||
return myGroupIds
|
||||
} finally {
|
||||
session.close()
|
||||
}
|
||||
}
|
||||
|
||||
export const filterPostsOfMyGroups = async (params, context) => {
|
||||
if (!(params.filter && params.filter.postsInMyGroups)) return params
|
||||
delete params.filter.postsInMyGroups
|
||||
const myGroupIds = await getMyGroupIds(context)
|
||||
params.filter = mergeWith(
|
||||
params.filter,
|
||||
{
|
||||
group: { id_in: myGroupIds },
|
||||
},
|
||||
(objValue, srcValue) => {
|
||||
if (isArray(objValue)) {
|
||||
return objValue.concat(srcValue)
|
||||
}
|
||||
},
|
||||
)
|
||||
return params
|
||||
}
|
||||
@ -6,6 +6,7 @@ import { mergeImage, deleteImage } from './images/images'
|
||||
import Resolver from './helpers/Resolver'
|
||||
import { filterForMutedUsers } from './helpers/filterForMutedUsers'
|
||||
import { filterInvisiblePosts } from './helpers/filterInvisiblePosts'
|
||||
import { filterPostsOfMyGroups } from './helpers/filterPostsOfMyGroups'
|
||||
import CONFIG from '../../config'
|
||||
|
||||
const maintainPinnedPosts = (params) => {
|
||||
@ -21,12 +22,14 @@ const maintainPinnedPosts = (params) => {
|
||||
export default {
|
||||
Query: {
|
||||
Post: async (object, params, context, resolveInfo) => {
|
||||
params = await filterPostsOfMyGroups(params, context)
|
||||
params = await filterInvisiblePosts(params, context)
|
||||
params = await filterForMutedUsers(params, context)
|
||||
params = await maintainPinnedPosts(params)
|
||||
return neo4jgraphql(object, params, context, resolveInfo)
|
||||
},
|
||||
profilePagePosts: async (object, params, context, resolveInfo) => {
|
||||
params = await filterPostsOfMyGroups(params, context)
|
||||
params = await filterInvisiblePosts(params, context)
|
||||
params = await filterForMutedUsers(params, context)
|
||||
return neo4jgraphql(object, params, context, resolveInfo)
|
||||
|
||||
@ -82,6 +82,7 @@ input _PostFilter {
|
||||
emotions_single: _PostEMOTEDFilter
|
||||
emotions_every: _PostEMOTEDFilter
|
||||
group: _GroupFilter
|
||||
postsInMyGroups: Boolean
|
||||
}
|
||||
|
||||
enum _PostOrdering {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user