Skip to main content
Glama

Storyden

by Southclaws
Mozilla Public License 2.0
227
mapping.go3.04 kB
package library import ( "github.com/Southclaws/dt" "github.com/Southclaws/fault" "github.com/Southclaws/opt" "github.com/Southclaws/storyden/app/resources/asset" "github.com/Southclaws/storyden/app/resources/collection/collection_item_status" "github.com/Southclaws/storyden/app/resources/datagraph" "github.com/Southclaws/storyden/app/resources/link/link_ref" "github.com/Southclaws/storyden/app/resources/profile" "github.com/Southclaws/storyden/app/resources/tag/tag_ref" "github.com/Southclaws/storyden/app/resources/visibility" "github.com/Southclaws/storyden/internal/ent" ) func MapNode(isRoot bool, ps *PropertySchemaTable) func(c *ent.Node) (*Node, error) { return func(c *ent.Node) (*Node, error) { accEdge, err := c.Edges.OwnerOrErr() if err != nil { return nil, fault.Wrap(err) } pro, err := profile.MapRef(accEdge) if err != nil { return nil, fault.Wrap(err) } parent, err := opt.MapErr(opt.NewPtr(c.Edges.Parent), func(c ent.Node) (Node, error) { p, err := MapNode(false, ps)(&c) if err != nil { return Node{}, err } return *p, nil }) if err != nil { return nil, err } tagsEdge := c.Edges.Tags tags := dt.Map(tagsEdge, tag_ref.Map(nil)) nodes, err := dt.MapErr(c.Edges.Nodes, MapNode(false, ps)) if err != nil { return nil, fault.Wrap(err) } visibility, err := visibility.NewVisibility(c.Visibility.String()) if err != nil { return nil, fault.Wrap(err) } assets := dt.Map(c.Edges.Assets, asset.Map) richContent, err := opt.MapErr(opt.NewPtr(c.Content), datagraph.NewRichText) if err != nil { return nil, err } primaryImage := opt.Map(opt.NewPtr(c.Edges.PrimaryImage), func(e ent.Asset) asset.Asset { return *asset.Map(&e) }) // This edge is optional anyway, so if not loaded, nothing bad happens. link := opt.Map(opt.NewPtr(c.Edges.Link), func(in ent.Link) link_ref.LinkRef { return *link_ref.Map(&in) }) metadata := c.Metadata if metadata == nil { metadata = make(map[string]any) } n := &Node{ Mark: NewMark(c.ID, c.Slug), CreatedAt: c.CreatedAt, UpdatedAt: c.UpdatedAt, IndexedAt: opt.NewPtr(c.IndexedAt), Name: c.Name, Assets: assets, WebLink: link, Content: richContent, Description: opt.NewPtr(c.Description), PrimaryImage: primaryImage, Owner: *pro, Parent: parent, HideChildTree: c.HideChildTree, Tags: tags, Collections: collection_item_status.Status{ // NOTE: Members cannot yet add nodes to collections. }, Nodes: nodes, Visibility: visibility, SortKey: c.Sort, Metadata: metadata, } if ps != nil { // Sibling properties may contain values, so we pass in the edge. n.Properties = opt.NewPtr(ps.BuildPropertyTable(c.Edges.Properties, isRoot)) if isRoot { // Child properties don't contain values, only the property schemas. n.ChildProperties = opt.NewPtr(ps.ChildSchemas()) } } return n, nil } }

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