파티 초대 accept와 deny 분리
This commit is contained in:
@ -541,29 +541,6 @@ func (gp *groupParty) AcceptPartyInvitation(w http.ResponseWriter, r *http.Reque
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func (gp *groupParty) DenyPartyInvitation(w http.ResponseWriter, r *http.Request) {
|
|
||||||
var data struct {
|
|
||||||
Gid primitive.ObjectID `bson:"gid"`
|
|
||||||
Mid primitive.ObjectID `bson:"mid"`
|
|
||||||
}
|
|
||||||
|
|
||||||
if err := gocommon.ReadJsonDocumentFromBody(r.Body, &data); err != nil {
|
|
||||||
logger.Println("DenyPartyInvitation failed. ReadJsonDocumentFromBody returns err :", err)
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
gid := data.Gid
|
|
||||||
mid := data.Mid
|
|
||||||
|
|
||||||
gp.rh.Del(context.Background(), "inv."+mid.Hex()).Result()
|
|
||||||
gd := groupDoc{
|
|
||||||
id: gid,
|
|
||||||
rh: gp.rh,
|
|
||||||
}
|
|
||||||
gd.removeMember(mid)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gp *groupParty) QueryPartyMemberState(w http.ResponseWriter, r *http.Request) {
|
func (gp *groupParty) QueryPartyMemberState(w http.ResponseWriter, r *http.Request) {
|
||||||
var data struct {
|
var data struct {
|
||||||
Mid primitive.ObjectID `bson:"mid"`
|
Mid primitive.ObjectID `bson:"mid"`
|
||||||
@ -588,82 +565,6 @@ func (gp *groupParty) QueryPartyMemberState(w http.ResponseWriter, r *http.Reque
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// LeaveParty : 그룹에서 나감 or 내보냄
|
|
||||||
// - type : 그룹 타입
|
|
||||||
// - 그룹 타입에 맞는 키(주로 _id)
|
|
||||||
// - member_id : 나갈 멤버의 아이디
|
|
||||||
func (gp *groupParty) LeaveParty(w http.ResponseWriter, r *http.Request) {
|
|
||||||
var data struct {
|
|
||||||
Gid primitive.ObjectID `bson:"gid"`
|
|
||||||
Mid primitive.ObjectID `bson:"mid"`
|
|
||||||
Tid string `bson:"tid"`
|
|
||||||
}
|
|
||||||
if err := gocommon.ReadJsonDocumentFromBody(r.Body, &data); err != nil {
|
|
||||||
logger.Println("LeaveParty failed. ReadJsonDocumentFromBody returns err :", err)
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
gid := data.Gid
|
|
||||||
mid := data.Mid
|
|
||||||
tid := data.Tid
|
|
||||||
|
|
||||||
gd := groupDoc{
|
|
||||||
id: gid,
|
|
||||||
rh: gp.rh,
|
|
||||||
}
|
|
||||||
|
|
||||||
var err error
|
|
||||||
if len(tid) > 0 {
|
|
||||||
if tid != gd.tid(mid) {
|
|
||||||
// mid가 incharge여야 한다. 그래야 tid를 쫓아낼 수 있음
|
|
||||||
incharge, err := gp.rh.JSONGet(gd.strid(), "$._incharge")
|
|
||||||
if err != nil {
|
|
||||||
logger.Println("LeaveParty failed. gp.rh.JSONGet returns err :", err)
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if !strings.Contains(incharge.(string), gd.tid(mid)) {
|
|
||||||
// incharge가 아니네?
|
|
||||||
logger.Println("LeaveParty failed. mid is not incharge")
|
|
||||||
w.WriteHeader(http.StatusBadRequest)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
mid = midFromTid(gd.id, tid)
|
|
||||||
}
|
|
||||||
|
|
||||||
err = gd.removeMemberByTid(tid)
|
|
||||||
} else {
|
|
||||||
err = gd.removeMember(mid)
|
|
||||||
// 내가 나갔다
|
|
||||||
gp.rh.JSONDel(mid.Hex(), "$.party.id")
|
|
||||||
}
|
|
||||||
|
|
||||||
if err != nil {
|
|
||||||
logger.Println("LeaveParty failed. gd.removeMember returns err :", err)
|
|
||||||
w.WriteHeader(http.StatusInternalServerError)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
// mid한테는 빈 GroupDocFull을 보낸다. 그러면 지워짐
|
|
||||||
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
|
||||||
Target: mid.Hex(),
|
|
||||||
Body: bson.M{"gid": gid},
|
|
||||||
Tag: []string{"GroupDocFull", gid.Hex()},
|
|
||||||
})
|
|
||||||
|
|
||||||
// gid에는 제거 메시지 보냄
|
|
||||||
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
|
||||||
Target: "#" + gd.strid(),
|
|
||||||
Body: bson.M{
|
|
||||||
tid: bson.M{},
|
|
||||||
},
|
|
||||||
Tag: []string{"MemberDocFull"},
|
|
||||||
})
|
|
||||||
|
|
||||||
gp.leaveRoom(gid, mid)
|
|
||||||
}
|
|
||||||
|
|
||||||
func (gp *groupParty) updateMemberDocument(gid groupID, mid accountID, doc bson.M) error {
|
func (gp *groupParty) updateMemberDocument(gid groupID, mid accountID, doc bson.M) error {
|
||||||
gd := &groupDoc{
|
gd := &groupDoc{
|
||||||
id: gid,
|
id: gid,
|
||||||
@ -865,26 +766,78 @@ func (gp *groupParty) UpdatePartyDocumentDirect(ctx wshandler.ApiCallContext) {
|
|||||||
gp.updatePartyDocument(gidobj, doc)
|
gp.updatePartyDocument(gidobj, doc)
|
||||||
}
|
}
|
||||||
|
|
||||||
// func (gp *groupParty) ClientMessageReceived(sender *wshandler.Sender, mt wshandler.WebSocketMessageType, message any) {
|
func (gp *groupParty) LeaveParty(ctx wshandler.ApiCallContext) {
|
||||||
// if mt == wshandler.Disconnected {
|
gids, _ := gp.rh.JSONGetString(ctx.CallBy.Accid.Hex(), "$.party.id")
|
||||||
// rooms := message.([]string)
|
|
||||||
// for _, roomname := range rooms {
|
|
||||||
// gp.memberDisconnected(roomname, sender.Accid)
|
|
||||||
// }
|
|
||||||
// } else if mt == wshandler.BinaryMessage {
|
|
||||||
// commandline := message.([]any)
|
|
||||||
// cmd := commandline[0].(string)
|
|
||||||
// args := commandline[1:]
|
|
||||||
// switch cmd {
|
|
||||||
// case "UpdatePartyMemberDocument":
|
|
||||||
// gidobj, _ := primitive.ObjectIDFromHex(args[0].(string))
|
|
||||||
// doc := args[1].(map[string]any)
|
|
||||||
// gp.updateMemberDocument(gidobj, sender.Accid, doc)
|
|
||||||
|
|
||||||
// case "UpdatePartyDocument":
|
if len(gids) == 0 || len(gids[0]) == 0 {
|
||||||
// gidobj, _ := primitive.ObjectIDFromHex(args[0].(string))
|
return
|
||||||
// doc := args[1].(map[string]any)
|
}
|
||||||
// gp.updatePartyDocument(gidobj, doc)
|
// mid한테는 빈 GroupDocFull을 보낸다. 그러면 지워짐
|
||||||
// }
|
gidstr := gids[0]
|
||||||
// }
|
gid, _ := primitive.ObjectIDFromHex(gidstr)
|
||||||
// }
|
mid := ctx.CallBy.Accid
|
||||||
|
tid := ctx.Arguments[0].(string)
|
||||||
|
|
||||||
|
gd := groupDoc{
|
||||||
|
id: gid,
|
||||||
|
rh: gp.rh,
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
if len(tid) > 0 {
|
||||||
|
if tid != gd.tid(mid) {
|
||||||
|
// mid가 incharge여야 한다. 그래야 tid를 쫓아낼 수 있음
|
||||||
|
incharge, err := gp.rh.JSONGet(gd.strid(), "$._incharge")
|
||||||
|
if err != nil {
|
||||||
|
logger.Println("LeaveParty failed. gp.rh.JSONGet returns err :", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if !strings.Contains(incharge.(string), gd.tid(mid)) {
|
||||||
|
// incharge가 아니네?
|
||||||
|
logger.Println("LeaveParty failed. mid is not incharge")
|
||||||
|
return
|
||||||
|
}
|
||||||
|
mid = midFromTid(gd.id, tid)
|
||||||
|
}
|
||||||
|
err = gd.removeMemberByTid(tid)
|
||||||
|
} else {
|
||||||
|
err = gd.removeMember(mid)
|
||||||
|
// 내가 나갔다
|
||||||
|
gp.rh.JSONDel(mid.Hex(), "$.party.id")
|
||||||
|
}
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
logger.Println("LeaveParty failed. gd.removeMember returns err :", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// mid한테는 빈 GroupDocFull을 보낸다. 그러면 지워짐
|
||||||
|
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
||||||
|
Target: mid.Hex(),
|
||||||
|
Body: bson.M{"gid": gid},
|
||||||
|
Tag: []string{"GroupDocFull", gid.Hex()},
|
||||||
|
})
|
||||||
|
|
||||||
|
// gid에는 제거 메시지 보냄
|
||||||
|
gp.sendUpstreamMessage(&wshandler.UpstreamMessage{
|
||||||
|
Target: "#" + gd.strid(),
|
||||||
|
Body: bson.M{
|
||||||
|
tid: bson.M{},
|
||||||
|
},
|
||||||
|
Tag: []string{"MemberDocFull"},
|
||||||
|
})
|
||||||
|
|
||||||
|
gp.leaveRoom(gid, mid)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (gp *groupParty) DenyPartyInvitation(ctx wshandler.ApiCallContext) {
|
||||||
|
gid, _ := primitive.ObjectIDFromHex(ctx.Arguments[0].(string))
|
||||||
|
mid := ctx.CallBy.Accid
|
||||||
|
|
||||||
|
gp.rh.Del(context.Background(), "inv."+mid.Hex()).Result()
|
||||||
|
gd := groupDoc{
|
||||||
|
id: gid,
|
||||||
|
rh: gp.rh,
|
||||||
|
}
|
||||||
|
gd.removeMember(mid)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user