Skip to main content
Glama

Storyden

by Southclaws
Mozilla Public License 2.0
229
manager.go2.71 kB
package collection_manager import ( "context" "github.com/Southclaws/fault" "github.com/Southclaws/fault/fctx" "github.com/Southclaws/opt" "github.com/gosimple/slug" "github.com/Southclaws/storyden/app/resources/account" "github.com/Southclaws/storyden/app/resources/collection" "github.com/Southclaws/storyden/app/resources/collection/collection_querier" "github.com/Southclaws/storyden/app/resources/collection/collection_writer" "github.com/Southclaws/storyden/app/services/collection/collection_auth" ) type Manager struct { colQuerier *collection_querier.Querier colWriter *collection_writer.Writer } func New( colQuerier *collection_querier.Querier, colWriter *collection_writer.Writer, ) *Manager { return &Manager{ colQuerier: colQuerier, colWriter: colWriter, } } type Partial struct { Name opt.Optional[string] Slug opt.Optional[string] Description opt.Optional[string] } func (s *Manager) Create(ctx context.Context, accID account.AccountID, name string, partial Partial) (*collection.CollectionWithItems, error) { opts := []collection_writer.Option{} partial.Name.Call(func(v string) { opts = append(opts, collection_writer.WithName(v)) }) partial.Description.Call(func(v string) { opts = append(opts, collection_writer.WithDescription(v)) }) slug := partial.Slug.Or(slug.Make(name)) col, err := s.colWriter.Create(ctx, accID, name, slug, opts...) if err != nil { return nil, fault.Wrap(err, fctx.With(ctx)) } return col, nil } func (s *Manager) Update(ctx context.Context, qk collection.QueryKey, partial Partial) (*collection.CollectionWithItems, error) { if err := s.authoriseDirectUpdate(ctx, qk); err != nil { return nil, err } opts := []collection_writer.Option{} partial.Name.Call(func(v string) { opts = append(opts, collection_writer.WithName(v)) }) partial.Slug.Call(func(v string) { opts = append(opts, collection_writer.WithSlug(v)) }) partial.Description.Call(func(v string) { opts = append(opts, collection_writer.WithDescription(v)) }) col, err := s.colWriter.Update(ctx, qk, opts...) if err != nil { return nil, fault.Wrap(err, fctx.With(ctx)) } return col, nil } func (s *Manager) Delete(ctx context.Context, qk collection.QueryKey) error { if err := s.authoriseDirectUpdate(ctx, qk); err != nil { return err } err := s.colWriter.Delete(ctx, qk) if err != nil { return fault.Wrap(err, fctx.With(ctx)) } return nil } func (m *Manager) authoriseDirectUpdate(ctx context.Context, qk collection.QueryKey) error { col, err := m.colQuerier.Probe(ctx, qk) if err != nil { return fault.Wrap(err, fctx.With(ctx)) } return collection_auth.CheckCollectionMutationPermissions(ctx, *col) }

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