init: initial commit

This commit is contained in:
Blizzard
2026-04-10 13:49:04 +08:00
commit 7b1588e2ff
56 changed files with 5499 additions and 0 deletions
+94
View File
@@ -0,0 +1,94 @@
package main
import (
"os"
"path/filepath"
"github.com/glebarez/sqlite"
"github.com/google/uuid"
"gorm.io/gorm"
"gorm.io/gorm/logger"
)
var db *gorm.DB
// Setting represents simple key-value store for app configs
type Setting struct {
Key string `gorm:"primaryKey"`
Value string
}
func initDB() error {
homeDir, err := os.UserHomeDir()
if err != nil {
return err
}
configDir := filepath.Join(homeDir, ".betting-assistant")
if err := os.MkdirAll(configDir, 0755); err != nil {
return err
}
dbPath := filepath.Join(configDir, "data.db")
db, err = gorm.Open(sqlite.Open(dbPath), &gorm.Config{
Logger: logger.Default.LogMode(logger.Silent),
})
if err != nil {
return err
}
// Auto Migration
if err := db.AutoMigrate(&Game{}, &Setting{}); err != nil {
return err
}
// Insert defaults if empty
var count int64
db.Model(&Game{}).Count(&count)
if count == 0 {
insertDefaults()
}
return nil
}
func insertDefaults() {
games := []Game{
{ID: uuid.New().String(), Name: "地鼠挖宝 (Moles)", Icon: "🐹", URL: "http://127.0.0.1:8080/api/v1/moles/start", Token: ""},
}
db.Create(&games)
db.Save(&Setting{Key: "active_game_id", Value: games[0].ID})
}
// -- DB Operations wrapped for app logic --
func getAllGamesDB() []Game {
var games []Game
db.Find(&games)
return games
}
func getActiveGameID() string {
var s Setting
db.First(&s, "key = ?", "active_game_id")
return s.Value
}
func setActiveGameID(id string) error {
return db.Save(&Setting{Key: "active_game_id", Value: id}).Error
}
func addGameDB(game *Game) error {
if game.ID == "" {
game.ID = uuid.New().String()
}
return db.Create(game).Error
}
func updateGameDB(game *Game) error {
return db.Save(game).Error
}
func deleteGameDB(id string) error {
return db.Delete(&Game{}, "id = ?", id).Error
}