123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- package main
- import (
- "log"
- "time"
- "gorm.io/driver/sqlite"
- "gorm.io/gorm"
- )
- type DataBase struct {
- DB *gorm.DB
- }
- func OpenDB(filename string) (*DataBase, error) {
- db, err := gorm.Open(sqlite.Open(filename), &gorm.Config{})
- if err != nil {
- return nil, err
- }
- DB := &DataBase{DB: db}
- err = DB.DB.AutoMigrate(&ShipModel{}, &Ship{}, &User{})
- return DB, err
- }
- func (db *DataBase) Close() error {
- sqldb, err := db.DB.DB()
- if err != nil {
- return err
- }
- return sqldb.Close()
- }
- type Model struct {
- ID uint64 `gorm:"primaryKey"`
- CreatedAt time.Time
- UpdatedAt time.Time
- }
- type ShipModel struct {
- Model
- Name string `gorm:"unique"`
- BaseHull uint64
- BaseShields uint64
-
- Purchaseable bool
- RequiredXp uint64
- CostMetal uint64
- CostCircuit uint64
-
- MaxGuns uint64
- MaxRocketLaunchers uint64
- MaxArmorPlates uint64
- MaxRepairBays uint64
- MaxShieldCapacitors uint64
- MaxShieldGenerators uint64
- MaxEngines uint64
-
- StartingGuns uint64
- StartingRocketLaunchers uint64
- StartingArmorPlates uint64
- StartingRepairBays uint64
- StartingRepairDrones uint64
- StartingShieldCapacitors uint64
- StartingShieldGenerators uint64
- StartingEngines uint64
- }
- func (db *DataBase) SaveShipModel(model *ShipModel) error {
- result := db.DB.Save(model)
- return result.Error
- }
- func (db *DataBase) GetShipModelById(id uint64) *ShipModel {
- var model *ShipModel
- result := db.DB.Find(model, id)
- if result.Error != nil {
- log.Printf("DataBase.GetShipModelById(id=%d) > %v", id, result.Error)
- return nil
- }
- return model
- }
- func (db *DataBase) GetShipModelByName(name string) *ShipModel {
- var model *ShipModel
- result := db.DB.Find(model, ShipModel{Name: name})
- if result.Error != nil {
- log.Printf("DataBase.GetShipModelByName(name='%s') > %v", name, result.Error)
- return nil
- }
- return model
- }
- type Ship struct {
- Model
- UserID uint64
- ShipModel uint64
- HullPoints uint64
- ShieldPoints uint64
- Guns uint64
- RocketLaunchers uint64
- ArmorPlates uint64
- RepairBays uint64
- RepairDrones uint64
- ShieldCapacitors uint64
- ShieldGenerators uint64
- Engines uint64
- }
- func (db *DataBase) SaveShip(ship *Ship) error {
- result := db.DB.Save(ship)
- return result.Error
- }
- type User struct {
- Model
- Name string `gorm:"unique"`
- RealName string `gorm:"UniqueIndex,colate:nocase"`
-
- Xp uint64
- Metal uint64
- Circuit uint64
- Rockets uint64
- Fuel uint64
-
- Ship *Ship
-
- }
- func (db *DataBase) SaveUser(u *User) error {
- result := db.DB.Save(u)
- return result.Error
- }
- func (db *DataBase) GetUserByName(name string) *User {
- var user *User
- result := db.DB.Find(user, User{RealName: name})
- if result.Error != nil {
- log.Printf("DataBase.GetUserByName(name='%s') > %v", name, result.Error)
- return nil
- }
- return user
- }
|