mirror of
https://github.com/Eggbertx/gochan.git
synced 2025-08-18 11:46:23 -07:00
Implement in-place announcement migration
This commit is contained in:
parent
d3c985bd50
commit
5c4e200631
2 changed files with 77 additions and 2 deletions
|
@ -8,12 +8,85 @@ import (
|
|||
"github.com/gochan-org/gochan/pkg/gcsql"
|
||||
)
|
||||
|
||||
func (*Pre2021Migrator) migrateAnnouncementsInPlace() error {
|
||||
return common.NewMigrationError("pre2021", "migrateAnnouncementsInPlace not implemented")
|
||||
func (m *Pre2021Migrator) migrateAnnouncementsInPlace() error {
|
||||
errEv := common.LogError()
|
||||
defer errEv.Discard()
|
||||
|
||||
if _, err := gcsql.ExecSQL(announcementsAlterStatement); err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to alter announcements table")
|
||||
return err
|
||||
}
|
||||
|
||||
var staffIDs []int
|
||||
rows, err := m.db.QuerySQL("SELECT id FROM DBPREFIXstaff")
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to get staff IDs")
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
for rows.Next() {
|
||||
var id int
|
||||
if err = rows.Scan(&id); err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to scan staff ID")
|
||||
return err
|
||||
}
|
||||
staffIDs = append(staffIDs, id)
|
||||
}
|
||||
if err = rows.Close(); err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to close staff ID rows")
|
||||
return err
|
||||
}
|
||||
|
||||
m.migrationUser, err = m.getMigrationUser(errEv)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to get migration user")
|
||||
return err
|
||||
}
|
||||
|
||||
rows, err = m.db.QuerySQL("SELECT poster FROM DBPREFIXannouncements")
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to get announcements")
|
||||
return err
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
var announcementPosters []string
|
||||
for rows.Next() {
|
||||
var poster string
|
||||
if err = rows.Scan(&poster); err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to scan announcement row")
|
||||
return err
|
||||
}
|
||||
announcementPosters = append(announcementPosters, poster)
|
||||
}
|
||||
if err = rows.Close(); err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to close announcement rows")
|
||||
return err
|
||||
}
|
||||
for _, poster := range announcementPosters {
|
||||
id, err := gcsql.GetStaffID(poster)
|
||||
if errors.Is(err, gcsql.ErrUnrecognizedUsername) {
|
||||
// user doesn't exist, use migration user
|
||||
common.LogWarning().Str("staff", poster).Msg("Staff username not found in database")
|
||||
id = m.migrationUser.ID
|
||||
} else if err != nil {
|
||||
errEv.Err(err).Caller().Str("staff", poster).Msg("Failed to get staff ID")
|
||||
return err
|
||||
}
|
||||
|
||||
if _, err = gcsql.ExecSQL("UPDATE DBPREFIXannouncements SET staff_id = ? WHERE poster = ?", id, poster); err != nil {
|
||||
errEv.Err(err).Caller().Str("staff", poster).Msg("Failed to update announcement poster")
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (m *Pre2021Migrator) migrateAnnouncementsToNewDB() error {
|
||||
errEv := common.LogError()
|
||||
defer errEv.Discard()
|
||||
|
||||
rows, err := m.db.QuerySQL(announcementsQuery)
|
||||
if err != nil {
|
||||
errEv.Err(err).Caller().Msg("Failed to get announcements")
|
||||
|
|
|
@ -20,6 +20,8 @@ bumped, stickied, locked FROM DBPREFIXposts WHERE deleted_timestamp IS NULL`
|
|||
timestamp, expires, permaban, reason, type, staff_note, appeal_at, can_appeal FROM DBPREFIXbanlist`
|
||||
|
||||
announcementsQuery = "SELECT id, subject, message, poster, timestamp FROM DBPREFIXannouncements"
|
||||
|
||||
announcementsAlterStatement = "ALTER TABLE DBPREFIXannouncements ADD COLUMN staff_id INT NOT NULL DEFAULT 1"
|
||||
)
|
||||
|
||||
var (
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue