Some refactoring

This commit is contained in:
Neil Alexander 2021-01-21 11:18:10 +00:00
parent 9b2b7a6e28
commit e254594453
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
7 changed files with 193 additions and 173 deletions

View file

@ -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)

View file

@ -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)

View file

@ -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(

View file

@ -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 {

View file

@ -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)
}