func bindListResourceAPI(a *Admin) { a.AdminController.Get(a.Prefix+"/_api/resource/:name", func(request prago.Request) { locale := GetLocale(request) user := GetUser(request) name := request.Params().Get("name") resource, found := a.resourceNameMap[name] if !found { render404(request) return } if !resource.Authenticate(user) { render403(request) return } var item interface{} resource.newItem(&item) c, err := a.Query().Count(item) prago.Must(err) if c == 0 { prago.WriteAPI(request, []string{}, 200) return } ret := []resourceItem{} var items interface{} resource.newItems(&items) prago.Must(a.Query().Get(items)) itemsVal := reflect.ValueOf(items).Elem() for i := 0; i < itemsVal.Len(); i++ { item := itemsVal.Index(i) id := item.Elem().FieldByName("ID").Int() var name string ifaceItemName, ok := item.Interface().(interface { AdminItemName(string) string }) if ok { name = ifaceItemName.AdminItemName(locale) } else { name = item.Elem().FieldByName("Name").String() } ret = append(ret, resourceItem{ ID: id, Name: name, }) } prago.WriteAPI(request, ret, 200) }) }
func bindMarkdownAPI(a *Admin) { a.AdminController.Post(a.Prefix+"/_api/markdown", func(request prago.Request) { data, err := ioutil.ReadAll(request.Request().Body) if err != nil { panic(err) } prago.WriteAPI(request, markdown.New().RenderToString(data), 200) }) }
func writeFileResponse(request prago.Request, files []*File) { responseData := []*imageResponse{} for _, v := range files { ir := &imageResponse{ ID: v.ID, UID: v.UID, Name: v.Name, Description: v.Description, } _, fileURL := v.getPath(fileDownloadPath + "thumb/small") ir.Thumb = fileURL responseData = append(responseData, ir) } prago.WriteAPI(request, responseData, 200) }
//BindOrder is default order binder func BindOrder(a *Admin, resource *Resource) { resource.ResourceController.Post(a.GetURL(resource, "order"), func(request prago.Request) { decoder := json.NewDecoder(request.Request().Body) var t = map[string][]int{} err := decoder.Decode(&t) prago.Must(err) order, ok := t["order"] if !ok { panic("wrong format") } for i, id := range order { var item interface{} resource.newItem(&item) prago.Must(a.Query().WhereIs("id", int64(id)).Get(item)) prago.Must(resource.StructCache.BindOrder(item, int64(i))) prago.Must(a.Save(item)) } prago.WriteAPI(request, true, 200) }) }