Skip to main content
Glama

Storyden

by Southclaws
Mozilla Public License 2.0
227
repo.go1.55 kB
package post_search import ( "context" "github.com/Southclaws/dt" "github.com/Southclaws/storyden/app/resources/pagination" "github.com/Southclaws/storyden/app/resources/post" "github.com/Southclaws/storyden/internal/ent" "github.com/Southclaws/storyden/internal/ent/account" ent_post "github.com/Southclaws/storyden/internal/ent/post" "github.com/Southclaws/storyden/internal/ent/predicate" ) //go:generate go run -mod=mod github.com/Southclaws/enumerator type kindEnum string const ( kindThread kindEnum = "thread" kindPost kindEnum = "post" ) type Filter func(*ent.PostQuery) type Repository interface { Search(ctx context.Context, params pagination.Parameters, filters ...Filter) (*pagination.Result[*post.Post], error) GetMany(ctx context.Context, id ...post.ID) ([]*post.Post, error) } func WithKinds(ks ...Kind) Filter { return func(pq *ent.PostQuery) { pq.Where( ent_post.Or( dt.Map(ks, func(k Kind) predicate.Post { switch k { case KindThread: return ent_post.First(true) case KindPost: return ent_post.First(false) default: return nil } })..., ), ) } } func WithKeywords(q string) Filter { return func(pq *ent.PostQuery) { pq.Where( ent_post.Or( ent_post.And( ent_post.First(true), ent_post.TitleContainsFold(q), ), ent_post.BodyContainsFold(q), )) } } func WithAuthorHandle(handle string) Filter { return func(pq *ent.PostQuery) { pq.Where( ent_post.HasAuthorWith( account.Handle(handle), ), ) } }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Southclaws/storyden'

If you have feedback or need assistance with the MCP directory API, please join our Discord server