package repository import ( "context" "gorm.io/gorm" "github.com/gochat/gochat/internal/model" ) // AttachmentRepo implements GORM repository for Attachment. // Reference: Chatwoot app/models/attachment.rb type AttachmentRepo struct { db *gorm.DB } // NewAttachmentRepo creates a new Attachment repository. func NewAttachmentRepo(db *gorm.DB) *AttachmentRepo { return &AttachmentRepo{db: db} } // FindByID retrieves an attachment by primary key. func (r *AttachmentRepo) FindByID(ctx context.Context, id uint) (*model.Attachment, error) { var attachment model.Attachment err := r.db.WithContext(ctx).First(&attachment, id).Error if err != nil { return nil, err } return &attachment, nil } // FindByMessage retrieves all attachments for a message. func (r *AttachmentRepo) FindByMessage(ctx context.Context, messageID uint) ([]model.Attachment, error) { var attachments []model.Attachment err := r.db.WithContext(ctx).Where("message_id = ?", messageID). Order("id ASC").Find(&attachments).Error return attachments, err } // Create inserts a new attachment. func (r *AttachmentRepo) Create(ctx context.Context, attachment *model.Attachment) error { return r.db.WithContext(ctx).Create(attachment).Error } // Update modifies an existing attachment. func (r *AttachmentRepo) Update(ctx context.Context, attachment *model.Attachment) error { return r.db.WithContext(ctx).Save(attachment).Error } // Delete soft-deletes an attachment. func (r *AttachmentRepo) Delete(ctx context.Context, id uint) error { return r.db.WithContext(ctx).Delete(&model.Attachment{}, id).Error } // DeleteByMessage soft-deletes all attachments for a message. func (r *AttachmentRepo) DeleteByMessage(ctx context.Context, messageID uint) error { return r.db.WithContext(ctx).Where("message_id = ?", messageID).Delete(&model.Attachment{}).Error }