This commit is contained in:
@@ -28,64 +28,70 @@ type StoriesArg struct {
|
|||||||
|
|
||||||
// Stories resolves the stories query
|
// Stories resolves the stories query
|
||||||
func (r *QueryResolver) Stories(ctx context.Context, args *StoriesArg) ([]*types.StoryResolver, error) {
|
func (r *QueryResolver) Stories(ctx context.Context, args *StoriesArg) ([]*types.StoryResolver, error) {
|
||||||
|
var err error
|
||||||
|
|
||||||
filter := args.Filter
|
filter := args.Filter
|
||||||
|
|
||||||
author := ""
|
author := ""
|
||||||
if filter != nil && filter.Author != nil {
|
|
||||||
author = *filter.Author
|
|
||||||
}
|
|
||||||
|
|
||||||
category := ""
|
category := ""
|
||||||
if filter != nil && filter.Category != nil {
|
|
||||||
category = *filter.Category
|
|
||||||
}
|
|
||||||
|
|
||||||
tags := make([]story.Tag, 0, 8)
|
tags := make([]story.Tag, 0, 8)
|
||||||
if filter != nil && filter.Tags != nil {
|
|
||||||
for _, tagInput := range *filter.Tags {
|
|
||||||
tags = append(tags, story.Tag{
|
|
||||||
Kind: tagInput.Kind,
|
|
||||||
Name: tagInput.Name,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
earliest := time.Time{}
|
earliest := time.Time{}
|
||||||
err := error(nil)
|
|
||||||
if filter != nil && filter.EarliestFictionalDate != nil {
|
|
||||||
earliest, err = time.Parse(time.RFC3339Nano, *filter.EarliestFictionalDate)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
latest := time.Time{}
|
latest := time.Time{}
|
||||||
if filter != nil && filter.LatestFictionalDate != nil {
|
unlisted := false
|
||||||
latest, err = time.Parse(time.RFC3339Nano, *filter.LatestFictionalDate)
|
open := (*bool)(nil)
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unlisted := filter.Unlisted != nil && *filter.Unlisted == true
|
|
||||||
if unlisted {
|
|
||||||
user := session.FromContext(ctx).User()
|
|
||||||
if user == nil {
|
|
||||||
return nil, ErrUnauthorized
|
|
||||||
}
|
|
||||||
|
|
||||||
if author != "" && author != user.ID && !user.Permitted("story.unlisted") {
|
|
||||||
return nil, ErrPermissionDenied
|
|
||||||
}
|
|
||||||
|
|
||||||
author = user.ID
|
|
||||||
}
|
|
||||||
|
|
||||||
open := filter.Open
|
|
||||||
|
|
||||||
limit := 0
|
limit := 0
|
||||||
if filter != nil && filter.Limit != nil {
|
|
||||||
limit = int(*filter.Limit)
|
if filter != nil {
|
||||||
|
if filter.Author != nil {
|
||||||
|
author = *filter.Author
|
||||||
|
}
|
||||||
|
|
||||||
|
if filter.Category != nil {
|
||||||
|
category = *filter.Category
|
||||||
|
}
|
||||||
|
|
||||||
|
if filter.Tags != nil {
|
||||||
|
for _, tagInput := range *filter.Tags {
|
||||||
|
tags = append(tags, story.Tag{
|
||||||
|
Kind: tagInput.Kind,
|
||||||
|
Name: tagInput.Name,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if filter.EarliestFictionalDate != nil {
|
||||||
|
earliest, err = time.Parse(time.RFC3339Nano, *filter.EarliestFictionalDate)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if filter.LatestFictionalDate != nil {
|
||||||
|
latest, err = time.Parse(time.RFC3339Nano, *filter.LatestFictionalDate)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if filter.Limit != nil {
|
||||||
|
limit = int(*filter.Limit)
|
||||||
|
}
|
||||||
|
|
||||||
|
unlisted = filter.Unlisted != nil && *filter.Unlisted == true
|
||||||
|
if unlisted {
|
||||||
|
user := session.FromContext(ctx).User()
|
||||||
|
if user == nil {
|
||||||
|
return nil, ErrUnauthorized
|
||||||
|
}
|
||||||
|
|
||||||
|
if author != "" && author != user.ID && !user.Permitted("story.unlisted") {
|
||||||
|
return nil, ErrPermissionDenied
|
||||||
|
}
|
||||||
|
|
||||||
|
author = user.ID
|
||||||
|
}
|
||||||
|
|
||||||
|
open = filter.Open
|
||||||
}
|
}
|
||||||
|
|
||||||
stories, err := story.List(author, category, tags, earliest, latest, unlisted, open, limit)
|
stories, err := story.List(author, category, tags, earliest, latest, unlisted, open, limit)
|
||||||
|
|||||||
Reference in New Issue
Block a user