mirror of
https://github.com/matrix-org/dendrite.git
synced 2025-12-12 01:13:10 -06:00
Retrieve single membership
This commit is contained in:
parent
049f63d3c0
commit
36a48bdba8
|
|
@ -20,4 +20,5 @@ type Membership struct {
|
||||||
Localpart string
|
Localpart string
|
||||||
RoomID string
|
RoomID string
|
||||||
EventID string
|
EventID string
|
||||||
|
StillInRoom bool
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ const insertMembershipSQL = `
|
||||||
`
|
`
|
||||||
|
|
||||||
const selectMembershipSQL = "" +
|
const selectMembershipSQL = "" +
|
||||||
"SELECT * from memberships WHERE localpart = $1 AND room_id = $2"
|
"SELECT event_id, still_in_room from memberships WHERE localpart = $1 AND room_id = $2"
|
||||||
|
|
||||||
const selectMembershipsByLocalpartSQL = "" +
|
const selectMembershipsByLocalpartSQL = "" +
|
||||||
"SELECT room_id, event_id FROM memberships WHERE localpart = $1 AND still_in_room = true"
|
"SELECT room_id, event_id FROM memberships WHERE localpart = $1 AND still_in_room = true"
|
||||||
|
|
@ -69,6 +69,7 @@ const updateMembershipByEventIDSQL = "" +
|
||||||
type membershipStatements struct {
|
type membershipStatements struct {
|
||||||
deleteMembershipsByEventIDsStmt *sql.Stmt
|
deleteMembershipsByEventIDsStmt *sql.Stmt
|
||||||
insertMembershipStmt *sql.Stmt
|
insertMembershipStmt *sql.Stmt
|
||||||
|
selectMembershipStmt *sql.Stmt
|
||||||
selectMembershipByEventIDStmt *sql.Stmt
|
selectMembershipByEventIDStmt *sql.Stmt
|
||||||
selectMembershipsByLocalpartStmt *sql.Stmt
|
selectMembershipsByLocalpartStmt *sql.Stmt
|
||||||
selectMembershipsByRoomIDStmt *sql.Stmt
|
selectMembershipsByRoomIDStmt *sql.Stmt
|
||||||
|
|
@ -86,6 +87,9 @@ func (s *membershipStatements) prepare(db *sql.DB) (err error) {
|
||||||
if s.insertMembershipStmt, err = db.Prepare(insertMembershipSQL); err != nil {
|
if s.insertMembershipStmt, err = db.Prepare(insertMembershipSQL); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if s.selectMembershipStmt, err = db.Prepare(selectMembershipSQL); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
if s.selectMembershipsByLocalpartStmt, err = db.Prepare(selectMembershipsByLocalpartSQL); err != nil {
|
if s.selectMembershipsByLocalpartStmt, err = db.Prepare(selectMembershipsByLocalpartSQL); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
@ -108,6 +112,18 @@ func (s *membershipStatements) deleteMembershipsByEventIDs(eventIDs []string, tx
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (s *membershipStatements) selectMembership(localpart string, roomID string) (*authtypes.Membership, error) {
|
||||||
|
m := authtypes.Membership{
|
||||||
|
Localpart: localpart,
|
||||||
|
RoomID: roomID,
|
||||||
|
}
|
||||||
|
err := s.selectMembershipStmt.QueryRow(localpart, roomID).Scan(&m.EventID, &m.StillInRoom)
|
||||||
|
if err == sql.ErrNoRows {
|
||||||
|
return nil, nil
|
||||||
|
}
|
||||||
|
return &m, err
|
||||||
|
}
|
||||||
|
|
||||||
func (s *membershipStatements) selectMembershipsByLocalpart(localpart string) (memberships []authtypes.Membership, err error) {
|
func (s *membershipStatements) selectMembershipsByLocalpart(localpart string) (memberships []authtypes.Membership, err error) {
|
||||||
rows, err := s.selectMembershipsByLocalpartStmt.Query(localpart)
|
rows, err := s.selectMembershipsByLocalpartStmt.Query(localpart)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -157,6 +157,13 @@ func (d *Database) UpdateMemberships(eventsToAdd []gomatrixserverlib.Event, idsT
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetMembership returns the membership for the given localpart and room ID
|
||||||
|
// If no membership match the given localpart, returns nil
|
||||||
|
// If there was an issue during the retrieval, returns the SQL error
|
||||||
|
func (d *Database) GetMembership(localpart string, roomID string) (*authtypes.Membership, error) {
|
||||||
|
return d.memberships.selectMembership(localpart, roomID)
|
||||||
|
}
|
||||||
|
|
||||||
// GetMembershipsByLocalpart returns an array containing the memberships for all
|
// GetMembershipsByLocalpart returns an array containing the memberships for all
|
||||||
// the rooms a user matching a given localpart is a member of
|
// the rooms a user matching a given localpart is a member of
|
||||||
// If no membership match the given localpart, returns an empty array
|
// If no membership match the given localpart, returns an empty array
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue