一阶段ok

This commit is contained in:
2026-06-01 18:59:55 +08:00
commit 9e50d05e71
52 changed files with 6155 additions and 0 deletions
+59
View File
@@ -0,0 +1,59 @@
package store
import (
"mail_go/internal/db"
"gorm.io/gorm"
)
// AttachmentStore defines the interface for attachment data operations.
type AttachmentStore interface {
Create(att *db.Attachment) error
GetByID(id uint) (*db.Attachment, error)
ListByMessage(messageID uint) ([]db.Attachment, error)
Delete(id uint) error
DeleteByMessage(messageID uint) error
}
// attachmentStoreGorm implements AttachmentStore using GORM.
type attachmentStoreGorm struct {
db *gorm.DB
}
// newAttachmentStore creates a new GORM-backed AttachmentStore.
func newAttachmentStore(database *gorm.DB) AttachmentStore {
return &attachmentStoreGorm{db: database}
}
// Create inserts a new attachment record.
func (s *attachmentStoreGorm) Create(att *db.Attachment) error {
return s.db.Create(att).Error
}
// GetByID retrieves an attachment by primary key.
func (s *attachmentStoreGorm) GetByID(id uint) (*db.Attachment, error) {
var att db.Attachment
if err := s.db.First(&att, id).Error; err != nil {
return nil, err
}
return &att, nil
}
// ListByMessage retrieves all attachments for a given message.
func (s *attachmentStoreGorm) ListByMessage(messageID uint) ([]db.Attachment, error) {
var attachments []db.Attachment
if err := s.db.Where("message_id = ?", messageID).Find(&attachments).Error; err != nil {
return nil, err
}
return attachments, nil
}
// Delete removes an attachment by ID.
func (s *attachmentStoreGorm) Delete(id uint) error {
return s.db.Delete(&db.Attachment{}, id).Error
}
// DeleteByMessage removes all attachments for a given message.
func (s *attachmentStoreGorm) DeleteByMessage(messageID uint) error {
return s.db.Where("message_id = ?", messageID).Delete(&db.Attachment{}).Error
}