Clean up lots of old post fields
This commit is contained in:
parent
86e228d845
commit
de0b7a08fb
|
@ -0,0 +1,68 @@
|
||||||
|
package migrations
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"git.handmade.network/hmn/hmn/src/migration/types"
|
||||||
|
"git.handmade.network/hmn/hmn/src/oops"
|
||||||
|
"github.com/jackc/pgx/v4"
|
||||||
|
)
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
registerMigration(ReworkPostFields{})
|
||||||
|
}
|
||||||
|
|
||||||
|
type ReworkPostFields struct{}
|
||||||
|
|
||||||
|
func (m ReworkPostFields) Version() types.MigrationVersion {
|
||||||
|
return types.MigrationVersion(time.Date(2021, 7, 4, 20, 46, 42, 0, time.UTC))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m ReworkPostFields) Name() string {
|
||||||
|
return "ReworkPostFields"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m ReworkPostFields) Description() string {
|
||||||
|
return "Clean up post and postversion fields"
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m ReworkPostFields) Up(ctx context.Context, tx pgx.Tx) error {
|
||||||
|
_, err := tx.Exec(ctx, `
|
||||||
|
ALTER TABLE handmade_post
|
||||||
|
DROP depth,
|
||||||
|
DROP slug,
|
||||||
|
DROP author_name,
|
||||||
|
DROP ip,
|
||||||
|
DROP sticky,
|
||||||
|
DROP hits,
|
||||||
|
DROP featured,
|
||||||
|
DROP featurevotes;
|
||||||
|
`)
|
||||||
|
if err != nil {
|
||||||
|
return oops.New(err, "failed to drop unnecessary post fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = tx.Exec(ctx, `
|
||||||
|
ALTER TABLE handmade_postversion
|
||||||
|
RENAME edit_ip TO ip;
|
||||||
|
ALTER TABLE handmade_postversion
|
||||||
|
RENAME edit_date TO date;
|
||||||
|
`)
|
||||||
|
if err != nil {
|
||||||
|
return oops.New(err, "failed to rename postversion fields")
|
||||||
|
}
|
||||||
|
|
||||||
|
_, err = tx.Exec(ctx, `
|
||||||
|
DROP TABLE handmade_kunenapost;
|
||||||
|
`)
|
||||||
|
if err != nil {
|
||||||
|
return oops.New(err, "failed to drop ancient weirdo table")
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (m ReworkPostFields) Down(ctx context.Context, tx pgx.Tx) error {
|
||||||
|
panic("Implement me")
|
||||||
|
}
|
|
@ -18,16 +18,8 @@ type Post struct {
|
||||||
|
|
||||||
CategoryKind CategoryKind `db:"category_kind"`
|
CategoryKind CategoryKind `db:"category_kind"`
|
||||||
|
|
||||||
Depth int `db:"depth"` // TODO: Drop this.
|
PostDate time.Time `db:"postdate"`
|
||||||
Slug string `db:"slug"` // TODO: Drop this.
|
|
||||||
AuthorName string `db:"author_name"` // TODO: Drop this.
|
|
||||||
PostDate time.Time `db:"postdate"` // TODO: Drop this.
|
|
||||||
IP net.IPNet `db:"ip"` // TODO: Drop this.
|
|
||||||
Sticky bool `db:"sticky"` // TODO: Drop this.
|
|
||||||
Deleted bool `db:"deleted"`
|
Deleted bool `db:"deleted"`
|
||||||
Hits int `db:"hits"` // TODO: Drop this.
|
|
||||||
Featured bool `db:"featured"` // TODO: Drop this.
|
|
||||||
FeatureVotes int `db:"featurevotes"` // TODO: Drop this.
|
|
||||||
|
|
||||||
Preview string `db:"preview"`
|
Preview string `db:"preview"`
|
||||||
ReadOnly bool `db:"readonly"`
|
ReadOnly bool `db:"readonly"`
|
||||||
|
@ -40,8 +32,8 @@ type PostVersion struct {
|
||||||
TextRaw string `db:"text_raw"`
|
TextRaw string `db:"text_raw"`
|
||||||
TextParsed string `db:"text_parsed"`
|
TextParsed string `db:"text_parsed"`
|
||||||
|
|
||||||
EditIP *net.IPNet `db:"edit_ip"`
|
IP *net.IPNet `db:"ip"`
|
||||||
EditDate time.Time `db:"edit_date"`
|
Date time.Time `db:"date"`
|
||||||
EditReason string `db:"edit_reason"`
|
EditReason string `db:"edit_reason"`
|
||||||
EditorID *int `db:"editor_id"`
|
EditorID *int `db:"editor_id"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,19 +29,17 @@ func PostToTemplate(p *models.Post, author *models.User, currentTheme string) Po
|
||||||
Author: authorUser,
|
Author: authorUser,
|
||||||
// No content. A lot of the time we don't have this handy and don't need it. See AddContentVersion.
|
// No content. A lot of the time we don't have this handy and don't need it. See AddContentVersion.
|
||||||
PostDate: p.PostDate,
|
PostDate: p.PostDate,
|
||||||
|
|
||||||
IP: p.IP.String(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (p *Post) AddContentVersion(ver models.PostVersion, editor *models.User, currentTheme string) {
|
func (p *Post) AddContentVersion(ver models.PostVersion, editor *models.User) {
|
||||||
p.Content = template.HTML(ver.TextParsed)
|
p.Content = template.HTML(ver.TextParsed)
|
||||||
|
p.IP = maybeIp(ver.IP)
|
||||||
|
|
||||||
if editor != nil {
|
if editor != nil {
|
||||||
editorTmpl := UserToTemplate(editor, currentTheme)
|
editorTmpl := UserToTemplate(editor, "theme not required here")
|
||||||
p.Editor = &editorTmpl
|
p.Editor = &editorTmpl
|
||||||
p.EditDate = ver.EditDate
|
p.EditDate = ver.Date
|
||||||
p.EditIP = maybeIp(ver.EditIP)
|
|
||||||
p.EditReason = ver.EditReason
|
p.EditReason = ver.EditReason
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -87,16 +87,15 @@
|
||||||
Edited by
|
Edited by
|
||||||
<a class="name" href="{{ .Editor.ProfileUrl }}" target="_blank">{{ coalesce .Editor.Name .Editor.Username }}</a>
|
<a class="name" href="{{ .Editor.ProfileUrl }}" target="_blank">{{ coalesce .Editor.Name .Editor.Username }}</a>
|
||||||
{{ if $.User }}
|
{{ if $.User }}
|
||||||
{{ if and $.User.IsStaff .EditIP }}<span class="ip">[{{ .EditIP }}]</span>{{ end }}
|
{{ if and $.User.IsStaff .IP }}<span class="ip">[{{ .IP }}]</span>{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
on {{ timehtml (absolutedate .EditDate) .EditDate }}
|
on {{ timehtml (absolutedate .EditDate) .EditDate }}
|
||||||
{{ with .EditReason }}
|
{{ with .EditReason }}
|
||||||
Reason: {{ . }}
|
Reason: {{ . }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
</span>
|
</span>
|
||||||
{{ end }}
|
{{ else if $.User }}
|
||||||
{{ if $.User }}
|
{{ if and $.User.IsStaff .IP }}
|
||||||
{{ if $.User.IsStaff }}
|
|
||||||
<span>[{{ .IP }}]</span>
|
<span>[{{ .IP }}]</span>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
|
@ -84,7 +84,6 @@ type Post struct {
|
||||||
|
|
||||||
Editor *User
|
Editor *User
|
||||||
EditDate time.Time
|
EditDate time.Time
|
||||||
EditIP string
|
|
||||||
EditReason string
|
EditReason string
|
||||||
|
|
||||||
IP string
|
IP string
|
||||||
|
|
|
@ -385,7 +385,7 @@ func fetchAllPosts(c *RequestContext, lineageBuilder *models.CategoryLineageBuil
|
||||||
)
|
)
|
||||||
|
|
||||||
postItem.UUID = uuid.NewSHA1(uuid.NameSpaceURL, []byte(postItem.Url)).URN()
|
postItem.UUID = uuid.NewSHA1(uuid.NameSpaceURL, []byte(postItem.Url)).URN()
|
||||||
postItem.LastEditDate = postResult.PostVersion.EditDate
|
postItem.LastEditDate = postResult.PostVersion.Date
|
||||||
|
|
||||||
postItems = append(postItems, postItem)
|
postItems = append(postItems, postItem)
|
||||||
}
|
}
|
||||||
|
|
|
@ -405,7 +405,7 @@ func ForumThread(c *RequestContext) ResponseData {
|
||||||
row := irow.(*postsQueryResult)
|
row := irow.(*postsQueryResult)
|
||||||
|
|
||||||
post := templates.PostToTemplate(&row.Post, row.Author, c.Theme)
|
post := templates.PostToTemplate(&row.Post, row.Author, c.Theme)
|
||||||
post.AddContentVersion(row.Ver, row.Editor, c.Theme)
|
post.AddContentVersion(row.Ver, row.Editor)
|
||||||
post.AddUrls(c.CurrentProject.Slug, currentSubforumSlugs, thread.ID, post.ID)
|
post.AddUrls(c.CurrentProject.Slug, currentSubforumSlugs, thread.ID, post.ID)
|
||||||
|
|
||||||
posts = append(posts, post)
|
posts = append(posts, post)
|
||||||
|
|
|
@ -98,7 +98,7 @@ func PostVersionToWikiTimelineItem(lineageBuilder *models.CategoryLineageBuilder
|
||||||
Type: templates.TimelineTypeWikiEdit,
|
Type: templates.TimelineTypeWikiEdit,
|
||||||
TypeTitle: TimelineTypeTitleMap[templates.TimelineTypeWikiEdit],
|
TypeTitle: TimelineTypeTitleMap[templates.TimelineTypeWikiEdit],
|
||||||
Class: TimelineItemClassMap[templates.TimelineTypeWikiEdit],
|
Class: TimelineItemClassMap[templates.TimelineTypeWikiEdit],
|
||||||
Date: version.EditDate,
|
Date: version.Date,
|
||||||
Url: hmnurl.BuildWikiArticle(project.Slug, thread.ID, thread.Title),
|
Url: hmnurl.BuildWikiArticle(project.Slug, thread.ID, thread.Title),
|
||||||
|
|
||||||
OwnerAvatarUrl: templates.UserAvatarUrl(owner, currentTheme),
|
OwnerAvatarUrl: templates.UserAvatarUrl(owner, currentTheme),
|
||||||
|
|
Loading…
Reference in New Issue