From 1e0765e2c40f25f45c998017997acc9ca5d32b82 Mon Sep 17 00:00:00 2001 From: alam0rt Date: Sat, 6 Nov 2021 13:43:43 +1100 Subject: [PATCH] try to implement At a bit deeper --- clientapi/routing/memberships.go | 10 +++------- roomserver/internal/query/query.go | 2 +- roomserver/storage/interface.go | 2 +- roomserver/storage/shared/storage.go | 6 +++++- roomserver/storage/tables/interface.go | 1 + 5 files changed, 11 insertions(+), 10 deletions(-) diff --git a/clientapi/routing/memberships.go b/clientapi/routing/memberships.go index c16b2c5c1..72849e65a 100644 --- a/clientapi/routing/memberships.go +++ b/clientapi/routing/memberships.go @@ -63,6 +63,7 @@ func GetMemberships( Sender: device.UserID, At: at, } + var queryRes api.QueryMembershipsForRoomResponse if err := rsAPI.QueryMembershipsForRoom(req.Context(), &queryReq, &queryRes); err != nil { util.GetLogger(req.Context()).WithError(err).Error("rsAPI.QueryMembershipsForRoom failed") @@ -81,10 +82,12 @@ func GetMemberships( res.Joined = make(map[string]joinedMember) for _, ev := range queryRes.JoinEvents { var content databaseJoinedMember + if err := json.Unmarshal(ev.Content, &content); err != nil { util.GetLogger(req.Context()).WithError(err).Error("failed to unmarshal event content") return jsonerror.InternalServerError() } + res.Joined[ev.Sender] = joinedMember(content) } return util.JSONResponse{ @@ -93,13 +96,6 @@ func GetMemberships( } } - util.GetLogger(req.Context()).Info("SLOCKART") - for _, ev := range queryRes.JoinEvents { - util.GetLogger(req.Context()).Info(ev) - util.GetLogger(req.Context()).Info(at) - } - util.GetLogger(req.Context()).Error("SLOCKART") - return util.JSONResponse{ Code: http.StatusOK, JSON: getMembershipResponse{queryRes.JoinEvents}, diff --git a/roomserver/internal/query/query.go b/roomserver/internal/query/query.go index b80f08ab6..91018c787 100644 --- a/roomserver/internal/query/query.go +++ b/roomserver/internal/query/query.go @@ -252,7 +252,7 @@ func (r *Queryer) QueryMembershipsForRoom( if request.Sender == "" { var events []types.Event var eventNIDs []types.EventNID - eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, request.JoinedOnly, false) + eventNIDs, err = r.DB.GetMembershipEventNIDsForRoom(ctx, info.RoomNID, request.At, request.JoinedOnly, false) if err != nil { return fmt.Errorf("r.DB.GetMembershipEventNIDsForRoom: %w", err) } diff --git a/roomserver/storage/interface.go b/roomserver/storage/interface.go index 62aa73ad4..e81b7a503 100644 --- a/roomserver/storage/interface.go +++ b/roomserver/storage/interface.go @@ -131,7 +131,7 @@ type Database interface { // been members of a given room. Only lookup events of "join" membership if // joinOnly is set to true. // Returns an error if there was a problem talking to the database. - GetMembershipEventNIDsForRoom(ctx context.Context, roomNID types.RoomNID, joinOnly bool, localOnly bool) ([]types.EventNID, error) + GetMembershipEventNIDsForRoom(ctx context.Context, roomNID types.RoomNID, requestAt string, joinOnly bool, localOnly bool) ([]types.EventNID, error) // EventsFromIDs looks up the Events for a list of event IDs. Does not error if event was // not found. // Returns an error if the retrieval went wrong. diff --git a/roomserver/storage/shared/storage.go b/roomserver/storage/shared/storage.go index 3685332fd..05daeea50 100644 --- a/roomserver/storage/shared/storage.go +++ b/roomserver/storage/shared/storage.go @@ -350,7 +350,7 @@ func (d *Database) GetMembership(ctx context.Context, roomNID types.RoomNID, req } func (d *Database) GetMembershipEventNIDsForRoom( - ctx context.Context, roomNID types.RoomNID, joinOnly bool, localOnly bool, + ctx context.Context, roomNID types.RoomNID, requestAt string, joinOnly bool, localOnly bool, ) ([]types.EventNID, error) { if joinOnly { return d.MembershipTable.SelectMembershipsFromRoomAndMembership( @@ -358,6 +358,10 @@ func (d *Database) GetMembershipEventNIDsForRoom( ) } + if len(requestAt) > 0 { + panic("implement me") + } + return d.MembershipTable.SelectMembershipsFromRoom(ctx, roomNID, localOnly) } diff --git a/roomserver/storage/tables/interface.go b/roomserver/storage/tables/interface.go index 8720d4007..071c6ebaf 100644 --- a/roomserver/storage/tables/interface.go +++ b/roomserver/storage/tables/interface.go @@ -128,6 +128,7 @@ type Membership interface { SelectMembershipForUpdate(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) (MembershipState, error) SelectMembershipFromRoomAndTarget(ctx context.Context, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID) (types.EventNID, MembershipState, bool, error) SelectMembershipsFromRoom(ctx context.Context, roomNID types.RoomNID, localOnly bool) (eventNIDs []types.EventNID, err error) + SelectMembershipsFromRoomPaginated(ctx context.Context, roomNID types.RoomNID, localOnly bool) (eventNIDs []types.EventNID, err error) SelectMembershipsFromRoomAndMembership(ctx context.Context, roomNID types.RoomNID, membership MembershipState, localOnly bool) (eventNIDs []types.EventNID, err error) UpdateMembership(ctx context.Context, txn *sql.Tx, roomNID types.RoomNID, targetUserNID types.EventStateKeyNID, senderUserNID types.EventStateKeyNID, membership MembershipState, eventNID types.EventNID, forgotten bool) error SelectRoomsWithMembership(ctx context.Context, userID types.EventStateKeyNID, membershipState MembershipState) ([]types.RoomNID, error)