puppet.go 2.2 KB

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