From 765502bdd975caaca70265d8ce667377ad679d60 Mon Sep 17 00:00:00 2001 From: veypi Date: Tue, 19 Nov 2024 18:52:49 +0800 Subject: [PATCH] feat: a lot --- oa/api/app/app.go | 79 +++++---- oa/api/app/init.go | 1 + oa/api/{role => app}/role.go | 69 ++++---- oa/api/init.go | 2 - oa/api/role/init.go | 16 -- oa/api/token/token.go | 1 + oa/models/app.gen.go | 26 +++ oa/models/app.go | 12 +- oa/models/role.gen.go | 26 --- oa/models/role.go | 11 -- oaweb/components/crud.vue | 16 +- oaweb/components/menu.vue | 2 +- oaweb/components/vinput.vue | 4 +- oaweb/composables/api/app.ts | 6 + oaweb/composables/api/token.ts | 4 +- oaweb/pages/app/[id].vue | 2 +- oaweb/pages/app/[id]/auth.vue | 301 ++++++++++++++++++++++++++++++++- oaweb/pages/app/[id]/cfg.vue | 39 +++-- 18 files changed, 462 insertions(+), 155 deletions(-) rename oa/api/{role => app}/role.go (92%) delete mode 100644 oa/api/role/init.go delete mode 100644 oa/models/role.gen.go delete mode 100644 oa/models/role.go diff --git a/oa/api/app/app.go b/oa/api/app/app.go index cef1b3d..ccb586a 100644 --- a/oa/api/app/app.go +++ b/oa/api/app/app.go @@ -2,6 +2,7 @@ package app import ( "oa/cfg" + "oa/errs" "oa/libs/auth" M "oa/models" @@ -13,10 +14,24 @@ import ( func useApp(r rest.Router) { r.Delete("/:app_id", auth.Check("app", "app_id", auth.DoDelete), appDelete) r.Get("/:app_id", auth.Check("app", "app_id", auth.DoRead), appGet) + r.Get("/:app_id/key", auth.Check("app", "app_id", auth.DoDelete), appKey) r.Get("/", appList) r.Patch("/:app_id", auth.Check("app", "app_id", auth.DoUpdate), appPatch) r.Post("/", auth.Check("app", "", auth.DoCreate), appPost) } +func appKey(x *rest.X) (any, error) { + id := x.Params.GetStr("app_id") + if id == "" { + return nil, errs.ArgsInvalid.WithStr("missing app_id") + } + data := &M.App{} + data.ID = id + key := utils.RandSeq(32) + // err := cfg.DB().Where("id = ?", x.Params.GetStr("app_id")).First(data).Error + err := cfg.DB().Model(data).Update("key", key).Error + + return key, err +} func appDelete(x *rest.X) (any, error) { opts := &M.AppDelete{} err := x.Parse(opts) @@ -72,6 +87,36 @@ func appList(x *rest.X) (any, error) { return data, err } +func appPost(x *rest.X) (any, error) { + opts := &M.AppPost{} + err := x.Parse(opts) + if err != nil { + return nil, err + } + data := &M.App{} + + data.Name = opts.Name + data.Icon = opts.Icon + data.Typ = opts.Typ + if opts.Des != nil { + data.Des = *opts.Des + } + err = cfg.DB().Transaction(func(tx *gorm.DB) error { + data.Key = utils.RandSeq(32) + err := tx.Create(data).Error + if err != nil { + return err + } + au := &M.AppUser{ + AppID: data.ID, + UserID: x.Request.Context().Value("uid").(string), + Status: M.AUSTATUS_OK, + } + return tx.Create(au).Error + }) + + return data, err +} func appPatch(x *rest.X) (any, error) { opts := &M.AppPatch{} err := x.Parse(opts) @@ -100,37 +145,13 @@ func appPatch(x *rest.X) (any, error) { if opts.InitRoleID != nil { optsMap["init_role_id"] = opts.InitRoleID } - err = cfg.DB().Model(data).Updates(optsMap).Error - - return data, err -} -func appPost(x *rest.X) (any, error) { - opts := &M.AppPost{} - err := x.Parse(opts) - if err != nil { - return nil, err + if opts.Status != nil { + optsMap["status"] = opts.Status } - data := &M.App{} - - data.Name = opts.Name - data.Icon = opts.Icon - data.Typ = opts.Typ - if opts.Des != nil { - data.Des = *opts.Des + if opts.InitUrl != nil { + optsMap["init_url"] = opts.InitUrl } - err = cfg.DB().Transaction(func(tx *gorm.DB) error { - data.Key = utils.RandSeq(32) - err := tx.Create(data).Error - if err != nil { - return err - } - au := &M.AppUser{ - AppID: data.ID, - UserID: x.Request.Context().Value("uid").(string), - Status: M.AUSTATUS_OK, - } - return tx.Create(au).Error - }) + err = cfg.DB().Model(data).Updates(optsMap).Error return data, err } diff --git a/oa/api/app/init.go b/oa/api/app/init.go index e41526b..b5972bd 100644 --- a/oa/api/app/init.go +++ b/oa/api/app/init.go @@ -15,4 +15,5 @@ func Use(r rest.Router) { useApp(r) useAppUser(r.SubRouter(":app_id/app_user")) useResource(r.SubRouter(":app_id/resource")) + useRole(r.SubRouter(":app_id/role")) } diff --git a/oa/api/role/role.go b/oa/api/app/role.go similarity index 92% rename from oa/api/role/role.go rename to oa/api/app/role.go index 7d49c4f..d60ee2d 100644 --- a/oa/api/role/role.go +++ b/oa/api/app/role.go @@ -1,29 +1,27 @@ -package role +package app import ( - "github.com/google/uuid" "github.com/veypi/OneBD/rest" "oa/cfg" M "oa/models" - "strings" ) func useRole(r rest.Router) { - r.Get("/:role_id", roleGet) + r.Delete("/:role_id", roleDelete) r.Get("/", roleList) - r.Patch("/:role_id", rolePatch) r.Post("/", rolePost) - r.Delete("/:role_id", roleDelete) + r.Get("/:role_id", roleGet) + r.Patch("/:role_id", rolePatch) } -func roleGet(x *rest.X) (any, error) { - opts := &M.RoleGet{} +func roleDelete(x *rest.X) (any, error) { + opts := &M.RoleDelete{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.Role{} - err = cfg.DB().Where("id = ?", opts.ID).First(data).Error + err = cfg.DB().Where("id = ?", opts.ID).Delete(data).Error return data, err } @@ -36,6 +34,9 @@ func roleList(x *rest.X) (any, error) { data := make([]*M.Role, 0, 10) query := cfg.DB() + if opts.AppID != nil { + query = query.Where("app_id LIKE ?", opts.AppID) + } if opts.Name != nil { query = query.Where("name LIKE ?", opts.Name) } @@ -43,57 +44,53 @@ func roleList(x *rest.X) (any, error) { return data, err } -func rolePatch(x *rest.X) (any, error) { - opts := &M.RolePatch{} +func rolePost(x *rest.X) (any, error) { + opts := &M.RolePost{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.Role{} - err = cfg.DB().Where("id = ?", opts.ID).First(data).Error - if err != nil { - return nil, err - } - optsMap := make(map[string]interface{}) - if opts.Name != nil { - optsMap["name"] = opts.Name - } - if opts.Des != nil { - optsMap["des"] = opts.Des - } - if opts.AppID != nil { - optsMap["app_id"] = opts.AppID - } - err = cfg.DB().Model(data).Updates(optsMap).Error + data.AppID = opts.AppID + data.Name = opts.Name + data.Des = opts.Des + err = cfg.DB().Create(data).Error return data, err } -func rolePost(x *rest.X) (any, error) { - opts := &M.RolePost{} +func roleGet(x *rest.X) (any, error) { + opts := &M.RoleGet{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.Role{} - data.ID = strings.ReplaceAll(uuid.New().String(), "-", "") - data.Name = opts.Name - data.Des = opts.Des - data.AppID = opts.AppID - err = cfg.DB().Create(data).Error + err = cfg.DB().Where("id = ?", opts.ID).First(data).Error return data, err } -func roleDelete(x *rest.X) (any, error) { - opts := &M.RoleDelete{} +func rolePatch(x *rest.X) (any, error) { + opts := &M.RolePatch{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.Role{} - err = cfg.DB().Where("id = ?", opts.ID).Delete(data).Error + err = cfg.DB().Where("id = ?", opts.ID).First(data).Error + if err != nil { + return nil, err + } + optsMap := make(map[string]interface{}) + if opts.Name != nil { + optsMap["name"] = opts.Name + } + if opts.Des != nil { + optsMap["des"] = opts.Des + } + err = cfg.DB().Model(data).Updates(optsMap).Error return data, err } diff --git a/oa/api/init.go b/oa/api/init.go index 42acc6d..dcf2e73 100644 --- a/oa/api/init.go +++ b/oa/api/init.go @@ -9,7 +9,6 @@ package api import ( "oa/api/access" "oa/api/app" - "oa/api/role" "oa/api/token" "oa/api/user" "oa/cfg" @@ -23,7 +22,6 @@ func Use(r rest.Router) { r.Use(libs.CorsAllowAny) access.Use(r.SubRouter("access")) app.Use(r.SubRouter("app")) - role.Use(r.SubRouter("role")) user.Use(r.SubRouter("user")) token.Use(r.SubRouter("token")) r.Get("", baseInfo) diff --git a/oa/api/role/init.go b/oa/api/role/init.go deleted file mode 100644 index 4d2944b..0000000 --- a/oa/api/role/init.go +++ /dev/null @@ -1,16 +0,0 @@ -// -// Copyright (C) 2024 veypi -// 2024-09-23 16:28:13 -// Distributed under terms of the MIT license. -// -// Auto generated by OneBD. DO NOT EDIT - -package role - -import ( - "github.com/veypi/OneBD/rest" -) - -func Use(r rest.Router) { - useRole(r) -} diff --git a/oa/api/token/token.go b/oa/api/token/token.go index e242633..23af3c9 100644 --- a/oa/api/token/token.go +++ b/oa/api/token/token.go @@ -27,6 +27,7 @@ func useToken(r rest.Router) { func tokenSalt(x *rest.X) (any, error) { opts := &M.TokenSalt{} err := x.Parse(opts) + logv.Warn().Msg(opts.Username) if err != nil { return nil, err } diff --git a/oa/models/app.gen.go b/oa/models/app.gen.go index e0ba3f2..a39d8ba 100644 --- a/oa/models/app.gen.go +++ b/oa/models/app.gen.go @@ -12,6 +12,7 @@ type AppPatch struct { Typ *string `json:"typ" gorm:"default:auto" parse:"json"` InitRoleID *string `json:"init_role_id" gorm:"index;type:varchar(32)" parse:"json"` Status *string `json:"status" gorm:"default:ok" parse:"json"` + InitUrl *string `json:"init_url" parse:"json"` } type AppDelete struct { @@ -81,3 +82,28 @@ type ResourcePost struct { Name string `json:"name" parse:"json"` Des string `json:"des" parse:"json"` } + +type RoleGet struct { + ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@role_id"` +} + +type RolePatch struct { + ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@role_id"` + Name *string `json:"name" parse:"json"` + Des *string `json:"des" parse:"json"` +} + +type RoleDelete struct { + ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@role_id"` +} + +type RoleList struct { + AppID *string `json:"app_id" parse:"path"` + Name *string `json:"name" parse:"query"` +} + +type RolePost struct { + AppID string `json:"app_id" parse:"path"` + Name string `json:"name" parse:"json"` + Des string `json:"des" parse:"json"` +} diff --git a/oa/models/app.go b/oa/models/app.go index dd6d3ea..f0fc9b3 100644 --- a/oa/models/app.go +++ b/oa/models/app.go @@ -19,7 +19,7 @@ type App struct { Status string `json:"status" gorm:"default:ok" methods:"post,*patch" parse:"json"` InitRoleID *string `json:"init_role_id" gorm:"index;type:varchar(32);default: null" methods:"*patch" parse:"json"` InitRole *Role `json:"init_role" gorm:"foreignKey:InitRoleID;references:ID"` - InitUrl string `json:"init_url"` + InitUrl string `json:"init_url" methods:"*patch" parse:"json"` UserCount uint `json:"user_count"` Key string `json:"-"` } @@ -74,3 +74,13 @@ type Resource struct { Name string `json:"name" methods:"post" parse:"json"` Des string `json:"des" methods:"post,*patch" parse:"json"` } + +type Role struct { + BaseModel + AppID string `json:"app_id" methods:"*list,post" parse:"path"` + App *App `json:"-" gorm:"foreignKey:AppID;references:ID"` + Name string `json:"name" methods:"post,*patch,*list" parse:"json"` + Des string `json:"des" methods:"post,*patch" parse:"json"` + UserCount uint `json:"user_count"` + Access []*Access `json:"-"` +} diff --git a/oa/models/role.gen.go b/oa/models/role.gen.go deleted file mode 100644 index 6f42922..0000000 --- a/oa/models/role.gen.go +++ /dev/null @@ -1,26 +0,0 @@ -package models - -type RoleGet struct { - ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@role_id"` -} - -type RolePatch struct { - ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@role_id"` - Name *string `json:"name" parse:"json"` - Des *string `json:"des" parse:"json"` - AppID *string `json:"app_id" gorm:"index;type:varchar(32)" parse:"json"` -} - -type RoleDelete struct { - ID string `json:"id" gorm:"primaryKey;type:varchar(32)" parse:"path@role_id"` -} - -type RolePost struct { - Name string `json:"name" parse:"json"` - Des string `json:"des" parse:"json"` - AppID string `json:"app_id" gorm:"index;type:varchar(32)" parse:"json"` -} - -type RoleList struct { - Name *string `json:"name" parse:"query"` -} diff --git a/oa/models/role.go b/oa/models/role.go deleted file mode 100644 index 91786a0..0000000 --- a/oa/models/role.go +++ /dev/null @@ -1,11 +0,0 @@ -package models - -type Role struct { - BaseModel - Name string `json:"name" methods:"post,*patch,*list" parse:"json"` - Des string `json:"des" methods:"post,*patch" parse:"json"` - AppID string `json:"app_id" gorm:"index;type:varchar(32)" methods:"post,*patch" parse:"json"` - App *App `json:"-" gorm:"foreignKey:AppID;references:ID"` - UserCount uint `json:"user_count"` - Access []*Access `json:"-"` -} diff --git a/oaweb/components/crud.vue b/oaweb/components/crud.vue index 5828c9d..2584c78 100644 --- a/oaweb/components/crud.vue +++ b/oaweb/components/crud.vue @@ -1,4 +1,4 @@ -