diff options
author | 2024-06-18 18:18:00 +0200 | |
---|---|---|
committer | 2024-06-18 18:18:00 +0200 | |
commit | d2b3d37724a999d4cc78c46157593267e29d184e (patch) | |
tree | ac72be127d8adb80bbd756ad970ae14df7b5618f /internal/db/bundb/report.go | |
parent | [feature] Implement types[] param for notifications (#3009) (diff) | |
download | gotosocial-d2b3d37724a999d4cc78c46157593267e29d184e.tar.xz |
[feature/frontend] Reports frontend v2 (#3022)
* use apiutil + paging in admin processor+handlers
* we're making it happen
* fix little whoopsie
* styling for report list
* don't youuuu forget about meee don't don't don't don't
* last bits
* sanitize content before showing in report statuses
* update report docs
Diffstat (limited to 'internal/db/bundb/report.go')
-rw-r--r-- | internal/db/bundb/report.go | 45 |
1 files changed, 36 insertions, 9 deletions
diff --git a/internal/db/bundb/report.go b/internal/db/bundb/report.go index 486bf09f0..f99f0b5cc 100644 --- a/internal/db/bundb/report.go +++ b/internal/db/bundb/report.go @@ -20,6 +20,7 @@ package bundb import ( "context" "errors" + "slices" "time" "github.com/superseriousbusiness/gotosocial/internal/db" @@ -27,6 +28,7 @@ import ( "github.com/superseriousbusiness/gotosocial/internal/gtserror" "github.com/superseriousbusiness/gotosocial/internal/gtsmodel" "github.com/superseriousbusiness/gotosocial/internal/log" + "github.com/superseriousbusiness/gotosocial/internal/paging" "github.com/superseriousbusiness/gotosocial/internal/state" "github.com/uptrace/bun" ) @@ -51,14 +53,23 @@ func (r *reportDB) GetReportByID(ctx context.Context, id string) (*gtsmodel.Repo ) } -func (r *reportDB) GetReports(ctx context.Context, resolved *bool, accountID string, targetAccountID string, maxID string, sinceID string, minID string, limit int) ([]*gtsmodel.Report, error) { - reportIDs := []string{} +func (r *reportDB) GetReports(ctx context.Context, resolved *bool, accountID string, targetAccountID string, page *paging.Page) ([]*gtsmodel.Report, error) { + var ( + // Get paging params. + minID = page.GetMin() + maxID = page.GetMax() + limit = page.GetLimit() + order = page.GetOrder() + + // Make educated guess for slice size + reportIDs = make([]string, 0, limit) + ) q := r.db. NewSelect(). TableExpr("? AS ?", bun.Ident("reports"), bun.Ident("report")). - Column("report.id"). - Order("report.id DESC") + // Select only IDs from table. + Column("report.id") if resolved != nil { i := bun.Ident("report.action_taken_by_account_id") @@ -77,22 +88,32 @@ func (r *reportDB) GetReports(ctx context.Context, resolved *bool, accountID str q = q.Where("? = ?", bun.Ident("report.target_account_id"), targetAccountID) } + // Return only reports with id + // lower than provided maxID. if maxID != "" { q = q.Where("? < ?", bun.Ident("report.id"), maxID) } - if sinceID != "" { - q = q.Where("? > ?", bun.Ident("report.id"), minID) - } - + // Return only reports with id + // greater than provided minID. if minID != "" { q = q.Where("? > ?", bun.Ident("report.id"), minID) } - if limit != 0 { + if limit > 0 { + // Limit amount of + // reports returned. q = q.Limit(limit) } + if order == paging.OrderAscending { + // Page up. + q = q.OrderExpr("? ASC", bun.Ident("report.id")) + } else { + // Page down. + q = q.OrderExpr("? DESC", bun.Ident("report.id")) + } + if err := q.Scan(ctx, &reportIDs); err != nil { return nil, err } @@ -102,6 +123,12 @@ func (r *reportDB) GetReports(ctx context.Context, resolved *bool, accountID str return nil, db.ErrNoEntries } + // If we're paging up, we still want reports + // to be sorted by ID desc, so reverse ids slice. + if order == paging.OrderAscending { + slices.Reverse(reportIDs) + } + // Allocate return slice (will be at most len reportIDs) reports := make([]*gtsmodel.Report, 0, len(reportIDs)) for _, id := range reportIDs { |