fix cp invite requester room notice
This commit is contained in:
parent
811178252f
commit
eea564ac56
@ -195,7 +195,7 @@ func validateDelivery(delivery CPDelivery) error {
|
|||||||
if isTencentIMC2CChannel(delivery.Channel) && delivery.SenderUserID <= 0 {
|
if isTencentIMC2CChannel(delivery.Channel) && delivery.SenderUserID <= 0 {
|
||||||
return xerr.New(xerr.InvalidArgument, "cp c2c delivery sender_user_id is required")
|
return xerr.New(xerr.InvalidArgument, "cp c2c delivery sender_user_id is required")
|
||||||
}
|
}
|
||||||
if (delivery.Channel == channelTencentIMRoom || delivery.Channel == channelTencentIMRegion) && strings.TrimSpace(delivery.GroupID) == "" {
|
if (delivery.Channel == channelTencentIMRoom || delivery.Channel == channelTencentIMRoomSender || delivery.Channel == channelTencentIMRegion) && strings.TrimSpace(delivery.GroupID) == "" {
|
||||||
return xerr.New(xerr.InvalidArgument, "cp group delivery group_id is required")
|
return xerr.New(xerr.InvalidArgument, "cp group delivery group_id is required")
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
|
|||||||
@ -25,6 +25,7 @@ const (
|
|||||||
channelTencentIMC2C = "tencent_im_c2c"
|
channelTencentIMC2C = "tencent_im_c2c"
|
||||||
channelTencentIMC2CAcceptor = "tencent_im_c2c_acceptor"
|
channelTencentIMC2CAcceptor = "tencent_im_c2c_acceptor"
|
||||||
channelTencentIMRoom = "tencent_im_room"
|
channelTencentIMRoom = "tencent_im_room"
|
||||||
|
channelTencentIMRoomSender = "tencent_im_room_sender"
|
||||||
channelTencentIMRegion = "tencent_im_region"
|
channelTencentIMRegion = "tencent_im_region"
|
||||||
|
|
||||||
noticeTypeApplicationCreated = "cp_application_created"
|
noticeTypeApplicationCreated = "cp_application_created"
|
||||||
@ -109,7 +110,7 @@ func (s *Service) publishDelivery(ctx context.Context, delivery CPDelivery, opti
|
|||||||
Ext: "cp_relation_notice",
|
Ext: "cp_relation_notice",
|
||||||
PayloadJSON: delivery.PayloadJSON,
|
PayloadJSON: delivery.PayloadJSON,
|
||||||
})
|
})
|
||||||
case channelTencentIMRoom:
|
case channelTencentIMRoom, channelTencentIMRoomSender:
|
||||||
err = s.publisher.PublishGroupCustomMessage(publishCtx, tencentim.CustomGroupMessage{
|
err = s.publisher.PublishGroupCustomMessage(publishCtx, tencentim.CustomGroupMessage{
|
||||||
GroupID: delivery.GroupID,
|
GroupID: delivery.GroupID,
|
||||||
EventID: delivery.EventID,
|
EventID: delivery.EventID,
|
||||||
@ -214,6 +215,8 @@ func deliveriesFromMessage(message usermq.UserOutboxMessage, groupIDPrefix strin
|
|||||||
}
|
}
|
||||||
roomPayload := cloneJSONMap(basePayload)
|
roomPayload := cloneJSONMap(basePayload)
|
||||||
roomPayload["recipient_user_id"] = strconv.FormatInt(application.Target.UserID, 10)
|
roomPayload["recipient_user_id"] = strconv.FormatInt(application.Target.UserID, 10)
|
||||||
|
requesterRoomPayload := cloneJSONMap(basePayload)
|
||||||
|
requesterRoomPayload["recipient_user_id"] = strconv.FormatInt(application.Requester.UserID, 10)
|
||||||
return []CPDelivery{
|
return []CPDelivery{
|
||||||
{
|
{
|
||||||
AppCode: appCode,
|
AppCode: appCode,
|
||||||
@ -237,6 +240,20 @@ func deliveriesFromMessage(message usermq.UserOutboxMessage, groupIDPrefix strin
|
|||||||
PayloadJSON: mustJSON(roomPayload),
|
PayloadJSON: mustJSON(roomPayload),
|
||||||
CreatedAtMS: message.OccurredAtMS,
|
CreatedAtMS: message.OccurredAtMS,
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
// 创建申请时 target 需要接收态按钮,requester 也需要同一房间上下文里的等待态弹窗。
|
||||||
|
// notice_delivery_events 的主键包含 channel,同一 event_id 不能复用 tencent_im_room,
|
||||||
|
// 因此发起人房间通知用独立内部 channel,发布边界仍走腾讯 IM 群自定义消息。
|
||||||
|
AppCode: appCode,
|
||||||
|
EventID: message.EventID,
|
||||||
|
EventType: message.EventType,
|
||||||
|
Channel: channelTencentIMRoomSender,
|
||||||
|
NoticeType: noticeTypeApplicationCreated,
|
||||||
|
TargetUserID: application.Requester.UserID,
|
||||||
|
GroupID: application.RoomID,
|
||||||
|
PayloadJSON: mustJSON(requesterRoomPayload),
|
||||||
|
CreatedAtMS: message.OccurredAtMS,
|
||||||
|
},
|
||||||
}, nil
|
}, nil
|
||||||
case eventApplicationAccepted:
|
case eventApplicationAccepted:
|
||||||
application, err := applicationFromObject(root)
|
application, err := applicationFromObject(root)
|
||||||
|
|||||||
@ -11,7 +11,7 @@ import (
|
|||||||
"hyapp/pkg/usermq"
|
"hyapp/pkg/usermq"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestProcessApplicationCreatedPublishesC2CAndRoomIM(t *testing.T) {
|
func TestProcessApplicationCreatedPublishesC2CAndBothRoomIMs(t *testing.T) {
|
||||||
repo := &fakeRepository{}
|
repo := &fakeRepository{}
|
||||||
publisher := &fakePublisher{}
|
publisher := &fakePublisher{}
|
||||||
service := New(Config{NodeID: "notice-test"}, repo, publisher)
|
service := New(Config{NodeID: "notice-test"}, repo, publisher)
|
||||||
@ -31,10 +31,18 @@ func TestProcessApplicationCreatedPublishesC2CAndRoomIM(t *testing.T) {
|
|||||||
if len(publisher.userMessages) != 1 || publisher.userMessages[0].FromAccount != "1001" || publisher.userMessages[0].ToAccount != "1002" {
|
if len(publisher.userMessages) != 1 || publisher.userMessages[0].FromAccount != "1001" || publisher.userMessages[0].ToAccount != "1002" {
|
||||||
t.Fatalf("expected target c2c message, got %+v", publisher.userMessages)
|
t.Fatalf("expected target c2c message, got %+v", publisher.userMessages)
|
||||||
}
|
}
|
||||||
if len(publisher.groupMessages) != 1 || publisher.groupMessages[0].GroupID != "room-100" {
|
if len(publisher.groupMessages) != 2 || publisher.groupMessages[0].GroupID != "room-100" || publisher.groupMessages[1].GroupID != "room-100" {
|
||||||
t.Fatalf("expected room group message, got %+v", publisher.groupMessages)
|
t.Fatalf("expected target and requester room group messages, got %+v", publisher.groupMessages)
|
||||||
}
|
}
|
||||||
if len(repo.delivered) != 2 || repo.delivered[0].Channel != channelTencentIMC2C || repo.delivered[1].Channel != channelTencentIMRoom {
|
targetRoomPayload := mustObject(string(publisher.groupMessages[0].PayloadJSON))
|
||||||
|
if targetRoomPayload["recipient_user_id"] != "1002" {
|
||||||
|
t.Fatalf("target room payload mismatch: %+v", targetRoomPayload)
|
||||||
|
}
|
||||||
|
requesterRoomPayload := mustObject(string(publisher.groupMessages[1].PayloadJSON))
|
||||||
|
if requesterRoomPayload["recipient_user_id"] != "1001" {
|
||||||
|
t.Fatalf("requester room payload mismatch: %+v", requesterRoomPayload)
|
||||||
|
}
|
||||||
|
if len(repo.delivered) != 3 || repo.delivered[0].Channel != channelTencentIMC2C || repo.delivered[1].Channel != channelTencentIMRoom || repo.delivered[2].Channel != channelTencentIMRoomSender {
|
||||||
t.Fatalf("delivery channels mismatch: %+v", repo.delivered)
|
t.Fatalf("delivery channels mismatch: %+v", repo.delivered)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user