♻️ 一切尽在帖子表 #4
| @@ -28,8 +28,9 @@ type Post struct { | ||||
| 	RepostTo   *Post             `json:"repost_to" gorm:"foreignKey:RepostID"` | ||||
| 	Realm      *Realm            `json:"realm"` | ||||
|  | ||||
| 	IsDraft     bool       `json:"is_draft"` | ||||
| 	PublishedAt *time.Time `json:"published_at"` | ||||
| 	IsDraft        bool       `json:"is_draft"` | ||||
| 	PublishedAt    *time.Time `json:"published_at"` | ||||
| 	PublishedUntil *time.Time `json:"published_until"` | ||||
|  | ||||
| 	AuthorID uint    `json:"author_id"` | ||||
| 	Author   Account `json:"author"` | ||||
|   | ||||
| @@ -19,15 +19,16 @@ func createArticle(c *fiber.Ctx) error { | ||||
| 	user := c.Locals("user").(models.Account) | ||||
|  | ||||
| 	var data struct { | ||||
| 		Title       string            `json:"title" validate:"required,max=1024"` | ||||
| 		Description *string           `json:"description" validate:"max=2048"` | ||||
| 		Content     string            `json:"content" validate:"required"` | ||||
| 		Attachments []uint            `json:"attachments"` | ||||
| 		PublishedAt *time.Time        `json:"published_at"` | ||||
| 		IsDraft     bool              `json:"is_draft"` | ||||
| 		RealmAlias  *string           `json:"realm"` | ||||
| 		Tags        []models.Tag      `json:"tags"` | ||||
| 		Categories  []models.Category `json:"categories"` | ||||
| 		Title          string            `json:"title" validate:"required,max=1024"` | ||||
| 		Description    *string           `json:"description" validate:"max=2048"` | ||||
| 		Content        string            `json:"content" validate:"required"` | ||||
| 		Attachments    []uint            `json:"attachments"` | ||||
| 		Tags           []models.Tag      `json:"tags"` | ||||
| 		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 { | ||||
| @@ -46,13 +47,14 @@ func createArticle(c *fiber.Ctx) error { | ||||
| 	_ = jsoniter.Unmarshal(rawBody, &bodyMapping) | ||||
|  | ||||
| 	item := models.Post{ | ||||
| 		Type:        models.PostTypeArticle, | ||||
| 		Body:        bodyMapping, | ||||
| 		Tags:        data.Tags, | ||||
| 		Categories:  data.Categories, | ||||
| 		IsDraft:     data.IsDraft, | ||||
| 		PublishedAt: data.PublishedAt, | ||||
| 		AuthorID:    user.ID, | ||||
| 		Type:           models.PostTypeArticle, | ||||
| 		Body:           bodyMapping, | ||||
| 		Tags:           data.Tags, | ||||
| 		Categories:     data.Categories, | ||||
| 		IsDraft:        data.IsDraft, | ||||
| 		PublishedAt:    data.PublishedAt, | ||||
| 		PublishedUntil: data.PublishedUntil, | ||||
| 		AuthorID:       user.ID, | ||||
| 	} | ||||
|  | ||||
| 	if data.RealmAlias != nil { | ||||
| @@ -81,14 +83,15 @@ func editArticle(c *fiber.Ctx) error { | ||||
| 	user := c.Locals("user").(models.Account) | ||||
|  | ||||
| 	var data struct { | ||||
| 		Title       string            `json:"title" validate:"required,max=1024"` | ||||
| 		Description *string           `json:"description" validate:"max=2048"` | ||||
| 		Content     string            `json:"content" validate:"required"` | ||||
| 		Attachments []uint            `json:"attachments"` | ||||
| 		IsDraft     bool              `json:"is_draft"` | ||||
| 		PublishedAt *time.Time        `json:"published_at"` | ||||
| 		Tags        []models.Tag      `json:"tags"` | ||||
| 		Categories  []models.Category `json:"categories"` | ||||
| 		Title          string            `json:"title" validate:"required,max=1024"` | ||||
| 		Description    *string           `json:"description" validate:"max=2048"` | ||||
| 		Content        string            `json:"content" validate:"required"` | ||||
| 		Attachments    []uint            `json:"attachments"` | ||||
| 		Tags           []models.Tag      `json:"tags"` | ||||
| 		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 { | ||||
| @@ -114,10 +117,11 @@ func editArticle(c *fiber.Ctx) error { | ||||
| 	_ = jsoniter.Unmarshal(rawBody, &bodyMapping) | ||||
|  | ||||
| 	item.Body = bodyMapping | ||||
| 	item.IsDraft = data.IsDraft | ||||
| 	item.PublishedAt = data.PublishedAt | ||||
| 	item.Tags = data.Tags | ||||
| 	item.Categories = data.Categories | ||||
| 	item.IsDraft = data.IsDraft | ||||
| 	item.PublishedAt = data.PublishedAt | ||||
| 	item.PublishedUntil = data.PublishedUntil | ||||
|  | ||||
| 	if item, err := services.EditPost(item); err != nil { | ||||
| 		return fiber.NewError(fiber.StatusBadRequest, err.Error()) | ||||
|   | ||||
| @@ -19,17 +19,18 @@ func createStory(c *fiber.Ctx) error { | ||||
| 	user := c.Locals("user").(models.Account) | ||||
|  | ||||
| 	var data struct { | ||||
| 		Title       *string           `json:"title" validate:"max=1024"` | ||||
| 		Content     string            `json:"content" validate:"required,max=4096"` | ||||
| 		Location    *string           `json:"location" validate:"max=2048"` | ||||
| 		Attachments []uint            `json:"attachments"` | ||||
| 		Tags        []models.Tag      `json:"tags"` | ||||
| 		Categories  []models.Category `json:"categories"` | ||||
| 		PublishedAt *time.Time        `json:"published_at"` | ||||
| 		IsDraft     bool              `json:"is_draft"` | ||||
| 		RealmAlias  *string           `json:"realm"` | ||||
| 		ReplyTo     *uint             `json:"reply_to"` | ||||
| 		RepostTo    *uint             `json:"repost_to"` | ||||
| 		Title          *string           `json:"title" validate:"max=1024"` | ||||
| 		Content        string            `json:"content" validate:"required,max=4096"` | ||||
| 		Location       *string           `json:"location" validate:"max=2048"` | ||||
| 		Attachments    []uint            `json:"attachments"` | ||||
| 		Tags           []models.Tag      `json:"tags"` | ||||
| 		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"` | ||||
| 		ReplyTo        *uint             `json:"reply_to"` | ||||
| 		RepostTo       *uint             `json:"repost_to"` | ||||
| 	} | ||||
|  | ||||
| 	if err := exts.BindAndValidate(c, &data); err != nil { | ||||
| @@ -48,13 +49,14 @@ func createStory(c *fiber.Ctx) error { | ||||
| 	_ = jsoniter.Unmarshal(rawBody, &bodyMapping) | ||||
|  | ||||
| 	item := models.Post{ | ||||
| 		Type:        models.PostTypeStory, | ||||
| 		Body:        bodyMapping, | ||||
| 		Tags:        data.Tags, | ||||
| 		Categories:  data.Categories, | ||||
| 		IsDraft:     data.IsDraft, | ||||
| 		PublishedAt: data.PublishedAt, | ||||
| 		AuthorID:    user.ID, | ||||
| 		Type:           models.PostTypeStory, | ||||
| 		Body:           bodyMapping, | ||||
| 		Tags:           data.Tags, | ||||
| 		Categories:     data.Categories, | ||||
| 		PublishedAt:    data.PublishedAt, | ||||
| 		PublishedUntil: data.PublishedUntil, | ||||
| 		IsDraft:        data.IsDraft, | ||||
| 		AuthorID:       user.ID, | ||||
| 	} | ||||
|  | ||||
| 	if data.ReplyTo != nil { | ||||
| @@ -100,14 +102,15 @@ func editStory(c *fiber.Ctx) error { | ||||
| 	user := c.Locals("user").(models.Account) | ||||
|  | ||||
| 	var data struct { | ||||
| 		Title       *string           `json:"title" validate:"max=1024"` | ||||
| 		Content     string            `json:"content" validate:"required,max=4096"` | ||||
| 		Location    *string           `json:"location" validate:"max=2048"` | ||||
| 		Attachments []uint            `json:"attachments"` | ||||
| 		IsDraft     bool              `json:"is_draft"` | ||||
| 		PublishedAt *time.Time        `json:"published_at"` | ||||
| 		Tags        []models.Tag      `json:"tags"` | ||||
| 		Categories  []models.Category `json:"categories"` | ||||
| 		Title          *string           `json:"title" validate:"max=1024"` | ||||
| 		Content        string            `json:"content" validate:"required,max=4096"` | ||||
| 		Location       *string           `json:"location" validate:"max=2048"` | ||||
| 		Attachments    []uint            `json:"attachments"` | ||||
| 		Tags           []models.Tag      `json:"tags"` | ||||
| 		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 { | ||||
| @@ -134,10 +137,11 @@ func editStory(c *fiber.Ctx) error { | ||||
| 	_ = jsoniter.Unmarshal(rawBody, &bodyMapping) | ||||
|  | ||||
| 	item.Body = bodyMapping | ||||
| 	item.IsDraft = data.IsDraft | ||||
| 	item.PublishedAt = data.PublishedAt | ||||
| 	item.Tags = data.Tags | ||||
| 	item.Categories = data.Categories | ||||
| 	item.PublishedAt = data.PublishedAt | ||||
| 	item.PublishedUntil = data.PublishedUntil | ||||
| 	item.IsDraft = data.IsDraft | ||||
|  | ||||
| 	if item, err := services.EditPost(item); err != nil { | ||||
| 		return fiber.NewError(fiber.StatusBadRequest, err.Error()) | ||||
|   | ||||
| @@ -44,7 +44,9 @@ func FilterPostReply(tx *gorm.DB, replyTo ...uint) *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 { | ||||
|   | ||||
		Reference in New Issue
	
	Block a user