mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-17 13:10:25 -04:00
Split admin API for reported events into a detail and a list view (#8539)
Split admin API for reported events in detail und list view. API was introduced with #8217 in synapse v.1.21.0. It makes the list (`GET /_synapse/admin/v1/event_reports`) less complex and provides a better overview. The details can be queried with: `GET /_synapse/admin/v1/event_reports/<report_id>`. It is similar to room and users API. It is a kind of regression in `GET /_synapse/admin/v1/event_reports`. `event_json` was removed. But the api was introduced one version before and it is an admin API (not under spec). Signed-off-by: Dirk Klimpel dirk@klimpel.org
This commit is contained in:
parent
6c9ab61df5
commit
66e6801c3e
6 changed files with 410 additions and 85 deletions
|
@ -1411,6 +1411,65 @@ class RoomStore(RoomBackgroundUpdateStore, RoomWorkerStore, SearchStore):
|
|||
desc="add_event_report",
|
||||
)
|
||||
|
||||
async def get_event_report(self, report_id: int) -> Optional[Dict[str, Any]]:
|
||||
"""Retrieve an event report
|
||||
|
||||
Args:
|
||||
report_id: ID of reported event in database
|
||||
Returns:
|
||||
event_report: json list of information from event report
|
||||
"""
|
||||
|
||||
def _get_event_report_txn(txn, report_id):
|
||||
|
||||
sql = """
|
||||
SELECT
|
||||
er.id,
|
||||
er.received_ts,
|
||||
er.room_id,
|
||||
er.event_id,
|
||||
er.user_id,
|
||||
er.content,
|
||||
events.sender,
|
||||
room_stats_state.canonical_alias,
|
||||
room_stats_state.name,
|
||||
event_json.json AS event_json
|
||||
FROM event_reports AS er
|
||||
LEFT JOIN events
|
||||
ON events.event_id = er.event_id
|
||||
JOIN event_json
|
||||
ON event_json.event_id = er.event_id
|
||||
JOIN room_stats_state
|
||||
ON room_stats_state.room_id = er.room_id
|
||||
WHERE er.id = ?
|
||||
"""
|
||||
|
||||
txn.execute(sql, [report_id])
|
||||
row = txn.fetchone()
|
||||
|
||||
if not row:
|
||||
return None
|
||||
|
||||
event_report = {
|
||||
"id": row[0],
|
||||
"received_ts": row[1],
|
||||
"room_id": row[2],
|
||||
"event_id": row[3],
|
||||
"user_id": row[4],
|
||||
"score": db_to_json(row[5]).get("score"),
|
||||
"reason": db_to_json(row[5]).get("reason"),
|
||||
"sender": row[6],
|
||||
"canonical_alias": row[7],
|
||||
"name": row[8],
|
||||
"event_json": db_to_json(row[9]),
|
||||
}
|
||||
|
||||
return event_report
|
||||
|
||||
return await self.db_pool.runInteraction(
|
||||
"get_event_report", _get_event_report_txn, report_id
|
||||
)
|
||||
|
||||
async def get_event_reports_paginate(
|
||||
self,
|
||||
start: int,
|
||||
|
@ -1468,18 +1527,15 @@ class RoomStore(RoomBackgroundUpdateStore, RoomWorkerStore, SearchStore):
|
|||
er.room_id,
|
||||
er.event_id,
|
||||
er.user_id,
|
||||
er.reason,
|
||||
er.content,
|
||||
events.sender,
|
||||
room_aliases.room_alias,
|
||||
event_json.json AS event_json
|
||||
room_stats_state.canonical_alias,
|
||||
room_stats_state.name
|
||||
FROM event_reports AS er
|
||||
LEFT JOIN room_aliases
|
||||
ON room_aliases.room_id = er.room_id
|
||||
JOIN events
|
||||
LEFT JOIN events
|
||||
ON events.event_id = er.event_id
|
||||
JOIN event_json
|
||||
ON event_json.event_id = er.event_id
|
||||
JOIN room_stats_state
|
||||
ON room_stats_state.room_id = er.room_id
|
||||
{where_clause}
|
||||
ORDER BY er.received_ts {order}
|
||||
LIMIT ?
|
||||
|
@ -1490,15 +1546,29 @@ class RoomStore(RoomBackgroundUpdateStore, RoomWorkerStore, SearchStore):
|
|||
|
||||
args += [limit, start]
|
||||
txn.execute(sql, args)
|
||||
event_reports = self.db_pool.cursor_to_dict(txn)
|
||||
|
||||
if count > 0:
|
||||
for row in event_reports:
|
||||
try:
|
||||
row["content"] = db_to_json(row["content"])
|
||||
row["event_json"] = db_to_json(row["event_json"])
|
||||
except Exception:
|
||||
continue
|
||||
event_reports = []
|
||||
for row in txn:
|
||||
try:
|
||||
s = db_to_json(row[5]).get("score")
|
||||
r = db_to_json(row[5]).get("reason")
|
||||
except Exception:
|
||||
logger.error("Unable to parse json from event_reports: %s", row[0])
|
||||
continue
|
||||
event_reports.append(
|
||||
{
|
||||
"id": row[0],
|
||||
"received_ts": row[1],
|
||||
"room_id": row[2],
|
||||
"event_id": row[3],
|
||||
"user_id": row[4],
|
||||
"score": s,
|
||||
"reason": r,
|
||||
"sender": row[6],
|
||||
"canonical_alias": row[7],
|
||||
"name": row[8],
|
||||
}
|
||||
)
|
||||
|
||||
return event_reports, count
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue