파티 초대 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) {
|
||||
var data struct {
|
||||
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 {
|
||||
gd := &groupDoc{
|
||||
id: gid,
|
||||
@ -865,26 +766,78 @@ func (gp *groupParty) UpdatePartyDocumentDirect(ctx wshandler.ApiCallContext) {
|
||||
gp.updatePartyDocument(gidobj, doc)
|
||||
}
|
||||
|
||||
// func (gp *groupParty) ClientMessageReceived(sender *wshandler.Sender, mt wshandler.WebSocketMessageType, message any) {
|
||||
// if mt == wshandler.Disconnected {
|
||||
// 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)
|
||||
func (gp *groupParty) LeaveParty(ctx wshandler.ApiCallContext) {
|
||||
gids, _ := gp.rh.JSONGetString(ctx.CallBy.Accid.Hex(), "$.party.id")
|
||||
|
||||
// case "UpdatePartyDocument":
|
||||
// gidobj, _ := primitive.ObjectIDFromHex(args[0].(string))
|
||||
// doc := args[1].(map[string]any)
|
||||
// gp.updatePartyDocument(gidobj, doc)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
if len(gids) == 0 || len(gids[0]) == 0 {
|
||||
return
|
||||
}
|
||||
// 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