attachment.go 1.4 KB

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