From 0be7adefe300f73b21e89d9f3d52f8baa20724fd Mon Sep 17 00:00:00 2001 From: mklee Date: Thu, 17 Aug 2023 14:23:00 +0900 Subject: [PATCH] =?UTF-8?q?[=EC=9D=B4=EB=AF=BC=EA=B6=8C]=20api=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20unlink=EC=8B=9C=20link=20collection=EC=97=90=20?= =?UTF-8?q?doc=20=EB=82=A8=EA=B2=A8=EC=A7=80=EB=8A=94=20=EC=9D=B4=EC=8A=88?= =?UTF-8?q?=20=EC=88=98=EC=A0=95=20-=20linkinfo=20api=EA=B0=80=20=EB=8B=A8?= =?UTF-8?q?=EC=88=9C=20link=20=EA=B0=AF=EC=88=98=EA=B0=80=20=EC=95=84?= =?UTF-8?q?=EB=8B=88=EB=9D=BC=20=EC=96=B4=EB=96=A4=20platform=EC=97=90=20?= =?UTF-8?q?=EC=97=B0=EB=8F=99=20=ED=95=98=EC=98=80=EB=8A=94=EC=A7=80=20?= =?UTF-8?q?=EB=B0=98=ED=99=98=ED=95=98=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95=20-=20=EA=B3=84=EC=A0=95=20=EC=82=AD=EC=A0=9C=20api?= =?UTF-8?q?=EC=9D=B8=20delacc=20api=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/service.go | 97 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 89 insertions(+), 8 deletions(-) diff --git a/core/service.go b/core/service.go index be9ed06..cc536b2 100644 --- a/core/service.go +++ b/core/service.go @@ -473,12 +473,12 @@ func (sh *serviceDescription) unlink(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusBadRequest) } - link, err := sh.mongoClient.FindOne(CollectionLink, bson.M{ + link, err := sh.mongoClient.FindOneAndDelete(CollectionLink, bson.M{ "platform": sType, "uid": sId, - }, options.FindOne().SetProjection(bson.M{"_id": 1})) + }, options.FindOneAndDelete().SetProjection(bson.M{"_id": 1})) if err != nil { - logger.Error("link failed. FindOneAndUpdate link err:", err) + logger.Error("link failed. FindOneAndDelete link err:", err) w.WriteHeader(http.StatusInternalServerError) return } @@ -545,19 +545,32 @@ func (sh *serviceDescription) linkinfo(w http.ResponseWriter, r *http.Request) { return } - numRecord, err := sh.mongoClient.Collection(CollectionAccount).CountDocuments(context.Background(), bson.M{ + platformName := "platform" + links, err := sh.mongoClient.FindAll(CollectionAccount, bson.M{ "accid": authInfo.Accid, - }, options.Count().SetLimit(sh.MaximumNumLinkAccount)) - + }, options.Find().SetLimit(sh.MaximumNumLinkAccount).SetProjection(bson.M{ + platformName: 1, + })) if err != nil { logger.Error("linkinfo failed. CountDocuments err :", err) w.WriteHeader(http.StatusBadRequest) return } - logger.Println("linkinfo :", numRecord) - w.Write([]byte(fmt.Sprintf(`{"num_linked_account":"%d"}`, numRecord))) + var linkstrs []string + for _, link := range links { + linkstrs = append(linkstrs, link[platformName].(string)) + } + linkbytes, err := json.Marshal(linkstrs) + if err != nil { + logger.Error("linkinfo failed. json marshal fail :", err) + w.WriteHeader(http.StatusBadRequest) + return + } + + logger.Println("linkinfo :", linkbytes) + w.Write(linkbytes) } func (sh *serviceDescription) authorize(w http.ResponseWriter, r *http.Request) { @@ -761,6 +774,72 @@ func (sh *serviceDescription) findVersionSplit(version string) []byte { return sh.divisionsSplits[""] } +func (sh *serviceDescription) delacc(w http.ResponseWriter, r *http.Request) { + defer func() { + s := recover() + if s != nil { + logger.Error(s) + } + }() + + if r.Method != "GET" { + w.WriteHeader(http.StatusBadRequest) + return + } + + queryvals := r.URL.Query() + sType := queryvals.Get("stype") + sId := queryvals.Get("sid") + sk := queryvals.Get("sk") + + authInfo := sh.auths.Find(sk) + if authInfo == nil { + // 잘못된 세션 + logger.Println("delacc failed. session key is not valid :", sk) + w.WriteHeader(http.StatusBadRequest) + return + } + + if authInfo.Uid != sId || authInfo.Platform != sType { + logger.Println("delacc failed. session key is not correct :", *authInfo, queryvals) + w.WriteHeader(http.StatusBadRequest) + return + } + + accids, err := sh.mongoClient.FindAll(CollectionAccount, bson.M{ + "accid": authInfo.Accid, + }, options.Find().SetProjection(bson.M{ + "_id": 1, + })) + if err != nil { + logger.Error("delacc failed. FindAll account err :", err) + w.WriteHeader(http.StatusInternalServerError) + return + } + + var addIdFilter bson.A + for _, accid := range accids { + addIdFilter = append(addIdFilter, accid["_id"].(primitive.ObjectID)) + } + + delfilter := bson.D{{Key: "id", Value: bson.D{{Key: "$in", Value: addIdFilter}}}} + delaccnum, err := sh.mongoClient.DeleteMany(CollectionAccount, delfilter) + if err != nil { + logger.Error("delacc failed. Delete many CollectionAccount err :", err) + w.WriteHeader(http.StatusBadRequest) + return + } + + _, err = sh.mongoClient.DeleteMany(CollectionLink, delfilter) + if err != nil { + logger.Error("delacc failed. Delete many CollectionLink err :", err) + w.WriteHeader(http.StatusBadRequest) + return + } + + logger.Println("delacc success :", delaccnum) +} + func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) { defer func() { s := recover() @@ -782,6 +861,8 @@ func (sh *serviceDescription) serveHTTP(w http.ResponseWriter, r *http.Request) sh.unlink(w, r) } else if strings.HasSuffix(r.URL.Path, "/linkinfo") { sh.linkinfo(w, r) + } else if strings.HasSuffix(r.URL.Path, "/delacc") { + sh.delacc(w, r) } else if strings.HasSuffix(r.URL.Path, "/divs") { // TODO : 세션키와 authtoken을 헤더로 받아서 accid 조회 queryvals := r.URL.Query()