Skip to main content
Glama

Storyden

by Southclaws
Mozilla Public License 2.0
227
item.go2.61 kB
package collection import ( "sort" "time" "github.com/Southclaws/dt" "github.com/Southclaws/fault" "github.com/Southclaws/opt" "github.com/Southclaws/storyden/app/resources/datagraph" "github.com/Southclaws/storyden/app/resources/library" "github.com/Southclaws/storyden/app/resources/post" "github.com/Southclaws/storyden/app/resources/profile" "github.com/Southclaws/storyden/internal/ent" ) type CollectionItem struct { Added time.Time MembershipType MembershipType Author profile.Ref Item datagraph.Item RelevanceScore opt.Optional[float64] } type CollectionItemStatus struct { Collection Collection Item opt.Optional[CollectionItem] } type CollectionItems []*CollectionItem func (a CollectionItems) Len() int { return len(a) } func (a CollectionItems) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a CollectionItems) Less(i, j int) bool { return a[i].Added.After(a[j].Added) } func MapWithItems(c *ent.Collection) (*CollectionWithItems, error) { col, err := Map(nil)(c) if err != nil { return nil, err } posts, err := dt.MapErr(c.Edges.CollectionPosts, MapPost) if err != nil { return nil, fault.Wrap(err) } nodes, err := dt.MapErr(c.Edges.CollectionNodes, MapNode) if err != nil { return nil, fault.Wrap(err) } items := CollectionItems(append(posts, nodes...)) sort.Sort(items) colWithItems := &CollectionWithItems{ Collection: *col, Items: items, } return colWithItems, nil } func MapPost(n *ent.CollectionPost) (*CollectionItem, error) { p := n.Edges.Post accEdge, err := p.Edges.AuthorOrErr() if err != nil { return nil, fault.Wrap(err) } mt, err := NewMembershipType(n.MembershipType) if err != nil { return nil, err } pro, err := profile.MapRef(accEdge) if err != nil { return nil, fault.Wrap(err) } item, err := post.Map(p) if err != nil { return nil, err } return &CollectionItem{ Added: n.CreatedAt, MembershipType: mt, Author: *pro, Item: item, }, nil } func MapNode(n *ent.CollectionNode) (*CollectionItem, error) { p := n.Edges.Node accEdge, err := p.Edges.OwnerOrErr() if err != nil { return nil, fault.Wrap(err) } mt, err := NewMembershipType(n.MembershipType) if err != nil { return nil, err } pro, err := profile.MapRef(accEdge) if err != nil { return nil, fault.Wrap(err) } item, err := library.MapNode(true, nil)(p) if err != nil { return nil, err } return &CollectionItem{ Added: n.CreatedAt, MembershipType: mt, Author: *pro, Item: item, }, 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