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'