123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- 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.Updates(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()
- }
|