57 lines
1.5 KiB
Go
57 lines
1.5 KiB
Go
package api
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/tigorlazuardi/redmage/db/queries"
|
|
"github.com/tigorlazuardi/redmage/pkg/errs"
|
|
)
|
|
|
|
type ListSubredditsParams struct {
|
|
Name string `json:"name"`
|
|
Limit int64 `json:"limit"`
|
|
Offset int64 `json:"offset"`
|
|
}
|
|
|
|
type ListSubredditsResult struct {
|
|
Total int64
|
|
Data []queries.Subreddit
|
|
}
|
|
|
|
func (api *API) ListSubreddits(ctx context.Context, arg ListSubredditsParams) (result ListSubredditsResult, err error) {
|
|
ctx, span := tracer.Start(ctx, "api.ListSubreddits")
|
|
defer span.End()
|
|
if arg.Name != "" {
|
|
result.Data, err = api.queries.SubredditsSearch(ctx, queries.SubredditsSearchParams{
|
|
Name: "%" + arg.Name + "%",
|
|
Limit: arg.Limit,
|
|
Offset: arg.Offset,
|
|
})
|
|
if err != nil {
|
|
return result, errs.Wrapw(err, "failed to search subreddit", "query", arg)
|
|
}
|
|
result.Total, err = api.queries.SubredditsSearchCount(ctx, queries.SubredditsSearchCountParams{
|
|
Name: "%" + arg.Name + "%",
|
|
Limit: arg.Limit,
|
|
Offset: arg.Offset,
|
|
})
|
|
if err != nil {
|
|
return result, errs.Wrapw(err, "failed to count subreddit search", "query", arg)
|
|
}
|
|
return result, err
|
|
}
|
|
|
|
result.Data, err = api.queries.SubredditsList(ctx, queries.SubredditsListParams{
|
|
Limit: arg.Limit,
|
|
Offset: arg.Offset,
|
|
})
|
|
if err != nil {
|
|
return result, errs.Wrapw(err, "failed to list subreddit", "query", arg)
|
|
}
|
|
result.Total, err = api.queries.SubredditsListCount(ctx)
|
|
if err != nil {
|
|
return result, errs.Wrapw(err, "failed to count subreddit list", "query", arg)
|
|
}
|
|
return result, err
|
|
}
|