attachment.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package database
  2. import (
  3. "database/sql"
  4. "errors"
  5. log "maunium.net/go/maulogger/v2"
  6. "maunium.net/go/mautrix/id"
  7. "maunium.net/go/mautrix/util/dbutil"
  8. )
  9. type Attachment struct {
  10. db *Database
  11. log log.Logger
  12. Channel PortalKey
  13. DiscordMessageID string
  14. DiscordAttachmentID string
  15. MatrixEventID id.EventID
  16. }
  17. func (a *Attachment) Scan(row dbutil.Scannable) *Attachment {
  18. err := row.Scan(
  19. &a.Channel.ChannelID, &a.Channel.Receiver,
  20. &a.DiscordMessageID, &a.DiscordAttachmentID,
  21. &a.MatrixEventID)
  22. if err != nil {
  23. if !errors.Is(err, sql.ErrNoRows) {
  24. a.log.Errorln("Database scan failed:", err)
  25. }
  26. return nil
  27. }
  28. return a
  29. }
  30. func (a *Attachment) Insert() {
  31. query := "INSERT INTO attachment" +
  32. " (channel_id, receiver, discord_message_id, discord_attachment_id, " +
  33. " matrix_event_id) VALUES ($1, $2, $3, $4, $5);"
  34. _, err := a.db.Exec(
  35. query,
  36. a.Channel.ChannelID, a.Channel.Receiver,
  37. a.DiscordMessageID, a.DiscordAttachmentID,
  38. a.MatrixEventID,
  39. )
  40. if err != nil {
  41. a.log.Warnfln("Failed to insert attachment for %s@%s: %v", a.Channel, a.DiscordMessageID, err)
  42. }
  43. }
  44. func (a *Attachment) Delete() {
  45. query := "DELETE FROM attachment WHERE" +
  46. " channel_id=$1 AND receiver=$2 AND discord_attachment_id=$3 AND" +
  47. " matrix_event_id=$4"
  48. _, err := a.db.Exec(
  49. query,
  50. a.Channel.ChannelID, a.Channel.Receiver,
  51. a.DiscordAttachmentID, a.MatrixEventID,
  52. )
  53. if err != nil {
  54. a.log.Warnfln("Failed to delete attachment for %s@%s: %v", a.Channel, a.DiscordAttachmentID, err)
  55. }
  56. }