Bluemage/go/api/subreddits_count.go

51 lines
1.2 KiB
Go

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
}