You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
59 lines
1.6 KiB
59 lines
1.6 KiB
package models
|
|
|
|
import "time"
|
|
|
|
// A Chapter is a part of a story.
|
|
type Chapter struct {
|
|
ID string `bson:"_id"`
|
|
StoryID string `bson:"storyId"`
|
|
Title string `bson:"title"`
|
|
Author string `bson:"author"`
|
|
Source string `bson:"source"`
|
|
CreatedDate time.Time `bson:"createdDate"`
|
|
FictionalDate time.Time `bson:"fictionalDate,omitempty"`
|
|
EditedDate time.Time `bson:"editedDate"`
|
|
CommentMode ChapterCommentMode `bson:"commentMode"`
|
|
CommentsLocked bool `bson:"commentsLocked"`
|
|
}
|
|
|
|
func (chapter *Chapter) ApplyUpdate(update ChapterUpdate) {
|
|
if update.Title != nil {
|
|
chapter.Title = *update.Title
|
|
}
|
|
if update.Source != nil {
|
|
chapter.Source = *update.Source
|
|
}
|
|
if update.FictionalDate != nil {
|
|
chapter.FictionalDate = update.FictionalDate.UTC()
|
|
}
|
|
if update.CommentMode != nil {
|
|
chapter.CommentMode = *update.CommentMode
|
|
}
|
|
if update.CommentsLocked != nil {
|
|
chapter.CommentsLocked = *update.CommentsLocked
|
|
}
|
|
}
|
|
|
|
// CanComment returns true if the chapter can be commented to.
|
|
func (chapter *Chapter) CanComment() bool {
|
|
return !chapter.CommentsLocked && chapter.CommentMode.IsEnabled()
|
|
}
|
|
|
|
// IsChangeObject is an interface implementation to identify it as a valid
|
|
// ChangeObject in GQL.
|
|
func (*Chapter) IsChangeObject() {
|
|
panic("this method is a dummy, and so is its caller")
|
|
}
|
|
|
|
type ChapterFilter struct {
|
|
StoryID *string
|
|
Limit int
|
|
}
|
|
|
|
type ChapterUpdate struct {
|
|
Title *string
|
|
Source *string
|
|
FictionalDate *time.Time
|
|
CommentMode *ChapterCommentMode
|
|
CommentsLocked *bool
|
|
}
|