package user import ( "github.com/veypi/OneAuth/cfg" "github.com/veypi/OneAuth/libs/auth" "github.com/veypi/OneAuth/models" "github.com/vyes/vigo" "github.com/vyes/vigo/contrib/crud" ) var _ = Router.Delete("/:user_id", auth.Check("user", "user_id", auth.DoDelete, checkOwner), userDelete) func userDelete(x *vigo.X) (any, error) { data := &models.User{} err := cfg.DB().Where("id = ?", x.Params.Get("user_id")).Delete(data).Error return data, err } var _ = Router.Get("/:user_id", auth.Check("user", "user_id", auth.DoRead, checkOwner), vigo.DiliverData) func checkOwner(x *vigo.X, data any) bool { u, ok1 := data.(*models.User) return ok1 && u.ID == x.Params.Get("user_id") } func userGet(x *vigo.X) (any, error) { data := &models.User{} err := cfg.DB().Where("id = ?", x.Params.Get("user_id")).First(data).Error return data, err } var _ = Router.Get("/", "list user", auth.Check("user", "", auth.DoUpdate), crud.List(cfg.DB, &models.User{})) var _ = Router.Patch("/:user_id", auth.Check("user", "user_id", auth.DoUpdate, checkOwner), userPatch) type patchOpts struct { ID string `json:"id" parse:"path@user_id"` Nickname *string `json:"nickname" parse:"json"` Icon *string `json:"icon" parse:"json"` Username *string `json:"username" parse:"json"` Email *string `json:"email" parse:"json"` Phone *string `json:"phone" parse:"json"` Status *uint `json:"status" parse:"json"` } func userPatch(x *vigo.X, args any) (any, error) { opts := &patchOpts{} err := x.Parse(opts) if err != nil { return nil, err } data := args.(*models.User) optsMap := make(map[string]any) if opts.Username != nil { optsMap["username"] = opts.Username } if opts.Nickname != nil { optsMap["nickname"] = opts.Nickname } if opts.Icon != nil { optsMap["icon"] = opts.Icon } if opts.Email != nil { optsMap["email"] = opts.Email } if opts.Phone != nil { optsMap["phone"] = opts.Phone } if opts.Status != nil { optsMap["status"] = opts.Status } err = cfg.DB().Model(data).Updates(optsMap).Error return data, err }