package user import ( "github.com/veypi/OneBD/rest" "oa/cfg" M "oa/models" ) func useUserRole(r rest.Router) { r.Delete("/:user_role_id", userRoleDelete) r.Get("/:user_role_id", userRoleGet) r.Get("/", userRoleList) r.Patch("/:user_role_id", userRolePatch) r.Post("/", userRolePost) } func userRoleList(x *rest.X) (any, error) { opts := &M.UserRoleList{} err := x.Parse(opts) if err != nil { return nil, err } data := make([]*struct { M.UserRole Username string `json:"username"` Nickname string `json:"nickname"` Icon string `json:"icon"` RoleName string `json:"role_name"` }, 0, 10) // data := make([]*M.UserRole, 0, 10) query := cfg.DB().Debug().Table("user_roles").Select("user_roles.*,users.username,users.nickname,users.icon,roles.name as role_name"). Joins("JOIN users ON users.id = user_roles.user_id"). Joins("JOIN roles ON roles.id = user_roles.role_id") if opts.UserID != nil && *opts.UserID != "-" { query = query.Where("user_id LIKE ?", opts.UserID) } if opts.RoleID != nil { query = query.Where("role_id LIKE ?", opts.RoleID) } if opts.AppID != nil { query = query.Where("app_id LIKE ?", opts.AppID) } if opts.Status != nil { query = query.Where("status LIKE ?", opts.Status) } err = query.Scan(&data).Error return data, err } func userRolePost(x *rest.X) (any, error) { opts := &M.UserRolePost{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.UserRole{} data.UserID = opts.UserID data.RoleID = opts.RoleID data.AppID = opts.AppID data.Status = opts.Status err = cfg.DB().Create(data).Error return data, err } func userRoleGet(x *rest.X) (any, error) { opts := &M.UserRoleGet{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.UserRole{} err = cfg.DB().Where("id = ?", opts.ID).First(data).Error return data, err } func userRolePatch(x *rest.X) (any, error) { opts := &M.UserRolePatch{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.UserRole{} err = cfg.DB().Where("id = ?", opts.ID).First(data).Error if err != nil { return nil, err } optsMap := make(map[string]interface{}) if opts.Status != nil { optsMap["status"] = opts.Status } err = cfg.DB().Model(data).Updates(optsMap).Error return data, err } func userRoleDelete(x *rest.X) (any, error) { opts := &M.UserRoleDelete{} err := x.Parse(opts) if err != nil { return nil, err } data := &M.UserRole{} err = cfg.DB().Where("id = ?", opts.ID).Delete(data).Error return data, err }