123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- package main
- import (
- "log"
- "strings"
- "time"
- "gorm.io/driver/sqlite"
- "gorm.io/gorm"
- )
- type UserDB struct {
- DB *gorm.DB
- }
- type Model struct {
- Id uint64 `gorm:"primaryKey"`
- CreatedAt time.Time
- UpdatedAt time.Time
- }
- func (u *UserDB) Open(filename string) error {
- var err error
- u.DB, err = gorm.Open(sqlite.Open(filename), &gorm.Config{})
- if err != nil {
- return err
- }
- err = u.DB.AutoMigrate(&User{}, &Faction{})
- return err
- }
- type User struct {
- Model
- BBSName string
- BBSNick string
- Name string `gorm:"unique,collate:nocase"`
- Faction *Faction `gorm:"-"`
- FactionId uint64
- FactionSO bool
- FactionO bool
- X uint64
- Y uint64
- World uint32
- Health uint32
- MaxHealth uint32
- Magic uint32
- MaxMagic uint32
- Class uint8
- Level uint32
- Xp uint64
- Weapon uint8
- WeaponEnchant uint8
- Armor uint8
- ArmorEnchant uint8
- RangedWeapon uint8
- RangedWeaponEnchant uint8
- Shield uint8
- Ring uint8
- Amulet uint8
- Gold uint64
- GoldBanked uint64
- GemRed uint32
- GemGreen uint32
- GemBlue uint32
- }
- func (u *UserDB) FindUser(name string) *User {
- parts := strings.Split(name, "@")
- var usr *User
- result := u.DB.First(&usr, &User{BBSName: parts[1], BBSNick: parts[0]})
- if result.Error != nil {
- log.Printf("UserDB.FindUser(name='%s') > %v", name, result.Error)
- return nil
- }
- // Hot load the users faction if they are in one
- if usr != nil && usr.FactionId != 0 {
- fac := u.FindFactionById(usr.FactionId)
- if fac != nil {
- usr.Faction = fac
- }
- }
- return usr
- }
- func (u *UserDB) SaveUser(usr *User) error {
- result := u.DB.Save(usr)
- return result.Error
- }
- type Faction struct {
- Model
- Name string `gorm:"unique,collate:nocase"`
- Description string
- LeaderId uint64 `gorm:"unique"`
- Gold uint64
- GemRed uint32
- GemGreen uint32
- GemBlue uint32
- }
- func (u *UserDB) FindFactionByName(name string) *Faction {
- var fac *Faction
- result := u.DB.First(&fac, &Faction{Name: name})
- if result.Error != nil {
- log.Printf("UserDB.FindFactionByName(name='%s') > %v", name, result.Error)
- return nil
- }
- return fac
- }
- func (u *UserDB) FindFactionById(id uint64) *Faction {
- var fac *Faction
- result := u.DB.First(&fac, id)
- if result.Error != nil {
- log.Printf("UserDB.FindFactionById(id=%d) > %v", id, result.Error)
- return nil
- }
- return fac
- }
- func (u *UserDB) SaveFaction(fac *Faction) error {
- result := u.DB.Save(fac)
- return result.Error
- }
|