Gisle Aune
6 years ago
10 changed files with 201 additions and 0 deletions
-
4graph2/graph.go
-
61graph2/queries/chapter.go
-
4graph2/queries/resolver.go
-
12graph2/schema/root.gql
-
6graph2/schema/types/Chapter.gql
-
1internal/auth/permissions.go
-
38models/chapters/add.go
-
25models/chapters/db.go
-
38models/chapters/edit.go
-
12models/chapters/remove.go
@ -1,6 +1,10 @@ |
|||||
package queries |
package queries |
||||
|
|
||||
type resolver struct{} |
type resolver struct{} |
||||
|
type mutationResolver struct{} |
||||
|
|
||||
// Resolver has all the queries
|
// Resolver has all the queries
|
||||
var Resolver resolver |
var Resolver resolver |
||||
|
|
||||
|
// MutationResolver brings the mutagens.
|
||||
|
var MutationResolver *mutationResolver |
@ -0,0 +1,38 @@ |
|||||
|
package chapters |
||||
|
|
||||
|
import ( |
||||
|
"time" |
||||
|
|
||||
|
"git.aiterp.net/rpdata/api/models" |
||||
|
"github.com/globalsign/mgo/bson" |
||||
|
) |
||||
|
|
||||
|
// Add adds a new chapter.
|
||||
|
func Add(story models.Story, title, author, source string, createdDate time.Time, finctionalDate *time.Time) (models.Chapter, error) { |
||||
|
chapter := models.Chapter{ |
||||
|
ID: makeChapterID(), |
||||
|
StoryID: story.ID, |
||||
|
Title: title, |
||||
|
Author: author, |
||||
|
Source: source, |
||||
|
CreatedDate: createdDate, |
||||
|
EditedDate: createdDate, |
||||
|
} |
||||
|
|
||||
|
if finctionalDate != nil { |
||||
|
chapter.FictionalDate = *finctionalDate |
||||
|
} |
||||
|
|
||||
|
err := collection.Insert(chapter) |
||||
|
if err != nil { |
||||
|
return models.Chapter{}, err |
||||
|
} |
||||
|
|
||||
|
if createdDate.After(story.UpdatedDate) { |
||||
|
if err := storyCollection.UpdateId(story.ID, bson.M{"$set": bson.M{"updatedDate": createdDate}}); err == nil { |
||||
|
story.UpdatedDate = createdDate |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
return chapter, nil |
||||
|
} |
@ -0,0 +1,38 @@ |
|||||
|
package chapters |
||||
|
|
||||
|
import ( |
||||
|
"time" |
||||
|
|
||||
|
"git.aiterp.net/rpdata/api/models" |
||||
|
"github.com/globalsign/mgo/bson" |
||||
|
) |
||||
|
|
||||
|
// Edit edits a chapter, and updates EditedDate. While many Edit functions cheat if there's nothing to
|
||||
|
// change, this functill will due to EditedDate.
|
||||
|
func Edit(chapter models.Chapter, title, source *string, fictionalDate *time.Time) (models.Chapter, error) { |
||||
|
now := time.Now() |
||||
|
changes := bson.M{"editedDate": now} |
||||
|
|
||||
|
edited := chapter |
||||
|
edited.EditedDate = now |
||||
|
|
||||
|
if title != nil && *title != chapter.Title { |
||||
|
changes["title"] = *title |
||||
|
edited.Title = *title |
||||
|
} |
||||
|
if source != nil && *source != chapter.Source { |
||||
|
changes["source"] = *source |
||||
|
edited.Source = *source |
||||
|
} |
||||
|
if fictionalDate != nil && !fictionalDate.Equal(chapter.FictionalDate) { |
||||
|
changes["fictionalDate"] = *fictionalDate |
||||
|
edited.FictionalDate = *fictionalDate |
||||
|
} |
||||
|
|
||||
|
err := collection.UpdateId(chapter.ID, bson.M{"$set": changes}) |
||||
|
if err != nil { |
||||
|
return chapter, err |
||||
|
} |
||||
|
|
||||
|
return edited, nil |
||||
|
} |
@ -0,0 +1,12 @@ |
|||||
|
package chapters |
||||
|
|
||||
|
import "git.aiterp.net/rpdata/api/models" |
||||
|
|
||||
|
// Remove removes a chapter.
|
||||
|
func Remove(chapter models.Chapter) (models.Chapter, error) { |
||||
|
if err := collection.RemoveId(chapter.ID); err != nil { |
||||
|
return models.Chapter{}, err |
||||
|
} |
||||
|
|
||||
|
return chapter, nil |
||||
|
} |
Write
Preview
Loading…
Cancel
Save
Reference in new issue