init push
This commit is contained in:
36
backend/migration/fns/0004_update_node_status_unreleased.go
Normal file
36
backend/migration/fns/0004_update_node_status_unreleased.go
Normal file
@@ -0,0 +1,36 @@
|
||||
package fns
|
||||
|
||||
import (
|
||||
"gorm.io/gorm"
|
||||
|
||||
"github.com/chaitin/panda-wiki/domain"
|
||||
"github.com/chaitin/panda-wiki/log"
|
||||
)
|
||||
|
||||
type MigrationUpdateNodeStatusUnreleased struct {
|
||||
Name string
|
||||
logger *log.Logger
|
||||
}
|
||||
|
||||
func NewMigrationUpdateNodeStatusUnreleased(logger *log.Logger) *MigrationUpdateNodeStatusUnreleased {
|
||||
return &MigrationUpdateNodeStatusUnreleased{
|
||||
Name: "0004_update_node_status_unreleased",
|
||||
logger: logger,
|
||||
}
|
||||
}
|
||||
|
||||
func (m *MigrationUpdateNodeStatusUnreleased) Execute(tx *gorm.DB) error {
|
||||
// 将所有 status=1 (Draft) 且从未发布过的节点更新为 status=0 (Unreleased)
|
||||
// 判断条件:node_releases 表中不存在该 node_id 的记录
|
||||
result := tx.Model(&domain.Node{}).
|
||||
Where("status = ?", domain.NodeStatusDraft).
|
||||
Where("id NOT IN (SELECT DISTINCT node_id FROM node_releases)").
|
||||
Update("status", domain.NodeStatusUnreleased)
|
||||
|
||||
if result.Error != nil {
|
||||
return result.Error
|
||||
}
|
||||
|
||||
m.logger.Info("migration update node status unreleased", log.Int64("affected_rows", result.RowsAffected))
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user