Skip to content

Commit

Permalink
add new visibility value: "unlisted"
Browse files Browse the repository at this point in the history
move visibility enum into its own package as its shared among 3 kinds of resource
  • Loading branch information
Southclaws committed Jul 4, 2024
1 parent 3be2653 commit aa76f69
Show file tree
Hide file tree
Showing 24 changed files with 181 additions and 171 deletions.
1 change: 1 addition & 0 deletions api/openapi.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1921,6 +1921,7 @@ components:
type: string
enum:
- draft
- unlisted
- review
- published

Expand Down
4 changes: 2 additions & 2 deletions app/resources/datagraph/mapping.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import (

"github.com/Southclaws/storyden/app/resources/asset"
"github.com/Southclaws/storyden/app/resources/content"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/internal/ent"
)

Expand Down Expand Up @@ -38,7 +38,7 @@ func NodeFromModel(c *ent.Node) (*Node, error) {
return nil, fault.Wrap(err)
}

visibility, err := post.NewVisibility(c.Visibility.String())
visibility, err := visibility.NewVisibility(c.Visibility.String())
if err != nil {
return nil, fault.Wrap(err)
}
Expand Down
4 changes: 2 additions & 2 deletions app/resources/datagraph/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ import (

"github.com/Southclaws/storyden/app/resources/asset"
"github.com/Southclaws/storyden/app/resources/content"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
)

type (
Expand Down Expand Up @@ -39,7 +39,7 @@ type Node struct {
Content opt.Optional[content.Rich]
Owner Profile
Parent opt.Optional[Node]
Visibility post.Visibility
Visibility visibility.Visibility
Properties any

Nodes []*Node
Expand Down
6 changes: 3 additions & 3 deletions app/resources/datagraph/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import (
"github.com/Southclaws/storyden/app/resources/asset"
"github.com/Southclaws/storyden/app/resources/content"
"github.com/Southclaws/storyden/app/resources/datagraph"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/internal/ent"
"github.com/Southclaws/storyden/internal/ent/node"
)
Expand Down Expand Up @@ -89,9 +89,9 @@ func WithParent(v datagraph.NodeID) Option {
}
}

func WithVisibility(v post.Visibility) Option {
func WithVisibility(v visibility.Visibility) Option {
return func(c *ent.NodeMutation) {
c.SetVisibility(node.Visibility(v.ToEnt()))
c.SetVisibility(node.Visibility(v.String()))
}
}

Expand Down
6 changes: 3 additions & 3 deletions app/resources/datagraph/node_search/search.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"github.com/jmoiron/sqlx"

"github.com/Southclaws/storyden/app/resources/datagraph"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/internal/ent"
"github.com/Southclaws/storyden/internal/ent/node"
)
Expand All @@ -21,7 +21,7 @@ type Search interface {

type query struct {
qs string
visibility []post.Visibility
visibility []visibility.Visibility
}

type Option func(*query)
Expand All @@ -32,7 +32,7 @@ func WithNameContains(s string) Option {
}
}

func WithVisibility(v []post.Visibility) Option {
func WithVisibility(v []visibility.Visibility) Option {
return func(q *query) {
q.visibility = v
}
Expand Down
44 changes: 22 additions & 22 deletions app/resources/datagraph/node_traversal/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ import (
asset_repo "github.com/Southclaws/storyden/app/resources/asset"
"github.com/Southclaws/storyden/app/resources/content"
"github.com/Southclaws/storyden/app/resources/datagraph"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/internal/ent"
"github.com/Southclaws/storyden/internal/ent/account"
"github.com/Southclaws/storyden/internal/ent/asset"
Expand Down Expand Up @@ -50,7 +50,7 @@ func (d *database) Root(ctx context.Context, fs ...Filter) ([]*datagraph.Node, e
}

if len(f.visibility) > 0 {
visibilityTypes := dt.Map(f.visibility, func(v post.Visibility) node.Visibility {
visibilityTypes := dt.Map(f.visibility, func(v visibility.Visibility) node.Visibility {
return node.Visibility(v.String())
})

Expand Down Expand Up @@ -122,25 +122,25 @@ order by
`

type subtreeRow struct {
NodeId xid.ID `db:"node_id"`
NodeCreatedAt time.Time `db:"node_created_at"`
NodeUpdatedAt time.Time `db:"node_updated_at"`
NodeDeletedAt *time.Time `db:"node_deleted_at"`
NodeName string `db:"node_name"`
NodeSlug string `db:"node_slug"`
NodeParentNodeId xid.ID `db:"node_parent_node_id"`
NodeAccountId xid.ID `db:"node_account_id"`
NodeVisibility post.Visibility `db:"node_visibility"`
NodeProperties any `db:"node_properties"`
OwnerId xid.ID `db:"owner_id"`
OwnerCreatedAt time.Time `db:"owner_created_at"`
OwnerUpdatedAt time.Time `db:"owner_updated_at"`
OwnerDeletedAt *time.Time `db:"owner_deleted_at"`
OwnerHandle string `db:"owner_handle"`
OwnerName string `db:"owner_name"`
OwnerBio *string `db:"owner_bio"`
OwnerAdmin bool `db:"owner_admin"`
Depth int `db:"depth"`
NodeId xid.ID `db:"node_id"`
NodeCreatedAt time.Time `db:"node_created_at"`
NodeUpdatedAt time.Time `db:"node_updated_at"`
NodeDeletedAt *time.Time `db:"node_deleted_at"`
NodeName string `db:"node_name"`
NodeSlug string `db:"node_slug"`
NodeParentNodeId xid.ID `db:"node_parent_node_id"`
NodeAccountId xid.ID `db:"node_account_id"`
NodeVisibility visibility.Visibility `db:"node_visibility"`
NodeProperties any `db:"node_properties"`
OwnerId xid.ID `db:"owner_id"`
OwnerCreatedAt time.Time `db:"owner_created_at"`
OwnerUpdatedAt time.Time `db:"owner_updated_at"`
OwnerDeletedAt *time.Time `db:"owner_deleted_at"`
OwnerHandle string `db:"owner_handle"`
OwnerName string `db:"owner_name"`
OwnerBio *string `db:"owner_bio"`
OwnerAdmin bool `db:"owner_admin"`
Depth int `db:"depth"`
}

func fromRow(r subtreeRow) (*datagraph.Node, error) {
Expand Down Expand Up @@ -244,7 +244,7 @@ func (d *database) Subtree(ctx context.Context, id opt.Optional[datagraph.NodeID
if len(f.visibility) > 0 {
return lo.Contains(f.visibility, n.Visibility)
} else {
return n.Visibility == post.VisibilityPublished
return n.Visibility == visibility.VisibilityPublished
}
})

Expand Down
6 changes: 3 additions & 3 deletions app/resources/datagraph/node_traversal/traversal.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import (

"github.com/Southclaws/opt"
"github.com/Southclaws/storyden/app/resources/datagraph"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
)

type Repository interface {
Expand All @@ -16,7 +16,7 @@ type Repository interface {

type filters struct {
accountSlug *string
visibility []post.Visibility
visibility []visibility.Visibility
depth *uint
}

Expand All @@ -28,7 +28,7 @@ func WithOwner(v string) Filter {
}
}

func WithVisibility(v ...post.Visibility) Filter {
func WithVisibility(v ...visibility.Visibility) Filter {
return func(f *filters) {
f.visibility = v
}
Expand Down
21 changes: 0 additions & 21 deletions app/resources/post/status.go

This file was deleted.

3 changes: 2 additions & 1 deletion app/resources/seed/post.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ import (
"github.com/Southclaws/storyden/app/resources/react"
"github.com/Southclaws/storyden/app/resources/reply"
"github.com/Southclaws/storyden/app/resources/thread"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/internal/ent"
"github.com/Southclaws/storyden/internal/utils"
)
Expand Down Expand Up @@ -302,7 +303,7 @@ func threads(tr thread.Repository, pr reply.Repository, rr react.Repository, ar
t.Tags,
thread.WithID(t.ID),
thread.WithContent(first.Content),
thread.WithVisibility(post.VisibilityPublished),
thread.WithVisibility(visibility.VisibilityPublished),
thread.WithAssets(assetIDs),
)
if err != nil {
Expand Down
5 changes: 3 additions & 2 deletions app/resources/thread/dto.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/react"
"github.com/Southclaws/storyden/app/resources/reply"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/internal/ent"
)

Expand All @@ -31,7 +32,7 @@ type Thread struct {
Author datagraph.Profile
Tags []string
Category category.Category
Visibility post.Visibility
Visibility visibility.Visibility
Posts []*reply.Reply
Reacts []*react.React
Meta map[string]any
Expand Down Expand Up @@ -127,7 +128,7 @@ func FromModel(m *ent.Post) (*Thread, error) {
Author: *pro,
Tags: dt.Map(m.Edges.Tags, func(t *ent.Tag) string { return t.Name }),
Category: *category,
Visibility: post.NewVisibilityFromEnt(m.Visibility),
Visibility: visibility.NewVisibilityFromEnt(m.Visibility),
Posts: posts,
Reacts: dt.Map(m.Edges.Reacts, react.FromModel),
Meta: m.Metadata,
Expand Down
9 changes: 5 additions & 4 deletions app/resources/thread/repo.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import (
"github.com/Southclaws/storyden/app/resources/category"
"github.com/Southclaws/storyden/app/resources/content"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/internal/ent"
ent_account "github.com/Southclaws/storyden/internal/ent/account"
ent_category "github.com/Southclaws/storyden/internal/ent/category"
Expand Down Expand Up @@ -88,9 +89,9 @@ func WithCategory(v xid.ID) Option {
}
}

func WithVisibility(v post.Visibility) Option {
func WithVisibility(v visibility.Visibility) Option {
return func(pm *ent.PostMutation) {
pm.SetVisibility(v.ToEnt())
pm.SetVisibility(ent_post.Visibility(v.String()))
}
}

Expand Down Expand Up @@ -154,9 +155,9 @@ func HasCategories(ids []string) Query {
}
}

func HasStatus(status post.Visibility) Query {
func HasStatus(status visibility.Visibility) Query {
return func(q *ent.PostQuery) {
q.Where(ent_post.VisibilityEQ(status.ToEnt()))
q.Where(ent_post.VisibilityEQ(ent_post.Visibility(status.String())))
}
}

Expand Down
22 changes: 22 additions & 0 deletions app/resources/visibility/visibility.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package visibility

import (
"github.com/Southclaws/storyden/internal/ent/collection"
"github.com/Southclaws/storyden/internal/ent/node"
"github.com/Southclaws/storyden/internal/ent/post"
)

//go:generate go run -mod=mod github.com/Southclaws/enumerator

type visibilityEnum string

const (
visibilityDraft visibilityEnum = "draft"
visibilityUnlisted visibilityEnum = "unlisted"
visibilityReview visibilityEnum = "review"
visibilityPublished visibilityEnum = "published"
)

func NewVisibilityFromEnt[T post.Visibility | node.Visibility | collection.Visibility](in T) Visibility {
return Visibility{visibilityEnum(in)}
}

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 4 additions & 4 deletions app/services/node/node.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ import (
"github.com/Southclaws/storyden/app/resources/datagraph"
"github.com/Southclaws/storyden/app/resources/datagraph/node"
"github.com/Southclaws/storyden/app/resources/datagraph/node_children"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/app/services/authentication/session"
"github.com/Southclaws/storyden/app/services/hydrator"
)
Expand All @@ -40,7 +40,7 @@ type Partial struct {
URL opt.Optional[string]
Content opt.Optional[content.Rich]
Parent opt.Optional[datagraph.NodeSlug]
Visibility opt.Optional[post.Visibility]
Visibility opt.Optional[visibility.Visibility]
Properties opt.Optional[any]
AssetsAdd opt.Optional[[]asset.AssetID]
AssetsRemove opt.Optional[[]asset.AssetID]
Expand Down Expand Up @@ -207,9 +207,9 @@ func (s *service) applyOpts(ctx context.Context, p Partial) ([]node.Option, erro
}

if acc, ok := acc.Get(); ok {
p.Visibility.Call(func(value post.Visibility) {
p.Visibility.Call(func(value visibility.Visibility) {
// Only admins can immediately post to the public feed.
if value == post.VisibilityPublished && !acc.Admin {
if value == visibility.VisibilityPublished && !acc.Admin {
return
}

Expand Down
8 changes: 4 additions & 4 deletions app/services/node/node_visibility/visibility.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (
"github.com/Southclaws/storyden/app/resources/datagraph"
"github.com/Southclaws/storyden/app/resources/datagraph/node"
"github.com/Southclaws/storyden/app/resources/datagraph/node_children"
"github.com/Southclaws/storyden/app/resources/post"
"github.com/Southclaws/storyden/app/resources/visibility"
"github.com/Southclaws/storyden/app/services/authentication/session"
)

Expand All @@ -35,7 +35,7 @@ func New(
}
}

func (m *Controller) ChangeVisibility(ctx context.Context, slug datagraph.NodeSlug, visibility post.Visibility) (*datagraph.Node, error) {
func (m *Controller) ChangeVisibility(ctx context.Context, slug datagraph.NodeSlug, vis visibility.Visibility) (*datagraph.Node, error) {
accountID, err := session.GetAccountID(ctx)
if err != nil {
return nil, fault.Wrap(err, fctx.With(ctx))
Expand All @@ -57,12 +57,12 @@ func (m *Controller) ChangeVisibility(ctx context.Context, slug datagraph.NodeSl
}
}

n, err = m.nr.Update(ctx, n.ID, node.WithVisibility(visibility))
n, err = m.nr.Update(ctx, n.ID, node.WithVisibility(vis))
if err != nil {
return nil, fault.Wrap(err, fctx.With(ctx))
}

if visibility == post.VisibilityPublished {
if vis == visibility.VisibilityPublished {
// TODO: Emit events, send notifications, etc.
}

Expand Down
Loading

0 comments on commit aa76f69

Please sign in to comment.