guild.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. package database
  2. import (
  3. "database/sql"
  4. "errors"
  5. log "maunium.net/go/maulogger/v2"
  6. "maunium.net/go/mautrix/util/dbutil"
  7. )
  8. type Guild struct {
  9. db *Database
  10. log log.Logger
  11. DiscordID string
  12. GuildID string
  13. GuildName string
  14. Bridge bool
  15. }
  16. func (g *Guild) Scan(row dbutil.Scannable) *Guild {
  17. err := row.Scan(&g.DiscordID, &g.GuildID, &g.GuildName, &g.Bridge)
  18. if err != nil {
  19. if !errors.Is(err, sql.ErrNoRows) {
  20. g.log.Errorln("Database scan failed:", err)
  21. }
  22. return nil
  23. }
  24. return g
  25. }
  26. func (g *Guild) Upsert() {
  27. query := "INSERT INTO guild" +
  28. " (discord_id, guild_id, guild_name, bridge)" +
  29. " VALUES ($1, $2, $3, $4)" +
  30. " ON CONFLICT(discord_id, guild_id)" +
  31. " DO UPDATE SET guild_name=excluded.guild_name, bridge=excluded.bridge"
  32. _, err := g.db.Exec(query, g.DiscordID, g.GuildID, g.GuildName, g.Bridge)
  33. if err != nil {
  34. g.log.Warnfln("Failed to upsert guild %s for %s: %v", g.GuildID, g.DiscordID, err)
  35. }
  36. }
  37. func (g *Guild) Delete() {
  38. query := "DELETE FROM guild WHERE discord_id=$1 AND guild_id=$2"
  39. _, err := g.db.Exec(query, g.DiscordID, g.GuildID)
  40. if err != nil {
  41. g.log.Warnfln("Failed to delete guild %s for user %s: %v", g.GuildID, g.DiscordID, err)
  42. }
  43. }