|
@@ -3,6 +3,7 @@ package repositories
|
|
|
import (
|
|
|
"context"
|
|
|
|
|
|
+ "github.com/mitchellh/mapstructure"
|
|
|
"github.com/rotisserie/eris"
|
|
|
"gorm.io/gorm"
|
|
|
"sikey.com/websocket/models"
|
|
@@ -29,14 +30,40 @@ type sessionMemberRepository interface {
|
|
|
|
|
|
type sessionMessageRepository interface {
|
|
|
|
|
|
+ // FindMessageById 根据消息ID查询消息
|
|
|
+ FindMessageById(ctx context.Context, msgId string) (*models.SessionMessage, error)
|
|
|
+
|
|
|
// CreateMessage 存消息
|
|
|
CreateMessage(ctx context.Context, message *models.SessionMessage) error
|
|
|
+
|
|
|
+ // UpdateMessage 修改消息内容
|
|
|
+ UpdateMessage(ctx context.Context, message *models.SessionMessage) error
|
|
|
}
|
|
|
|
|
|
type sessionRepository struct {
|
|
|
source *gorm.DB
|
|
|
}
|
|
|
|
|
|
+// FindMessageById implements SessionRepository.
|
|
|
+func (repo *sessionRepository) FindMessageById(ctx context.Context, msgId string) (*models.SessionMessage, error) {
|
|
|
+ var err error
|
|
|
+ var message models.SessionMessage
|
|
|
+ err = repo.source.WithContext(ctx).
|
|
|
+ Where(&models.SessionMessage{ID: msgId}).
|
|
|
+ First(&message).
|
|
|
+ Error
|
|
|
+ return &message, err
|
|
|
+}
|
|
|
+
|
|
|
+// UpdateMessage implements SessionRepository.
|
|
|
+func (repo *sessionRepository) UpdateMessage(ctx context.Context, message *models.SessionMessage) error {
|
|
|
+ var messageMap map[string]interface{}
|
|
|
+ if err := mapstructure.Decode(message, &messageMap); err != nil {
|
|
|
+ return eris.Wrap(err, "mapstructure.Decode error")
|
|
|
+ }
|
|
|
+ return repo.source.WithContext(ctx).Where(&models.SessionMessage{ID: message.ID}).Updates(messageMap).Error
|
|
|
+}
|
|
|
+
|
|
|
// CreateMessage implements SessionRepository.
|
|
|
func (repo *sessionRepository) CreateMessage(ctx context.Context, message *models.SessionMessage) error {
|
|
|
return repo.source.WithContext(ctx).Create(message).Error
|