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