user.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package database
  2. import (
  3. "database/sql"
  4. log "maunium.net/go/maulogger/v2"
  5. "maunium.net/go/mautrix/id"
  6. )
  7. type User struct {
  8. db *Database
  9. log log.Logger
  10. MXID id.UserID
  11. ID string
  12. ManagementRoom id.RoomID
  13. Token string
  14. }
  15. func (u *User) Scan(row Scannable) *User {
  16. var token sql.NullString
  17. err := row.Scan(&u.MXID, &u.ID, &u.ManagementRoom, &token)
  18. if err != nil {
  19. if err != sql.ErrNoRows {
  20. u.log.Errorln("Database scan failed:", err)
  21. }
  22. return nil
  23. }
  24. if token.Valid {
  25. u.Token = token.String
  26. }
  27. return u
  28. }
  29. func (u *User) Insert() {
  30. query := "INSERT INTO \"user\"" +
  31. " (mxid, id, management_room, token)" +
  32. " VALUES ($1, $2, $3, $4);"
  33. var token sql.NullString
  34. if u.Token != "" {
  35. token.String = u.Token
  36. token.Valid = true
  37. }
  38. _, err := u.db.Exec(query, u.MXID, u.ID, u.ManagementRoom, token)
  39. if err != nil {
  40. u.log.Warnfln("Failed to insert %s: %v", u.MXID, err)
  41. }
  42. }
  43. func (u *User) Update() {
  44. query := "UPDATE \"user\" SET" +
  45. " id=$1, management_room=$2, token=$3" +
  46. " WHERE mxid=$4;"
  47. var token sql.NullString
  48. if u.Token != "" {
  49. token.String = u.Token
  50. token.Valid = true
  51. }
  52. _, err := u.db.Exec(query, u.ID, u.ManagementRoom, token, u.MXID)
  53. if err != nil {
  54. u.log.Warnfln("Failed to update %q: %v", u.MXID, err)
  55. }
  56. }