fix group msg
This commit is contained in:
@@ -119,21 +119,55 @@ func (c *DBChannel) SaveMessage(ctx context.Context, msg *ChannelMessage) error
|
||||
GroupID: msg.GroupID,
|
||||
UUID: int64(msg.ID),
|
||||
Content: lo.ToPtr(msg.Message),
|
||||
Media: msg.GetMedia(),
|
||||
Media: msg.GetMedias(),
|
||||
PublishedAt: msg.PublishAt,
|
||||
CreatedAt: time.Now(),
|
||||
}
|
||||
|
||||
tbl := table.ChannelMessages
|
||||
|
||||
_, err := tbl.INSERT(tbl.AllColumns.Except(tbl.ID)).MODEL(message).ExecContext(ctx, db)
|
||||
var m model.ChannelMessages
|
||||
err := tbl.
|
||||
SELECT(tbl.ID).
|
||||
WHERE(
|
||||
tbl.GroupID.EQ(Int(message.GroupID)).AND(
|
||||
tbl.UUID.EQ(Int64(message.UUID)),
|
||||
),
|
||||
).
|
||||
LIMIT(1).
|
||||
QueryContext(ctx, db, &m)
|
||||
if err != nil {
|
||||
if e, ok := err.(*pq.Error); ok {
|
||||
if e.Code == "23505" {
|
||||
return nil
|
||||
// 如果没有找到记录,那么插入新记录
|
||||
if errors.Is(err, qrm.ErrNoRows) {
|
||||
_, err = tbl.INSERT(tbl.AllColumns.Except(tbl.ID)).MODEL(message).ExecContext(ctx, db)
|
||||
if err != nil {
|
||||
if e, ok := err.(*pq.Error); ok {
|
||||
if e.Code == "23505" {
|
||||
return nil
|
||||
}
|
||||
}
|
||||
return errors.Wrap(err, "insert message")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
return errors.Wrap(err, "insert message")
|
||||
return errors.Wrap(err, "select message")
|
||||
}
|
||||
return nil
|
||||
|
||||
// 如果找到记录,那么更新记录
|
||||
stmt := tbl.UPDATE().SET(
|
||||
tbl.Content.SET(RawString(`CONCAT(content, #var)`, RawArgs{
|
||||
"#var": *message.Content,
|
||||
})),
|
||||
tbl.Media.SET(RawString(`media || #var::jsonb`, RawArgs{
|
||||
"#var": msg.GetMedia(),
|
||||
})),
|
||||
).WHERE(
|
||||
tbl.GroupID.EQ(Int(message.GroupID)).AND(
|
||||
tbl.UUID.EQ(Int(message.UUID)),
|
||||
),
|
||||
)
|
||||
|
||||
_, err = db.ExecContext(ctx, stmt.DebugSql())
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user