Skip to content

Commit 29f7063

Browse files
authored
NOISSUE - Fix Groups and Channels Users Listing (#3138)
Signed-off-by: musilah <[email protected]>
1 parent 1f48a73 commit 29f7063

File tree

7 files changed

+179
-114
lines changed

7 files changed

+179
-114
lines changed

channels/postgres/channels.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1340,22 +1340,22 @@ func PageQuery(pm channels.Page) (string, error) {
13401340
}
13411341

13421342
func applyOrdering(emq string, pm channels.Page) string {
1343-
var orderBy string
1343+
col := "COALESCE(c.updated_at, c.created_at)"
13441344
switch pm.Order {
13451345
case "name":
1346-
orderBy = "name"
1346+
col = "c.name"
13471347
case "created_at":
1348-
orderBy = "created_at"
1349-
case "updated_at":
1350-
orderBy = "COALESCE(updated_at, created_at)"
1351-
default:
1352-
return emq
1348+
col = "c.created_at"
1349+
case "updated_at", "":
1350+
col = "COALESCE(c.updated_at, c.created_at)"
13531351
}
13541352

1355-
if pm.Dir == api.AscDir || pm.Dir == api.DescDir {
1356-
return fmt.Sprintf("%s ORDER BY %s %s, id %s", emq, orderBy, pm.Dir, pm.Dir)
1353+
dir := pm.Dir
1354+
if dir != api.AscDir && dir != api.DescDir {
1355+
dir = api.DescDir
13571356
}
1358-
return fmt.Sprintf("%s ORDER BY %s", emq, orderBy)
1357+
1358+
return fmt.Sprintf("%s ORDER BY %s %s, c.id %s", emq, col, dir, dir)
13591359
}
13601360

13611361
func applyLimitOffset(query string) string {

channels/postgres/channels_test.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -576,6 +576,8 @@ func TestRetrieveAll(t *testing.T) {
576576
Page: channels.Page{
577577
Offset: 0,
578578
Limit: 10,
579+
Order: "created_at",
580+
Dir: "asc",
579581
},
580582
},
581583
response: channels.ChannelsPage{
@@ -594,6 +596,8 @@ func TestRetrieveAll(t *testing.T) {
594596
Page: channels.Page{
595597
Offset: 10,
596598
Limit: 10,
599+
Order: "created_at",
600+
Dir: "asc",
597601
},
598602
},
599603
response: channels.ChannelsPage{
@@ -612,6 +616,8 @@ func TestRetrieveAll(t *testing.T) {
612616
Page: channels.Page{
613617
Offset: 0,
614618
Limit: 50,
619+
Order: "created_at",
620+
Dir: "asc",
615621
},
616622
},
617623
response: channels.ChannelsPage{
@@ -630,6 +636,8 @@ func TestRetrieveAll(t *testing.T) {
630636
Page: channels.Page{
631637
Offset: 50,
632638
Limit: 50,
639+
Order: "created_at",
640+
Dir: "asc",
633641
},
634642
},
635643
response: channels.ChannelsPage{
@@ -648,6 +656,8 @@ func TestRetrieveAll(t *testing.T) {
648656
Page: channels.Page{
649657
Offset: 1000,
650658
Limit: 50,
659+
Order: "created_at",
660+
Dir: "desc",
651661
},
652662
},
653663
response: channels.ChannelsPage{
@@ -666,6 +676,8 @@ func TestRetrieveAll(t *testing.T) {
666676
Page: channels.Page{
667677
Offset: 170,
668678
Limit: 50,
679+
Order: "created_at",
680+
Dir: "asc",
669681
},
670682
},
671683
response: channels.ChannelsPage{

domains/postgres/domains.go

Lines changed: 18 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -256,9 +256,13 @@ func (repo domainRepo) RetrieveAllDomainsByIDs(ctx context.Context, pm domains.P
256256
return domains.DomainsPage{}, errors.Wrap(repoerr.ErrFailedOpDB, err)
257257
}
258258

259-
q = `SELECT d.id as id, d.name as name, d.tags as tags, d.route as route, d.metadata as metadata, d.created_at as created_at, d.updated_at as updated_at, d.updated_by as updated_by, d.created_by as created_by, d.status as status
260-
FROM domains d`
261-
q = fmt.Sprintf("%s %s LIMIT %d OFFSET %d;", q, query, pm.Limit, pm.Offset)
259+
baseQ := `SELECT d.id as id, d.name as name, d.tags as tags, d.route as route, d.metadata as metadata,
260+
d.created_at as created_at, d.updated_at as updated_at, d.updated_by as updated_by,
261+
d.created_by as created_by, d.status as status FROM domains d`
262+
263+
squery := applyOrdering(query, pm)
264+
265+
q = fmt.Sprintf("%s %s LIMIT %d OFFSET %d;", baseQ, squery, pm.Limit, pm.Offset)
262266

263267
dbPage, err := toDBDomainsPage(pm)
264268
if err != nil {
@@ -521,22 +525,23 @@ func (repo domainRepo) processRows(rows *sqlx.Rows) ([]domains.Domain, error) {
521525
}
522526

523527
func applyOrdering(emq string, pm domains.Page) string {
524-
var orderBy string
528+
col := "COALESCE(d.updated_at, d.created_at)"
529+
525530
switch pm.Order {
526531
case "name":
527-
orderBy = "d.name"
532+
col = "d.name"
528533
case "created_at":
529-
orderBy = "d.created_at"
530-
case "updated_at":
531-
orderBy = "COALESCE(d.updated_at, d.created_at)"
532-
default:
533-
return emq
534+
col = "d.created_at"
535+
case "updated_at", "":
536+
col = "COALESCE(d.updated_at, d.created_at)"
534537
}
535538

536-
if pm.Dir == api.AscDir || pm.Dir == api.DescDir {
537-
return fmt.Sprintf("%s ORDER BY %s %s, d.id %s", emq, orderBy, pm.Dir, pm.Dir)
539+
dir := pm.Dir
540+
if dir != api.AscDir && dir != api.DescDir {
541+
dir = api.DescDir
538542
}
539-
return fmt.Sprintf("%s ORDER BY %s", emq, orderBy)
543+
544+
return fmt.Sprintf("%s ORDER BY %s %s, d.id %s", emq, col, dir, dir)
540545
}
541546

542547
type dbDomain struct {

domains/postgres/domains_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -285,6 +285,7 @@ func TestRetrieveAllByIDs(t *testing.T) {
285285
CreatedBy: userID,
286286
UpdatedBy: userID,
287287
Status: domains.EnabledStatus,
288+
CreatedAt: time.Now().UTC().Truncate(time.Millisecond),
288289
}
289290
if i%5 == 0 {
290291
domain.Status = domains.DisabledStatus
@@ -310,6 +311,8 @@ func TestRetrieveAllByIDs(t *testing.T) {
310311
Offset: 0,
311312
Limit: 10,
312313
IDs: []string{items[1].ID, items[2].ID},
314+
Order: "created_at",
315+
Dir: "asc",
313316
},
314317
response: domains.DomainsPage{
315318
Total: 2,
@@ -369,6 +372,8 @@ func TestRetrieveAllByIDs(t *testing.T) {
369372
Limit: 10,
370373
IDs: []string{items[0].ID, items[1].ID},
371374
Status: 5,
375+
Order: "created_at",
376+
Dir: "asc",
372377
},
373378
response: domains.DomainsPage{
374379
Total: 2,
@@ -402,6 +407,8 @@ func TestRetrieveAllByIDs(t *testing.T) {
402407
"test": "test",
403408
},
404409
Status: domains.EnabledStatus,
410+
Order: "created_at",
411+
Dir: "asc",
405412
},
406413
response: domains.DomainsPage{
407414
Total: 2,
@@ -702,6 +709,7 @@ func TestListDomains(t *testing.T) {
702709
CreatedBy: userID,
703710
UpdatedBy: userID,
704711
Status: domains.EnabledStatus,
712+
CreatedAt: time.Now().UTC().Truncate(time.Millisecond),
705713
}
706714
if i%5 == 0 {
707715
domain.Status = domains.DisabledStatus
@@ -726,6 +734,8 @@ func TestListDomains(t *testing.T) {
726734
Offset: 0,
727735
Limit: 10,
728736
Status: domains.AllStatus,
737+
Order: "created_at",
738+
Dir: "asc",
729739
},
730740
response: domains.DomainsPage{
731741
Total: 10,
@@ -741,6 +751,8 @@ func TestListDomains(t *testing.T) {
741751
Offset: 0,
742752
Limit: 10,
743753
Status: domains.EnabledStatus,
754+
Order: "created_at",
755+
Dir: "asc",
744756
},
745757
response: domains.DomainsPage{
746758
Total: 8,
@@ -757,6 +769,8 @@ func TestListDomains(t *testing.T) {
757769
Limit: 10,
758770
Name: items[0].Name,
759771
Status: domains.AllStatus,
772+
Order: "created_at",
773+
Dir: "asc",
760774
},
761775
response: domains.DomainsPage{
762776
Total: 1,
@@ -772,6 +786,8 @@ func TestListDomains(t *testing.T) {
772786
Offset: 0,
773787
Limit: 10,
774788
Status: domains.DisabledStatus,
789+
Order: "created_at",
790+
Dir: "asc",
775791
},
776792
response: domains.DomainsPage{
777793
Total: 2,
@@ -788,6 +804,8 @@ func TestListDomains(t *testing.T) {
788804
Limit: 10,
789805
Tag: "admin",
790806
Status: domains.AllStatus,
807+
Order: "created_at",
808+
Dir: "asc",
791809
},
792810
response: domains.DomainsPage{
793811
Total: 2,
@@ -822,6 +840,8 @@ func TestListDomains(t *testing.T) {
822840
"test1": "test1",
823841
},
824842
Status: domains.AllStatus,
843+
Order: "created_at",
844+
Dir: "asc",
825845
},
826846
response: domains.DomainsPage{
827847
Total: 2,

groups/postgres/groups.go

Lines changed: 56 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -430,7 +430,7 @@ func (repo groupRepository) RetrieveAll(ctx context.Context, pm groups.PageMeta)
430430
orderClause = fmt.Sprintf("ORDER BY %s %s, g.id %s", orderBy, dir, dir)
431431
}
432432

433-
q := fmt.Sprintf(`SELECT DISTINCT g.id, g.domain_id, tags, COALESCE(g.parent_id, '') AS parent_id, g.name, g.description,
433+
q := fmt.Sprintf(`SELECT g.id, g.domain_id, tags, COALESCE(g.parent_id, '') AS parent_id, g.name, g.description,
434434
g.metadata, g.created_at, g.updated_at, g.updated_by, g.status FROM groups g %s %s LIMIT :limit OFFSET :offset;`, query, orderClause)
435435

436436
dbPageMeta, err := toDBGroupPageMeta(pm)
@@ -454,7 +454,7 @@ func (repo groupRepository) RetrieveAll(ctx context.Context, pm groups.PageMeta)
454454

455455
cq := fmt.Sprintf(` SELECT COUNT(*) AS total_count
456456
FROM (
457-
SELECT DISTINCT g.id, g.domain_id, COALESCE(g.parent_id, '') AS parent_id, g.name, g.tags, g.description,
457+
SELECT g.id, g.domain_id, COALESCE(g.parent_id, '') AS parent_id, g.name, g.tags, g.description,
458458
g.metadata, g.created_at, g.updated_at, g.updated_by, g.status FROM groups g %s
459459
) AS subquery;
460460
`, query)
@@ -849,37 +849,54 @@ func (repo groupRepository) RetrieveUserGroups(ctx context.Context, domainID, us
849849

850850
func (repo groupRepository) retrieveGroups(ctx context.Context, domainID, userID, query string, pm groups.PageMeta) (groups.Page, error) {
851851
baseQuery := repo.userGroupsBaseQuery(domainID, userID)
852+
853+
orderClause := ""
854+
var orderBy string
855+
switch pm.Order {
856+
case "name":
857+
orderBy = "g.name"
858+
case "created_at":
859+
orderBy = "g.created_at"
860+
case "updated_at", "":
861+
orderBy = "COALESCE(g.updated_at, g.created_at)"
862+
}
863+
864+
if orderBy != "" {
865+
dir := pm.Dir
866+
if dir != api.AscDir && dir != api.DescDir {
867+
dir = api.DescDir
868+
}
869+
orderClause = fmt.Sprintf("ORDER BY %s %s, g.id %s", orderBy, dir, dir)
870+
}
871+
852872
q := fmt.Sprintf(`%s
853-
SELECT
854-
g.id,
855-
g.name,
856-
g.domain_id,
857-
COALESCE(g.parent_id, '') AS parent_id,
858-
g.description,
859-
g.tags,
860-
g.metadata,
861-
g.created_at,
862-
g.updated_at,
863-
g.updated_by,
864-
g.status,
865-
g.path as path,
866-
g.role_id,
867-
g.role_name,
868-
g.actions,
869-
g.access_type,
870-
g.access_provider_id,
871-
g.access_provider_role_id,
872-
g.access_provider_role_name,
873-
g.access_provider_role_actions
874-
FROM
875-
final_groups g
876-
%s
877-
ORDER BY
878-
g.created_at
879-
LIMIT :limit
880-
OFFSET :offset;
881-
`,
882-
baseQuery, query)
873+
SELECT
874+
g.id,
875+
g.name,
876+
g.domain_id,
877+
COALESCE(g.parent_id, '') AS parent_id,
878+
g.description,
879+
g.tags,
880+
g.metadata,
881+
g.created_at,
882+
g.updated_at,
883+
g.updated_by,
884+
g.status,
885+
g.path as path,
886+
g.role_id,
887+
g.role_name,
888+
g.actions,
889+
g.access_type,
890+
g.access_provider_id,
891+
g.access_provider_role_id,
892+
g.access_provider_role_name,
893+
g.access_provider_role_actions
894+
FROM final_groups g
895+
%s
896+
%s
897+
LIMIT :limit OFFSET :offset;`,
898+
baseQuery, query, orderClause)
899+
883900
dbPageMeta, err := toDBGroupPageMeta(pm)
884901
if err != nil {
885902
return groups.Page{}, errors.Wrap(repoerr.ErrFailedToRetrieveAllGroups, err)
@@ -900,34 +917,13 @@ func (repo groupRepository) retrieveGroups(ctx context.Context, domainID, userID
900917
}
901918

902919
cq := fmt.Sprintf(`%s
903-
SELECT COUNT(*) AS total_count
904-
FROM (
905-
SELECT
906-
g.id,
907-
g.name,
908-
g.domain_id,
909-
COALESCE(g.parent_id, '') AS parent_id,
910-
g.description,
911-
g.tags,
912-
g.metadata,
913-
g.created_at,
914-
g.updated_at,
915-
g.updated_by,
916-
g.status,
917-
g.path as path,
918-
g.role_id,
919-
g.role_name,
920-
g.actions,
921-
g.access_type,
922-
g.access_provider_id,
923-
g.access_provider_role_id,
924-
g.access_provider_role_name,
925-
g.access_provider_role_actions
926-
FROM
927-
final_groups g
928-
%s
929-
) AS subquery;
930-
`, baseQuery, query)
920+
SELECT COUNT(*) AS total_count
921+
FROM (
922+
SELECT g.id
923+
FROM final_groups g
924+
%s
925+
) AS subquery;`,
926+
baseQuery, query)
931927

932928
total, err := postgres.Total(ctx, repo.db, cq, dbPageMeta)
933929
if err != nil {

0 commit comments

Comments
 (0)