package api import ( "context" . "github.com/go-jet/jet/v2/sqlite" . "github.com/tigorlazuardi/bluemage/go/gen/jet/table" "github.com/tigorlazuardi/bluemage/go/pkg/errs" "github.com/tigorlazuardi/bluemage/go/pkg/telemetry" ) type CountSubredditsRequest struct { Search string Disabled *bool } func (c CountSubredditsRequest) Statement() SelectStatement { cond := Bool(true) if c.Search != "" { cond.AND(Subreddits.Name.LIKE(String("%" + c.Search + "%"))) } if c.Disabled != nil { disabled := *c.Disabled if disabled { cond.AND(Subreddits.Disabled.EQ(Int(1))) } else { cond.AND(Subreddits.Disabled.EQ(Int(0))) } } return SELECT(COUNT(Subreddits.Name)).WHERE(cond) } func (api *API) CountSubreddits(ctx context.Context, request CountSubredditsRequest) (count int64, err error) { ctx, span := tracer.Start(ctx, "CountSubreddits") defer func() { telemetry.EndWithStatus(span, err) }() stmt := request.Statement() query, args := stmt.Sql() err = api.DB.QueryRowContext(ctx, query, args...).Scan(&count) if err != nil { err = errs.Wrapw(err, "failed to count subreddits", "request", request, "query", stmt.DebugSql(), ) return count, err } return count, err }