From 6e709c9454fe61b4801fdc573ccda489327210da Mon Sep 17 00:00:00 2001 From: mountain Date: Tue, 10 Oct 2023 20:32:22 +0900 Subject: [PATCH] =?UTF-8?q?instant=EA=B7=B8=EB=A3=B9=EC=97=90=EC=84=9C=20?= =?UTF-8?q?=5Fid=EB=A5=BC=20=ED=81=B4=EB=9D=BC=EC=9D=B4=EC=96=B8=ED=8A=B8?= =?UTF-8?q?=EC=97=90=EB=8A=94=20=EA=B0=90=EC=B6=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/group_instant.go | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) diff --git a/core/group_instant.go b/core/group_instant.go index d538fad..af82e01 100644 --- a/core/group_instant.go +++ b/core/group_instant.go @@ -162,6 +162,7 @@ func (gi *groupInstant) join(gd *instantDoc, mid primitive.ObjectID, character a if err != nil { return err } + delete(memdoc, "_id") // 기존 유저에게 새 유저 알림 gi.sendUpstreamMessage(&wshandler.UpstreamMessage{ @@ -174,10 +175,18 @@ func (gi *groupInstant) join(gd *instantDoc, mid primitive.ObjectID, character a gi.rh.JSONSet(mid.Hex(), "$.instant", bson.M{"id": gd.strid()}) + full := gd.loadFull() + if f, ok := full["_members"]; ok { + members := f.(map[string]any) + for _, char := range members { + delete(char.(map[string]any), "_id") + } + } + // 최초 입장이라면 새 멤버에 그룹 전체를 알림 gi.sendUpstreamMessage(&wshandler.UpstreamMessage{ Target: mid.Hex(), - Body: gd.loadFull(), + Body: full, Tag: []string{"GroupDocFull"}, }) gi.enterRoom(gd.Gid, mid) @@ -215,14 +224,17 @@ func (gi *groupInstant) UpdateInstantDocument(w http.ResponseWriter, r *http.Req }) if data.Result == "after" { - raws, err := gi.rh.JSONGetDocuments(data.Gid.Hex(), "$") - if err != nil { - logger.Println("QueryInstantDocument failed. JSONGetDocuments returns err :", err) - w.WriteHeader(http.StatusInternalServerError) - return + fulldoc := gd.loadFull() + if fulldoc != nil { + tids := fulldoc["_members"].(map[string]any) + mids := make(map[string]any) + for k, v := range tids { + mid := midFromTid(data.Gid, k) + mids[mid.Hex()] = v + } + fulldoc["_members"] = mids } - - gocommon.MakeEncoder(w, r).Encode(raws[0]) + gocommon.MakeEncoder(w, r).Encode(fulldoc) } }