Refactor reports mutation to CaseFolder structure

This commit is contained in:
Wolfgang Huß 2019-11-18 11:25:47 +01:00
parent 3daba417de
commit 3b4de22855
4 changed files with 33 additions and 45 deletions

View File

@ -5,7 +5,6 @@ export default {
report: async (_parent, params, context, _resolveInfo) => {
let createdRelationshipWithNestedAttributes
const { resourceId, reasonCategory, reasonDescription } = params
// Wolle console.log('resourceId: ', resourceId)
const { driver, user } = context
const session = driver.session()
const writeTxResultPromise = session.writeTransaction(async txc => {
@ -21,7 +20,7 @@ export default {
WITH submitter, resource, caseFolder
CREATE (caseFolder)<-[report:REPORTED {createdAt: $createdAt, reasonCategory: $reasonCategory, reasonDescription: $reasonDescription}]-(submitter)
RETURN caseFolder {.id}, submitter, report, resource, labels(resource)[0] AS type
RETURN submitter, report, caseFolder {.id}, resource, labels(resource)[0] AS type
`,
{
resourceId,
@ -32,19 +31,17 @@ export default {
},
)
return reportRelationshipTransactionResponse.records.map(record => ({
caseFolder: record.get('caseFolder'),
submitter: record.get('submitter'),
report: record.get('report'),
caseFolder: record.get('caseFolder'),
resource: record.get('resource').properties,
type: record.get('type'),
}))
})
try {
// Wolle console.log('reasonCategory: ', reasonCategory)
const txResult = await writeTxResultPromise
// Wolle console.log('txResult: ', txResult)
if (!txResult[0]) return null
const { caseFolder, submitter, report, resource, type } = txResult[0]
const { submitter, report, caseFolder, resource, type } = txResult[0]
createdRelationshipWithNestedAttributes = {
...report.properties,
caseFolderId: caseFolder.id,
@ -89,42 +86,34 @@ export default {
}
try {
const cypher = `
MATCH (submitter:User)-[report:REPORTED]->(resource)
WHERE resource:User OR resource:Comment OR resource:Post
OPTIONAL MATCH (:User)-[decision:DECIDED {uuid: report.decisionUuid}]->(resource)
OPTIONAL MATCH (:User)-[decisionPending:DECIDED {latest: true}]->(resource)
RETURN report, submitter, resource, labels(resource)[0] as type, decision, decisionPending
MATCH (submitter:User)-[report:REPORTED]->(caseFolder:CaseFolder)-[:FLAGGED]->(resource)
// Wolle OPTIONAL MATCH (reviewer:User)-[:REVIEWED]->(caseFolder)
WHERE resource:User OR resource:Post OR resource:Comment
RETURN submitter, report, caseFolder, resource, labels(resource)[0] as type
${orderByClause}
`
const result = await session.run(cypher, {})
const dbResponse = result.records.map(r => {
return {
report: r.get('report'),
submitter: r.get('submitter'),
report: r.get('report'),
caseFolder: r.get('caseFolder'),
resource: r.get('resource'),
type: r.get('type'),
decision: r.get('decision'),
decisionPending: r.get('decisionPending'),
}
})
if (!dbResponse) return null
response = []
dbResponse.forEach(ele => {
const { report, submitter, resource, type, decision, decisionPending } = ele
const { report, submitter, caseFolder, resource, type, decision, decisionPending } = ele
const responseEle = {
...report.properties,
decisionAt: decision
? decision.properties.updatedAt
: decisionPending
? decisionPending.properties.updatedAt
: null,
decisionDisable: decision
? decision.properties.disable
: decisionPending
? decisionPending.properties.disable
: null,
caseFolderId: caseFolder.id,
caseFolderUpdatedAt: caseFolder.updatedAt,
caseFolderDisable: caseFolder.disable,
caseFolderClosed: caseFolder.closed,
post: null,
comment: null,
user: null,
@ -162,6 +151,6 @@ export default {
},
},
REPORTED: {
...undefinedToNullResolver(['decisionUuid', 'decisionAt', 'decisionDisable']),
// Wolle ...undefinedToNullResolver(['decisionUuid', 'decisionAt', 'decisionDisable']),
},
}

View File

@ -2,12 +2,11 @@ type REPORTED {
createdAt: String!
reasonCategory: ReasonCategory!
reasonDescription: String!
caseFolderId: ID!
closed: Boolean # ! Wolle comlete still needed?
decisionUuid: ID # Wolle still needed?
decisionDisable: Boolean # Wolle still needed?
decisionAt: String # Wolle still needed?
caseFolderId: ID!
caseFolderDisable: Boolean!
caseFolderUpdatedAt: String!
caseFolderClosed: Boolean!
# Wolle decision: DECIDED
# @cypher(statement: "MATCH (resource)<-[decision:DECIDED {uuid: $decisionUuid}]-(user:User) RETURN decision")

View File

@ -8,10 +8,10 @@ export const reportListQuery = () => {
createdAt
reasonCategory
reasonDescription
closed
decisionUuid
decisionAt
decisionDisable
caseFolderId
caseFolderUpdatedAt
caseFolderDisable
caseFolderClosed
type
submitter {
id

View File

@ -11,7 +11,7 @@
<template v-for="content in reportedContentStructure">
<thead
:class="[
content.closed ? 'decision' : 'no-decision',
content.caseFolderClosed ? 'decision' : 'no-decision',
'ds-table-col',
'ds-table-head-col',
'ds-table-head-col-border',
@ -88,8 +88,8 @@
<span v-else></span>
</td>
<td class="ds-table-col ds-table-head-col-border">
<!-- closed -->
<b v-if="content.closed">
<!-- caseFolderClosed -->
<b v-if="content.caseFolderClosed">
{{ $t('moderation.reports.decided') }}
</b>
<ds-button
@ -104,7 +104,7 @@
<!-- decidedByModerator -->
<div v-if="content.resource.decidedByModerator">
<br />
<div v-if="content.decisionDisable">
<div v-if="content.caseFolderDisable">
<ds-icon name="eye-slash" class="ban" />
{{ $t('moderation.reports.disabledBy') }}
</div>
@ -116,7 +116,7 @@
:user="content.resource.decidedByModerator"
:showAvatar="false"
:trunc="30"
:date-time="content.decisionAt"
:date-time="content.caseFolderUpdatedAt"
positionDatetime="below"
/>
</div>
@ -226,10 +226,10 @@ export default {
if (idx === -1) {
idx = newReportedContentStructure.length
newReportedContentStructure.push({
closed: report.closed,
decisionUuid: report.decisionUuid,
decisionAt: report.decisionAt,
decisionDisable: report.decisionDisable,
caseFolderId: report.caseFolderId,
caseFolderUpdatedAt: report.caseFolderUpdatedAt,
caseFolderDisable: report.caseFolderDisable,
caseFolderClosed: report.caseFolderClosed,
type: report.type,
resource,
user: report.user,
@ -267,7 +267,7 @@ export default {
'moderation.reports.decideModal.' +
content.type +
'.' +
(content.decisionDisable ? 'disable' : 'enable')
(content.caseFolderDisable ? 'disable' : 'enable')
this.$store.commit('modal/SET_OPEN', {
name: 'confirm',
data: {