[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)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user