init: initial commit
This commit is contained in:
@@ -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
|
||||
}
|
||||
Reference in New Issue
Block a user