database.go 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package database
  2. import (
  3. _ "embed"
  4. "fmt"
  5. _ "github.com/lib/pq"
  6. _ "github.com/mattn/go-sqlite3"
  7. "go.mau.fi/mautrix-discord/database/upgrades"
  8. "maunium.net/go/mautrix/util/dbutil"
  9. )
  10. type Database struct {
  11. *dbutil.Database
  12. User *UserQuery
  13. Portal *PortalQuery
  14. Puppet *PuppetQuery
  15. Message *MessageQuery
  16. Reaction *ReactionQuery
  17. Attachment *AttachmentQuery
  18. Emoji *EmojiQuery
  19. Guild *GuildQuery
  20. }
  21. //go:embed legacymigrate.sql
  22. var legacyMigrate string
  23. func New(baseDB *dbutil.Database) *Database {
  24. db := &Database{Database: baseDB}
  25. _, err := db.Exec("SELECT id FROM version")
  26. if err == nil {
  27. baseDB.Log.Infoln("Migrating from legacy database versioning")
  28. _, err = db.Exec(legacyMigrate)
  29. if err != nil {
  30. panic(fmt.Errorf("failed to migrate from legacy database versioning: %v", err))
  31. }
  32. }
  33. db.UpgradeTable = upgrades.Table
  34. db.User = &UserQuery{
  35. db: db,
  36. log: db.Log.Sub("User"),
  37. }
  38. db.Portal = &PortalQuery{
  39. db: db,
  40. log: db.Log.Sub("Portal"),
  41. }
  42. db.Puppet = &PuppetQuery{
  43. db: db,
  44. log: db.Log.Sub("Puppet"),
  45. }
  46. db.Message = &MessageQuery{
  47. db: db,
  48. log: db.Log.Sub("Message"),
  49. }
  50. db.Reaction = &ReactionQuery{
  51. db: db,
  52. log: db.Log.Sub("Reaction"),
  53. }
  54. db.Attachment = &AttachmentQuery{
  55. db: db,
  56. log: db.Log.Sub("Attachment"),
  57. }
  58. db.Emoji = &EmojiQuery{
  59. db: db,
  60. log: db.Log.Sub("Emoji"),
  61. }
  62. db.Guild = &GuildQuery{
  63. db: db,
  64. log: db.Log.Sub("Guild"),
  65. }
  66. return db
  67. }