feat: 初始化仓库

This commit is contained in:
2024-11-11 10:57:15 +08:00
commit e568882c6f
15 changed files with 1115 additions and 0 deletions

123
utils/config.go Normal file
View File

@@ -0,0 +1,123 @@
package utils
import (
"encoding/json"
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
"zhixiangtong/models"
)
type TimeSet struct {
Index int `json:"index"`
Start string `json:"start"`
End string `json:"end"`
Time int `json:"time"`
}
// Config 结构体定义服务配置
type Config struct {
Host string `json:"host"`
Port string `json:"port"`
StartDate string `json:"startDate"`
TotalWeeks int `json:"totalWeeks"`
EndDate string `json:"endDate"`
TimeSetting []TimeSet `json:"timeSetting"`
}
// InitConfig 初始化配置文件
func InitConfig(dataDir string) (*Config, error) {
configPath := filepath.Join(dataDir, "config.json")
// 检查配置文件是否存在
if _, err := os.Stat(configPath); os.IsNotExist(err) {
log.Printf("配置文件不存在,正在创建默认配置文件:%s", configPath)
// JSON 数据
timeSettingJSON := `[{"index": 1, "start": "08:00", "end": "08:45", "time": 0},
{"index": 2, "start": "08:50", "end": "09:35", "time": 0},
{"index": 3, "start": "09:55", "end": "10:40", "time": 0},
{"index": 4, "start": "10:45", "end": "11:30", "time": 0},
{"index": 5, "start": "11:35", "end": "12:20", "time": 0},
{"index": 6, "start": "14:00", "end": "14:45", "time": 1},
{"index": 7, "start": "14:50", "end": "15:35", "time": 1},
{"index": 8, "start": "15:55", "end": "16:40", "time": 1},
{"index": 9, "start": "16:45", "end": "17:30", "time": 1},
{"index": 10, "start": "19:00", "end": "19:45", "time": 2},
{"index": 11, "start": "19:50", "end": "20:35", "time": 2},
{"index": 12, "start": "20:40", "end": "21:25", "time": 2}]`
// 将 JSON 数据解析为 TimeSet 切片
var timeSettings []TimeSet
err := json.Unmarshal([]byte(timeSettingJSON), &timeSettings)
if err != nil {
log.Fatalf("Failed to parse JSON: %v", err)
}
// 默认配置
defaultConfig := Config{
Host: "localhost",
Port: "8080",
StartDate: "2024-09-02",
EndDate: "2025-01-19",
TotalWeeks: 20,
TimeSetting: timeSettings,
}
// 将默认配置写入配置文件
configData, err := json.MarshalIndent(defaultConfig, "", " ")
if err != nil {
return nil, fmt.Errorf("无法创建默认配置文件:%v", err)
}
err = ioutil.WriteFile(configPath, configData, 0644)
if err != nil {
return nil, fmt.Errorf("无法写入默认配置文件:%v", err)
}
}
// 读取配置文件
configData, err := ioutil.ReadFile(configPath)
if err != nil {
return nil, fmt.Errorf("无法读取配置文件:%v", err)
}
// 解析配置文件
var config Config
err = json.Unmarshal(configData, &config)
if err != nil {
return nil, fmt.Errorf("配置文件格式错误:%v", err)
}
log.Printf("配置文件已加载Host=%s, Port=%s", config.Host, config.Port)
return &config, nil
}
// InitDatabase 初始化数据库,如果不存在则创建并迁移
func InitDatabase(dataDir string) (*gorm.DB, error) {
dbPath := filepath.Join(dataDir, "database.db")
// 检查数据库文件是否存在
if _, err := os.Stat(dbPath); os.IsNotExist(err) {
log.Printf("数据库文件不存在,正在创建数据库:%s", dbPath)
}
// 连接到SQLite数据库
db, err := gorm.Open(sqlite.Open(dbPath), &gorm.Config{})
if err != nil {
return nil, fmt.Errorf("无法连接到数据库:%v", err)
}
// 自动迁移数据库
err = db.AutoMigrate(&models.Campus{}, &models.Building{}, &models.Classroom{}, &models.Course{}, &models.Classname{})
if err != nil {
return nil, fmt.Errorf("数据库迁移失败:%v", err)
}
log.Printf("数据库已初始化并连接成功:%s", dbPath)
return db, nil
}