Compare commits
3 Commits
045744aa18
...
d4dfa810d1
Author | SHA1 | Date | |
---|---|---|---|
d4dfa810d1 | |||
96b36c1db4 | |||
f5664715f8 |
@ -30,6 +30,7 @@ type Post struct {
|
|||||||
|
|
||||||
IsDraft bool `json:"is_draft"`
|
IsDraft bool `json:"is_draft"`
|
||||||
PublishedAt *time.Time `json:"published_at"`
|
PublishedAt *time.Time `json:"published_at"`
|
||||||
|
PublishedUntil *time.Time `json:"published_until"`
|
||||||
|
|
||||||
AuthorID uint `json:"author_id"`
|
AuthorID uint `json:"author_id"`
|
||||||
Author Account `json:"author"`
|
Author Account `json:"author"`
|
||||||
|
@ -23,11 +23,12 @@ func createArticle(c *fiber.Ctx) error {
|
|||||||
Description *string `json:"description" validate:"max=2048"`
|
Description *string `json:"description" validate:"max=2048"`
|
||||||
Content string `json:"content" validate:"required"`
|
Content string `json:"content" validate:"required"`
|
||||||
Attachments []uint `json:"attachments"`
|
Attachments []uint `json:"attachments"`
|
||||||
PublishedAt *time.Time `json:"published_at"`
|
|
||||||
IsDraft bool `json:"is_draft"`
|
|
||||||
RealmAlias *string `json:"realm"`
|
|
||||||
Tags []models.Tag `json:"tags"`
|
Tags []models.Tag `json:"tags"`
|
||||||
Categories []models.Category `json:"categories"`
|
Categories []models.Category `json:"categories"`
|
||||||
|
PublishedAt *time.Time `json:"published_at"`
|
||||||
|
PublishedUntil *time.Time `json:"published_until"`
|
||||||
|
IsDraft bool `json:"is_draft"`
|
||||||
|
RealmAlias *string `json:"realm"`
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := exts.BindAndValidate(c, &data); err != nil {
|
if err := exts.BindAndValidate(c, &data); err != nil {
|
||||||
@ -48,10 +49,12 @@ func createArticle(c *fiber.Ctx) error {
|
|||||||
item := models.Post{
|
item := models.Post{
|
||||||
Type: models.PostTypeArticle,
|
Type: models.PostTypeArticle,
|
||||||
Body: bodyMapping,
|
Body: bodyMapping,
|
||||||
|
Language: services.DetectLanguage(data.Content),
|
||||||
Tags: data.Tags,
|
Tags: data.Tags,
|
||||||
Categories: data.Categories,
|
Categories: data.Categories,
|
||||||
IsDraft: data.IsDraft,
|
IsDraft: data.IsDraft,
|
||||||
PublishedAt: data.PublishedAt,
|
PublishedAt: data.PublishedAt,
|
||||||
|
PublishedUntil: data.PublishedUntil,
|
||||||
AuthorID: user.ID,
|
AuthorID: user.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -85,10 +88,11 @@ func editArticle(c *fiber.Ctx) error {
|
|||||||
Description *string `json:"description" validate:"max=2048"`
|
Description *string `json:"description" validate:"max=2048"`
|
||||||
Content string `json:"content" validate:"required"`
|
Content string `json:"content" validate:"required"`
|
||||||
Attachments []uint `json:"attachments"`
|
Attachments []uint `json:"attachments"`
|
||||||
IsDraft bool `json:"is_draft"`
|
|
||||||
PublishedAt *time.Time `json:"published_at"`
|
|
||||||
Tags []models.Tag `json:"tags"`
|
Tags []models.Tag `json:"tags"`
|
||||||
Categories []models.Category `json:"categories"`
|
Categories []models.Category `json:"categories"`
|
||||||
|
IsDraft bool `json:"is_draft"`
|
||||||
|
PublishedAt *time.Time `json:"published_at"`
|
||||||
|
PublishedUntil *time.Time `json:"published_until"`
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := exts.BindAndValidate(c, &data); err != nil {
|
if err := exts.BindAndValidate(c, &data); err != nil {
|
||||||
@ -114,10 +118,12 @@ func editArticle(c *fiber.Ctx) error {
|
|||||||
_ = jsoniter.Unmarshal(rawBody, &bodyMapping)
|
_ = jsoniter.Unmarshal(rawBody, &bodyMapping)
|
||||||
|
|
||||||
item.Body = bodyMapping
|
item.Body = bodyMapping
|
||||||
item.IsDraft = data.IsDraft
|
item.Language = services.DetectLanguage(data.Content)
|
||||||
item.PublishedAt = data.PublishedAt
|
|
||||||
item.Tags = data.Tags
|
item.Tags = data.Tags
|
||||||
item.Categories = data.Categories
|
item.Categories = data.Categories
|
||||||
|
item.IsDraft = data.IsDraft
|
||||||
|
item.PublishedAt = data.PublishedAt
|
||||||
|
item.PublishedUntil = data.PublishedUntil
|
||||||
|
|
||||||
if item, err := services.EditPost(item); err != nil {
|
if item, err := services.EditPost(item); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
|
@ -26,6 +26,7 @@ func createStory(c *fiber.Ctx) error {
|
|||||||
Tags []models.Tag `json:"tags"`
|
Tags []models.Tag `json:"tags"`
|
||||||
Categories []models.Category `json:"categories"`
|
Categories []models.Category `json:"categories"`
|
||||||
PublishedAt *time.Time `json:"published_at"`
|
PublishedAt *time.Time `json:"published_at"`
|
||||||
|
PublishedUntil *time.Time `json:"published_until"`
|
||||||
IsDraft bool `json:"is_draft"`
|
IsDraft bool `json:"is_draft"`
|
||||||
RealmAlias *string `json:"realm"`
|
RealmAlias *string `json:"realm"`
|
||||||
ReplyTo *uint `json:"reply_to"`
|
ReplyTo *uint `json:"reply_to"`
|
||||||
@ -50,10 +51,12 @@ func createStory(c *fiber.Ctx) error {
|
|||||||
item := models.Post{
|
item := models.Post{
|
||||||
Type: models.PostTypeStory,
|
Type: models.PostTypeStory,
|
||||||
Body: bodyMapping,
|
Body: bodyMapping,
|
||||||
|
Language: services.DetectLanguage(data.Content),
|
||||||
Tags: data.Tags,
|
Tags: data.Tags,
|
||||||
Categories: data.Categories,
|
Categories: data.Categories,
|
||||||
IsDraft: data.IsDraft,
|
|
||||||
PublishedAt: data.PublishedAt,
|
PublishedAt: data.PublishedAt,
|
||||||
|
PublishedUntil: data.PublishedUntil,
|
||||||
|
IsDraft: data.IsDraft,
|
||||||
AuthorID: user.ID,
|
AuthorID: user.ID,
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -104,10 +107,11 @@ func editStory(c *fiber.Ctx) error {
|
|||||||
Content string `json:"content" validate:"required,max=4096"`
|
Content string `json:"content" validate:"required,max=4096"`
|
||||||
Location *string `json:"location" validate:"max=2048"`
|
Location *string `json:"location" validate:"max=2048"`
|
||||||
Attachments []uint `json:"attachments"`
|
Attachments []uint `json:"attachments"`
|
||||||
IsDraft bool `json:"is_draft"`
|
|
||||||
PublishedAt *time.Time `json:"published_at"`
|
|
||||||
Tags []models.Tag `json:"tags"`
|
Tags []models.Tag `json:"tags"`
|
||||||
Categories []models.Category `json:"categories"`
|
Categories []models.Category `json:"categories"`
|
||||||
|
PublishedAt *time.Time `json:"published_at"`
|
||||||
|
PublishedUntil *time.Time `json:"published_until"`
|
||||||
|
IsDraft bool `json:"is_draft"`
|
||||||
}
|
}
|
||||||
|
|
||||||
if err := exts.BindAndValidate(c, &data); err != nil {
|
if err := exts.BindAndValidate(c, &data); err != nil {
|
||||||
@ -134,10 +138,12 @@ func editStory(c *fiber.Ctx) error {
|
|||||||
_ = jsoniter.Unmarshal(rawBody, &bodyMapping)
|
_ = jsoniter.Unmarshal(rawBody, &bodyMapping)
|
||||||
|
|
||||||
item.Body = bodyMapping
|
item.Body = bodyMapping
|
||||||
item.IsDraft = data.IsDraft
|
item.Language = services.DetectLanguage(data.Content)
|
||||||
item.PublishedAt = data.PublishedAt
|
|
||||||
item.Tags = data.Tags
|
item.Tags = data.Tags
|
||||||
item.Categories = data.Categories
|
item.Categories = data.Categories
|
||||||
|
item.PublishedAt = data.PublishedAt
|
||||||
|
item.PublishedUntil = data.PublishedUntil
|
||||||
|
item.IsDraft = data.IsDraft
|
||||||
|
|
||||||
if item, err := services.EditPost(item); err != nil {
|
if item, err := services.EditPost(item); err != nil {
|
||||||
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
return fiber.NewError(fiber.StatusBadRequest, err.Error())
|
||||||
|
@ -5,14 +5,12 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
)
|
)
|
||||||
|
|
||||||
func DetectLanguage(content *string) string {
|
func DetectLanguage(content string) string {
|
||||||
if content != nil {
|
|
||||||
detector := lingua.NewLanguageDetectorBuilder().
|
detector := lingua.NewLanguageDetectorBuilder().
|
||||||
FromLanguages(lingua.AllLanguages()...).
|
FromLanguages(lingua.AllLanguages()...).
|
||||||
Build()
|
Build()
|
||||||
if lang, ok := detector.DetectLanguageOf(*content); ok {
|
if lang, ok := detector.DetectLanguageOf(content); ok {
|
||||||
return strings.ToLower(lang.String())
|
return strings.ToLower(lang.String())
|
||||||
}
|
}
|
||||||
}
|
|
||||||
return "unknown"
|
return "unknown"
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,9 @@ func FilterPostReply(tx *gorm.DB, replyTo ...uint) *gorm.DB {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func FilterPostWithPublishedAt(tx *gorm.DB, date time.Time) *gorm.DB {
|
func FilterPostWithPublishedAt(tx *gorm.DB, date time.Time) *gorm.DB {
|
||||||
return tx.Where("published_at <= ? OR published_at IS NULL", date)
|
return tx.
|
||||||
|
Where("published_at <= ? OR published_at IS NULL", date).
|
||||||
|
Where("published_until > ? OR published_until IS NULL", date)
|
||||||
}
|
}
|
||||||
|
|
||||||
func FilterPostWithAuthorDraft(tx *gorm.DB, uid uint) *gorm.DB {
|
func FilterPostWithAuthorDraft(tx *gorm.DB, uid uint) *gorm.DB {
|
||||||
@ -121,7 +123,7 @@ func ListPost(tx *gorm.DB, take int, offset int, noReact ...bool) ([]*models.Pos
|
|||||||
var items []*models.Post
|
var items []*models.Post
|
||||||
if err := tx.
|
if err := tx.
|
||||||
Limit(take).Offset(offset).
|
Limit(take).Offset(offset).
|
||||||
Order("created_at DESC").
|
Order("published_at DESC").
|
||||||
Preload("Tags").
|
Preload("Tags").
|
||||||
Preload("Categories").
|
Preload("Categories").
|
||||||
Preload("Realm").
|
Preload("Realm").
|
||||||
@ -216,6 +218,10 @@ func EnsurePostCategoriesAndTags(item models.Post) (models.Post, error) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func NewPost(user models.Account, item models.Post) (models.Post, error) {
|
func NewPost(user models.Account, item models.Post) (models.Post, error) {
|
||||||
|
if !item.IsDraft && item.PublishedAt == nil {
|
||||||
|
item.PublishedAt = lo.ToPtr(time.Now())
|
||||||
|
}
|
||||||
|
|
||||||
item, err := EnsurePostCategoriesAndTags(item)
|
item, err := EnsurePostCategoriesAndTags(item)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return item, err
|
return item, err
|
||||||
|
Loading…
x
Reference in New Issue
Block a user