diff --git a/backend/src/schema/resolvers/reports.js b/backend/src/schema/resolvers/reports.js
index 350d86d20..053f138cd 100644
--- a/backend/src/schema/resolvers/reports.js
+++ b/backend/src/schema/resolvers/reports.js
@@ -52,7 +52,7 @@ export default {
reports: async (_parent, params, context, _resolveInfo) => {
const { driver } = context
const session = driver.session()
- let reports, orderByClause
+ let reports, orderByClause, filterClause
switch (params.orderBy) {
case 'createdAt_asc':
orderByClause = 'ORDER BY report.createdAt ASC'
@@ -63,17 +63,37 @@ export default {
default:
orderByClause = ''
}
+
+ switch (params.reviewed) {
+ case true:
+ filterClause = 'AND ((report)<-[:REVIEWED]-(:User))'
+ break
+ case false:
+ filterClause = 'AND NOT ((report)<-[:REVIEWED]-(:User))'
+ break
+ default:
+ filterClause = ''
+ }
+
+ if (params.closed) filterClause = 'AND report.closed = true'
+
+ const offset =
+ params.offset && typeof params.offset === 'number' ? `SKIP ${params.offset}` : ''
+ const limit = params.first && typeof params.first === 'number' ? `LIMIT ${params.first}` : ''
+
const reportReadTxPromise = session.readTransaction(async tx => {
const allReportsTransactionResponse = await tx.run(
`
- MATCH (report:Report)-[:BELONGS_TO]->(resource)
- WHERE resource:User OR resource:Post OR resource:Comment
- WITH report, resource,
- [(submitter:User)-[filed:FILED]->(report) | filed {.*, submitter: properties(submitter)} ] as filed,
- [(moderator:User)-[reviewed:REVIEWED]->(report) | reviewed {.*, moderator: properties(moderator)} ] as reviewed,
- resource {.*, __typename: labels(resource)[0] } as resourceWithType
- RETURN report {.*, resource: resourceWithType, filed: filed, reviewed: reviewed}
- ${orderByClause}
+ MATCH (report:Report)-[:BELONGS_TO]->(resource)
+ WHERE (resource:User OR resource:Post OR resource:Comment)
+ ${filterClause}
+ WITH report, resource,
+ [(submitter:User)-[filed:FILED]->(report) | filed {.*, submitter: properties(submitter)} ] as filed,
+ [(moderator:User)-[reviewed:REVIEWED]->(report) | reviewed {.*, moderator: properties(moderator)} ] as reviewed,
+ resource {.*, __typename: labels(resource)[0] } as resourceWithType
+ RETURN report {.*, resource: resourceWithType, filed: filed, reviewed: reviewed}
+ ${orderByClause}
+ ${offset} ${limit}
`,
)
return allReportsTransactionResponse.records.map(record => record.get('report'))
diff --git a/backend/src/schema/types/type/FILED.gql b/backend/src/schema/types/type/FILED.gql
index 955af0bb8..cdce62116 100644
--- a/backend/src/schema/types/type/FILED.gql
+++ b/backend/src/schema/types/type/FILED.gql
@@ -16,8 +16,3 @@ enum ReasonCategory {
advert_products_services_commercial
criminal_behavior_violation_german_law
}
-
-enum ReportOrdering {
- createdAt_asc
- createdAt_desc
-}
diff --git a/backend/src/schema/types/type/Report.gql b/backend/src/schema/types/type/Report.gql
index 49e5bdae3..ad0015d01 100644
--- a/backend/src/schema/types/type/Report.gql
+++ b/backend/src/schema/types/type/Report.gql
@@ -6,7 +6,7 @@ type Report {
disable: Boolean!
closed: Boolean!
filed: [FILED]
- reviewed: [REVIEWED]
+ reviewed: [REVIEWED]!
resource: ReportedResource
}
@@ -21,5 +21,10 @@ type Mutation {
}
type Query {
- reports(orderBy: ReportOrdering): [Report]
+ reports(orderBy: ReportOrdering, first: Int, offset: Int, reviewed: Boolean, closed: Boolean): [Report]
+}
+
+enum ReportOrdering {
+ createdAt_asc
+ createdAt_desc
}
diff --git a/backend/src/seed/seed-db.js b/backend/src/seed/seed-db.js
index eaa2f7984..2e10b0472 100644
--- a/backend/src/seed/seed-db.js
+++ b/backend/src/seed/seed-db.js
@@ -670,10 +670,12 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
factory.create('Report'),
factory.create('Report'),
factory.create('Report'),
+ factory.create('Report'),
])
const reportAgainstDagobert = reports[0]
const reportAgainstTrollingPost = reports[1]
const reportAgainstTrollingComment = reports[2]
+ const reportAgainstDewey = reports[3]
// report resource first time
await Promise.all([
@@ -695,6 +697,12 @@ const languages = ['de', 'en', 'es', 'fr', 'it', 'pt', 'pl']
reasonDescription: 'This comment is bigoted',
}),
reportAgainstTrollingComment.relateTo(trollingComment, 'belongsTo'),
+ reportAgainstDewey.relateTo(dagobert, 'filed', {
+ resourceId: 'u5',
+ reasonCategory: 'discrimination_etc',
+ reasonDescription: 'This user is harassing me!',
+ }),
+ reportAgainstDewey.relateTo(dewey, 'belongsTo'),
])
// report resource a second time
diff --git a/backend/yarn.lock b/backend/yarn.lock
index 1354bb497..6a6fef4ad 100644
--- a/backend/yarn.lock
+++ b/backend/yarn.lock
@@ -1731,7 +1731,7 @@ apollo-server-caching@^0.5.0:
dependencies:
lru-cache "^5.0.0"
-apollo-server-core@^2.9.12, apollo-server-core@^2.9.13:
+apollo-server-core@^2.9.13:
version "2.9.13"
resolved "https://registry.yarnpkg.com/apollo-server-core/-/apollo-server-core-2.9.13.tgz#29fee69be56d30605b0a06cd755fd39e0409915f"
integrity sha512-iXTGNCtouB0Xe37ySovuZO69NBYOByJlZfUc87gj0pdcz0WbdfUp7qUtNzy3onp63Zo60TFkHWhGNcBJYFluzw==
@@ -7452,11 +7452,6 @@ serve-static@1.14.1:
version "1.14.1"
resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9"
integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==
- dependencies:
- encodeurl "~1.0.2"
- escape-html "~1.0.3"
- parseurl "~1.3.3"
- send "0.17.1"
set-blocking@^2.0.0, set-blocking@~2.0.0:
version "2.0.0"
diff --git a/webapp/components/features/ReportList/ReportList.vue b/webapp/components/features/ReportList/ReportList.vue
index 85b74d7cc..3659daa9e 100644
--- a/webapp/components/features/ReportList/ReportList.vue
+++ b/webapp/components/features/ReportList/ReportList.vue
@@ -7,6 +7,7 @@
+