|
@@ -9,7 +9,10 @@ import (
|
|
|
|
|
|
type (
|
|
type (
|
|
Api struct {
|
|
Api struct {
|
|
- crud *CRUD
|
|
|
|
|
|
+ crud *CRUD
|
|
|
|
+ svr *http.Server
|
|
|
|
+ exists []string
|
|
|
|
+ middleware []http.Middleware
|
|
}
|
|
}
|
|
|
|
|
|
feedRequest struct {
|
|
feedRequest struct {
|
|
@@ -143,6 +146,9 @@ func (api *Api) handleFeed(httpCtx *http.Context) (err error) {
|
|
if err = httpCtx.Bind(req); err != nil {
|
|
if err = httpCtx.Bind(req); err != nil {
|
|
return httpCtx.Error(HttpInvalidPayload, err.Error())
|
|
return httpCtx.Error(HttpInvalidPayload, err.Error())
|
|
}
|
|
}
|
|
|
|
+ if !api.isExists(req.TableName + "@" + req.ModuleName) {
|
|
|
|
+ return httpCtx.Error(HTTPUnknownFailed, fmt.Sprintf("model %s not register", req.TableName))
|
|
|
|
+ }
|
|
result := make([]feedResponse, 0, 10)
|
|
result := make([]feedResponse, 0, 10)
|
|
query := api.crud.db.Table(req.TableName).Select(req.LabelField+" AS label", req.ValueField+" AS value")
|
|
query := api.crud.db.Table(req.TableName).Select(req.LabelField+" AS label", req.ValueField+" AS value")
|
|
if req.Condition != "" {
|
|
if req.Condition != "" {
|
|
@@ -158,31 +164,60 @@ func (api *Api) handleFeed(httpCtx *http.Context) (err error) {
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+func (api *Api) isExists(id string) bool {
|
|
|
|
+ if api.exists == nil {
|
|
|
|
+ return false
|
|
|
|
+ }
|
|
|
|
+ for _, s := range api.exists {
|
|
|
|
+ if s == id {
|
|
|
|
+ return true
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ return false
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+func (api *Api) Attach(rest *Restful, ms ...http.Middleware) {
|
|
|
|
+ if api.svr == nil {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ id := rest.model.TableName() + "@" + rest.model.ModuleName()
|
|
|
|
+ if api.isExists(id) {
|
|
|
|
+ return
|
|
|
|
+ }
|
|
|
|
+ if len(ms) == 0 {
|
|
|
|
+ ms = api.middleware
|
|
|
|
+ }
|
|
|
|
+ if rest.hasScenario(ScenarioList) {
|
|
|
|
+ api.svr.Handle("GET", rest.getScenarioUrl(ScenarioList), rest.getScenarioHandle(ScenarioList), ms...)
|
|
|
|
+ }
|
|
|
|
+ if rest.hasScenario(ScenarioCreate) {
|
|
|
|
+ api.svr.Handle("POST", rest.getScenarioUrl(ScenarioCreate), rest.getScenarioHandle(ScenarioCreate), ms...)
|
|
|
|
+ }
|
|
|
|
+ if rest.hasScenario(ScenarioUpdate) {
|
|
|
|
+ api.svr.Handle("PUT", rest.getScenarioUrl(ScenarioUpdate), rest.getScenarioHandle(ScenarioUpdate), ms...)
|
|
|
|
+ }
|
|
|
|
+ if rest.hasScenario(ScenarioDelete) {
|
|
|
|
+ api.svr.Handle("DELETE", rest.getScenarioUrl(ScenarioDelete), rest.getScenarioHandle(ScenarioDelete), ms...)
|
|
|
|
+ }
|
|
|
|
+ if rest.hasScenario(ScenarioExport) {
|
|
|
|
+ api.svr.Handle("GET", rest.getScenarioUrl(ScenarioExport), rest.getScenarioHandle(ScenarioExport), ms...)
|
|
|
|
+ }
|
|
|
|
+ if rest.hasScenario(ScenarioView) {
|
|
|
|
+ api.svr.Handle("GET", rest.getScenarioUrl(ScenarioView), rest.getScenarioHandle(ScenarioView), ms...)
|
|
|
|
+ }
|
|
|
|
+ api.exists = append(api.exists, id)
|
|
|
|
+}
|
|
|
|
+
|
|
func (api *Api) Router(svr *http.Server, ms ...http.Middleware) {
|
|
func (api *Api) Router(svr *http.Server, ms ...http.Middleware) {
|
|
|
|
+ api.svr = svr
|
|
|
|
+ api.middleware = ms
|
|
svr.Handle("GET", "/rest/schemas", api.handleListSchemas, ms...)
|
|
svr.Handle("GET", "/rest/schemas", api.handleListSchemas, ms...)
|
|
svr.Handle("GET", "/rest/schema/:module/:table", api.handleListSchema, ms...)
|
|
svr.Handle("GET", "/rest/schema/:module/:table", api.handleListSchema, ms...)
|
|
svr.Handle("PUT", "/rest/schema/:module/:table", api.handleSaveSchema, ms...)
|
|
svr.Handle("PUT", "/rest/schema/:module/:table", api.handleSaveSchema, ms...)
|
|
svr.Handle("DELETE", "/rest/schema/:id", api.handleDeleteSchema, ms...)
|
|
svr.Handle("DELETE", "/rest/schema/:id", api.handleDeleteSchema, ms...)
|
|
svr.Handle("POST", "/rest/feed", api.handleFeed, ms...)
|
|
svr.Handle("POST", "/rest/feed", api.handleFeed, ms...)
|
|
-
|
|
|
|
|
|
+ api.exists = make([]string, 0, 10)
|
|
for _, rest := range api.crud.modules {
|
|
for _, rest := range api.crud.modules {
|
|
- if rest.hasScenario(ScenarioList) {
|
|
|
|
- svr.Handle("GET", rest.getScenarioUrl(ScenarioList), rest.getScenarioHandle(ScenarioList), ms...)
|
|
|
|
- }
|
|
|
|
- if rest.hasScenario(ScenarioCreate) {
|
|
|
|
- svr.Handle("POST", rest.getScenarioUrl(ScenarioCreate), rest.getScenarioHandle(ScenarioCreate), ms...)
|
|
|
|
- }
|
|
|
|
- if rest.hasScenario(ScenarioUpdate) {
|
|
|
|
- svr.Handle("PUT", rest.getScenarioUrl(ScenarioUpdate), rest.getScenarioHandle(ScenarioUpdate), ms...)
|
|
|
|
- }
|
|
|
|
- if rest.hasScenario(ScenarioDelete) {
|
|
|
|
- svr.Handle("DELETE", rest.getScenarioUrl(ScenarioDelete), rest.getScenarioHandle(ScenarioDelete), ms...)
|
|
|
|
- }
|
|
|
|
- if rest.hasScenario(ScenarioExport) {
|
|
|
|
- svr.Handle("GET", rest.getScenarioUrl(ScenarioExport), rest.getScenarioHandle(ScenarioExport), ms...)
|
|
|
|
- }
|
|
|
|
- if rest.hasScenario(ScenarioView) {
|
|
|
|
- svr.Handle("GET", rest.getScenarioUrl(ScenarioView), rest.getScenarioHandle(ScenarioView), ms...)
|
|
|
|
- }
|
|
|
|
|
|
+ api.Attach(rest, ms...)
|
|
}
|
|
}
|
|
}
|
|
}
|