123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- package database
- import (
- "database/sql"
- "errors"
- log "maunium.net/go/maulogger/v2"
- "maunium.net/go/mautrix/util/dbutil"
- )
- type Guild struct {
- db *Database
- log log.Logger
- DiscordID string
- GuildID string
- GuildName string
- Bridge bool
- }
- func (g *Guild) Scan(row dbutil.Scannable) *Guild {
- err := row.Scan(&g.DiscordID, &g.GuildID, &g.GuildName, &g.Bridge)
- if err != nil {
- if !errors.Is(err, sql.ErrNoRows) {
- g.log.Errorln("Database scan failed:", err)
- }
- return nil
- }
- return g
- }
- func (g *Guild) Upsert() {
- query := "INSERT INTO guild" +
- " (discord_id, guild_id, guild_name, bridge)" +
- " VALUES ($1, $2, $3, $4)" +
- " ON CONFLICT(discord_id, guild_id)" +
- " DO UPDATE SET guild_name=excluded.guild_name, bridge=excluded.bridge"
- _, err := g.db.Exec(query, g.DiscordID, g.GuildID, g.GuildName, g.Bridge)
- if err != nil {
- g.log.Warnfln("Failed to upsert guild %s for %s: %v", g.GuildID, g.DiscordID, err)
- }
- }
- func (g *Guild) Delete() {
- query := "DELETE FROM guild WHERE discord_id=$1 AND guild_id=$2"
- _, err := g.db.Exec(query, g.DiscordID, g.GuildID)
- if err != nil {
- g.log.Warnfln("Failed to delete guild %s for user %s: %v", g.GuildID, g.DiscordID, err)
- }
- }
|