[GH-30056] Refactor SELECT statements in compliance_store.go (#30124)
* Change queries to use builder * extract to tableSelectQuery * Apply suggestions from code review * update tests to check errors, lengths * linting * leverage s.toReserveCase --------- Co-authored-by: Jesse Hallam <jesse@thehallams.ca> Co-authored-by: Jesse Hallam <jesse.hallam@gmail.com> Co-authored-by: Mattermost Build <build@mattermost.com>
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
48ea65aa5f
Коммит
65256843f9
@@ -18,10 +18,33 @@ import (
|
|||||||
|
|
||||||
type SqlComplianceStore struct {
|
type SqlComplianceStore struct {
|
||||||
*SqlStore
|
*SqlStore
|
||||||
|
|
||||||
|
tableSelectQuery sq.SelectBuilder
|
||||||
}
|
}
|
||||||
|
|
||||||
func newSqlComplianceStore(sqlStore *SqlStore) store.ComplianceStore {
|
func newSqlComplianceStore(sqlStore *SqlStore) store.ComplianceStore {
|
||||||
return &SqlComplianceStore{sqlStore}
|
s := SqlComplianceStore{
|
||||||
|
SqlStore: sqlStore,
|
||||||
|
}
|
||||||
|
|
||||||
|
s.tableSelectQuery = s.
|
||||||
|
getQueryBuilder().
|
||||||
|
Select(
|
||||||
|
"Id",
|
||||||
|
"CreateAt",
|
||||||
|
"UserId",
|
||||||
|
"Status",
|
||||||
|
"Count",
|
||||||
|
s.toReserveCase("desc"),
|
||||||
|
"Type",
|
||||||
|
"StartAt",
|
||||||
|
"EndAt",
|
||||||
|
"Keywords",
|
||||||
|
"Emails",
|
||||||
|
).
|
||||||
|
From("Compliances")
|
||||||
|
|
||||||
|
return &s
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SqlComplianceStore) Save(compliance *model.Compliance) (*model.Compliance, error) {
|
func (s SqlComplianceStore) Save(compliance *model.Compliance) (*model.Compliance, error) {
|
||||||
@@ -83,17 +106,24 @@ func (s SqlComplianceStore) Update(compliance *model.Compliance) (*model.Complia
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s SqlComplianceStore) GetAll(offset, limit int) (model.Compliances, error) {
|
func (s SqlComplianceStore) GetAll(offset, limit int) (model.Compliances, error) {
|
||||||
query := "SELECT * FROM Compliances ORDER BY CreateAt DESC LIMIT ? OFFSET ?"
|
query := s.tableSelectQuery.
|
||||||
compliances := model.Compliances{}
|
OrderBy("CreateAt DESC").
|
||||||
if err := s.GetReplica().Select(&compliances, query, limit, offset); err != nil {
|
Limit(uint64(limit)).
|
||||||
|
Offset(uint64(offset))
|
||||||
|
|
||||||
|
var compliances model.Compliances
|
||||||
|
if err := s.GetReplica().SelectBuilder(&compliances, query); err != nil {
|
||||||
return nil, errors.Wrap(err, "failed to find all Compliances")
|
return nil, errors.Wrap(err, "failed to find all Compliances")
|
||||||
}
|
}
|
||||||
|
|
||||||
return compliances, nil
|
return compliances, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s SqlComplianceStore) Get(id string) (*model.Compliance, error) {
|
func (s SqlComplianceStore) Get(id string) (*model.Compliance, error) {
|
||||||
|
query := s.tableSelectQuery.Where(sq.Eq{"Id": id})
|
||||||
|
|
||||||
var compliance model.Compliance
|
var compliance model.Compliance
|
||||||
if err := s.GetReplica().Get(&compliance, `SELECT * FROM Compliances WHERE Id = ?`, id); err != nil {
|
if err := s.GetReplica().GetBuilder(&compliance, query); err != nil {
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
return nil, store.NewErrNotFound("Compliances", id)
|
return nil, store.NewErrNotFound("Compliances", id)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,19 +17,19 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
func cleanupStoreState(t *testing.T, rctx request.CTX, ss store.Store) {
|
func cleanupStoreState(t *testing.T, rctx request.CTX, ss store.Store) {
|
||||||
//remove existing users
|
// remove existing users
|
||||||
allUsers, err := ss.User().GetAll()
|
allUsers, err := ss.User().GetAll()
|
||||||
require.NoError(t, err, "error cleaning all test users", err)
|
require.NoError(t, err, "error cleaning all test users", err)
|
||||||
for _, u := range allUsers {
|
for _, u := range allUsers {
|
||||||
err = ss.User().PermanentDelete(rctx, u.Id)
|
err = ss.User().PermanentDelete(rctx, u.Id)
|
||||||
require.NoError(t, err, "failed cleaning up test user %s", u.Username)
|
require.NoError(t, err, "failed cleaning up test user %s", u.Username)
|
||||||
|
|
||||||
//remove all posts by this user
|
// remove all posts by this user
|
||||||
nErr := ss.Post().PermanentDeleteByUser(rctx, u.Id)
|
nErr := ss.Post().PermanentDeleteByUser(rctx, u.Id)
|
||||||
require.NoError(t, nErr, "failed cleaning all posts of test user %s", u.Username)
|
require.NoError(t, nErr, "failed cleaning all posts of test user %s", u.Username)
|
||||||
}
|
}
|
||||||
|
|
||||||
//remove existing channels
|
// remove existing channels
|
||||||
allChannels, nErr := ss.Channel().GetAllChannels(0, 100000, store.ChannelSearchOpts{IncludeDeleted: true})
|
allChannels, nErr := ss.Channel().GetAllChannels(0, 100000, store.ChannelSearchOpts{IncludeDeleted: true})
|
||||||
require.NoError(t, nErr, "error cleaning all test channels", nErr)
|
require.NoError(t, nErr, "error cleaning all test channels", nErr)
|
||||||
for _, channel := range allChannels {
|
for _, channel := range allChannels {
|
||||||
@@ -37,7 +37,7 @@ func cleanupStoreState(t *testing.T, rctx request.CTX, ss store.Store) {
|
|||||||
require.NoError(t, nErr, "failed cleaning up test channel %s", channel.Id)
|
require.NoError(t, nErr, "failed cleaning up test channel %s", channel.Id)
|
||||||
}
|
}
|
||||||
|
|
||||||
//remove existing teams
|
// remove existing teams
|
||||||
allTeams, nErr := ss.Team().GetAll()
|
allTeams, nErr := ss.Team().GetAll()
|
||||||
require.NoError(t, nErr, "error cleaning all test teams", nErr)
|
require.NoError(t, nErr, "error cleaning all test teams", nErr)
|
||||||
for _, team := range allTeams {
|
for _, team := range allTeams {
|
||||||
@@ -72,8 +72,10 @@ func testComplianceStore(t *testing.T, rctx request.CTX, ss store.Store) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
time.Sleep(100 * time.Millisecond)
|
time.Sleep(100 * time.Millisecond)
|
||||||
|
|
||||||
compliances, _ := ss.Compliance().GetAll(0, 1000)
|
compliances, err := ss.Compliance().GetAll(0, 1000)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Len(t, compliances, 2)
|
||||||
require.Equal(t, model.ComplianceStatusRunning, compliances[0].Status)
|
require.Equal(t, model.ComplianceStatusRunning, compliances[0].Status)
|
||||||
require.Equal(t, compliance2.Id, compliances[0].Id)
|
require.Equal(t, compliance2.Id, compliances[0].Id)
|
||||||
|
|
||||||
@@ -81,20 +83,26 @@ func testComplianceStore(t *testing.T, rctx request.CTX, ss store.Store) {
|
|||||||
_, err = ss.Compliance().Update(compliance2)
|
_, err = ss.Compliance().Update(compliance2)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
compliances, _ = ss.Compliance().GetAll(0, 1000)
|
compliances, err = ss.Compliance().GetAll(0, 1000)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
|
require.Len(t, compliances, 2)
|
||||||
require.Equal(t, model.ComplianceStatusFailed, compliances[0].Status)
|
require.Equal(t, model.ComplianceStatusFailed, compliances[0].Status)
|
||||||
require.Equal(t, compliance2.Id, compliances[0].Id)
|
require.Equal(t, compliance2.Id, compliances[0].Id)
|
||||||
|
|
||||||
compliances, _ = ss.Compliance().GetAll(0, 1)
|
compliances, err = ss.Compliance().GetAll(0, 1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Len(t, compliances, 1)
|
require.Len(t, compliances, 1)
|
||||||
|
|
||||||
compliances, _ = ss.Compliance().GetAll(1, 1)
|
compliances, err = ss.Compliance().GetAll(1, 1)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Len(t, compliances, 1)
|
require.Len(t, compliances, 1)
|
||||||
|
|
||||||
rc2, _ := ss.Compliance().Get(compliance2.Id)
|
rc2, err := ss.Compliance().Get(compliance2.Id)
|
||||||
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, compliance2.Status, rc2.Status)
|
require.Equal(t, compliance2.Status, rc2.Status)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -837,7 +845,7 @@ func testEditExportMessage(t *testing.T, rctx request.CTX, ss store.Store) {
|
|||||||
post1, err = ss.Post().Save(rctx, post1)
|
post1, err = ss.Post().Save(rctx, post1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
//user 1 edits the previous post
|
// user 1 edits the previous post
|
||||||
post1e := post1.Clone()
|
post1e := post1.Clone()
|
||||||
post1e.Message = "edit " + post1.Message
|
post1e.Message = "edit " + post1.Message
|
||||||
|
|
||||||
@@ -948,7 +956,7 @@ func testEditAfterExportMessage(t *testing.T, rctx request.CTX, ss store.Store)
|
|||||||
assert.Equal(t, user1.Username, *v.Username)
|
assert.Equal(t, user1.Username, *v.Username)
|
||||||
|
|
||||||
postEditTime := post1.UpdateAt + 1
|
postEditTime := post1.UpdateAt + 1
|
||||||
//user 1 edits the previous post
|
// user 1 edits the previous post
|
||||||
post1e := post1.Clone()
|
post1e := post1.Clone()
|
||||||
post1e.EditAt = postEditTime
|
post1e.EditAt = postEditTime
|
||||||
post1e.Message = "edit " + post1.Message
|
post1e.Message = "edit " + post1.Message
|
||||||
@@ -1040,7 +1048,7 @@ func testDeleteExportMessage(t *testing.T, rctx request.CTX, ss store.Store) {
|
|||||||
post1, err = ss.Post().Save(rctx, post1)
|
post1, err = ss.Post().Save(rctx, post1)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
//user 1 deletes the previous post
|
// user 1 deletes the previous post
|
||||||
postDeleteTime := post1.UpdateAt + 1
|
postDeleteTime := post1.UpdateAt + 1
|
||||||
err = ss.Post().Delete(rctx, post1.Id, postDeleteTime, user1.Id)
|
err = ss.Post().Delete(rctx, post1.Id, postDeleteTime, user1.Id)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
@@ -1143,7 +1151,7 @@ func testDeleteAfterExportMessage(t *testing.T, rctx request.CTX, ss store.Store
|
|||||||
assert.Equal(t, user1.Email, *v.UserEmail)
|
assert.Equal(t, user1.Email, *v.UserEmail)
|
||||||
assert.Equal(t, user1.Username, *v.Username)
|
assert.Equal(t, user1.Username, *v.Username)
|
||||||
|
|
||||||
//user 1 deletes the previous post
|
// user 1 deletes the previous post
|
||||||
postDeleteTime := post1.UpdateAt + 1
|
postDeleteTime := post1.UpdateAt + 1
|
||||||
err = ss.Post().Delete(rctx, post1.Id, postDeleteTime, user1.Id)
|
err = ss.Post().Delete(rctx, post1.Id, postDeleteTime, user1.Id)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user