mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-12 09:23:09 -06:00
Add table for storing invites in the syncapi
This commit is contained in:
parent
88a190b867
commit
3f3e60c5a0
|
|
@ -1 +1,93 @@
|
||||||
package storage
|
package storage
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql"
|
||||||
|
|
||||||
|
"github.com/matrix-org/gomatrixserverlib"
|
||||||
|
)
|
||||||
|
|
||||||
|
const inviteEventsSchema = `
|
||||||
|
CREATE TABLE IF NOT EXISTS syncapi_invite_events (
|
||||||
|
id BIGINT PRIMARY KEY DEFAULT nextval('syncapi_output_room_event_id_seq'),
|
||||||
|
event_id TEXT NOT NULL,
|
||||||
|
room_id TEXT NOT NULL,
|
||||||
|
target_user_id TEXT NOT NULL,
|
||||||
|
event_json TEXT NOT NULL,
|
||||||
|
);
|
||||||
|
|
||||||
|
-- For looking up the invites for a given user.
|
||||||
|
CREATE INDEX IF NOT EXISTS syncapi_target_user_id_idx
|
||||||
|
ON syncapi_invite_events (target_user_id, id)
|
||||||
|
);
|
||||||
|
`
|
||||||
|
|
||||||
|
const insertInviteEventSQL = "" +
|
||||||
|
"INSERT INTO syncapi_invite_events (" +
|
||||||
|
" room_id, event_id, target_user_id, event_json" +
|
||||||
|
") VALUES ($1, $2, $3, $4) RETURNING id"
|
||||||
|
|
||||||
|
const selectInviteEventsInRangeSQL = "" +
|
||||||
|
"SELECT room_id, event_json FROM syncapi_invite_events" +
|
||||||
|
" WHERE target_user_id = $1 AND id > $2 AND id <= $3" +
|
||||||
|
" ORDER BY id DESC"
|
||||||
|
|
||||||
|
type inviteEventsStatements struct {
|
||||||
|
insertInviteEventStmt *sql.Stmt
|
||||||
|
selectInviteEventsInRangeStmt *sql.Stmt
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *inviteEventsStatements) prepare(db *sql.DB) (err error) {
|
||||||
|
_, err = db.Exec(inviteEventsSchema)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if s.insertInviteEventStmt, err = db.Prepare(insertInviteEventSQL); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if s.selectInviteEventsInRangeStmt, err = db.Prepare(selectInviteEventsInRangeSQL); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *inviteEventsStatements) insertInviteEvent(
|
||||||
|
inviteEvent gomatrixserverlib.Event,
|
||||||
|
) (streamPos int64, err error) {
|
||||||
|
err = s.insertInviteEventStmt.QueryRow(
|
||||||
|
inviteEvent.RoomID(), inviteEvent.EventID, *inviteEvent.StateKey(),
|
||||||
|
inviteEvent.JSON(),
|
||||||
|
).Scan(&streamPos)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// selectInviteEventsInRange returns a map of room ID to invite event for the
|
||||||
|
// active invites for the target user ID in the supplied range.
|
||||||
|
func (s *inviteEventsStatements) selectInviteEventsInRange(
|
||||||
|
targetUserID string, startPos, endPos int64,
|
||||||
|
) (map[string]gomatrixserverlib.Event, error) {
|
||||||
|
rows, err := s.selectInviteEventsInRangeStmt.Query(
|
||||||
|
targetUserID, startPos, endPos,
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
defer rows.Close()
|
||||||
|
result := map[string]gomatrixserverlib.Event{}
|
||||||
|
for rows.Next() {
|
||||||
|
var (
|
||||||
|
roomID string
|
||||||
|
eventJSON []byte
|
||||||
|
)
|
||||||
|
if err = rows.Scan(&roomID, &eventJSON); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
event, err := gomatrixserverlib.NewEventFromTrustedJSON(eventJSON, false)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result[roomID] = event
|
||||||
|
}
|
||||||
|
return result, nil
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue