mirror of
https://github.com/hoernschen/dendrite.git
synced 2025-08-01 13:52:46 +00:00
Some refactoring
This commit is contained in:
parent
9b2b7a6e28
commit
e254594453
7 changed files with 193 additions and 173 deletions
|
@ -50,7 +50,7 @@ type Database interface {
|
|||
RoomReceiptsAfter(ctx context.Context, roomIDs []string, streamPos types.StreamPosition) (types.StreamPosition, []eduAPI.OutputReceiptEvent, error)
|
||||
|
||||
// MostRecentMembership returns the most recent membership event for the user, along with the global stream position.
|
||||
MostRecentMembership(ctx context.Context, roomID, userID string) (*gomatrixserverlib.HeaderedEvent, types.StreamPosition, error)
|
||||
MostRecentMembership(ctx context.Context, roomID, userID string, memberships []string) (*gomatrixserverlib.HeaderedEvent, types.StreamPosition, types.StreamPosition, error)
|
||||
|
||||
// AllJoinedUsersInRooms returns a map of room ID to a list of all joined user IDs.
|
||||
AllJoinedUsersInRooms(ctx context.Context) (map[string][]string, error)
|
||||
|
|
|
@ -59,7 +59,7 @@ const upsertMembershipSQL = "" +
|
|||
const selectMembershipSQL = "" +
|
||||
"SELECT event_id, stream_pos, topological_pos FROM syncapi_memberships" +
|
||||
" WHERE room_id = $1 AND user_id = $2 AND membership = ANY($3)" +
|
||||
" ORDER BY stream_pos DESC" +
|
||||
" ORDER BY stream_pos ASC" +
|
||||
" LIMIT 1"
|
||||
|
||||
type membershipsStatements struct {
|
||||
|
@ -103,7 +103,7 @@ func (s *membershipsStatements) UpsertMembership(
|
|||
}
|
||||
|
||||
func (s *membershipsStatements) SelectMembership(
|
||||
ctx context.Context, txn *sql.Tx, roomID, userID, memberships []string,
|
||||
ctx context.Context, txn *sql.Tx, roomID, userID string, memberships []string,
|
||||
) (eventID string, streamPos, topologyPos types.StreamPosition, err error) {
|
||||
stmt := sqlutil.TxStmt(txn, s.selectMembershipStmt)
|
||||
err = stmt.QueryRowContext(ctx, roomID, userID, memberships).Scan(&eventID, &streamPos, &topologyPos)
|
||||
|
|
|
@ -516,20 +516,20 @@ func (d *Database) EventPositionInStream(
|
|||
}
|
||||
|
||||
func (d *Database) MostRecentMembership(
|
||||
ctx context.Context, roomID, userID string,
|
||||
) (*gomatrixserverlib.HeaderedEvent, types.StreamPosition, error) {
|
||||
event, err := d.CurrentRoomState.SelectStateEvent(ctx, roomID, gomatrixserverlib.MRoomMember, userID)
|
||||
ctx context.Context, roomID, userID string, memberships []string,
|
||||
) (*gomatrixserverlib.HeaderedEvent, types.StreamPosition, types.StreamPosition, error) {
|
||||
eventID, streamPos, topoPos, err := d.Memberships.SelectMembership(ctx, nil, roomID, userID, memberships)
|
||||
if err != nil {
|
||||
return nil, 0, fmt.Errorf("d.CurrentRoomState.SelectStateEvent: %w", err)
|
||||
return nil, 0, 0, fmt.Errorf("d.CurrentRoomState.SelectStateEvent: %w", err)
|
||||
}
|
||||
if event == nil {
|
||||
return nil, 0, nil
|
||||
}
|
||||
pos, err := d.OutputEvents.SelectPositionInStream(ctx, nil, event.EventID())
|
||||
events, err := d.OutputEvents.SelectEvents(ctx, nil, []string{eventID})
|
||||
if err != nil {
|
||||
return nil, 0, fmt.Errorf("d.OutputEvents.SelectPositionInStream: %w", err)
|
||||
return nil, 0, 0, fmt.Errorf("d.OutputEvents.SelectEvents: %w", err)
|
||||
}
|
||||
return event, pos, nil
|
||||
if len(events) == 0 {
|
||||
return nil, 0, 0, fmt.Errorf("no event returned")
|
||||
}
|
||||
return events[0].HeaderedEvent, streamPos, topoPos, err
|
||||
}
|
||||
|
||||
func (d *Database) GetFilter(
|
||||
|
|
|
@ -60,7 +60,7 @@ const upsertMembershipSQL = "" +
|
|||
const selectMembershipSQL = "" +
|
||||
"SELECT event_id, stream_pos, topological_pos FROM syncapi_memberships" +
|
||||
" WHERE room_id = $1 AND user_id = $2 AND membership IN ($3)" +
|
||||
" ORDER BY stream_pos DESC" +
|
||||
" ORDER BY stream_pos ASC" +
|
||||
" LIMIT 1"
|
||||
|
||||
type membershipsStatements struct {
|
||||
|
@ -103,7 +103,7 @@ func (s *membershipsStatements) UpsertMembership(
|
|||
}
|
||||
|
||||
func (s *membershipsStatements) SelectMembership(
|
||||
ctx context.Context, txn *sql.Tx, roomID, userID, memberships []string,
|
||||
ctx context.Context, txn *sql.Tx, roomID, userID string, memberships []string,
|
||||
) (eventID string, streamPos, topologyPos types.StreamPosition, err error) {
|
||||
params := []interface{}{roomID, userID}
|
||||
for _, membership := range memberships {
|
||||
|
|
|
@ -166,5 +166,5 @@ type Receipts interface {
|
|||
|
||||
type Memberships interface {
|
||||
UpsertMembership(ctx context.Context, txn *sql.Tx, event *gomatrixserverlib.HeaderedEvent, streamPos, topologicalPos types.StreamPosition) error
|
||||
SelectMembership(ctx context.Context, txn *sql.Tx, roomID, userID, memberships []string) (eventID string, streamPos, topologyPos types.StreamPosition, err error)
|
||||
SelectMembership(ctx context.Context, txn *sql.Tx, roomID, userID string, memberships []string) (eventID string, streamPos, topologyPos types.StreamPosition, err error)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue