From 6e57553480ae91c6ea83803ab1647e8393ec752e Mon Sep 17 00:00:00 2001 From: Till Faelligen <2353100+S7evinK@users.noreply.github.com> Date: Wed, 20 Mar 2024 07:42:42 +0100 Subject: [PATCH] Use NIDs instead of strings, add event_sender_nid --- .../storage/postgres/reported_events_table.go | 23 +++++++++++-------- roomserver/storage/shared/storage.go | 21 ++++++++++++++++- .../storage/sqlite3/reported_events_table.go | 23 +++++++++++-------- roomserver/storage/tables/interface.go | 3 ++- 4 files changed, 48 insertions(+), 22 deletions(-) diff --git a/roomserver/storage/postgres/reported_events_table.go b/roomserver/storage/postgres/reported_events_table.go index 6ae903a87..01debcf9a 100644 --- a/roomserver/storage/postgres/reported_events_table.go +++ b/roomserver/storage/postgres/reported_events_table.go @@ -29,18 +29,19 @@ const reportedEventsScheme = ` CREATE SEQUENCE IF NOT EXISTS roomserver_reported_events_id_seq; CREATE TABLE IF NOT EXISTS roomserver_reported_events ( - id BIGINT PRIMARY KEY DEFAULT nextval('roomserver_reported_events_id_seq'), - room_nid BIGINT NOT NULL, - event_nid BIGINT NOT NULL, - user_id TEXT NOT NULL, - reason TEXT, - score INTEGER, - received_ts BIGINT NOT NULL + id BIGINT PRIMARY KEY DEFAULT nextval('roomserver_reported_events_id_seq'), + room_nid BIGINT NOT NULL, + event_nid BIGINT NOT NULL, + reporting_user_nid INTEGER NOT NULL, -- the user reporting the event + event_sender_nid INTEGER NOT NULL, -- the user who sent the reported event + reason TEXT, + score INTEGER, + received_ts BIGINT NOT NULL );` const insertReportedEventSQL = ` - INSERT INTO roomserver_reported_events (room_nid, event_nid, user_id, reason, score, received_ts) - VALUES ($1, $2, $3, $4, $5, $6) + INSERT INTO roomserver_reported_events (room_nid, event_nid, reporting_user_nid, event_sender_nid, reason, score, received_ts) + VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id ` @@ -66,7 +67,8 @@ func (r *reportedEventsStatements) InsertReportedEvent( txn *sql.Tx, roomNID types.RoomNID, eventNID types.EventNID, - reportingUserID string, + reportingUserID types.EventStateKeyNID, + eventSenderID types.EventStateKeyNID, reason string, score int64, ) (int64, error) { @@ -77,6 +79,7 @@ func (r *reportedEventsStatements) InsertReportedEvent( roomNID, eventNID, reportingUserID, + eventSenderID, reason, score, spec.AsTimestamp(time.Now()), diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go index d2edc3f1e..f1fb3cf99 100644 --- a/roomserver/storage/shared/storage.go +++ b/roomserver/storage/shared/storage.go @@ -1905,9 +1905,28 @@ func (d *Database) InsertReportedEvent( return 0, fmt.Errorf("unable to find requested event") } + stateKeyNIDs, err := d.EventStateKeyNIDs(ctx, []string{reportingUserID, events[0].SenderID().ToUserID().String()}) + if err != nil { + return 0, fmt.Errorf("failed to query eventStateKeyNIDs: %w", err) + } + + // We expect exactly 2 stateKeyNIDs + if len(stateKeyNIDs) != 2 { + return 0, fmt.Errorf("expected 2 stateKeyNIDs, received %d", len(stateKeyNIDs)) + } + var reportID int64 err = d.Writer.Do(d.DB, nil, func(txn *sql.Tx) error { - reportID, err = d.ReportedEventsTable.InsertReportedEvent(ctx, txn, roomInfo.RoomNID, events[0].EventNID, reportingUserID, reason, score) + reportID, err = d.ReportedEventsTable.InsertReportedEvent( + ctx, + txn, + roomInfo.RoomNID, + events[0].EventNID, + stateKeyNIDs[reportingUserID], + stateKeyNIDs[events[0].SenderID().ToUserID().String()], + reason, + score, + ) if err != nil { return err } diff --git a/roomserver/storage/sqlite3/reported_events_table.go b/roomserver/storage/sqlite3/reported_events_table.go index a441ea66a..4a8582fc4 100644 --- a/roomserver/storage/sqlite3/reported_events_table.go +++ b/roomserver/storage/sqlite3/reported_events_table.go @@ -28,18 +28,19 @@ import ( const reportedEventsScheme = ` CREATE TABLE IF NOT EXISTS roomserver_reported_events ( - id INTEGER PRIMARY KEY AUTOINCREMENT, - room_nid INTEGER NOT NULL, - event_nid INTEGER NOT NULL, - user_id TEXT NOT NULL, - reason TEXT, - score INTEGER, - received_ts INTEGER NOT NULL + id INTEGER PRIMARY KEY AUTOINCREMENT, + room_nid INTEGER NOT NULL, + event_nid INTEGER NOT NULL, + reporting_user_nid INTEGER NOT NULL, -- the user reporting the event + event_sender_nid INTEGER NOT NULL, -- the user who sent the reported event + reason TEXT, + score INTEGER, + received_ts INTEGER NOT NULL );` const insertReportedEventSQL = ` - INSERT INTO roomserver_reported_events (room_nid, event_nid, user_id, reason, score, received_ts) - VALUES ($1, $2, $3, $4, $5, $6) + INSERT INTO roomserver_reported_events (room_nid, event_nid, reporting_user_nid, event_sender_nid, reason, score, received_ts) + VALUES ($1, $2, $3, $4, $5, $6, $7) RETURNING id ` @@ -65,7 +66,8 @@ func (r *reportedEventsStatements) InsertReportedEvent( txn *sql.Tx, roomNID types.RoomNID, eventNID types.EventNID, - reportingUserID string, + reportingUserID types.EventStateKeyNID, + eventSenderID types.EventStateKeyNID, reason string, score int64, ) (int64, error) { @@ -76,6 +78,7 @@ func (r *reportedEventsStatements) InsertReportedEvent( roomNID, eventNID, reportingUserID, + eventSenderID, reason, score, spec.AsTimestamp(time.Now()), diff --git a/roomserver/storage/tables/interface.go b/roomserver/storage/tables/interface.go index 13fb83d46..cc0114372 100644 --- a/roomserver/storage/tables/interface.go +++ b/roomserver/storage/tables/interface.go @@ -133,7 +133,8 @@ type ReportedEvents interface { txn *sql.Tx, roomNID types.RoomNID, eventNID types.EventNID, - reportingUserID string, + reportingUserID types.EventStateKeyNID, + eventSenderID types.EventStateKeyNID, reason string, score int64, ) (int64, error)