diff --git a/core/group_party.go b/core/group_party.go index 7f71d1d..3b168ee 100644 --- a/core/group_party.go +++ b/core/group_party.go @@ -364,11 +364,12 @@ func (gp *groupParty) JoinParty(w http.ResponseWriter, r *http.Request) { // - (body) : 검색시 노출되는 document func (gp *groupParty) InviteToParty(w http.ResponseWriter, r *http.Request) { var doc struct { - Gid primitive.ObjectID - Mid primitive.ObjectID - Target primitive.ObjectID - Inviter bson.M - Invitee bson.M + Gid primitive.ObjectID + Mid primitive.ObjectID + Target primitive.ObjectID + Inviter bson.M + Invitee bson.M + InitialPartyDoc bson.M } if err := gocommon.MakeDecoder(r).Decode(&doc); err != nil { @@ -409,12 +410,13 @@ func (gp *groupParty) InviteToParty(w http.ResponseWriter, r *http.Request) { if gd == nil { gid = primitive.NewObjectID() - gd, err = gp.createGroup(gid, mid, doc.Inviter) + gd, err = gp.createGroup(gid, mid, doc.Inviter, doc.InitialPartyDoc) if err != nil { logger.Println("InviteToParty failed. gp.createGroup() return err :", err) w.WriteHeader(http.StatusInternalServerError) return } + // 내가 wshandler room에 입장 gp.enterRoom(gid, mid) gp.rh.JSONSet(mid.Hex(), "$.party", bson.M{"id": gid.Hex()}) @@ -648,7 +650,7 @@ func (gp *groupParty) QueryPartyMembers(w http.ResponseWriter, r *http.Request) } } -func (gp *groupParty) createGroup(newid groupID, charge accountID, chargeDoc bson.M) (*partyDoc, error) { +func (gp *groupParty) createGroup(newid groupID, charge accountID, chargeDoc bson.M, initialGroupDoc bson.M) (*partyDoc, error) { tid := makeTid(newid, charge) gd := &partyDoc{ @@ -660,15 +662,27 @@ func (gp *groupParty) createGroup(newid groupID, charge accountID, chargeDoc bso }, }, InCharge: tid, + Gid: newid.Hex(), rh: gp.rh, id: newid, } - _, err := gp.rh.JSONSet(gd.strid(), "$", gd, gocommon.RedisonSetOptionNX) + var err error + if initialGroupDoc != nil { + initialGroupDoc["_members"] = gd.Members + initialGroupDoc["_incharge"] = gd.InCharge + initialGroupDoc["_gid"] = gd.Gid + + _, err = gp.rh.JSONSet(gd.strid(), "$", initialGroupDoc, gocommon.RedisonSetOptionNX) + } else { + _, err = gp.rh.JSONSet(gd.strid(), "$", gd, gocommon.RedisonSetOptionNX) + } + if err != nil { return nil, err } + return gd, nil }