db.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package main
  2. import (
  3. "fmt"
  4. "gorm.io/driver/sqlite"
  5. "gorm.io/gorm"
  6. )
  7. type UserDB struct {
  8. db *gorm.DB
  9. }
  10. func (udb *UserDB) Open(filename string) error {
  11. var err error
  12. udb.db, err = gorm.Open(sqlite.Open(filename), &gorm.Config{})
  13. if err != nil {
  14. return err
  15. }
  16. return udb.db.AutoMigrate(&User{})
  17. }
  18. func (udb *UserDB) FindUser(name string) (*User, error) {
  19. var u *User
  20. result := udb.db.First(&u, "name = ?", name)
  21. if result.Error != nil {
  22. return nil, result.Error
  23. }
  24. return u, nil
  25. }
  26. func (udb *UserDB) NameAvailable(name string) bool {
  27. _, err := udb.FindUser(name)
  28. return err != nil
  29. }
  30. func (udb *UserDB) SaveUser(u *User) error {
  31. result := udb.db.Save(u)
  32. return result.Error
  33. }
  34. func (udb *UserDB) CreateUser(name, password string) error {
  35. if !udb.NameAvailable(name) {
  36. return fmt.Errorf("name taken")
  37. }
  38. var u *User = &User{
  39. Name: name,
  40. Level: 1,
  41. Loc: NewVec2(),
  42. WorldId: 1,
  43. Gold: 200,
  44. Health: 20,
  45. MaxHealth: 20,
  46. }
  47. err := u.SetPassword(password)
  48. if err != nil {
  49. return err
  50. }
  51. result := udb.db.Create(&u)
  52. return result.Error
  53. }
  54. func (udb *UserDB) Close() error {
  55. sqldb, err := udb.db.DB()
  56. if err != nil {
  57. return err
  58. }
  59. return sqldb.Close()
  60. }