From 739cbe1207c5d3a7f281d6ae7445e4c0d41d2472 Mon Sep 17 00:00:00 2001 From: ymk <81808708+yk-eukarya@users.noreply.github.com> Date: Wed, 19 Jun 2024 07:44:29 +0200 Subject: [PATCH] imp --- server/e2e/integration_model_test.go | 307 +++- server/e2e/integration_schema_test.go | 540 +++++++ server/internal/adapter/integration/model.go | 160 +- .../internal/adapter/integration/project.go | 18 + server/internal/adapter/integration/schema.go | 359 +++++ .../adapter/integration/server.gen.go | 1313 ++++++++++++++++- server/pkg/integrationapi/event.go | 18 +- server/pkg/integrationapi/project.go | 17 + server/pkg/integrationapi/types.gen.go | 101 ++ server/pkg/schema/id.go | 2 + server/schemas/integration.yml | 417 ++++++ 11 files changed, 3165 insertions(+), 87 deletions(-) create mode 100644 server/e2e/integration_schema_test.go create mode 100644 server/internal/adapter/integration/project.go create mode 100644 server/internal/adapter/integration/schema.go create mode 100644 server/pkg/integrationapi/project.go diff --git a/server/e2e/integration_model_test.go b/server/e2e/integration_model_test.go index 9d9db8be68..1f1df152e1 100644 --- a/server/e2e/integration_model_test.go +++ b/server/e2e/integration_model_test.go @@ -9,6 +9,150 @@ import ( "github.com/reearth/reearth-cms/server/pkg/id" ) +// GET /models/{modelId} +func TestIntegrationModelGetAPI(t *testing.T) { + e := StartServer(t, &app.Config{}, true, baseSeeder) + + e.GET("/api/models/{modelId}", id.NewModelID()). + Expect(). + Status(http.StatusUnauthorized) + + e.GET("/api/models/{modelId}", id.NewModelID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.GET("/api/models/{modelId}", id.NewModelID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.GET("/api/models/{modelId}", id.NewModelID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + // key cannot be used + e.GET("/api/models/{modelId}", ikey1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusBadRequest) + + obj := e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "m1"). + HasValue("description", "m1 desc"). + HasValue("public", true). + HasValue("key", ikey1.String()). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj.Value("createdAt").NotNull() + obj.Value("updatedAt").NotNull() + obj.Value("lastModified").NotNull() +} + +// PATCH /models/{modelId} +func TestIntegrationModelUpdateAPI(t *testing.T) { + endpoint := "/api/models/{modelId}" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + e.PATCH(endpoint, id.NewProjectID()). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, id.NewProjectID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, id.NewProjectID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + obj := e.PATCH(endpoint, mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "name": "newM1 updated", + "description": "newM1 desc updated", + "key": "newM1KeyUpdated", + }). + Expect(). + Status(http.StatusOK). + JSON(). + Object() + obj. + ContainsKey("id"). + ContainsKey("schemaId"). + HasValue("projectId", pid). + HasValue("name", "newM1 updated"). + HasValue("description", "newM1 desc updated"). + HasValue("key", "newM1KeyUpdated") + + obj = e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1). + HasValue("name", "newM1 updated"). + HasValue("description", "newM1 desc updated"). + HasValue("public", true). + HasValue("key", "newM1KeyUpdated"). + HasValue("projectId", pid) + + obj.Value("createdAt").NotNull() + obj.Value("updatedAt").NotNull() + //obj.Value("lastModified").NotNull() + obj.Value("schemaId").NotNull() +} + +// DELETE /models/{modelId} +func TestIntegrationModelDeleteAPI(t *testing.T) { + endpoint := "/api/models/{modelId}" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + e.DELETE(endpoint, id.NewProjectID()). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, id.NewProjectID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, id.NewProjectID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "name": "newM1 updated", + "description": "newM1 desc updated", + "key": "newM1KeyUpdated", + }). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1) + + e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + +} + // GET /projects/{projectIdOrKey}/models func TestIntegrationModelFilterAPI(t *testing.T) { endpoint := "/api/projects/{projectIdOrKey}/models" @@ -90,54 +234,62 @@ func TestIntegrationModelFilterAPI(t *testing.T) { Expect()) } -// GET /models/{modelId} -func TestIntegrationModelGetAPI(t *testing.T) { +// POST /projects/{projectIdOrKey}/models +func TestIntegrationModelCreateAPI(t *testing.T) { + endpoint := "/api/projects/{projectIdOrKey}/models" e := StartServer(t, &app.Config{}, true, baseSeeder) - e.GET("/api/models/{modelId}", id.NewModelID()). + e.POST(endpoint, id.NewProjectID()). Expect(). Status(http.StatusUnauthorized) - e.GET("/api/models/{modelId}", id.NewModelID()). + e.POST(endpoint, id.NewProjectID()). WithHeader("authorization", "secret_abc"). Expect(). Status(http.StatusUnauthorized) - e.GET("/api/models/{modelId}", id.NewModelID()). + e.POST(endpoint, id.NewProjectID()). WithHeader("authorization", "Bearer secret_abc"). Expect(). Status(http.StatusUnauthorized) - e.GET("/api/models/{modelId}", id.NewModelID()). - WithHeader("authorization", "Bearer "+secret). - Expect(). - Status(http.StatusNotFound) - - // key cannot be used - e.GET("/api/models/{modelId}", ikey1). + obj := e.POST(endpoint, pid.String()). WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "name": "newM1", + "description": "newM1 desc", + "key": "newM1Key", + }). Expect(). - Status(http.StatusBadRequest) + Status(http.StatusOK). + JSON(). + Object() + obj. + ContainsKey("id"). + ContainsKey("schemaId"). + HasValue("projectId", pid). + HasValue("name", "newM1"). + HasValue("description", "newM1 desc"). + HasValue("key", "newM1Key") - obj := e.GET("/api/models/{modelId}", mId1). + mId := obj.Value("id").String().Raw() + obj = e.GET("/api/models/{modelId}", mId). WithHeader("authorization", "Bearer "+secret). - WithQuery("page", 1). - WithQuery("perPage", 5). Expect(). Status(http.StatusOK). JSON(). Object(). - HasValue("id", mId1.String()). - HasValue("name", "m1"). - HasValue("description", "m1 desc"). + HasValue("id", mId). + HasValue("name", "newM1"). + HasValue("description", "newM1 desc"). HasValue("public", true). - HasValue("key", ikey1.String()). - HasValue("projectId", pid). - HasValue("schemaId", sid1) + HasValue("key", "newM1Key"). + HasValue("projectId", pid) obj.Value("createdAt").NotNull() obj.Value("updatedAt").NotNull() - obj.Value("lastModified").NotNull() + //obj.Value("lastModified").NotNull() + obj.Value("schemaId").NotNull() } // GET /projects/{projectIdOrAlias}/models/{modelIdOrKey} @@ -205,3 +357,112 @@ func TestIntegrationModelGetWithProjectAPI(t *testing.T) { obj.Value("updatedAt").NotNull() obj.Value("lastModified").NotNull() } + +// PATCH /projects/{projectIdOrAlias}/models/{modelIdOrKey} +func TestIntegrationModelUpdateWithProjectAPI(t *testing.T) { + endpoint := "/api/projects/{projectIdOrAlias}/models/{modelIdOrKey}" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + e.PATCH(endpoint, palias, id.NewModelID()). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, palias, id.NewModelID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, palias, id.NewModelID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, palias, id.NewModelID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + obj := e.PATCH(endpoint, palias, mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "name": "newM1 updated", + "description": "newM1 desc updated", + "key": "newM1KeyUpdated", + }). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "newM1 updated"). + HasValue("description", "newM1 desc updated"). + HasValue("public", true). + HasValue("key", "newM1KeyUpdated"). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj.Value("createdAt").NotNull() + obj.Value("updatedAt").NotNull() + obj.Value("lastModified").NotNull() + + obj = e.GET("/api/projects/{projectIdOrAlias}/models/{modelIdOrKey}", palias, "newM1KeyUpdated"). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "newM1 updated"). + HasValue("description", "newM1 desc updated"). + HasValue("public", true). + HasValue("key", "newM1KeyUpdated"). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj.Value("createdAt").NotNull() + obj.Value("updatedAt").NotNull() + obj.Value("lastModified").NotNull() +} + +// DELETE /projects/{projectIdOrAlias}/models/{modelIdOrKey} +func TestIntegrationModelDeleteWithProjectAPI(t *testing.T) { + endpoint := "/api/projects/{projectIdOrAlias}/models/{modelIdOrKey}" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + e.DELETE(endpoint, palias, id.NewModelID()). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, palias, id.NewModelID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, palias, id.NewModelID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, palias, id.NewModelID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + e.DELETE(endpoint, palias, mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "name": "newM1 updated", + "description": "newM1 desc updated", + "key": "newM1KeyUpdated", + }). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()) + + e.GET("/api/projects/{projectIdOrAlias}/models/{modelIdOrKey}", palias, mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) +} diff --git a/server/e2e/integration_schema_test.go b/server/e2e/integration_schema_test.go new file mode 100644 index 0000000000..275edd89d0 --- /dev/null +++ b/server/e2e/integration_schema_test.go @@ -0,0 +1,540 @@ +package e2e + +import ( + "net/http" + "testing" + + "github.com/reearth/reearth-cms/server/internal/app" + "github.com/reearth/reearth-cms/server/pkg/id" +) + +// POST /api/models/{modelId}/fields +func TestIntegrationFieldCreateAPI(t *testing.T) { + endpoint := "/api/models/{modelId}/fields" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + e.POST(endpoint, id.NewModelID()). + Expect(). + Status(http.StatusUnauthorized) + + e.POST(endpoint, id.NewModelID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.POST(endpoint, id.NewModelID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.POST(endpoint, id.NewModelID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + // key cannot be used + e.POST(endpoint, ikey1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusBadRequest) + + obj1 := e.POST(endpoint, mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + + obj1.JSON().Object().ContainsKey("id") + + obj := e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "m1"). + HasValue("description", "m1 desc"). + HasValue("public", true). + HasValue("key", ikey1.String()). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj.Value("createdAt").NotNull() + obj.Value("updatedAt").NotNull() + obj.Value("lastModified").NotNull() +} + +// PATCH /api/models/{modelId}/fields/{FieldIdOrKey} +func TestIntegrationFieldUpdateAPI(t *testing.T) { + endpoint := "/api/models/{modelId}/fields/{fieldIdOrKey}" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + obj := e.POST("/api/models/{modelId}/fields", mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + fId := obj.JSON().Object().Value("id").String().Raw() + + e.PATCH(endpoint, id.NewModelID(), id.NewFieldID()). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + e.PATCH(endpoint, id.NewModelID(), fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + // model key cannot be used + e.PATCH(endpoint, ikey1, fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusBadRequest) + + e.PATCH(endpoint, mId1, fId). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1Updated", + "type": "bool", + "multiple": true, + "required": true, + }). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId). + HasValue("key", "fKey1Updated"). + HasValue("type", "bool"). + HasValue("multiple", true). + HasValue("required", true) + + e.PATCH(endpoint, mId1, "fKey1Updated"). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1Updated1", + "type": "bool", + "multiple": true, + "required": true, + }). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId). + HasValue("key", "fKey1Updated1"). + HasValue("type", "bool"). + HasValue("multiple", true). + HasValue("required", true) + + obj1 := e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "m1"). + HasValue("description", "m1 desc"). + HasValue("public", true). + HasValue("key", ikey1.String()). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj1.Value("createdAt").NotNull() + obj1.Value("updatedAt").NotNull() + obj1.Value("lastModified").NotNull() +} + +// DELETE /api/models/{modelId}/fields/{FieldIdOrKey} +func TestIntegrationFieldDeleteAPI(t *testing.T) { + endpoint := "/api/models/{modelId}/fields/{fieldIdOrKey}" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + obj := e.POST("/api/models/{modelId}/fields", mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + fId := obj.JSON().Object().Value("id").String().Raw() + + e.DELETE(endpoint, id.NewModelID(), id.NewFieldID()). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + e.DELETE(endpoint, id.NewModelID(), fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + // model key cannot be used + e.DELETE(endpoint, ikey1, fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusBadRequest) + + e.DELETE(endpoint, mId1, fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId) + + obj = e.POST("/api/models/{modelId}/fields", mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + fId = obj.JSON().Object().Value("id").String().Raw() + + e.DELETE(endpoint, mId1, "fKey1"). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId) + + obj1 := e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "m1"). + HasValue("description", "m1 desc"). + HasValue("public", true). + HasValue("key", ikey1.String()). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj1.Value("createdAt").NotNull() + obj1.Value("updatedAt").NotNull() + obj1.Value("lastModified").NotNull() +} + +// POST /api/projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields +func TestIntegrationFieldCreateWithProjectAPI(t *testing.T) { + endpoint := "/api/projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + e.POST(endpoint, pid, id.NewModelID()). + Expect(). + Status(http.StatusUnauthorized) + + e.POST(endpoint, pid, id.NewModelID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.POST(endpoint, pid, id.NewModelID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.POST(endpoint, pid, id.NewModelID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + obj1 := e.POST(endpoint, pid, mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + + obj1.JSON().Object().ContainsKey("id") + + obj1 = e.POST(endpoint, pid, ikey1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey2", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + + obj1.JSON().Object().ContainsKey("id") + + obj := e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "m1"). + HasValue("description", "m1 desc"). + HasValue("public", true). + HasValue("key", ikey1.String()). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj.Value("createdAt").NotNull() + obj.Value("updatedAt").NotNull() + obj.Value("lastModified").NotNull() +} + +// PATCH /api/projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{FieldIdOrKey} +func TestIntegrationFieldUpdateWithProjectAPI(t *testing.T) { + endpoint := "/api/projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{fieldIdOrKey}" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + obj := e.POST("/api/models/{modelId}/fields", mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + fId := obj.JSON().Object().Value("id").String().Raw() + + e.PATCH(endpoint, pid, id.NewModelID(), id.NewFieldID()). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, pid, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, pid, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.PATCH(endpoint, pid, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + e.PATCH(endpoint, pid, id.NewModelID(), fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + e.PATCH(endpoint, pid, mId1, fId). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1Updated", + "type": "bool", + "multiple": true, + "required": true, + }). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId). + HasValue("key", "fKey1Updated"). + HasValue("type", "bool"). + HasValue("multiple", true). + HasValue("required", true) + + e.PATCH(endpoint, pid, mId1, "fKey1Updated"). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1Updated1", + "type": "bool", + "multiple": true, + "required": true, + }). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId). + HasValue("key", "fKey1Updated1"). + HasValue("type", "bool"). + HasValue("multiple", true). + HasValue("required", true) + + obj1 := e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "m1"). + HasValue("description", "m1 desc"). + HasValue("public", true). + HasValue("key", ikey1.String()). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj1.Value("createdAt").NotNull() + obj1.Value("updatedAt").NotNull() + obj1.Value("lastModified").NotNull() +} + +// DELETE /api/projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{FieldIdOrKey} +func TestIntegrationFieldDeleteWithProjectAPI(t *testing.T) { + endpoint := "/api/projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{fieldIdOrKey}" + e := StartServer(t, &app.Config{}, true, baseSeeder) + + obj := e.POST("/api/models/{modelId}/fields", mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + fId := obj.JSON().Object().Value("id").String().Raw() + + e.DELETE(endpoint, pid, id.NewModelID(), id.NewFieldID()). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, pid, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, pid, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "Bearer secret_abc"). + Expect(). + Status(http.StatusUnauthorized) + + e.DELETE(endpoint, pid, id.NewModelID(), id.NewFieldID()). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + e.DELETE(endpoint, pid, id.NewModelID(), fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusNotFound) + + e.DELETE(endpoint, pid, ikey1, fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId) + + obj = e.POST("/api/models/{modelId}/fields", mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + fId = obj.JSON().Object().Value("id").String().Raw() + + e.DELETE(endpoint, pid, mId1, fId). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId) + + obj = e.POST("/api/models/{modelId}/fields", mId1). + WithHeader("authorization", "Bearer "+secret). + WithJSON(map[string]interface{}{ + "key": "fKey1", + "type": "bool", + "multiple": false, + "required": false, + }). + Expect(). + Status(http.StatusOK) + fId = obj.JSON().Object().Value("id").String().Raw() + + e.DELETE(endpoint, pid, mId1, "fKey1"). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", fId) + + obj1 := e.GET("/api/models/{modelId}", mId1). + WithHeader("authorization", "Bearer "+secret). + Expect(). + Status(http.StatusOK). + JSON(). + Object(). + HasValue("id", mId1.String()). + HasValue("name", "m1"). + HasValue("description", "m1 desc"). + HasValue("public", true). + HasValue("key", ikey1.String()). + HasValue("projectId", pid). + HasValue("schemaId", sid1) + + obj1.Value("createdAt").NotNull() + obj1.Value("updatedAt").NotNull() + obj1.Value("lastModified").NotNull() +} diff --git a/server/internal/adapter/integration/model.go b/server/internal/adapter/integration/model.go index e23411e76f..7fd92a7f34 100644 --- a/server/internal/adapter/integration/model.go +++ b/server/internal/adapter/integration/model.go @@ -5,6 +5,7 @@ import ( "errors" "github.com/reearth/reearth-cms/server/internal/adapter" + "github.com/reearth/reearth-cms/server/internal/usecase/interfaces" "github.com/reearth/reearth-cms/server/pkg/integrationapi" "github.com/reearth/reearthx/rerror" "github.com/samber/lo" @@ -45,6 +46,41 @@ func (s *Server) ModelFilter(ctx context.Context, request ModelFilterRequestObje }, nil } +func (s *Server) ModelCreate(ctx context.Context, request ModelCreateRequestObject) (ModelCreateResponseObject, error) { + op := adapter.Operator(ctx) + uc := adapter.Usecases(ctx) + + p, err := uc.Project.FindByIDOrAlias(ctx, request.ProjectIdOrAlias, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelCreate400Response{}, err + } + return ModelCreate400Response{}, err + } + + input := interfaces.CreateModelParam{ + ProjectId: p.ID(), + Name: request.Body.Name, + Description: request.Body.Description, + Key: request.Body.Key, + Public: lo.ToPtr(true), + } + m, err := uc.Model.Create(ctx, input, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelCreate400Response{}, err + } + return ModelCreate400Response{}, err + } + + lastModified, err := uc.Item.LastModifiedByModel(ctx, m.ID(), op) + if err != nil && !errors.Is(err, rerror.ErrNotFound) { + return nil, err + } + + return ModelCreate200JSONResponse(integrationapi.NewModel(m, lastModified)), nil +} + func (s *Server) ModelGet(ctx context.Context, request ModelGetRequestObject) (ModelGetResponseObject, error) { uc := adapter.Usecases(ctx) op := adapter.Operator(ctx) @@ -55,11 +91,11 @@ func (s *Server) ModelGet(ctx context.Context, request ModelGetRequestObject) (M } lastModified, err := uc.Item.LastModifiedByModel(ctx, request.ModelId, op) - if err != nil { + if err != nil && !errors.Is(err, rerror.ErrNotFound) { return nil, err } - return ModelGet200JSONResponse(integrationapi.NewModel(m, lastModified)), err + return ModelGet200JSONResponse(integrationapi.NewModel(m, lastModified)), nil } func (s *Server) ModelGetWithProject(ctx context.Context, request ModelGetWithProjectRequestObject) (ModelGetWithProjectResponseObject, error) { @@ -92,3 +128,123 @@ func (s *Server) ModelGetWithProject(ctx context.Context, request ModelGetWithPr return ModelGetWithProject200JSONResponse(integrationapi.NewModel(m, lastModified)), nil } + +func (s *Server) ModelUpdate(ctx context.Context, request ModelUpdateRequestObject) (ModelUpdateResponseObject, error) { + op := adapter.Operator(ctx) + uc := adapter.Usecases(ctx) + + input := interfaces.UpdateModelParam{ + ModelID: request.ModelId, + Name: request.Body.Name, + Description: request.Body.Description, + Key: request.Body.Key, + Public: nil, + } + m, err := uc.Model.Update(ctx, input, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelUpdate400Response{}, err + } + return ModelUpdate400Response{}, err + } + + lastModified, err := uc.Item.LastModifiedByModel(ctx, request.ModelId, op) + if err != nil { + return nil, err + } + + return ModelUpdate200JSONResponse(integrationapi.NewModel(m, lastModified)), nil +} + +func (s *Server) ModelUpdateWithProject(ctx context.Context, request ModelUpdateWithProjectRequestObject) (ModelUpdateWithProjectResponseObject, error) { + op := adapter.Operator(ctx) + uc := adapter.Usecases(ctx) + + prj, err := uc.Project.FindByIDOrAlias(ctx, request.ProjectIdOrAlias, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelUpdateWithProject400Response{}, err + } + return nil, err + } + + m, err := uc.Model.FindByIDOrKey(ctx, prj.ID(), request.ModelIdOrKey, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelUpdateWithProject400Response{}, err + } + return ModelUpdateWithProject400Response{}, err + } + + input := interfaces.UpdateModelParam{ + ModelID: m.ID(), + Name: request.Body.Name, + Description: request.Body.Description, + Key: request.Body.Key, + Public: nil, + } + m, err = uc.Model.Update(ctx, input, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelUpdateWithProject400Response{}, err + } + return ModelUpdateWithProject400Response{}, err + } + + lastModified, err := uc.Item.LastModifiedByModel(ctx, m.ID(), op) + if err != nil { + return nil, err + } + + return ModelUpdateWithProject200JSONResponse(integrationapi.NewModel(m, lastModified)), nil +} + +func (s *Server) ModelDelete(ctx context.Context, request ModelDeleteRequestObject) (ModelDeleteResponseObject, error) { + uc := adapter.Usecases(ctx) + op := adapter.Operator(ctx) + + err := uc.Model.Delete(ctx, request.ModelId, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelDelete400Response{}, err + } + return ModelDelete400Response{}, err + } + + return ModelDelete200JSONResponse{ + Id: request.ModelId.Ref(), + }, err +} + +func (s *Server) ModelDeleteWithProject(ctx context.Context, request ModelDeleteWithProjectRequestObject) (ModelDeleteWithProjectResponseObject, error) { + uc := adapter.Usecases(ctx) + op := adapter.Operator(ctx) + + prj, err := uc.Project.FindByIDOrAlias(ctx, request.ProjectIdOrAlias, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelDeleteWithProject400Response{}, err + } + return nil, err + } + + m, err := uc.Model.FindByIDOrKey(ctx, prj.ID(), request.ModelIdOrKey, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelDeleteWithProject400Response{}, err + } + return ModelDeleteWithProject400Response{}, err + } + + err = uc.Model.Delete(ctx, m.ID(), op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return ModelDeleteWithProject400Response{}, err + } + return ModelDeleteWithProject400Response{}, err + } + + return ModelDeleteWithProject200JSONResponse{ + Id: m.ID().Ref(), + }, err +} diff --git a/server/internal/adapter/integration/project.go b/server/internal/adapter/integration/project.go new file mode 100644 index 0000000000..3ffb867b71 --- /dev/null +++ b/server/internal/adapter/integration/project.go @@ -0,0 +1,18 @@ +package integration + +import ( + "context" +) + +func (s *Server) ProjectFilter(ctx context.Context, request ProjectFilterRequestObject) (ProjectFilterResponseObject, error) { + //uc := adapter.Usecases(ctx) + //op := adapter.Operator(ctx) + // + //p, pi, err := uc.Project.FindByWorkspace(ctx, nil, op) + //if err != nil { + // return nil, err + //} + // + //return ProjectFilter200JSONResponse(integrationapi.NewProject(p)), err + panic("implement me") +} diff --git a/server/internal/adapter/integration/schema.go b/server/internal/adapter/integration/schema.go new file mode 100644 index 0000000000..ac148a2c5e --- /dev/null +++ b/server/internal/adapter/integration/schema.go @@ -0,0 +1,359 @@ +package integration + +import ( + "context" + "errors" + + "github.com/reearth/reearth-cms/server/internal/adapter" + "github.com/reearth/reearth-cms/server/internal/usecase/interfaces" + "github.com/reearth/reearth-cms/server/pkg/id" + "github.com/reearth/reearth-cms/server/pkg/integrationapi" + "github.com/reearth/reearth-cms/server/pkg/schema" + "github.com/reearth/reearth-cms/server/pkg/value" + "github.com/reearth/reearthx/rerror" + "github.com/samber/lo" +) + +var ( + ErrMultipleReference = errors.New("multiple reference is not supported") + ErrNotImplemented = errors.New("not implemented") + ErrInvalidTypeProperty = errors.New("invalid type property") +) + +func (s *Server) FieldCreate(ctx context.Context, request FieldCreateRequestObject) (FieldCreateResponseObject, error) { + uc := adapter.Usecases(ctx) + op := adapter.Operator(ctx) + + sch, err := uc.Schema.FindByModel(ctx, request.ModelId, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldCreate400Response{}, err + } + return FieldCreate400Response{}, err + } + + tp, dv, err := FromSchemaTypeProperty(*request.Body.Type, *request.Body.Multiple) + if err != nil { + return nil, err + } + + param := interfaces.CreateFieldParam{ + ModelID: &request.ModelId, + SchemaID: sch.Schema().ID(), + Type: integrationapi.FromValueType(request.Body.Type), + Name: *request.Body.Key, + Description: nil, + Key: *request.Body.Key, + Multiple: *request.Body.Multiple, + Unique: false, + Required: *request.Body.Required, + IsTitle: false, + TypeProperty: tp, + DefaultValue: dv, + } + f, err := uc.Schema.CreateField(ctx, param, op) + if err != nil { + return FieldCreate400Response{}, err + } + + return FieldCreate200JSONResponse{ + Id: f.ID().Ref(), + Key: f.Key().Ref().StringRef(), + Multiple: lo.ToPtr(f.Multiple()), + Required: lo.ToPtr(f.Required()), + Type: lo.ToPtr(integrationapi.ToValueType(f.Type())), + }, err +} + +func (s *Server) FieldCreateWithProject(ctx context.Context, request FieldCreateWithProjectRequestObject) (FieldCreateWithProjectResponseObject, error) { + uc := adapter.Usecases(ctx) + op := adapter.Operator(ctx) + + p, err := uc.Project.FindByIDOrAlias(ctx, request.ProjectIdOrAlias, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldCreateWithProject400Response{}, err + } + return FieldCreateWithProject400Response{}, err + } + + m, err := uc.Model.FindByIDOrKey(ctx, p.ID(), request.ModelIdOrKey, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldCreateWithProject400Response{}, err + } + return FieldCreateWithProject400Response{}, err + } + + sch, err := uc.Schema.FindByModel(ctx, m.ID(), op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldCreateWithProject400Response{}, err + } + return FieldCreateWithProject400Response{}, err + } + + tp, dv, err := FromSchemaTypeProperty(*request.Body.Type, *request.Body.Multiple) + if err != nil { + return nil, err + } + + param := interfaces.CreateFieldParam{ + ModelID: m.ID().Ref(), + SchemaID: sch.Schema().ID(), + Type: integrationapi.FromValueType(request.Body.Type), + Name: *request.Body.Key, + Description: nil, + Key: *request.Body.Key, + Multiple: *request.Body.Multiple, + Unique: false, + Required: *request.Body.Required, + IsTitle: false, + TypeProperty: tp, + DefaultValue: dv, + } + f, err := uc.Schema.CreateField(ctx, param, op) + if err != nil { + return FieldCreateWithProject400Response{}, err + } + + return FieldCreateWithProject200JSONResponse{ + Id: f.ID().Ref(), + Key: f.Key().Ref().StringRef(), + Multiple: lo.ToPtr(f.Multiple()), + Required: lo.ToPtr(f.Required()), + Type: lo.ToPtr(integrationapi.ToValueType(f.Type())), + }, err +} + +func (s *Server) FieldUpdate(ctx context.Context, request FieldUpdateRequestObject) (FieldUpdateResponseObject, error) { + uc := adapter.Usecases(ctx) + op := adapter.Operator(ctx) + + sch, err := uc.Schema.FindByModel(ctx, request.ModelId, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldUpdate400Response{}, err + } + return FieldUpdate400Response{}, err + } + + idOrKey := (*string)(&request.FieldIdOrKey) + f := sch.FieldByIDOrKey(id.FieldIDFromRef(idOrKey), id.NewKeyFromPtr(idOrKey)) + if f == nil { + return FieldUpdate400Response{}, rerror.ErrNotFound + } + + param := interfaces.UpdateFieldParam{ + FieldID: f.ID(), + ModelID: &request.ModelId, + SchemaID: sch.Schema().ID(), + Name: request.Body.Key, + Description: nil, + Key: request.Body.Key, + Multiple: request.Body.Multiple, + Unique: lo.ToPtr(false), + Required: request.Body.Required, + IsTitle: lo.ToPtr(false), + TypeProperty: nil, + DefaultValue: nil, + } + f, err = uc.Schema.UpdateField(ctx, param, op) + if err != nil { + return FieldUpdate400Response{}, err + } + + return FieldUpdate200JSONResponse{ + Id: f.ID().Ref(), + Key: f.Key().Ref().StringRef(), + Multiple: lo.ToPtr(f.Multiple()), + Required: lo.ToPtr(f.Required()), + Type: lo.ToPtr(integrationapi.ToValueType(f.Type())), + }, err +} + +func (s *Server) FieldUpdateWithProject(ctx context.Context, request FieldUpdateWithProjectRequestObject) (FieldUpdateWithProjectResponseObject, error) { + uc := adapter.Usecases(ctx) + op := adapter.Operator(ctx) + + p, err := uc.Project.FindByIDOrAlias(ctx, request.ProjectIdOrAlias, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldUpdateWithProject400Response{}, err + } + return FieldUpdateWithProject400Response{}, err + } + + m, err := uc.Model.FindByIDOrKey(ctx, p.ID(), request.ModelIdOrKey, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldUpdateWithProject400Response{}, err + } + return FieldUpdateWithProject400Response{}, err + } + + sch, err := uc.Schema.FindByModel(ctx, m.ID(), op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldUpdateWithProject400Response{}, err + } + return FieldUpdateWithProject400Response{}, err + } + + idOrKey := (*string)(&request.FieldIdOrKey) + f := sch.FieldByIDOrKey(id.FieldIDFromRef(idOrKey), id.NewKeyFromPtr(idOrKey)) + if f == nil { + return FieldUpdateWithProject400Response{}, rerror.ErrNotFound + } + + tp, dv, err := FromSchemaTypeProperty(*request.Body.Type, *request.Body.Multiple) + if err != nil { + return nil, err + } + + param := interfaces.UpdateFieldParam{ + FieldID: f.ID(), + ModelID: m.ID().Ref(), + SchemaID: sch.Schema().ID(), + Name: request.Body.Key, + Description: nil, + Key: request.Body.Key, + Multiple: request.Body.Multiple, + Unique: lo.ToPtr(false), + Required: request.Body.Required, + IsTitle: lo.ToPtr(false), + TypeProperty: tp, + DefaultValue: dv, + } + f, err = uc.Schema.UpdateField(ctx, param, op) + if err != nil { + return FieldUpdateWithProject400Response{}, err + } + + return FieldUpdateWithProject200JSONResponse{ + Id: f.ID().Ref(), + Key: f.Key().Ref().StringRef(), + Multiple: lo.ToPtr(f.Multiple()), + Required: lo.ToPtr(f.Required()), + Type: lo.ToPtr(integrationapi.ToValueType(f.Type())), + }, err +} + +func (s *Server) FieldDelete(ctx context.Context, request FieldDeleteRequestObject) (FieldDeleteResponseObject, error) { + uc := adapter.Usecases(ctx) + op := adapter.Operator(ctx) + + sch, err := uc.Schema.FindByModel(ctx, request.ModelId, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldDelete400Response{}, err + } + return FieldDelete400Response{}, err + } + + idOrKey := (*string)(&request.FieldIdOrKey) + f := sch.FieldByIDOrKey(id.FieldIDFromRef(idOrKey), id.NewKeyFromPtr(idOrKey)) + if f == nil { + return FieldDelete400Response{}, rerror.ErrNotFound + } + + err = uc.Schema.DeleteField(ctx, sch.Schema().ID(), f.ID(), op) + if err != nil { + return FieldDelete400Response{}, err + } + + return FieldDelete200JSONResponse{ + Id: f.ID().Ref(), + }, err +} + +func (s *Server) FieldDeleteWithProject(ctx context.Context, request FieldDeleteWithProjectRequestObject) (FieldDeleteWithProjectResponseObject, error) { + uc := adapter.Usecases(ctx) + op := adapter.Operator(ctx) + + p, err := uc.Project.FindByIDOrAlias(ctx, request.ProjectIdOrAlias, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldDeleteWithProject400Response{}, err + } + return FieldDeleteWithProject400Response{}, err + } + + m, err := uc.Model.FindByIDOrKey(ctx, p.ID(), request.ModelIdOrKey, op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldDeleteWithProject400Response{}, err + } + return FieldDeleteWithProject400Response{}, err + } + + sch, err := uc.Schema.FindByModel(ctx, m.ID(), op) + if err != nil { + if errors.Is(err, rerror.ErrNotFound) { + return FieldDeleteWithProject400Response{}, err + } + return FieldDeleteWithProject400Response{}, err + } + + idOrKey := (*string)(&request.FieldIdOrKey) + f := sch.FieldByIDOrKey(id.FieldIDFromRef(idOrKey), id.NewKeyFromPtr(idOrKey)) + if f == nil { + return FieldDeleteWithProject400Response{}, rerror.ErrNotFound + } + + err = uc.Schema.DeleteField(ctx, sch.Schema().ID(), f.ID(), op) + if err != nil { + return FieldDeleteWithProject400Response{}, err + } + + return FieldDeleteWithProject200JSONResponse{ + Id: f.ID().Ref(), + }, err +} + +func FromSchemaTypeProperty(t integrationapi.ValueType, multiple bool) (tpRes *schema.TypeProperty, dv *value.Multiple, err error) { + switch t { + case integrationapi.ValueTypeText: + tpRes = schema.NewText(nil).TypeProperty() + case integrationapi.ValueTypeTextArea: + tpRes = schema.NewTextArea(nil).TypeProperty() + case integrationapi.ValueTypeRichText: + tpRes = schema.NewRichText(nil).TypeProperty() + case integrationapi.ValueTypeMarkdown: + tpRes = schema.NewMarkdown(nil).TypeProperty() + case integrationapi.ValueTypeAsset: + tpRes = schema.NewAsset().TypeProperty() + case integrationapi.ValueTypeDate: + tpRes = schema.NewDateTime().TypeProperty() + case integrationapi.ValueTypeBool: + tpRes = schema.NewBool().TypeProperty() + case integrationapi.ValueTypeCheckbox: + tpRes = schema.NewCheckbox().TypeProperty() + case integrationapi.ValueTypeSelect: + // TODO: Select values + res := schema.NewSelect(nil) + tpRes = res.TypeProperty() + case integrationapi.ValueTypeTag: + // TODO: Tag values + res, err := schema.NewFieldTag(nil) + if err != nil { + return nil, nil, err + } + tpRes = res.TypeProperty() + case integrationapi.ValueTypeInteger: + tpi, _ := schema.NewInteger(nil, nil) + tpRes = tpi.TypeProperty() + case integrationapi.ValueTypeReference: + if multiple { + return nil, nil, ErrMultipleReference + } + return nil, nil, ErrNotImplemented + case integrationapi.ValueTypeGroup: + return nil, nil, ErrNotImplemented + case integrationapi.ValueTypeUrl: + tpRes = schema.NewURL().TypeProperty() + default: + return nil, nil, ErrInvalidTypeProperty + } + return +} diff --git a/server/internal/adapter/integration/server.gen.go b/server/internal/adapter/integration/server.gen.go index 2a12aa1f42..9388594246 100644 --- a/server/internal/adapter/integration/server.gen.go +++ b/server/internal/adapter/integration/server.gen.go @@ -65,21 +65,57 @@ type ServerInterface interface { // Update Item Comment // (PATCH /items/{itemId}/comments/{commentId}) ItemCommentUpdate(ctx echo.Context, itemId ItemIdParam, commentId CommentIdParam) error + // delete a model + // (DELETE /models/{modelId}) + ModelDelete(ctx echo.Context, modelId ModelIdParam) error // Returns a model. // (GET /models/{modelId}) ModelGet(ctx echo.Context, modelId ModelIdParam) error + // Update a model. + // (PATCH /models/{modelId}) + ModelUpdate(ctx echo.Context, modelId ModelIdParam) error + // create a field + // (POST /models/{modelId}/fields) + FieldCreate(ctx echo.Context, modelId ModelIdParam) error + // delete a field + // (DELETE /models/{modelId}/fields/{fieldIdOrKey}) + FieldDelete(ctx echo.Context, modelId ModelIdParam, fieldIdOrKey FieldIdOrKeyParam) error + // update a field + // (PATCH /models/{modelId}/fields/{fieldIdOrKey}) + FieldUpdate(ctx echo.Context, modelId ModelIdParam, fieldIdOrKey FieldIdOrKeyParam) error // Returns a list of items. // (GET /models/{modelId}/items) ItemFilter(ctx echo.Context, modelId ModelIdParam, params ItemFilterParams) error // create an item // (POST /models/{modelId}/items) ItemCreate(ctx echo.Context, modelId ModelIdParam) error + // Returns a list of projects. + // (GET /projects) + ProjectFilter(ctx echo.Context) error // Returns a models. // (GET /projects/{projectIdOrAlias}/models) ModelFilter(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, params ModelFilterParams) error + // create a model + // (POST /projects/{projectIdOrAlias}/models) + ModelCreate(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, params ModelCreateParams) error + // Delete a model. + // (DELETE /projects/{projectIdOrAlias}/models/{modelIdOrKey}) + ModelDeleteWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam) error // Returns a model. // (GET /projects/{projectIdOrAlias}/models/{modelIdOrKey}) ModelGetWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam) error + // Update a model. + // (PATCH /projects/{projectIdOrAlias}/models/{modelIdOrKey}) + ModelUpdateWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam) error + // create a field + // (POST /projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields) + FieldCreateWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam) error + // Delete a field. + // (DELETE /projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{fieldIdOrKey}) + FieldDeleteWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam, fieldIdOrKey FieldIdOrKeyParam) error + // update a field + // (PATCH /projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{fieldIdOrKey}) + FieldUpdateWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam, fieldIdOrKey FieldIdOrKeyParam) error // Returns a list of items. // (GET /projects/{projectIdOrAlias}/models/{modelIdOrKey}/items) ItemFilterWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam, params ItemFilterWithProjectParams) error @@ -380,6 +416,24 @@ func (w *ServerInterfaceWrapper) ItemCommentUpdate(ctx echo.Context) error { return err } +// ModelDelete converts echo context to params. +func (w *ServerInterfaceWrapper) ModelDelete(ctx echo.Context) error { + var err error + // ------------- Path parameter "modelId" ------------- + var modelId ModelIdParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelId", ctx.Param("modelId"), &modelId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelId: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.ModelDelete(ctx, modelId) + return err +} + // ModelGet converts echo context to params. func (w *ServerInterfaceWrapper) ModelGet(ctx echo.Context) error { var err error @@ -398,6 +452,94 @@ func (w *ServerInterfaceWrapper) ModelGet(ctx echo.Context) error { return err } +// ModelUpdate converts echo context to params. +func (w *ServerInterfaceWrapper) ModelUpdate(ctx echo.Context) error { + var err error + // ------------- Path parameter "modelId" ------------- + var modelId ModelIdParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelId", ctx.Param("modelId"), &modelId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelId: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.ModelUpdate(ctx, modelId) + return err +} + +// FieldCreate converts echo context to params. +func (w *ServerInterfaceWrapper) FieldCreate(ctx echo.Context) error { + var err error + // ------------- Path parameter "modelId" ------------- + var modelId ModelIdParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelId", ctx.Param("modelId"), &modelId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelId: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.FieldCreate(ctx, modelId) + return err +} + +// FieldDelete converts echo context to params. +func (w *ServerInterfaceWrapper) FieldDelete(ctx echo.Context) error { + var err error + // ------------- Path parameter "modelId" ------------- + var modelId ModelIdParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelId", ctx.Param("modelId"), &modelId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelId: %s", err)) + } + + // ------------- Path parameter "fieldIdOrKey" ------------- + var fieldIdOrKey FieldIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "fieldIdOrKey", ctx.Param("fieldIdOrKey"), &fieldIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fieldIdOrKey: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.FieldDelete(ctx, modelId, fieldIdOrKey) + return err +} + +// FieldUpdate converts echo context to params. +func (w *ServerInterfaceWrapper) FieldUpdate(ctx echo.Context) error { + var err error + // ------------- Path parameter "modelId" ------------- + var modelId ModelIdParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelId", ctx.Param("modelId"), &modelId, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelId: %s", err)) + } + + // ------------- Path parameter "fieldIdOrKey" ------------- + var fieldIdOrKey FieldIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "fieldIdOrKey", ctx.Param("fieldIdOrKey"), &fieldIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fieldIdOrKey: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.FieldUpdate(ctx, modelId, fieldIdOrKey) + return err +} + // ItemFilter converts echo context to params. func (w *ServerInterfaceWrapper) ItemFilter(ctx echo.Context) error { var err error @@ -478,6 +620,17 @@ func (w *ServerInterfaceWrapper) ItemCreate(ctx echo.Context) error { return err } +// ProjectFilter converts echo context to params. +func (w *ServerInterfaceWrapper) ProjectFilter(ctx echo.Context) error { + var err error + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.ProjectFilter(ctx) + return err +} + // ModelFilter converts echo context to params. func (w *ServerInterfaceWrapper) ModelFilter(ctx echo.Context) error { var err error @@ -512,6 +665,66 @@ func (w *ServerInterfaceWrapper) ModelFilter(ctx echo.Context) error { return err } +// ModelCreate converts echo context to params. +func (w *ServerInterfaceWrapper) ModelCreate(ctx echo.Context) error { + var err error + // ------------- Path parameter "projectIdOrAlias" ------------- + var projectIdOrAlias ProjectIdOrAliasParam + + err = runtime.BindStyledParameterWithOptions("simple", "projectIdOrAlias", ctx.Param("projectIdOrAlias"), &projectIdOrAlias, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter projectIdOrAlias: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Parameter object where we will unmarshal all parameters from the context + var params ModelCreateParams + // ------------- Optional query parameter "page" ------------- + + err = runtime.BindQueryParameter("form", true, false, "page", ctx.QueryParams(), ¶ms.Page) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter page: %s", err)) + } + + // ------------- Optional query parameter "perPage" ------------- + + err = runtime.BindQueryParameter("form", true, false, "perPage", ctx.QueryParams(), ¶ms.PerPage) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter perPage: %s", err)) + } + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.ModelCreate(ctx, projectIdOrAlias, params) + return err +} + +// ModelDeleteWithProject converts echo context to params. +func (w *ServerInterfaceWrapper) ModelDeleteWithProject(ctx echo.Context) error { + var err error + // ------------- Path parameter "projectIdOrAlias" ------------- + var projectIdOrAlias ProjectIdOrAliasParam + + err = runtime.BindStyledParameterWithOptions("simple", "projectIdOrAlias", ctx.Param("projectIdOrAlias"), &projectIdOrAlias, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter projectIdOrAlias: %s", err)) + } + + // ------------- Path parameter "modelIdOrKey" ------------- + var modelIdOrKey ModelIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelIdOrKey", ctx.Param("modelIdOrKey"), &modelIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelIdOrKey: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.ModelDeleteWithProject(ctx, projectIdOrAlias, modelIdOrKey) + return err +} + // ModelGetWithProject converts echo context to params. func (w *ServerInterfaceWrapper) ModelGetWithProject(ctx echo.Context) error { var err error @@ -538,6 +751,126 @@ func (w *ServerInterfaceWrapper) ModelGetWithProject(ctx echo.Context) error { return err } +// ModelUpdateWithProject converts echo context to params. +func (w *ServerInterfaceWrapper) ModelUpdateWithProject(ctx echo.Context) error { + var err error + // ------------- Path parameter "projectIdOrAlias" ------------- + var projectIdOrAlias ProjectIdOrAliasParam + + err = runtime.BindStyledParameterWithOptions("simple", "projectIdOrAlias", ctx.Param("projectIdOrAlias"), &projectIdOrAlias, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter projectIdOrAlias: %s", err)) + } + + // ------------- Path parameter "modelIdOrKey" ------------- + var modelIdOrKey ModelIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelIdOrKey", ctx.Param("modelIdOrKey"), &modelIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelIdOrKey: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.ModelUpdateWithProject(ctx, projectIdOrAlias, modelIdOrKey) + return err +} + +// FieldCreateWithProject converts echo context to params. +func (w *ServerInterfaceWrapper) FieldCreateWithProject(ctx echo.Context) error { + var err error + // ------------- Path parameter "projectIdOrAlias" ------------- + var projectIdOrAlias ProjectIdOrAliasParam + + err = runtime.BindStyledParameterWithOptions("simple", "projectIdOrAlias", ctx.Param("projectIdOrAlias"), &projectIdOrAlias, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter projectIdOrAlias: %s", err)) + } + + // ------------- Path parameter "modelIdOrKey" ------------- + var modelIdOrKey ModelIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelIdOrKey", ctx.Param("modelIdOrKey"), &modelIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelIdOrKey: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.FieldCreateWithProject(ctx, projectIdOrAlias, modelIdOrKey) + return err +} + +// FieldDeleteWithProject converts echo context to params. +func (w *ServerInterfaceWrapper) FieldDeleteWithProject(ctx echo.Context) error { + var err error + // ------------- Path parameter "projectIdOrAlias" ------------- + var projectIdOrAlias ProjectIdOrAliasParam + + err = runtime.BindStyledParameterWithOptions("simple", "projectIdOrAlias", ctx.Param("projectIdOrAlias"), &projectIdOrAlias, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter projectIdOrAlias: %s", err)) + } + + // ------------- Path parameter "modelIdOrKey" ------------- + var modelIdOrKey ModelIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelIdOrKey", ctx.Param("modelIdOrKey"), &modelIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelIdOrKey: %s", err)) + } + + // ------------- Path parameter "fieldIdOrKey" ------------- + var fieldIdOrKey FieldIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "fieldIdOrKey", ctx.Param("fieldIdOrKey"), &fieldIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fieldIdOrKey: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.FieldDeleteWithProject(ctx, projectIdOrAlias, modelIdOrKey, fieldIdOrKey) + return err +} + +// FieldUpdateWithProject converts echo context to params. +func (w *ServerInterfaceWrapper) FieldUpdateWithProject(ctx echo.Context) error { + var err error + // ------------- Path parameter "projectIdOrAlias" ------------- + var projectIdOrAlias ProjectIdOrAliasParam + + err = runtime.BindStyledParameterWithOptions("simple", "projectIdOrAlias", ctx.Param("projectIdOrAlias"), &projectIdOrAlias, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter projectIdOrAlias: %s", err)) + } + + // ------------- Path parameter "modelIdOrKey" ------------- + var modelIdOrKey ModelIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "modelIdOrKey", ctx.Param("modelIdOrKey"), &modelIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter modelIdOrKey: %s", err)) + } + + // ------------- Path parameter "fieldIdOrKey" ------------- + var fieldIdOrKey FieldIdOrKeyParam + + err = runtime.BindStyledParameterWithOptions("simple", "fieldIdOrKey", ctx.Param("fieldIdOrKey"), &fieldIdOrKey, runtime.BindStyledParameterOptions{ParamLocation: runtime.ParamLocationPath, Explode: false, Required: true}) + if err != nil { + return echo.NewHTTPError(http.StatusBadRequest, fmt.Sprintf("Invalid format for parameter fieldIdOrKey: %s", err)) + } + + ctx.Set(BearerAuthScopes, []string{}) + + // Invoke the callback with all the unmarshaled arguments + err = w.Handler.FieldUpdateWithProject(ctx, projectIdOrAlias, modelIdOrKey, fieldIdOrKey) + return err +} + // ItemFilterWithProject converts echo context to params. func (w *ServerInterfaceWrapper) ItemFilterWithProject(ctx echo.Context) error { var err error @@ -759,11 +1092,23 @@ func RegisterHandlersWithBaseURL(router EchoRouter, si ServerInterface, baseURL router.POST(baseURL+"/items/:itemId/comments", wrapper.ItemCommentCreate) router.DELETE(baseURL+"/items/:itemId/comments/:commentId", wrapper.ItemCommentDelete) router.PATCH(baseURL+"/items/:itemId/comments/:commentId", wrapper.ItemCommentUpdate) + router.DELETE(baseURL+"/models/:modelId", wrapper.ModelDelete) router.GET(baseURL+"/models/:modelId", wrapper.ModelGet) + router.PATCH(baseURL+"/models/:modelId", wrapper.ModelUpdate) + router.POST(baseURL+"/models/:modelId/fields", wrapper.FieldCreate) + router.DELETE(baseURL+"/models/:modelId/fields/:fieldIdOrKey", wrapper.FieldDelete) + router.PATCH(baseURL+"/models/:modelId/fields/:fieldIdOrKey", wrapper.FieldUpdate) router.GET(baseURL+"/models/:modelId/items", wrapper.ItemFilter) router.POST(baseURL+"/models/:modelId/items", wrapper.ItemCreate) + router.GET(baseURL+"/projects", wrapper.ProjectFilter) router.GET(baseURL+"/projects/:projectIdOrAlias/models", wrapper.ModelFilter) + router.POST(baseURL+"/projects/:projectIdOrAlias/models", wrapper.ModelCreate) + router.DELETE(baseURL+"/projects/:projectIdOrAlias/models/:modelIdOrKey", wrapper.ModelDeleteWithProject) router.GET(baseURL+"/projects/:projectIdOrAlias/models/:modelIdOrKey", wrapper.ModelGetWithProject) + router.PATCH(baseURL+"/projects/:projectIdOrAlias/models/:modelIdOrKey", wrapper.ModelUpdateWithProject) + router.POST(baseURL+"/projects/:projectIdOrAlias/models/:modelIdOrKey/fields", wrapper.FieldCreateWithProject) + router.DELETE(baseURL+"/projects/:projectIdOrAlias/models/:modelIdOrKey/fields/:fieldIdOrKey", wrapper.FieldDeleteWithProject) + router.PATCH(baseURL+"/projects/:projectIdOrAlias/models/:modelIdOrKey/fields/:fieldIdOrKey", wrapper.FieldUpdateWithProject) router.GET(baseURL+"/projects/:projectIdOrAlias/models/:modelIdOrKey/items", wrapper.ItemFilterWithProject) router.POST(baseURL+"/projects/:projectIdOrAlias/models/:modelIdOrKey/items", wrapper.ItemCreateWithProject) router.GET(baseURL+"/projects/:projectId/assets", wrapper.AssetFilter) @@ -1333,40 +1678,74 @@ func (response ItemCommentUpdate404Response) VisitItemCommentUpdateResponse(w ht return nil } -type ModelGetRequestObject struct { +type ModelDeleteRequestObject struct { ModelId ModelIdParam `json:"modelId"` } -type ModelGetResponseObject interface { - VisitModelGetResponse(w http.ResponseWriter) error +type ModelDeleteResponseObject interface { + VisitModelDeleteResponse(w http.ResponseWriter) error } -type ModelGet200JSONResponse Model +type ModelDelete200JSONResponse struct { + Id *id.ModelID `json:"id,omitempty"` +} -func (response ModelGet200JSONResponse) VisitModelGetResponse(w http.ResponseWriter) error { +func (response ModelDelete200JSONResponse) VisitModelDeleteResponse(w http.ResponseWriter) error { w.Header().Set("Content-Type", "application/json") w.WriteHeader(200) return json.NewEncoder(w).Encode(response) } -type ModelGet400Response struct { +type ModelDelete400Response struct { } -func (response ModelGet400Response) VisitModelGetResponse(w http.ResponseWriter) error { +func (response ModelDelete400Response) VisitModelDeleteResponse(w http.ResponseWriter) error { w.WriteHeader(400) return nil } -type ModelGet401Response = UnauthorizedErrorResponse +type ModelDelete401Response = UnauthorizedErrorResponse -func (response ModelGet401Response) VisitModelGetResponse(w http.ResponseWriter) error { +func (response ModelDelete401Response) VisitModelDeleteResponse(w http.ResponseWriter) error { w.WriteHeader(401) return nil } -type ModelGet404Response struct { -} +type ModelGetRequestObject struct { + ModelId ModelIdParam `json:"modelId"` +} + +type ModelGetResponseObject interface { + VisitModelGetResponse(w http.ResponseWriter) error +} + +type ModelGet200JSONResponse Model + +func (response ModelGet200JSONResponse) VisitModelGetResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type ModelGet400Response struct { +} + +func (response ModelGet400Response) VisitModelGetResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type ModelGet401Response = UnauthorizedErrorResponse + +func (response ModelGet401Response) VisitModelGetResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type ModelGet404Response struct { +} func (response ModelGet404Response) VisitModelGetResponse(w http.ResponseWriter) error { w.WriteHeader(404) @@ -1381,6 +1760,141 @@ func (response ModelGet500Response) VisitModelGetResponse(w http.ResponseWriter) return nil } +type ModelUpdateRequestObject struct { + ModelId ModelIdParam `json:"modelId"` + Body *ModelUpdateJSONRequestBody +} + +type ModelUpdateResponseObject interface { + VisitModelUpdateResponse(w http.ResponseWriter) error +} + +type ModelUpdate200JSONResponse Model + +func (response ModelUpdate200JSONResponse) VisitModelUpdateResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type ModelUpdate400Response struct { +} + +func (response ModelUpdate400Response) VisitModelUpdateResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type ModelUpdate401Response = UnauthorizedErrorResponse + +func (response ModelUpdate401Response) VisitModelUpdateResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type FieldCreateRequestObject struct { + ModelId ModelIdParam `json:"modelId"` + Body *FieldCreateJSONRequestBody +} + +type FieldCreateResponseObject interface { + VisitFieldCreateResponse(w http.ResponseWriter) error +} + +type FieldCreate200JSONResponse SchemaField + +func (response FieldCreate200JSONResponse) VisitFieldCreateResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type FieldCreate400Response struct { +} + +func (response FieldCreate400Response) VisitFieldCreateResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type FieldCreate401Response = UnauthorizedErrorResponse + +func (response FieldCreate401Response) VisitFieldCreateResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type FieldDeleteRequestObject struct { + ModelId ModelIdParam `json:"modelId"` + FieldIdOrKey FieldIdOrKeyParam `json:"fieldIdOrKey"` +} + +type FieldDeleteResponseObject interface { + VisitFieldDeleteResponse(w http.ResponseWriter) error +} + +type FieldDelete200JSONResponse struct { + Id *id.FieldID `json:"id,omitempty"` +} + +func (response FieldDelete200JSONResponse) VisitFieldDeleteResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type FieldDelete400Response struct { +} + +func (response FieldDelete400Response) VisitFieldDeleteResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type FieldDelete401Response = UnauthorizedErrorResponse + +func (response FieldDelete401Response) VisitFieldDeleteResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type FieldUpdateRequestObject struct { + ModelId ModelIdParam `json:"modelId"` + FieldIdOrKey FieldIdOrKeyParam `json:"fieldIdOrKey"` + Body *FieldUpdateJSONRequestBody +} + +type FieldUpdateResponseObject interface { + VisitFieldUpdateResponse(w http.ResponseWriter) error +} + +type FieldUpdate200JSONResponse SchemaField + +func (response FieldUpdate200JSONResponse) VisitFieldUpdateResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type FieldUpdate400Response struct { +} + +func (response FieldUpdate400Response) VisitFieldUpdateResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type FieldUpdate401Response = UnauthorizedErrorResponse + +func (response FieldUpdate401Response) VisitFieldUpdateResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + type ItemFilterRequestObject struct { ModelId ModelIdParam `json:"modelId"` Params ItemFilterParams @@ -1468,6 +1982,50 @@ func (response ItemCreate401Response) VisitItemCreateResponse(w http.ResponseWri return nil } +type ProjectFilterRequestObject struct { +} + +type ProjectFilterResponseObject interface { + VisitProjectFilterResponse(w http.ResponseWriter) error +} + +type ProjectFilter200JSONResponse struct { + Page *int `json:"page,omitempty"` + PerPage *int `json:"perPage,omitempty"` + Projects *[]Project `json:"projects,omitempty"` + TotalCount *int `json:"totalCount,omitempty"` +} + +func (response ProjectFilter200JSONResponse) VisitProjectFilterResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type ProjectFilter400Response struct { +} + +func (response ProjectFilter400Response) VisitProjectFilterResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type ProjectFilter401Response = UnauthorizedErrorResponse + +func (response ProjectFilter401Response) VisitProjectFilterResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type ProjectFilter500Response struct { +} + +func (response ProjectFilter500Response) VisitProjectFilterResponse(w http.ResponseWriter) error { + w.WriteHeader(500) + return nil +} + type ModelFilterRequestObject struct { ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` Params ModelFilterParams @@ -1522,6 +2080,91 @@ func (response ModelFilter500Response) VisitModelFilterResponse(w http.ResponseW return nil } +type ModelCreateRequestObject struct { + ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` + Params ModelCreateParams + Body *ModelCreateJSONRequestBody +} + +type ModelCreateResponseObject interface { + VisitModelCreateResponse(w http.ResponseWriter) error +} + +type ModelCreate200JSONResponse Model + +func (response ModelCreate200JSONResponse) VisitModelCreateResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type ModelCreate400Response struct { +} + +func (response ModelCreate400Response) VisitModelCreateResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type ModelCreate401Response = UnauthorizedErrorResponse + +func (response ModelCreate401Response) VisitModelCreateResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type ModelDeleteWithProjectRequestObject struct { + ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` + ModelIdOrKey ModelIdOrKeyParam `json:"modelIdOrKey"` +} + +type ModelDeleteWithProjectResponseObject interface { + VisitModelDeleteWithProjectResponse(w http.ResponseWriter) error +} + +type ModelDeleteWithProject200JSONResponse struct { + Id *id.ModelID `json:"id,omitempty"` +} + +func (response ModelDeleteWithProject200JSONResponse) VisitModelDeleteWithProjectResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type ModelDeleteWithProject400Response struct { +} + +func (response ModelDeleteWithProject400Response) VisitModelDeleteWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type ModelDeleteWithProject401Response = UnauthorizedErrorResponse + +func (response ModelDeleteWithProject401Response) VisitModelDeleteWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type ModelDeleteWithProject404Response struct { +} + +func (response ModelDeleteWithProject404Response) VisitModelDeleteWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(404) + return nil +} + +type ModelDeleteWithProject500Response struct { +} + +func (response ModelDeleteWithProject500Response) VisitModelDeleteWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(500) + return nil +} + type ModelGetWithProjectRequestObject struct { ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` ModelIdOrKey ModelIdOrKeyParam `json:"modelIdOrKey"` @@ -1571,6 +2214,177 @@ func (response ModelGetWithProject500Response) VisitModelGetWithProjectResponse( return nil } +type ModelUpdateWithProjectRequestObject struct { + ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` + ModelIdOrKey ModelIdOrKeyParam `json:"modelIdOrKey"` + Body *ModelUpdateWithProjectJSONRequestBody +} + +type ModelUpdateWithProjectResponseObject interface { + VisitModelUpdateWithProjectResponse(w http.ResponseWriter) error +} + +type ModelUpdateWithProject200JSONResponse Model + +func (response ModelUpdateWithProject200JSONResponse) VisitModelUpdateWithProjectResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type ModelUpdateWithProject400Response struct { +} + +func (response ModelUpdateWithProject400Response) VisitModelUpdateWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type ModelUpdateWithProject401Response = UnauthorizedErrorResponse + +func (response ModelUpdateWithProject401Response) VisitModelUpdateWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type ModelUpdateWithProject404Response struct { +} + +func (response ModelUpdateWithProject404Response) VisitModelUpdateWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(404) + return nil +} + +type ModelUpdateWithProject500Response struct { +} + +func (response ModelUpdateWithProject500Response) VisitModelUpdateWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(500) + return nil +} + +type FieldCreateWithProjectRequestObject struct { + ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` + ModelIdOrKey ModelIdOrKeyParam `json:"modelIdOrKey"` + Body *FieldCreateWithProjectJSONRequestBody +} + +type FieldCreateWithProjectResponseObject interface { + VisitFieldCreateWithProjectResponse(w http.ResponseWriter) error +} + +type FieldCreateWithProject200JSONResponse SchemaField + +func (response FieldCreateWithProject200JSONResponse) VisitFieldCreateWithProjectResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type FieldCreateWithProject400Response struct { +} + +func (response FieldCreateWithProject400Response) VisitFieldCreateWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type FieldCreateWithProject401Response = UnauthorizedErrorResponse + +func (response FieldCreateWithProject401Response) VisitFieldCreateWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type FieldDeleteWithProjectRequestObject struct { + ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` + ModelIdOrKey ModelIdOrKeyParam `json:"modelIdOrKey"` + FieldIdOrKey FieldIdOrKeyParam `json:"fieldIdOrKey"` +} + +type FieldDeleteWithProjectResponseObject interface { + VisitFieldDeleteWithProjectResponse(w http.ResponseWriter) error +} + +type FieldDeleteWithProject200JSONResponse struct { + Id *id.FieldID `json:"id,omitempty"` +} + +func (response FieldDeleteWithProject200JSONResponse) VisitFieldDeleteWithProjectResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type FieldDeleteWithProject400Response struct { +} + +func (response FieldDeleteWithProject400Response) VisitFieldDeleteWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type FieldDeleteWithProject401Response = UnauthorizedErrorResponse + +func (response FieldDeleteWithProject401Response) VisitFieldDeleteWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + +type FieldDeleteWithProject404Response struct { +} + +func (response FieldDeleteWithProject404Response) VisitFieldDeleteWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(404) + return nil +} + +type FieldDeleteWithProject500Response struct { +} + +func (response FieldDeleteWithProject500Response) VisitFieldDeleteWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(500) + return nil +} + +type FieldUpdateWithProjectRequestObject struct { + ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` + ModelIdOrKey ModelIdOrKeyParam `json:"modelIdOrKey"` + FieldIdOrKey FieldIdOrKeyParam `json:"fieldIdOrKey"` + Body *FieldUpdateWithProjectJSONRequestBody +} + +type FieldUpdateWithProjectResponseObject interface { + VisitFieldUpdateWithProjectResponse(w http.ResponseWriter) error +} + +type FieldUpdateWithProject200JSONResponse SchemaField + +func (response FieldUpdateWithProject200JSONResponse) VisitFieldUpdateWithProjectResponse(w http.ResponseWriter) error { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(200) + + return json.NewEncoder(w).Encode(response) +} + +type FieldUpdateWithProject400Response struct { +} + +func (response FieldUpdateWithProject400Response) VisitFieldUpdateWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(400) + return nil +} + +type FieldUpdateWithProject401Response = UnauthorizedErrorResponse + +func (response FieldUpdateWithProject401Response) VisitFieldUpdateWithProjectResponse(w http.ResponseWriter) error { + w.WriteHeader(401) + return nil +} + type ItemFilterWithProjectRequestObject struct { ProjectIdOrAlias ProjectIdOrAliasParam `json:"projectIdOrAlias"` ModelIdOrKey ModelIdOrKeyParam `json:"modelIdOrKey"` @@ -1836,21 +2650,57 @@ type StrictServerInterface interface { // Update Item Comment // (PATCH /items/{itemId}/comments/{commentId}) ItemCommentUpdate(ctx context.Context, request ItemCommentUpdateRequestObject) (ItemCommentUpdateResponseObject, error) + // delete a model + // (DELETE /models/{modelId}) + ModelDelete(ctx context.Context, request ModelDeleteRequestObject) (ModelDeleteResponseObject, error) // Returns a model. // (GET /models/{modelId}) ModelGet(ctx context.Context, request ModelGetRequestObject) (ModelGetResponseObject, error) + // Update a model. + // (PATCH /models/{modelId}) + ModelUpdate(ctx context.Context, request ModelUpdateRequestObject) (ModelUpdateResponseObject, error) + // create a field + // (POST /models/{modelId}/fields) + FieldCreate(ctx context.Context, request FieldCreateRequestObject) (FieldCreateResponseObject, error) + // delete a field + // (DELETE /models/{modelId}/fields/{fieldIdOrKey}) + FieldDelete(ctx context.Context, request FieldDeleteRequestObject) (FieldDeleteResponseObject, error) + // update a field + // (PATCH /models/{modelId}/fields/{fieldIdOrKey}) + FieldUpdate(ctx context.Context, request FieldUpdateRequestObject) (FieldUpdateResponseObject, error) // Returns a list of items. // (GET /models/{modelId}/items) ItemFilter(ctx context.Context, request ItemFilterRequestObject) (ItemFilterResponseObject, error) // create an item // (POST /models/{modelId}/items) ItemCreate(ctx context.Context, request ItemCreateRequestObject) (ItemCreateResponseObject, error) + // Returns a list of projects. + // (GET /projects) + ProjectFilter(ctx context.Context, request ProjectFilterRequestObject) (ProjectFilterResponseObject, error) // Returns a models. // (GET /projects/{projectIdOrAlias}/models) ModelFilter(ctx context.Context, request ModelFilterRequestObject) (ModelFilterResponseObject, error) + // create a model + // (POST /projects/{projectIdOrAlias}/models) + ModelCreate(ctx context.Context, request ModelCreateRequestObject) (ModelCreateResponseObject, error) + // Delete a model. + // (DELETE /projects/{projectIdOrAlias}/models/{modelIdOrKey}) + ModelDeleteWithProject(ctx context.Context, request ModelDeleteWithProjectRequestObject) (ModelDeleteWithProjectResponseObject, error) // Returns a model. // (GET /projects/{projectIdOrAlias}/models/{modelIdOrKey}) ModelGetWithProject(ctx context.Context, request ModelGetWithProjectRequestObject) (ModelGetWithProjectResponseObject, error) + // Update a model. + // (PATCH /projects/{projectIdOrAlias}/models/{modelIdOrKey}) + ModelUpdateWithProject(ctx context.Context, request ModelUpdateWithProjectRequestObject) (ModelUpdateWithProjectResponseObject, error) + // create a field + // (POST /projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields) + FieldCreateWithProject(ctx context.Context, request FieldCreateWithProjectRequestObject) (FieldCreateWithProjectResponseObject, error) + // Delete a field. + // (DELETE /projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{fieldIdOrKey}) + FieldDeleteWithProject(ctx context.Context, request FieldDeleteWithProjectRequestObject) (FieldDeleteWithProjectResponseObject, error) + // update a field + // (PATCH /projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{fieldIdOrKey}) + FieldUpdateWithProject(ctx context.Context, request FieldUpdateWithProjectRequestObject) (FieldUpdateWithProjectResponseObject, error) // Returns a list of items. // (GET /projects/{projectIdOrAlias}/models/{modelIdOrKey}/items) ItemFilterWithProject(ctx context.Context, request ItemFilterWithProjectRequestObject) (ItemFilterWithProjectResponseObject, error) @@ -2240,6 +3090,31 @@ func (sh *strictHandler) ItemCommentUpdate(ctx echo.Context, itemId ItemIdParam, return nil } +// ModelDelete operation middleware +func (sh *strictHandler) ModelDelete(ctx echo.Context, modelId ModelIdParam) error { + var request ModelDeleteRequestObject + + request.ModelId = modelId + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.ModelDelete(ctx.Request().Context(), request.(ModelDeleteRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "ModelDelete") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(ModelDeleteResponseObject); ok { + return validResponse.VisitModelDeleteResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + // ModelGet operation middleware func (sh *strictHandler) ModelGet(ctx echo.Context, modelId ModelIdParam) error { var request ModelGetRequestObject @@ -2265,6 +3140,126 @@ func (sh *strictHandler) ModelGet(ctx echo.Context, modelId ModelIdParam) error return nil } +// ModelUpdate operation middleware +func (sh *strictHandler) ModelUpdate(ctx echo.Context, modelId ModelIdParam) error { + var request ModelUpdateRequestObject + + request.ModelId = modelId + + var body ModelUpdateJSONRequestBody + if err := ctx.Bind(&body); err != nil { + return err + } + request.Body = &body + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.ModelUpdate(ctx.Request().Context(), request.(ModelUpdateRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "ModelUpdate") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(ModelUpdateResponseObject); ok { + return validResponse.VisitModelUpdateResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + +// FieldCreate operation middleware +func (sh *strictHandler) FieldCreate(ctx echo.Context, modelId ModelIdParam) error { + var request FieldCreateRequestObject + + request.ModelId = modelId + + var body FieldCreateJSONRequestBody + if err := ctx.Bind(&body); err != nil { + return err + } + request.Body = &body + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.FieldCreate(ctx.Request().Context(), request.(FieldCreateRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "FieldCreate") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(FieldCreateResponseObject); ok { + return validResponse.VisitFieldCreateResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + +// FieldDelete operation middleware +func (sh *strictHandler) FieldDelete(ctx echo.Context, modelId ModelIdParam, fieldIdOrKey FieldIdOrKeyParam) error { + var request FieldDeleteRequestObject + + request.ModelId = modelId + request.FieldIdOrKey = fieldIdOrKey + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.FieldDelete(ctx.Request().Context(), request.(FieldDeleteRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "FieldDelete") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(FieldDeleteResponseObject); ok { + return validResponse.VisitFieldDeleteResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + +// FieldUpdate operation middleware +func (sh *strictHandler) FieldUpdate(ctx echo.Context, modelId ModelIdParam, fieldIdOrKey FieldIdOrKeyParam) error { + var request FieldUpdateRequestObject + + request.ModelId = modelId + request.FieldIdOrKey = fieldIdOrKey + + var body FieldUpdateJSONRequestBody + if err := ctx.Bind(&body); err != nil { + return err + } + request.Body = &body + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.FieldUpdate(ctx.Request().Context(), request.(FieldUpdateRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "FieldUpdate") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(FieldUpdateResponseObject); ok { + return validResponse.VisitFieldUpdateResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + // ItemFilter operation middleware func (sh *strictHandler) ItemFilter(ctx echo.Context, modelId ModelIdParam, params ItemFilterParams) error { var request ItemFilterRequestObject @@ -2322,6 +3317,29 @@ func (sh *strictHandler) ItemCreate(ctx echo.Context, modelId ModelIdParam) erro return nil } +// ProjectFilter operation middleware +func (sh *strictHandler) ProjectFilter(ctx echo.Context) error { + var request ProjectFilterRequestObject + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.ProjectFilter(ctx.Request().Context(), request.(ProjectFilterRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "ProjectFilter") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(ProjectFilterResponseObject); ok { + return validResponse.VisitProjectFilterResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + // ModelFilter operation middleware func (sh *strictHandler) ModelFilter(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, params ModelFilterParams) error { var request ModelFilterRequestObject @@ -2348,6 +3366,64 @@ func (sh *strictHandler) ModelFilter(ctx echo.Context, projectIdOrAlias ProjectI return nil } +// ModelCreate operation middleware +func (sh *strictHandler) ModelCreate(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, params ModelCreateParams) error { + var request ModelCreateRequestObject + + request.ProjectIdOrAlias = projectIdOrAlias + request.Params = params + + var body ModelCreateJSONRequestBody + if err := ctx.Bind(&body); err != nil { + return err + } + request.Body = &body + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.ModelCreate(ctx.Request().Context(), request.(ModelCreateRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "ModelCreate") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(ModelCreateResponseObject); ok { + return validResponse.VisitModelCreateResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + +// ModelDeleteWithProject operation middleware +func (sh *strictHandler) ModelDeleteWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam) error { + var request ModelDeleteWithProjectRequestObject + + request.ProjectIdOrAlias = projectIdOrAlias + request.ModelIdOrKey = modelIdOrKey + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.ModelDeleteWithProject(ctx.Request().Context(), request.(ModelDeleteWithProjectRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "ModelDeleteWithProject") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(ModelDeleteWithProjectResponseObject); ok { + return validResponse.VisitModelDeleteWithProjectResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + // ModelGetWithProject operation middleware func (sh *strictHandler) ModelGetWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam) error { var request ModelGetWithProjectRequestObject @@ -2374,6 +3450,130 @@ func (sh *strictHandler) ModelGetWithProject(ctx echo.Context, projectIdOrAlias return nil } +// ModelUpdateWithProject operation middleware +func (sh *strictHandler) ModelUpdateWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam) error { + var request ModelUpdateWithProjectRequestObject + + request.ProjectIdOrAlias = projectIdOrAlias + request.ModelIdOrKey = modelIdOrKey + + var body ModelUpdateWithProjectJSONRequestBody + if err := ctx.Bind(&body); err != nil { + return err + } + request.Body = &body + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.ModelUpdateWithProject(ctx.Request().Context(), request.(ModelUpdateWithProjectRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "ModelUpdateWithProject") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(ModelUpdateWithProjectResponseObject); ok { + return validResponse.VisitModelUpdateWithProjectResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + +// FieldCreateWithProject operation middleware +func (sh *strictHandler) FieldCreateWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam) error { + var request FieldCreateWithProjectRequestObject + + request.ProjectIdOrAlias = projectIdOrAlias + request.ModelIdOrKey = modelIdOrKey + + var body FieldCreateWithProjectJSONRequestBody + if err := ctx.Bind(&body); err != nil { + return err + } + request.Body = &body + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.FieldCreateWithProject(ctx.Request().Context(), request.(FieldCreateWithProjectRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "FieldCreateWithProject") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(FieldCreateWithProjectResponseObject); ok { + return validResponse.VisitFieldCreateWithProjectResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + +// FieldDeleteWithProject operation middleware +func (sh *strictHandler) FieldDeleteWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam, fieldIdOrKey FieldIdOrKeyParam) error { + var request FieldDeleteWithProjectRequestObject + + request.ProjectIdOrAlias = projectIdOrAlias + request.ModelIdOrKey = modelIdOrKey + request.FieldIdOrKey = fieldIdOrKey + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.FieldDeleteWithProject(ctx.Request().Context(), request.(FieldDeleteWithProjectRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "FieldDeleteWithProject") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(FieldDeleteWithProjectResponseObject); ok { + return validResponse.VisitFieldDeleteWithProjectResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + +// FieldUpdateWithProject operation middleware +func (sh *strictHandler) FieldUpdateWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam, fieldIdOrKey FieldIdOrKeyParam) error { + var request FieldUpdateWithProjectRequestObject + + request.ProjectIdOrAlias = projectIdOrAlias + request.ModelIdOrKey = modelIdOrKey + request.FieldIdOrKey = fieldIdOrKey + + var body FieldUpdateWithProjectJSONRequestBody + if err := ctx.Bind(&body); err != nil { + return err + } + request.Body = &body + + handler := func(ctx echo.Context, request interface{}) (interface{}, error) { + return sh.ssi.FieldUpdateWithProject(ctx.Request().Context(), request.(FieldUpdateWithProjectRequestObject)) + } + for _, middleware := range sh.middlewares { + handler = middleware(handler, "FieldUpdateWithProject") + } + + response, err := handler(ctx, request) + + if err != nil { + return err + } else if validResponse, ok := response.(FieldUpdateWithProjectResponseObject); ok { + return validResponse.VisitFieldUpdateWithProjectResponse(ctx.Response()) + } else if response != nil { + return fmt.Errorf("unexpected response type: %T", response) + } + return nil +} + // ItemFilterWithProject operation middleware func (sh *strictHandler) ItemFilterWithProject(ctx echo.Context, projectIdOrAlias ProjectIdOrAliasParam, modelIdOrKey ModelIdOrKeyParam, params ItemFilterWithProjectParams) error { var request ItemFilterWithProjectRequestObject @@ -2532,48 +3732,55 @@ func (sh *strictHandler) AssetUploadCreate(ctx echo.Context, projectId ProjectId // Base64 encoded, gzipped, json marshaled Swagger object var swaggerSpec = []string{ - "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", - "AwAA///5t/lldFEAAA==", + "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", + "SLdxAAA=", } // GetSwagger returns the content of the embedded swagger specification file diff --git a/server/pkg/integrationapi/event.go b/server/pkg/integrationapi/event.go index 42eb34ee0b..e1bc6d4d8a 100644 --- a/server/pkg/integrationapi/event.go +++ b/server/pkg/integrationapi/event.go @@ -9,12 +9,12 @@ import ( ) type Event struct { - ID string `json:"eventId"` - Type string `json:"type"` - Timestamp time.Time `json:"timestamp"` - Data any `json:"data"` - Project *Project `json:"project"` - Operator Operator `json:"operator"` + ID string `json:"eventId"` + Type string `json:"type"` + Timestamp time.Time `json:"timestamp"` + Data any `json:"data"` + Project *ProjectIdAlias `json:"project"` + Operator Operator `json:"operator"` } type Operator struct { @@ -33,7 +33,7 @@ type OperatorIntegration struct { type OperatorMachine struct{} -type Project struct { +type ProjectIdAlias struct { ID string `json:"id"` Alias string `json:"alias"` } @@ -52,9 +52,9 @@ func NewEventWith(e *event.Event[any], override any, v string, urlResolver asset return Event{}, err } - var prj *Project + var prj *ProjectIdAlias if p := e.Project(); p != nil { - prj = &Project{ + prj = &ProjectIdAlias{ ID: p.ID, Alias: p.Alias, } diff --git a/server/pkg/integrationapi/project.go b/server/pkg/integrationapi/project.go new file mode 100644 index 0000000000..c338f54ec1 --- /dev/null +++ b/server/pkg/integrationapi/project.go @@ -0,0 +1,17 @@ +package integrationapi + +import ( + "github.com/reearth/reearth-cms/server/pkg/project" + "github.com/samber/lo" +) + +func NewProject(p *project.Project) Project { + return Project{ + Alias: lo.ToPtr(p.Alias()), + CreatedAt: lo.ToPtr(p.CreatedAt()), + Description: lo.ToPtr(p.Description()), + Id: p.ID().Ref(), + Name: lo.ToPtr(p.Name()), + UpdatedAt: lo.ToPtr(p.UpdatedAt()), + } +} diff --git a/server/pkg/integrationapi/types.gen.go b/server/pkg/integrationapi/types.gen.go index 2cfa1d0993..1cd2db380a 100644 --- a/server/pkg/integrationapi/types.gen.go +++ b/server/pkg/integrationapi/types.gen.go @@ -10,6 +10,7 @@ import ( "github.com/reearth/reearth-cms/server/pkg/id" "github.com/reearth/reearth-cms/server/pkg/model" "github.com/reearth/reearth-cms/server/pkg/project" + "github.com/reearth/reearth-cms/server/pkg/schema" ) const ( @@ -226,6 +227,16 @@ type Model struct { UpdatedAt *time.Time `json:"updatedAt,omitempty"` } +// Project defines model for project. +type Project struct { + Alias *string `json:"alias,omitempty"` + CreatedAt *time.Time `json:"createdAt,omitempty"` + Description *string `json:"description,omitempty"` + Id *id.ProjectID `json:"id,omitempty"` + Name *string `json:"name,omitempty"` + UpdatedAt *time.Time `json:"updatedAt,omitempty"` +} + // RefOrVersion defines model for refOrVersion. type RefOrVersion struct { Ref *RefOrVersionRef `json:"ref,omitempty"` @@ -248,6 +259,7 @@ type Schema struct { type SchemaField struct { Id *id.FieldID `json:"id,omitempty"` Key *string `json:"key,omitempty"` + Multiple *bool `json:"multiple,omitempty"` Required *bool `json:"required,omitempty"` Type *ValueType `json:"type,omitempty"` } @@ -293,6 +305,12 @@ type AssetParam = AssetEmbedding // CommentIdParam defines model for commentIdParam. type CommentIdParam = id.CommentID +// FieldIdOrKeyParam defines model for fieldIdOrKeyParam. +type FieldIdOrKeyParam = schema.FieldIDOrKey + +// FieldIdParam defines model for fieldIdParam. +type FieldIdParam = id.FieldID + // ItemIdParam defines model for itemIdParam. type ItemIdParam = id.ItemID @@ -362,6 +380,29 @@ type ItemCommentUpdateJSONBody struct { Content *string `json:"content,omitempty"` } +// ModelUpdateJSONBody defines parameters for ModelUpdate. +type ModelUpdateJSONBody struct { + Description *string `json:"description,omitempty"` + Key *string `json:"key,omitempty"` + Name *string `json:"name,omitempty"` +} + +// FieldCreateJSONBody defines parameters for FieldCreate. +type FieldCreateJSONBody struct { + Key *string `json:"key,omitempty"` + Multiple *bool `json:"multiple,omitempty"` + Required *bool `json:"required,omitempty"` + Type *ValueType `json:"type,omitempty"` +} + +// FieldUpdateJSONBody defines parameters for FieldUpdate. +type FieldUpdateJSONBody struct { + Key *string `json:"key,omitempty"` + Multiple *bool `json:"multiple,omitempty"` + Required *bool `json:"required,omitempty"` + Type *ValueType `json:"type,omitempty"` +} + // ItemFilterParams defines parameters for ItemFilter. type ItemFilterParams struct { // Sort Used to define the order of the response list @@ -407,6 +448,45 @@ type ModelFilterParams struct { PerPage *PerPageParam `form:"perPage,omitempty" json:"perPage,omitempty"` } +// ModelCreateJSONBody defines parameters for ModelCreate. +type ModelCreateJSONBody struct { + Description *string `json:"description,omitempty"` + Key *string `json:"key,omitempty"` + Name *string `json:"name,omitempty"` +} + +// ModelCreateParams defines parameters for ModelCreate. +type ModelCreateParams struct { + // Page Used to select the page + Page *PageParam `form:"page,omitempty" json:"page,omitempty"` + + // PerPage Used to select the page + PerPage *PerPageParam `form:"perPage,omitempty" json:"perPage,omitempty"` +} + +// ModelUpdateWithProjectJSONBody defines parameters for ModelUpdateWithProject. +type ModelUpdateWithProjectJSONBody struct { + Description *string `json:"description,omitempty"` + Key *string `json:"key,omitempty"` + Name *string `json:"name,omitempty"` +} + +// FieldCreateWithProjectJSONBody defines parameters for FieldCreateWithProject. +type FieldCreateWithProjectJSONBody struct { + Key *string `json:"key,omitempty"` + Multiple *bool `json:"multiple,omitempty"` + Required *bool `json:"required,omitempty"` + Type *ValueType `json:"type,omitempty"` +} + +// FieldUpdateWithProjectJSONBody defines parameters for FieldUpdateWithProject. +type FieldUpdateWithProjectJSONBody struct { + Key *string `json:"key,omitempty"` + Multiple *bool `json:"multiple,omitempty"` + Required *bool `json:"required,omitempty"` + Type *ValueType `json:"type,omitempty"` +} + // ItemFilterWithProjectParams defines parameters for ItemFilterWithProject. type ItemFilterWithProjectParams struct { // Sort Used to define the order of the response list @@ -499,9 +579,30 @@ type ItemCommentCreateJSONRequestBody ItemCommentCreateJSONBody // ItemCommentUpdateJSONRequestBody defines body for ItemCommentUpdate for application/json ContentType. type ItemCommentUpdateJSONRequestBody ItemCommentUpdateJSONBody +// ModelUpdateJSONRequestBody defines body for ModelUpdate for application/json ContentType. +type ModelUpdateJSONRequestBody ModelUpdateJSONBody + +// FieldCreateJSONRequestBody defines body for FieldCreate for application/json ContentType. +type FieldCreateJSONRequestBody FieldCreateJSONBody + +// FieldUpdateJSONRequestBody defines body for FieldUpdate for application/json ContentType. +type FieldUpdateJSONRequestBody FieldUpdateJSONBody + // ItemCreateJSONRequestBody defines body for ItemCreate for application/json ContentType. type ItemCreateJSONRequestBody ItemCreateJSONBody +// ModelCreateJSONRequestBody defines body for ModelCreate for application/json ContentType. +type ModelCreateJSONRequestBody ModelCreateJSONBody + +// ModelUpdateWithProjectJSONRequestBody defines body for ModelUpdateWithProject for application/json ContentType. +type ModelUpdateWithProjectJSONRequestBody ModelUpdateWithProjectJSONBody + +// FieldCreateWithProjectJSONRequestBody defines body for FieldCreateWithProject for application/json ContentType. +type FieldCreateWithProjectJSONRequestBody FieldCreateWithProjectJSONBody + +// FieldUpdateWithProjectJSONRequestBody defines body for FieldUpdateWithProject for application/json ContentType. +type FieldUpdateWithProjectJSONRequestBody FieldUpdateWithProjectJSONBody + // ItemCreateWithProjectJSONRequestBody defines body for ItemCreateWithProject for application/json ContentType. type ItemCreateWithProjectJSONRequestBody ItemCreateWithProjectJSONBody diff --git a/server/pkg/schema/id.go b/server/pkg/schema/id.go index c6c36b0fef..9a938a1f9a 100644 --- a/server/pkg/schema/id.go +++ b/server/pkg/schema/id.go @@ -32,3 +32,5 @@ var IDFrom = id.SchemaIDFrom var IDListFrom = id.SchemaIDListFrom var IDFromRef = id.SchemaIDFromRef var ErrInvalidID = id.ErrInvalidID + +type FieldIDOrKey string diff --git a/server/schemas/integration.yml b/server/schemas/integration.yml index 0b31018047..ab7383c2f6 100644 --- a/server/schemas/integration.yml +++ b/server/schemas/integration.yml @@ -4,6 +4,42 @@ info: description: ReEarth-CMS Integration API version: 1.0.0 paths: + '/projects': + get: + operationId: ProjectFilter + security: + - bearerAuth: [] + summary: Returns a list of projects. + tags: + - Projects + description: Returns a list of projects + responses: + '200': + description: A JSON array of projects + content: + application/json: + schema: + type: object + properties: + projects: + type: array + items: + $ref: '#/components/schemas/project' + totalCount: + type: integer + minimum: 0 + page: + type: integer + minimum: 1 + perPage: + type: integer + minimum: 1 + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + '500': + description: Internal server error '/projects/{projectIdOrAlias}/models': parameters: - $ref: '#/components/parameters/projectIdOrAliasParam' @@ -46,6 +82,37 @@ paths: description: Not found '500': description: Internal server error + post: + operationId: ModelCreate + summary: create a model + tags: + - Models + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: + type: string + key: + type: string + responses: + '200': + description: A JSON object of model + content: + application/json: + schema: + $ref: '#/components/schemas/model' + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' '/models/{modelId}': parameters: - $ref: '#/components/parameters/modelIdParam' @@ -72,6 +139,155 @@ paths: description: Not found '500': description: Internal server error + patch: + operationId: ModelUpdate + security: + - bearerAuth: [] + summary: Update a model. + tags: + - Models + description: Update a model. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: + type: string + key: + type: string + responses: + '200': + description: A JSON object of model + content: + application/json: + schema: + $ref: '#/components/schemas/model' + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + delete: + operationId: ModelDelete + summary: delete a model + tags: + - Models + security: + - bearerAuth: [] + responses: + '200': + description: delete a model + content: + application/json: + schema: + type: object + properties: + id: + x-go-type: id.ModelID + type: string + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + '/models/{modelId}/fields': + parameters: + - $ref: '#/components/parameters/modelIdParam' + post: + operationId: FieldCreate + summary: create a field + tags: + - Fields + security: + - bearerAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + type: + $ref: '#/components/schemas/valueType' + key: + type: string + required: + type: boolean + multiple: + type: boolean + responses: + '200': + description: A JSON object of field + content: + application/json: + schema: + $ref: '#/components/schemas/schemaField' + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + '/models/{modelId}/fields/{fieldIdOrKey}': + parameters: + - $ref: '#/components/parameters/modelIdParam' + - $ref: '#/components/parameters/fieldIdOrKeyParam' + patch: + operationId: FieldUpdate + summary: update a field + tags: + - Fields + security: + - bearerAuth: [ ] + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + type: + $ref: '#/components/schemas/valueType' + key: + type: string + required: + type: boolean + multiple: + type: boolean + responses: + '200': + description: A JSON object of field + content: + application/json: + schema: + $ref: '#/components/schemas/schemaField' + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + delete: + operationId: FieldDelete + summary: delete a field + tags: + - Fields + security: + - bearerAuth: [ ] + responses: + '200': + description: A JSON object of field + content: + application/json: + schema: + type: object + properties: + id: + x-go-type: id.FieldID + type: string + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' '/models/{modelId}/items': parameters: - $ref: '#/components/parameters/modelIdParam' @@ -179,6 +395,171 @@ paths: description: Not found '500': description: Internal server error + patch: + operationId: ModelUpdateWithProject + security: + - bearerAuth: [ ] + summary: Update a model. + tags: + - Models + description: Update a model. + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + name: + type: string + description: + type: string + key: + type: string + responses: + '200': + description: A JSON object of model + content: + application/json: + schema: + $ref: '#/components/schemas/model' + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + '404': + description: Not found + '500': + description: Internal server error + delete: + operationId: ModelDeleteWithProject + security: + - bearerAuth: [ ] + summary: Delete a model. + tags: + - Models + description: Delete a model. + responses: + '200': + description: The model id + content: + application/json: + schema: + type: object + properties: + id: + x-go-type: id.ModelID + type: string + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + '404': + description: Not found + '500': + description: Internal server error + '/projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields': + parameters: + - $ref: '#/components/parameters/projectIdOrAliasParam' + - $ref: '#/components/parameters/modelIdOrKeyParam' + post: + operationId: FieldCreateWithProject + summary: create a field + tags: + - Fields + security: + - bearerAuth: [ ] + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + type: + $ref: '#/components/schemas/valueType' + key: + type: string + required: + type: boolean + multiple: + type: boolean + responses: + '200': + description: A JSON object of field + content: + application/json: + schema: + $ref: '#/components/schemas/schemaField' + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + '/projects/{projectIdOrAlias}/models/{modelIdOrKey}/fields/{fieldIdOrKey}': + parameters: + - $ref: '#/components/parameters/projectIdOrAliasParam' + - $ref: '#/components/parameters/modelIdOrKeyParam' + - $ref: '#/components/parameters/fieldIdOrKeyParam' + patch: + operationId: FieldUpdateWithProject + summary: update a field + tags: + - Fields + security: + - bearerAuth: [ ] + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + type: + $ref: '#/components/schemas/valueType' + key: + type: string + required: + type: boolean + multiple: + type: boolean + responses: + '200': + description: A JSON object of field + content: + application/json: + schema: + $ref: '#/components/schemas/schemaField' + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + delete: + operationId: FieldDeleteWithProject + security: + - bearerAuth: [ ] + summary: Delete a field. + tags: + - Fields + description: Returns the field id. + responses: + '200': + description: A field id + content: + application/json: + schema: + type: object + properties: + id: + x-go-type: id.FieldID + type: string + '400': + description: Invalid request parameter value + '401': + $ref: '#/components/responses/UnauthorizedError' + '404': + description: Not found + '500': + description: Internal server error '/projects/{projectIdOrAlias}/models/{modelIdOrKey}/items': parameters: - $ref: '#/components/parameters/projectIdOrAliasParam' @@ -778,6 +1159,14 @@ components: schema: type: string x-go-type: id.ModelID + fieldIdParam: + name: fieldId + in: path + description: ID of the field in the models schema + required: true + schema: + type: string + x-go-type: id.FieldID modelIdOrKeyParam: name: modelIdOrKey in: path @@ -786,6 +1175,14 @@ components: schema: type: string x-go-type: model.IDOrKey + fieldIdOrKeyParam: + name: fieldIdOrKey + in: path + description: ID or key of the field in the models schema + required: true + schema: + type: string + x-go-type: schema.FieldIDOrKey itemIdParam: name: itemId in: path @@ -869,6 +1266,24 @@ components: schema: $ref: '#/components/schemas/assetEmbedding' schemas: + project: + type: object + properties: + id: + x-go-type: id.ProjectID + type: string + name: + type: string + description: + type: string + alias: + type: string + createdAt: + type: string + format: date-time + updatedAt: + type: string + format: date-time model: type: object properties: @@ -959,6 +1374,8 @@ components: type: string required: type: boolean + multiple: + type: boolean version: type: object properties: