123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package rest
- import (
- "fmt"
- "git.nspix.com/golang/micro/gateway/http"
- "gorm.io/gorm"
- )
- type Api struct {
- crud *CRUD
- }
- func (api *Api) handleListSchema(httpCtx *http.Context) (err error) {
- var (
- schemas []*Schema
- )
- ns := httpCtx.FormValue(NamespaceVariable)
- if ns == "" {
- ns = DefaultNamespace
- }
- if schemas, err = api.crud.GetSchemas(httpCtx.Request().Context(), ns, httpCtx.ParamValue("module"), httpCtx.ParamValue("table")); err == nil {
- return httpCtx.Success(schemas)
- } else {
- return httpCtx.Error(HttpDatabaseQueryFailed, err.Error())
- }
- }
- func (api *Api) handleSaveSchema(httpCtx *http.Context) (err error) {
- var (
- rest *Restful
- )
- ns := httpCtx.FormValue(NamespaceVariable)
- if ns == "" {
- ns = DefaultNamespace
- }
- moduleName := httpCtx.ParamValue("module")
- tableName := httpCtx.ParamValue("table")
- for _, row := range api.crud.modules {
- if row.model.ModuleName() == moduleName && row.model.TableName() == tableName {
- rest = row
- break
- }
- }
- if rest == nil {
- return httpCtx.Error(HTTPUnknownFailed, fmt.Sprintf("module %s table %s schema not found", moduleName, tableName))
- }
- schemas := make([]*Schema, 0)
- if err = httpCtx.Bind(&schemas); err != nil {
- return httpCtx.Error(HttpInvalidPayload, err.Error())
- }
- if err = api.crud.db.Transaction(func(tx *gorm.DB) error {
- var (
- errTx error
- )
- for _, scm := range schemas {
- if errTx = tx.Save(scm).Error; errTx != nil {
- return errTx
- }
- }
- return nil
- }); err == nil {
- return httpCtx.Success(map[string]interface{}{
- "count": len(schemas),
- "state": "success",
- })
- } else {
- return httpCtx.Error(HTTPUnknownFailed, err.Error())
- }
- }
- func (api *Api) handleListSchemas(httpCtx *http.Context) (err error) {
- var (
- moduleLabel string
- )
- ts := make([]*treeValue, 0)
- isHandled := false
- for _, e := range api.crud.modules {
- isHandled = false
- for _, tv := range ts {
- if tv.Value == e.model.ModuleName() {
- tv.Append(&treeValue{Value: e.model.TableName(), Label: e.model.TableName(), Type: TypeTable})
- isHandled = true
- break
- }
- }
- if isHandled {
- continue
- }
- moduleLabel = e.model.ModuleName()
- tv := &treeValue{Label: moduleLabel, Value: e.model.ModuleName(), Type: TypeModule}
- tv.Append(&treeValue{Value: e.model.TableName(), Label: e.model.TableName(), Type: TypeTable})
- ts = append(ts, tv)
- }
- return httpCtx.Success(ts)
- }
- func (api *Api) handleDeleteSchema(httpCtx *http.Context) (err error) {
- id := httpCtx.ParamValue("id")
- model := &Schema{}
- if err = api.crud.db.Where("id=?", id).First(model).Error; err == nil {
- if err = api.crud.db.Where("id=?", id).Delete(&Schema{}).Error; err == nil {
- return httpCtx.Success(map[string]string{
- "id": id,
- "state": "success",
- })
- } else {
- return httpCtx.Error(HttpDatabaseDeleteFailed, err.Error())
- }
- } else {
- return httpCtx.Error(HttpDatabaseFindFailed, err.Error())
- }
- }
- func (api *Api) Router(svr *http.Server, ms ...http.Middleware) {
- svr.Handle("GET", "/rest/schemas", api.handleListSchemas, ms...)
- svr.Handle("GET", "/rest/schema/:module/:table", api.handleListSchema, ms...)
- svr.Handle("PUT", "/rest/schema/:module/:table", api.handleSaveSchema, ms...)
- svr.Handle("DELETE", "/rest/schema/:id", api.handleDeleteSchema, ms...)
- 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...)
- }
- }
- }
|