guild.go 1.1 KB

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