puppet.go 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package database
  2. import (
  3. "database/sql"
  4. log "maunium.net/go/maulogger/v2"
  5. "maunium.net/go/mautrix/id"
  6. "maunium.net/go/mautrix/util/dbutil"
  7. )
  8. const (
  9. puppetSelect = "SELECT id, display_name, avatar, avatar_url," +
  10. " enable_presence, custom_mxid, access_token, next_batch," +
  11. " enable_receipts" +
  12. " FROM puppet "
  13. )
  14. type Puppet struct {
  15. db *Database
  16. log log.Logger
  17. ID string
  18. DisplayName string
  19. Avatar string
  20. AvatarURL id.ContentURI
  21. EnablePresence bool
  22. CustomMXID id.UserID
  23. AccessToken string
  24. NextBatch string
  25. EnableReceipts bool
  26. }
  27. func (p *Puppet) Scan(row dbutil.Scannable) *Puppet {
  28. var did, displayName, avatar, avatarURL sql.NullString
  29. var enablePresence sql.NullBool
  30. var customMXID, accessToken, nextBatch sql.NullString
  31. err := row.Scan(&did, &displayName, &avatar, &avatarURL, &enablePresence,
  32. &customMXID, &accessToken, &nextBatch, &p.EnableReceipts)
  33. if err != nil {
  34. if err != sql.ErrNoRows {
  35. p.log.Errorln("Database scan failed:", err)
  36. }
  37. return nil
  38. }
  39. p.ID = did.String
  40. p.DisplayName = displayName.String
  41. p.Avatar = avatar.String
  42. p.AvatarURL, _ = id.ParseContentURI(avatarURL.String)
  43. p.EnablePresence = enablePresence.Bool
  44. p.CustomMXID = id.UserID(customMXID.String)
  45. p.AccessToken = accessToken.String
  46. p.NextBatch = nextBatch.String
  47. return p
  48. }
  49. func (p *Puppet) Insert() {
  50. query := "INSERT INTO puppet" +
  51. " (id, display_name, avatar, avatar_url, enable_presence," +
  52. " custom_mxid, access_token, next_batch, enable_receipts)" +
  53. " VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)"
  54. _, err := p.db.Exec(query, p.ID, p.DisplayName, p.Avatar,
  55. p.AvatarURL.String(), p.EnablePresence, p.CustomMXID, p.AccessToken,
  56. p.NextBatch, p.EnableReceipts)
  57. if err != nil {
  58. p.log.Warnfln("Failed to insert %s: %v", p.ID, err)
  59. }
  60. }
  61. func (p *Puppet) Update() {
  62. query := "UPDATE puppet" +
  63. " SET display_name=$1, avatar=$2, avatar_url=$3, enable_presence=$4," +
  64. " custom_mxid=$5, access_token=$6, next_batch=$7," +
  65. " enable_receipts=$8" +
  66. " WHERE id=$9"
  67. _, err := p.db.Exec(query, p.DisplayName, p.Avatar, p.AvatarURL.String(),
  68. p.EnablePresence, p.CustomMXID, p.AccessToken, p.NextBatch,
  69. p.EnableReceipts, p.ID)
  70. if err != nil {
  71. p.log.Warnfln("Failed to update %s: %v", p.ID, err)
  72. }
  73. }