更新
This commit is contained in:
@@ -45,6 +45,19 @@ func Init() error {
|
||||
|
||||
DB = db
|
||||
|
||||
if !cfg.DBAutoMigrate {
|
||||
log.Println("[database] mysql connected (auto migrate skipped)")
|
||||
return nil
|
||||
}
|
||||
|
||||
log.Println("[database] running auto migration and seeding...")
|
||||
|
||||
// 增量保护:确保花名册新表及 row_count 字段迁移
|
||||
_ = db.AutoMigrate(&model.ClassRoster{})
|
||||
if !db.Migrator().HasColumn(&model.Class{}, "row_count") {
|
||||
_ = db.Migrator().AddColumn(&model.Class{}, "row_count")
|
||||
}
|
||||
|
||||
// 数据迁移:旧版 bcrypt 密码(60字符) 超过新版 md5(32字符) 列宽,
|
||||
// 在 AutoMigrate 缩列前先清空旧密码,后续 ensureAdmin 会重新设置。
|
||||
// 注意:salt 列此时可能还不存在,只更新 password_hash。
|
||||
@@ -55,6 +68,9 @@ func Init() error {
|
||||
return fmt.Errorf("auto migrate: %w", err)
|
||||
}
|
||||
|
||||
// 历史数据回填:school_types 多学段字段由原单一 school_type 初始化
|
||||
db.Exec("UPDATE yz_pw_schools SET school_types = school_type WHERE (school_types IS NULL OR school_types = '') AND school_type <> ''")
|
||||
|
||||
// 创建平台管理员
|
||||
if err := ensureAdmin(db); err != nil {
|
||||
return fmt.Errorf("ensure admin: %w", err)
|
||||
@@ -79,6 +95,7 @@ func autoMigrate(db *gorm.DB) error {
|
||||
&model.College{},
|
||||
&model.Class{},
|
||||
&model.ClassMember{},
|
||||
&model.ClassRoster{},
|
||||
&model.ClassPhoto{},
|
||||
&model.Invitation{},
|
||||
&model.AuditLog{},
|
||||
|
||||
@@ -10,6 +10,11 @@ import (
|
||||
// 全球国家/省/区县数据量巨大,此处仅写入代表性示例,平台管理员可通过
|
||||
// 管理接口批量录入完整数据(或导入民政部/GeoNames 数据源)。
|
||||
func seedRegions(db *gorm.DB) error {
|
||||
var count int64
|
||||
if err := db.Model(&model.Region{}).Limit(1).Count(&count).Error; err == nil && count > 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
// 国家
|
||||
china := upsertRegion(db, model.Region{Name: "中国", NameEn: "China", Level: model.LevelCountry, Code: "CN", SortOrder: 1})
|
||||
usa := upsertRegion(db, model.Region{Name: "美国", NameEn: "United States", Level: model.LevelCountry, Code: "US", SortOrder: 2})
|
||||
@@ -23,22 +28,31 @@ func seedRegions(db *gorm.DB) error {
|
||||
shanghai := upsertRegion(db, model.Region{Name: "上海市", NameEn: "Shanghai", Level: model.LevelProvince, ParentID: china.ID, Code: "310000"})
|
||||
zhejiang := upsertRegion(db, model.Region{Name: "浙江省", NameEn: "Zhejiang", Level: model.LevelProvince, ParentID: china.ID, Code: "330000"})
|
||||
|
||||
// 中国 - 地级市/直辖市市级
|
||||
nanjing := upsertRegion(db, model.Region{Name: "南京市", NameEn: "Nanjing", Level: model.LevelCity, ParentID: jiangsu.ID, Code: "320100"})
|
||||
lianyungang := upsertRegion(db, model.Region{Name: "连云港市", NameEn: "Lianyungang", Level: model.LevelCity, ParentID: jiangsu.ID, Code: "320700"})
|
||||
beijingCity := upsertRegion(db, model.Region{Name: "北京市", NameEn: "Beijing", Level: model.LevelCity, ParentID: beijing.ID, Code: "110100"})
|
||||
guangzhou := upsertRegion(db, model.Region{Name: "广州市", NameEn: "Guangzhou", Level: model.LevelCity, ParentID: guangdong.ID, Code: "440100"})
|
||||
shenzhen := upsertRegion(db, model.Region{Name: "深圳市", NameEn: "Shenzhen", Level: model.LevelCity, ParentID: guangdong.ID, Code: "440300"})
|
||||
shanghaiCity := upsertRegion(db, model.Region{Name: "上海市", NameEn: "Shanghai", Level: model.LevelCity, ParentID: shanghai.ID, Code: "310100"})
|
||||
hangzhou := upsertRegion(db, model.Region{Name: "杭州市", NameEn: "Hangzhou", Level: model.LevelCity, ParentID: zhejiang.ID, Code: "330100"})
|
||||
|
||||
// 中国 - 区县(最低级)
|
||||
upsertRegion(db, model.Region{Name: "海州区", NameEn: "Haizhou", Level: model.LevelCounty, ParentID: jiangsu.ID, Code: "320706"})
|
||||
upsertRegion(db, model.Region{Name: "连云区", NameEn: "Lianyun", Level: model.LevelCounty, ParentID: jiangsu.ID, Code: "320703"})
|
||||
upsertRegion(db, model.Region{Name: "赣榆区", NameEn: "Ganyu", Level: model.LevelCounty, ParentID: jiangsu.ID, Code: "320707"})
|
||||
upsertRegion(db, model.Region{Name: "玄武区", NameEn: "Xuanwu", Level: model.LevelCounty, ParentID: jiangsu.ID, Code: "320102"})
|
||||
upsertRegion(db, model.Region{Name: "鼓楼区", NameEn: "Gulou", Level: model.LevelCounty, ParentID: jiangsu.ID, Code: "320106"})
|
||||
upsertRegion(db, model.Region{Name: "海淀区", NameEn: "Haidian", Level: model.LevelCounty, ParentID: beijing.ID, Code: "110108"})
|
||||
upsertRegion(db, model.Region{Name: "朝阳区", NameEn: "Chaoyang", Level: model.LevelCounty, ParentID: beijing.ID, Code: "110105"})
|
||||
upsertRegion(db, model.Region{Name: "西城区", NameEn: "Xicheng", Level: model.LevelCounty, ParentID: beijing.ID, Code: "110102"})
|
||||
upsertRegion(db, model.Region{Name: "天河区", NameEn: "Tianhe", Level: model.LevelCounty, ParentID: guangdong.ID, Code: "440106"})
|
||||
upsertRegion(db, model.Region{Name: "南山区", NameEn: "Nanshan", Level: model.LevelCounty, ParentID: guangdong.ID, Code: "440305"})
|
||||
upsertRegion(db, model.Region{Name: "福田区", NameEn: "Futian", Level: model.LevelCounty, ParentID: guangdong.ID, Code: "440304"})
|
||||
upsertRegion(db, model.Region{Name: "浦东新区", NameEn: "Pudong", Level: model.LevelCounty, ParentID: shanghai.ID, Code: "310115"})
|
||||
upsertRegion(db, model.Region{Name: "黄浦区", NameEn: "Huangpu", Level: model.LevelCounty, ParentID: shanghai.ID, Code: "310101"})
|
||||
upsertRegion(db, model.Region{Name: "西湖区", NameEn: "Xihu", Level: model.LevelCounty, ParentID: zhejiang.ID, Code: "330106"})
|
||||
upsertRegion(db, model.Region{Name: "滨江区", NameEn: "Binjiang", Level: model.LevelCounty, ParentID: zhejiang.ID, Code: "330108"})
|
||||
upsertRegion(db, model.Region{Name: "连云区", NameEn: "Lianyun", Level: model.LevelCounty, ParentID: lianyungang.ID, Code: "320703"})
|
||||
upsertRegion(db, model.Region{Name: "海州区", NameEn: "Haizhou", Level: model.LevelCounty, ParentID: lianyungang.ID, Code: "320706"})
|
||||
upsertRegion(db, model.Region{Name: "赣榆区", NameEn: "Ganyu", Level: model.LevelCounty, ParentID: lianyungang.ID, Code: "320707"})
|
||||
upsertRegion(db, model.Region{Name: "玄武区", NameEn: "Xuanwu", Level: model.LevelCounty, ParentID: nanjing.ID, Code: "320102"})
|
||||
upsertRegion(db, model.Region{Name: "鼓楼区", NameEn: "Gulou", Level: model.LevelCounty, ParentID: nanjing.ID, Code: "320106"})
|
||||
upsertRegion(db, model.Region{Name: "海淀区", NameEn: "Haidian", Level: model.LevelCounty, ParentID: beijingCity.ID, Code: "110108"})
|
||||
upsertRegion(db, model.Region{Name: "朝阳区", NameEn: "Chaoyang", Level: model.LevelCounty, ParentID: beijingCity.ID, Code: "110105"})
|
||||
upsertRegion(db, model.Region{Name: "西城区", NameEn: "Xicheng", Level: model.LevelCounty, ParentID: beijingCity.ID, Code: "110102"})
|
||||
upsertRegion(db, model.Region{Name: "天河区", NameEn: "Tianhe", Level: model.LevelCounty, ParentID: guangzhou.ID, Code: "440106"})
|
||||
upsertRegion(db, model.Region{Name: "南山区", NameEn: "Nanshan", Level: model.LevelCounty, ParentID: shenzhen.ID, Code: "440305"})
|
||||
upsertRegion(db, model.Region{Name: "福田区", NameEn: "Futian", Level: model.LevelCounty, ParentID: shenzhen.ID, Code: "440304"})
|
||||
upsertRegion(db, model.Region{Name: "浦东新区", NameEn: "Pudong", Level: model.LevelCounty, ParentID: shanghaiCity.ID, Code: "310115"})
|
||||
upsertRegion(db, model.Region{Name: "黄浦区", NameEn: "Huangpu", Level: model.LevelCounty, ParentID: shanghaiCity.ID, Code: "310101"})
|
||||
upsertRegion(db, model.Region{Name: "西湖区", NameEn: "Xihu", Level: model.LevelCounty, ParentID: hangzhou.ID, Code: "330106"})
|
||||
upsertRegion(db, model.Region{Name: "滨江区", NameEn: "Binjiang", Level: model.LevelCounty, ParentID: hangzhou.ID, Code: "330108"})
|
||||
|
||||
// 美国 - 州
|
||||
california := upsertRegion(db, model.Region{Name: "加利福尼亚州", NameEn: "California", Level: model.LevelProvince, ParentID: usa.ID, Code: "CA"})
|
||||
|
||||
Reference in New Issue
Block a user