[GH-16800]: Refactor raw SQL to query builder in group_store.go - part 2 (#24254)

* Use builder in GetMember

* Use query builder in GetByUser

* Use query builder in GetMemberUsers

* Use query builder in GetNonMemberUsersPage

* Use query builder in PermanentDeleteMembersByUser

---------

Co-authored-by: Mattermost Build <build@mattermost.com>
This commit is contained in:
David Janda 2023-09-11 05:17:26 -07:00 committed by GitHub
parent 71fb10ae7a
commit 6e6668b88b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -304,17 +304,16 @@ func (s *SqlGroupStore) GetAllBySource(groupSource model.GroupSource) ([]*model.
func (s *SqlGroupStore) GetByUser(userId string) ([]*model.Group, error) { func (s *SqlGroupStore) GetByUser(userId string) ([]*model.Group, error) {
groups := []*model.Group{} groups := []*model.Group{}
query := ` builder := s.getQueryBuilder().
SELECT Select("UserGroups.*").
UserGroups.* From("GroupMembers").
FROM Join("UserGroups ON UserGroups.Id = GroupMembers.GroupId").
GroupMembers Where(sq.Eq{
JOIN UserGroups ON UserGroups.Id = GroupMembers.GroupId "GroupMembers.DeleteAt": 0,
WHERE "UserId": userId,
GroupMembers.DeleteAt = 0 })
AND UserId = ?`
if err := s.GetReplicaX().Select(&groups, query, userId); err != nil { if err := s.GetReplicaX().SelectBuilder(&groups, builder); err != nil {
return nil, errors.Wrapf(err, "failed to find Groups with userId=%s", userId) return nil, errors.Wrapf(err, "failed to find Groups with userId=%s", userId)
} }
@ -424,40 +423,33 @@ func (s *SqlGroupStore) Restore(groupID string) (*model.Group, error) {
} }
func (s *SqlGroupStore) GetMember(groupID, userID string) (*model.GroupMember, error) { func (s *SqlGroupStore) GetMember(groupID, userID string) (*model.GroupMember, error) {
query, args, err := s.getQueryBuilder(). builder := s.getQueryBuilder().
Select("*"). Select("*").
From("GroupMembers"). From("GroupMembers").
Where(sq.Eq{"UserId": userID}). Where(sq.Eq{"UserId": userID}).
Where(sq.Eq{"GroupId": groupID}). Where(sq.Eq{"GroupId": groupID}).
Where(sq.Eq{"DeleteAt": 0}). Where(sq.Eq{"DeleteAt": 0})
ToSql()
if err != nil {
return nil, errors.Wrap(err, "get_member_query")
}
var groupMember model.GroupMember var groupMember model.GroupMember
err = s.GetReplicaX().Get(&groupMember, query, args...) if err := s.GetReplicaX().GetBuilder(&groupMember, builder); err != nil {
if err != nil {
return nil, errors.Wrap(err, "GetMember") return nil, errors.Wrap(err, "GetMember")
} }
return &groupMember, nil return &groupMember, nil
} }
func (s *SqlGroupStore) GetMemberUsers(groupID string) ([]*model.User, error) { func (s *SqlGroupStore) GetMemberUsers(groupID string) ([]*model.User, error) {
groupMembers := []*model.User{} groupMembers := []*model.User{}
query := ` builder := s.getQueryBuilder().
SELECT Select("Users.*").
Users.* From("GroupMembers").
FROM Join("Users ON Users.Id = GroupMembers.UserId").
GroupMembers Where(sq.Eq{
JOIN Users ON Users.Id = GroupMembers.UserId "GroupMembers.DeleteAt": 0,
WHERE "Users.DeleteAt": 0,
GroupMembers.DeleteAt = 0 "GroupId": groupID,
AND Users.DeleteAt = 0 })
AND GroupId = ?`
if err := s.GetReplicaX().Select(&groupMembers, query, groupID); err != nil { if err := s.GetReplicaX().SelectBuilder(&groupMembers, builder); err != nil {
return nil, errors.Wrapf(err, "failed to find member Users for Group with id=%s", groupID) return nil, errors.Wrapf(err, "failed to find member Users for Group with id=%s", groupID)
} }
@ -529,11 +521,16 @@ func (s *SqlGroupStore) GetMemberUsersSortedPage(groupID string, page int, perPa
func (s *SqlGroupStore) GetNonMemberUsersPage(groupID string, page int, perPage int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, error) { func (s *SqlGroupStore) GetNonMemberUsersPage(groupID string, page int, perPage int, viewRestrictions *model.ViewUsersRestrictions) ([]*model.User, error) {
groupMembers := []*model.User{} groupMembers := []*model.User{}
if err := s.GetReplicaX().Get(&model.Group{}, "SELECT * FROM UserGroups WHERE Id = ?", groupID); err != nil { builder := s.getQueryBuilder().
Select("*").
From("UserGroups").
Where(sq.Eq{"Id": groupID})
if err := s.GetReplicaX().GetBuilder(&model.Group{}, builder); err != nil {
return nil, errors.Wrap(err, "GetNonMemberUsersPage") return nil, errors.Wrap(err, "GetNonMemberUsersPage")
} }
query := s.getQueryBuilder(). builder = s.getQueryBuilder().
Select("u.*"). Select("u.*").
From("Users u"). From("Users u").
LeftJoin("GroupMembers ON (GroupMembers.UserId = u.Id AND GroupMembers.GroupId = ?)", groupID). LeftJoin("GroupMembers ON (GroupMembers.UserId = u.Id AND GroupMembers.GroupId = ?)", groupID).
@ -543,14 +540,9 @@ func (s *SqlGroupStore) GetNonMemberUsersPage(groupID string, page int, perPage
Offset(uint64(page * perPage)). Offset(uint64(page * perPage)).
OrderBy("u.Username ASC") OrderBy("u.Username ASC")
query = applyViewRestrictionsFilter(query, viewRestrictions, true) builder = applyViewRestrictionsFilter(builder, viewRestrictions, true)
queryString, args, err := query.ToSql() if err := s.GetReplicaX().SelectBuilder(&groupMembers, builder); err != nil {
if err != nil {
return nil, errors.Wrap(err, "")
}
if err := s.GetReplicaX().Select(&groupMembers, queryString, args...); err != nil {
return nil, errors.Wrapf(err, "failed to find member Users for Group with id=%s", groupID) return nil, errors.Wrapf(err, "failed to find member Users for Group with id=%s", groupID)
} }
@ -674,7 +666,10 @@ func (s *SqlGroupStore) DeleteMember(groupID string, userID string) (*model.Grou
} }
func (s *SqlGroupStore) PermanentDeleteMembersByUser(userId string) error { func (s *SqlGroupStore) PermanentDeleteMembersByUser(userId string) error {
if _, err := s.GetMasterX().Exec("DELETE FROM GroupMembers WHERE UserId = ?", userId); err != nil { builder := s.getQueryBuilder().
Delete("GroupMembers").
Where(sq.Eq{"UserId": userId})
if _, err := s.GetMasterX().ExecBuilder(builder); err != nil {
return errors.Wrapf(err, "failed to permanent delete GroupMember with userId=%s", userId) return errors.Wrapf(err, "failed to permanent delete GroupMember with userId=%s", userId)
} }
return nil return nil