Files
2024-11-11 10:57:15 +08:00

124 lines
3.9 KiB
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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
}