diff --git a/controllers/peer.go b/controllers/peer.go index f7a60eb..0b3ad28 100644 --- a/controllers/peer.go +++ b/controllers/peer.go @@ -5,6 +5,7 @@ import ( "encoding/json" "fmt" "oc-peer/infrastructure" + "strconv" oclib "cloud.o-forge.io/core/oc-lib" "cloud.o-forge.io/core/oc-lib/dbs" @@ -23,6 +24,8 @@ type PeerController struct { // @Description search workspace // @Param search path string true "the word search you want to get" // @Param is_draft query string false +// @Param offset query string false +// @Param limit query string false // @Success 200 {workspace} models.workspace // @router /search/:search [get] func (o *PeerController) Search() { @@ -30,27 +33,57 @@ func (o *PeerController) Search() { // store and return Id or post with UUIDLibDataEnum search := o.Ctx.Input.Param(":search") isDraft := o.Ctx.Input.Query("is_draft") - o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).Search(nil, search, isDraft == "true") + offset, _ := strconv.Atoi(o.Ctx.Input.Query("offset")) + limit, _ := strconv.Atoi(o.Ctx.Input.Query("limit")) + o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).Search(nil, search, isDraft == "true", int64(offset), int64(limit)) + o.ServeJSON() +} + +// @Title Search +// @Description search workspace +// @Param is_draft query string false +// @Param offset query string false +// @Param limit query string false +// @Param data body json true "body for data content (Json format)" +// @Success 200 {workspace} models.workspace +// @router /extended/search [post] +func (o *PeerController) SearchExtended() { + user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request) + // store and return Id or post with UUIDLibDataEnum + isDraft := o.Ctx.Input.Query("is_draft") + offset, _ := strconv.Atoi(o.Ctx.Input.Query("offset")) + limit, _ := strconv.Atoi(o.Ctx.Input.Query("limit")) + var res map[string]interface{} + json.Unmarshal(o.Ctx.Input.CopyBody(100000), &res) + fmt.Println(res, oclib.FiltersFromFlatMap(res, &peer.Peer{})) + data := oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).Search( + oclib.FiltersFromFlatMap(res, &peer.Peer{}), "", isDraft == "true", int64(offset), int64(limit)) + fmt.Println(data.Data[0].GetName()) + o.Data["json"] = data o.ServeJSON() } // @Title GetAll // @Description find all peer // @Param is_draft query string false +// @Param offset query string false +// @Param limit query string false // @Success 200 {peer} models.peer // @router / [get] func (o *PeerController) GetAll() { user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request) isDraft := o.Ctx.Input.Query("is_draft") + offset, _ := strconv.Atoi(o.Ctx.Input.Query("offset")) + limit, _ := strconv.Atoi(o.Ctx.Input.Query("limit")) verify := o.Ctx.Input.Query("verify") if verify == "true" { o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).Search(&dbs.Filters{ And: map[string][]dbs.Filter{ "verify": {{Operator: dbs.EQUAL.String(), Value: true}}, }, - }, "", false) + }, "", false, int64(offset), int64(limit)) } else { - o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).LoadAll(isDraft == "true") + o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).LoadAll(isDraft == "true", int64(offset), int64(limit)) } o.ServeJSON() } @@ -113,11 +146,38 @@ func (o *PeerController) Valid() { o.ServeJSON() } +// @Title add +// @Description add peer by peerid +// @Param id path string true "the peer id you want to blacklist" +// @Success 200 {peer} models.peer +// @router /add/:id [post] +func (o *PeerController) Add() { + user, _, _ := oclib.ExtractTokenInfo(*o.Ctx.Request) + id := o.Ctx.Input.Param(":id") + infrastructure.SearchMu.Lock() + if infrastructure.SearchStreamAction[user] != nil { + for _, p := range infrastructure.SearchStreamAction[user] { + if p.GetID() == id { + req := oclib.NewRequestAdmin(oclib.LibDataEnum(oclib.PEER), nil) + o.Data["json"] = req.StoreOne(p.Serialize(p)) + o.ServeJSON() + return + } + } + } + o.Data["json"] = map[string]interface{}{ + "data": nil, + "code": 404, + "error": "peer not received found", + } + o.ServeJSON() +} + // @Title known // @Description add kwown peer by peerid // @Param id path string true "the peer id you want to blacklist" // @Success 200 {peer} models.peer -// @router /:id/known [post] +// @router /known/:id [post] func (o *PeerController) Known() { user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request) id := o.Ctx.Input.Param(":id") @@ -131,7 +191,7 @@ func (o *PeerController) Known() { // @Description add partner peer by peerid // @Param id path string true "the peer id you want to blacklist" // @Success 200 {peer} models.peer -// @router /:id/partner [post] +// @router /partner/:id [post] func (o *PeerController) Partner() { user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request) id := o.Ctx.Input.Param(":id") @@ -144,7 +204,7 @@ func (o *PeerController) Partner() { // @Description add blacklist peer by peerid // @Param id path string true "the peer id you want to blacklist" // @Success 200 {peer} models.peer -// @router /:id/blacklist [post] +// @router /blacklist/:id [post] func (o *PeerController) Blacklist() { user, _, groups := oclib.ExtractTokenInfo(*o.Ctx.Request) id := o.Ctx.Input.Param(":id") @@ -215,25 +275,32 @@ func (o *PeerController) changeRelation(id string, dest *peer.Peer, user string, } o.Data["json"] = map[string]interface{}{ "data": nil, - "code": 400, + "code": 404, "error": "peer not found.", } o.ServeJSON() } -// TODO : link - -// @Title DeleteState -// @Description delete state peer by peerid +// @Title Delete +// @Description delete peer by peerid // @Param id path string true "the peer id you want to delete state" // @Success 200 {peer} models.peer -// @router /:id/undo_state [post] -func (o *PeerController) DeleteState() { - user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request) +// @router /:id [delete] +func (o *PeerController) Delete() { id := o.Ctx.Input.Param(":id") - o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).UpdateOne(map[string]interface{}{ - "state": peer.NONE, - }, id) + if ok, _ := oclib.IsMySelf(id); ok { + o.Data["json"] = map[string]interface{}{ + "data": nil, + "code": 400, + "error": "can't remove myself", + } + o.ServeJSON() + return + } + user, peerID, groups := oclib.ExtractTokenInfo(*o.Ctx.Request) + + o.Data["json"] = oclib.NewRequest(oclib.LibDataEnum(oclib.PEER), user, peerID, groups, nil).DeleteOne(id) + fmt.Println(o.Data["json"]) o.ServeJSON() } diff --git a/go.mod b/go.mod index 85f371b..782e743 100644 --- a/go.mod +++ b/go.mod @@ -3,7 +3,7 @@ module oc-peer go 1.25.0 require ( - cloud.o-forge.io/core/oc-lib v0.0.0-20260331144112-c0722483b86c + cloud.o-forge.io/core/oc-lib v0.0.0-20260407090927-6fe91eda875d github.com/beego/beego/v2 v2.3.8 github.com/smartystreets/goconvey v1.7.2 ) diff --git a/go.sum b/go.sum index a399d32..c9b6229 100644 --- a/go.sum +++ b/go.sum @@ -38,6 +38,12 @@ cloud.o-forge.io/core/oc-lib v0.0.0-20260327114131-45f2351b2f1f h1:lY+EJlJazoDBo cloud.o-forge.io/core/oc-lib v0.0.0-20260327114131-45f2351b2f1f/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= cloud.o-forge.io/core/oc-lib v0.0.0-20260331144112-c0722483b86c h1:wTIridvhud8zwMsMkwxgrQ+j+6UAo2IHDr3N80AA6zc= cloud.o-forge.io/core/oc-lib v0.0.0-20260331144112-c0722483b86c/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= +cloud.o-forge.io/core/oc-lib v0.0.0-20260403121807-913d9b3dfb0a h1:H7K91js08Vyx307MW6BwQ/kqNGTrQVMaR3xvrIrc2W8= +cloud.o-forge.io/core/oc-lib v0.0.0-20260403121807-913d9b3dfb0a/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= +cloud.o-forge.io/core/oc-lib v0.0.0-20260407075448-b7ee6d8e7f13 h1:mygo9rIB3uJ/GJQKD0F1xvEEEITZD3DuyRrX+W/VD+M= +cloud.o-forge.io/core/oc-lib v0.0.0-20260407075448-b7ee6d8e7f13/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= +cloud.o-forge.io/core/oc-lib v0.0.0-20260407090927-6fe91eda875d h1:54Vl14gurwAkmZEaWZKUM5eDZfB7MF/fzWjibWLQljE= +cloud.o-forge.io/core/oc-lib v0.0.0-20260407090927-6fe91eda875d/go.mod h1:+ENuvBfZdESSvecoqGY/wSvRlT3vinEolxKgwbOhUpA= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Knetic/govaluate v3.0.0+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= diff --git a/infrastructure/nats.go b/infrastructure/nats.go index a0b9f63..39b72ea 100644 --- a/infrastructure/nats.go +++ b/infrastructure/nats.go @@ -121,7 +121,7 @@ func ListenNATS() { And: map[string][]dbs.Filter{ "peer_id": {{Operator: dbs.EQUAL.String(), Value: p.PeerID}}, }, - }, "", false); len(s.Data) > 0 { + }, "", false, 0, 1); len(s.Data) > 0 { p.Relation = s.Data[0].(*peer.Peer).Relation } else { p.NotInCatalog = true diff --git a/oc-peer b/oc-peer deleted file mode 100755 index 36d9c83..0000000 Binary files a/oc-peer and /dev/null differ diff --git a/routers/commentsRouter.go b/routers/commentsRouter.go index 45b9fb5..7032bd6 100644 --- a/routers/commentsRouter.go +++ b/routers/commentsRouter.go @@ -25,10 +25,37 @@ func init() { Filters: nil, Params: nil}) + beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"], + beego.ControllerComments{ + Method: "Delete", + Router: `/:id`, + AllowHTTPMethods: []string{"delete"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"], + beego.ControllerComments{ + Method: "Add", + Router: `/add/:id`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"], beego.ControllerComments{ Method: "Blacklist", - Router: `/:id/blacklist`, + Router: `/blacklist/:id`, + AllowHTTPMethods: []string{"post"}, + MethodParams: param.Make(), + Filters: nil, + Params: nil}) + + beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"], + beego.ControllerComments{ + Method: "SearchExtended", + Router: `/extended/search`, AllowHTTPMethods: []string{"post"}, MethodParams: param.Make(), Filters: nil, @@ -37,7 +64,7 @@ func init() { beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"], beego.ControllerComments{ Method: "Known", - Router: `/:id/known`, + Router: `/known/:id`, AllowHTTPMethods: []string{"post"}, MethodParams: param.Make(), Filters: nil, @@ -46,16 +73,7 @@ func init() { beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"], beego.ControllerComments{ Method: "Partner", - Router: `/:id/partner`, - AllowHTTPMethods: []string{"post"}, - MethodParams: param.Make(), - Filters: nil, - Params: nil}) - - beego.GlobalControllerRouter["oc-peer/controllers:PeerController"] = append(beego.GlobalControllerRouter["oc-peer/controllers:PeerController"], - beego.ControllerComments{ - Method: "DeleteState", - Router: `/:id/undo_state`, + Router: `/partner/:id`, AllowHTTPMethods: []string{"post"}, MethodParams: param.Make(), Filters: nil, diff --git a/swagger/swagger.json b/swagger/swagger.json index c21a485..e70f833 100644 --- a/swagger/swagger.json +++ b/swagger/swagger.json @@ -28,6 +28,18 @@ "name": "is_draft", "description": "false", "type": "string" + }, + { + "in": "query", + "name": "offset", + "description": "false", + "type": "string" + }, + { + "in": "query", + "name": "limit", + "description": "false", + "type": "string" } ], "responses": { @@ -37,6 +49,70 @@ } } }, + "/add/{id}": { + "post": { + "tags": [ + "oc-peer/controllersPeerController" + ], + "description": "add peer by peerid\n\u003cbr\u003e", + "operationId": "PeerController.add", + "parameters": [ + { + "in": "path", + "name": "id", + "description": "the peer id you want to blacklist", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "{peer} models.peer" + } + } + } + }, + "/extended/search": { + "get": { + "tags": [ + "oc-peer/controllersPeerController" + ], + "description": "search workspace\n\u003cbr\u003e", + "operationId": "PeerController.Search", + "parameters": [ + { + "in": "path", + "name": "search", + "description": "the word search you want to get", + "required": true, + "type": "string" + }, + { + "in": "query", + "name": "is_draft", + "description": "false", + "type": "string" + }, + { + "in": "query", + "name": "offset", + "description": "false", + "type": "string" + }, + { + "in": "query", + "name": "limit", + "description": "false", + "type": "string" + } + ], + "responses": { + "200": { + "description": "{workspace} models.workspace" + } + } + } + }, "/search/{search}": { "get": { "tags": [ @@ -57,6 +133,18 @@ "name": "is_draft", "description": "false", "type": "string" + }, + { + "in": "query", + "name": "offset", + "description": "false", + "type": "string" + }, + { + "in": "query", + "name": "limit", + "description": "false", + "type": "string" } ], "responses": { @@ -148,6 +236,27 @@ "description": "{peer} models.peer" } } + }, + "delete": { + "tags": [ + "oc-peer/controllersPeerController" + ], + "description": "delete peer by peerid\n\u003cbr\u003e", + "operationId": "PeerController.Delete", + "parameters": [ + { + "in": "path", + "name": "id", + "description": "the peer id you want to delete state", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "{peer} models.peer" + } + } } }, "/{id}/blacklist": { @@ -218,29 +327,6 @@ } } } - }, - "/{id}/undo_state": { - "post": { - "tags": [ - "oc-peer/controllersPeerController" - ], - "description": "delete state peer by peerid\n\u003cbr\u003e", - "operationId": "PeerController.DeleteState", - "parameters": [ - { - "in": "path", - "name": "id", - "description": "the peer id you want to delete state", - "required": true, - "type": "string" - } - ], - "responses": { - "200": { - "description": "{peer} models.peer" - } - } - } } }, "definitions": { diff --git a/swagger/swagger.yml b/swagger/swagger.yml index d819807..107c30c 100644 --- a/swagger/swagger.yml +++ b/swagger/swagger.yml @@ -25,6 +25,14 @@ paths: name: is_draft description: "false" type: string + - in: query + name: offset + description: "false" + type: string + - in: query + name: limit + description: "false" + type: string responses: "200": description: '{peer} models.peer' @@ -45,6 +53,22 @@ paths: responses: "200": description: '{peer} models.peer' + delete: + tags: + - oc-peer/controllersPeerController + description: |- + delete peer by peerid +
+ operationId: PeerController.Delete + parameters: + - in: path + name: id + description: the peer id you want to delete state + required: true + type: string + responses: + "200": + description: '{peer} models.peer' /{id}/blacklist: post: tags: @@ -96,23 +120,52 @@ paths: responses: "200": description: '{peer} models.peer' - /{id}/undo_state: + /add/{id}: post: tags: - oc-peer/controllersPeerController description: |- - delete state peer by peerid + add peer by peerid
- operationId: PeerController.DeleteState + operationId: PeerController.add parameters: - in: path name: id - description: the peer id you want to delete state + description: the peer id you want to blacklist required: true type: string responses: "200": description: '{peer} models.peer' + /extended/search: + get: + tags: + - oc-peer/controllersPeerController + description: |- + search workspace +
+ operationId: PeerController.Search + parameters: + - in: path + name: search + description: the word search you want to get + required: true + type: string + - in: query + name: is_draft + description: "false" + type: string + - in: query + name: offset + description: "false" + type: string + - in: query + name: limit + description: "false" + type: string + responses: + "200": + description: '{workspace} models.workspace' /search/{search}: get: tags: @@ -131,6 +184,14 @@ paths: name: is_draft description: "false" type: string + - in: query + name: offset + description: "false" + type: string + - in: query + name: limit + description: "false" + type: string responses: "200": description: '{workspace} models.workspace'