Files

67 lines
1.7 KiB
Go

package db
import (
"context"
"github.com/pkg/errors"
"gorm.io/gorm"
)
var MessageImages MessageImageStore
type MessageImageStore interface {
Create(ctx context.Context, opts CreateMessageImageOptions) (*MessageImage, error)
GetByMessageIDs(ctx context.Context, messageIDs []uint) (map[uint][]*MessageImage, error)
}
func NewMessageImageStore(db *gorm.DB) MessageImageStore {
return &messageImages{db}
}
type messageImages struct {
*gorm.DB
}
type MessageImage struct {
gorm.Model
MessageID uint `gorm:"index" json:"message_id"`
URL string `gorm:"size:500" json:"url"`
ObjectKey string `gorm:"type:text" json:"-"`
FileName string `gorm:"size:200" json:"file_name"`
FileSize int64 `json:"file_size"`
}
type CreateMessageImageOptions struct {
MessageID uint
URL string
ObjectKey string
FileName string
FileSize int64
}
func (db *messageImages) Create(ctx context.Context, opts CreateMessageImageOptions) (*MessageImage, error) {
img := &MessageImage{
MessageID: opts.MessageID,
URL: opts.URL,
ObjectKey: opts.ObjectKey,
FileName: opts.FileName,
FileSize: opts.FileSize,
}
if err := db.WithContext(ctx).Create(img).Error; err != nil {
return nil, errors.Wrap(err, "create message image")
}
return img, nil
}
func (db *messageImages) GetByMessageIDs(ctx context.Context, messageIDs []uint) (map[uint][]*MessageImage, error) {
var images []*MessageImage
if err := db.WithContext(ctx).Where("message_id IN ?", messageIDs).Find(&images).Error; err != nil {
return nil, errors.Wrap(err, "get message images")
}
result := make(map[uint][]*MessageImage)
for _, img := range images {
result[img.MessageID] = append(result[img.MessageID], img)
}
return result, nil
}