package main import ( "fmt" "gorm.io/driver/sqlite" "gorm.io/gorm" ) type UserDB struct { db *gorm.DB } func (udb *UserDB) Open(filename string) error { var err error udb.db, err = gorm.Open(sqlite.Open(filename), &gorm.Config{}) if err != nil { return err } return udb.db.AutoMigrate(&User{}) } func (udb *UserDB) FindUser(name string) (*User, error) { var u *User result := udb.db.First(&u, "name = ?", name) if result.Error != nil { return nil, result.Error } return u, nil } func (udb *UserDB) NameAvailable(name string) bool { _, err := udb.FindUser(name) return err != nil } func (udb *UserDB) SaveUser(u *User) error { result := udb.db.Save(u) return result.Error } func (udb *UserDB) CreateUser(name, password string) error { if !udb.NameAvailable(name) { return fmt.Errorf("name taken") } var u *User = &User{ Name: name, Level: 1, Loc: NewVec2(), WorldId: 1, Gold: 200, Health: 20, MaxHealth: 20, } err := u.SetPassword(password) if err != nil { return err } result := udb.db.Create(&u) return result.Error } func (udb *UserDB) Close() error { sqldb, err := udb.db.DB() if err != nil { return err } return sqldb.Close() }