upd(all): json []uint64 should also be encoded as str
This commit is contained in:
@@ -22,7 +22,7 @@ var _ = multipart.FileHeader{}
|
||||
type {name|expose}{call.name|capitalize} struct {
|
||||
{foreach $call.parameters as $params}
|
||||
{foreach $params as $method => $param}
|
||||
{param.name|expose} {param.type}{if $param.type === "uint64"} `json:",string"`{/if}{newline}
|
||||
{param.name|expose} {param.type}{if $param.type === "uint64" || $param.type === "[]uint64"} `json:",string"`{/if}{newline}
|
||||
{/foreach}
|
||||
{/foreach}
|
||||
}
|
||||
|
||||
@@ -102,6 +102,21 @@ CRM module pages
|
||||
| visible | bool | POST | Visible in navigation | N/A | NO |
|
||||
| blocks | types.JSONText | POST | Blocks JSON | N/A | YES |
|
||||
|
||||
## Reorder pages
|
||||
|
||||
#### Method
|
||||
|
||||
| URI | Protocol | Method | Authentication |
|
||||
| --- | -------- | ------ | -------------- |
|
||||
| `/page/{selfID}/reorder` | HTTP/S | POST | |
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Method | Description | Default | Required? |
|
||||
| --------- | ---- | ------ | ----------- | ------- | --------- |
|
||||
| selfID | uint64 | PATH | Parent page ID | N/A | YES |
|
||||
| pageIDs | []uint64 | POST | Page ID order | N/A | YES |
|
||||
|
||||
## Delete page
|
||||
|
||||
#### Method
|
||||
|
||||
@@ -97,6 +97,20 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "reorder",
|
||||
"method": "POST",
|
||||
"title": "Reorder pages",
|
||||
"path": "/{selfID}/reorder",
|
||||
"parameters": {
|
||||
"path": [
|
||||
{ "type": "uint64", "name": "selfID", "required": true, "title": "Parent page ID" }
|
||||
],
|
||||
"post": [
|
||||
{ "type": "[]uint64", "name": "pageIDs", "required": true, "title": "Page ID order" }
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "delete",
|
||||
"path": "/{id}",
|
||||
|
||||
@@ -132,6 +132,30 @@
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "reorder",
|
||||
"Method": "POST",
|
||||
"Title": "Reorder pages",
|
||||
"Path": "/{selfID}/reorder",
|
||||
"Parameters": {
|
||||
"path": [
|
||||
{
|
||||
"name": "selfID",
|
||||
"required": true,
|
||||
"title": "Parent page ID",
|
||||
"type": "uint64"
|
||||
}
|
||||
],
|
||||
"post": [
|
||||
{
|
||||
"name": "pageIDs",
|
||||
"required": true,
|
||||
"title": "Page ID order",
|
||||
"type": "[]uint64"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "delete",
|
||||
"Method": "Delete",
|
||||
|
||||
@@ -31,16 +31,18 @@ type PageAPI interface {
|
||||
Create(context.Context, *request.PageCreate) (interface{}, error)
|
||||
Read(context.Context, *request.PageRead) (interface{}, error)
|
||||
Edit(context.Context, *request.PageEdit) (interface{}, error)
|
||||
Reorder(context.Context, *request.PageReorder) (interface{}, error)
|
||||
Delete(context.Context, *request.PageDelete) (interface{}, error)
|
||||
}
|
||||
|
||||
// HTTP API interface
|
||||
type Page struct {
|
||||
List func(http.ResponseWriter, *http.Request)
|
||||
Create func(http.ResponseWriter, *http.Request)
|
||||
Read func(http.ResponseWriter, *http.Request)
|
||||
Edit func(http.ResponseWriter, *http.Request)
|
||||
Delete func(http.ResponseWriter, *http.Request)
|
||||
List func(http.ResponseWriter, *http.Request)
|
||||
Create func(http.ResponseWriter, *http.Request)
|
||||
Read func(http.ResponseWriter, *http.Request)
|
||||
Edit func(http.ResponseWriter, *http.Request)
|
||||
Reorder func(http.ResponseWriter, *http.Request)
|
||||
Delete func(http.ResponseWriter, *http.Request)
|
||||
}
|
||||
|
||||
func NewPage(ph PageAPI) *Page {
|
||||
@@ -73,6 +75,13 @@ func NewPage(ph PageAPI) *Page {
|
||||
return ph.Edit(r.Context(), params)
|
||||
})
|
||||
},
|
||||
Reorder: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewPageReorder()
|
||||
resputil.JSON(w, params.Fill(r), func() (interface{}, error) {
|
||||
return ph.Reorder(r.Context(), params)
|
||||
})
|
||||
},
|
||||
Delete: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewPageDelete()
|
||||
@@ -91,6 +100,7 @@ func (ph *Page) MountRoutes(r chi.Router, middlewares ...func(http.Handler) http
|
||||
r.Post("/", ph.Create)
|
||||
r.Get("/{id}", ph.Read)
|
||||
r.Post("/{id}", ph.Edit)
|
||||
r.Post("/{selfID}/reorder", ph.Reorder)
|
||||
r.Delete("/{id}", ph.Delete)
|
||||
})
|
||||
})
|
||||
|
||||
@@ -261,6 +261,50 @@ func (p *PageEdit) Fill(r *http.Request) (err error) {
|
||||
|
||||
var _ RequestFiller = NewPageEdit()
|
||||
|
||||
// Page reorder request parameters
|
||||
type PageReorder struct {
|
||||
SelfID uint64 `json:",string"`
|
||||
PageIDs []uint64 `json:",string"`
|
||||
}
|
||||
|
||||
func NewPageReorder() *PageReorder {
|
||||
return &PageReorder{}
|
||||
}
|
||||
|
||||
func (p *PageReorder) Fill(r *http.Request) (err error) {
|
||||
if strings.ToLower(r.Header.Get("content-type")) == "application/json" {
|
||||
err = json.NewDecoder(r.Body).Decode(p)
|
||||
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
err = nil
|
||||
case err != nil:
|
||||
return errors.Wrap(err, "error parsing http request body")
|
||||
}
|
||||
}
|
||||
|
||||
if err = r.ParseForm(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
get := map[string]string{}
|
||||
post := map[string]string{}
|
||||
urlQuery := r.URL.Query()
|
||||
for name, param := range urlQuery {
|
||||
get[name] = string(param[0])
|
||||
}
|
||||
postVars := r.Form
|
||||
for name, param := range postVars {
|
||||
post[name] = string(param[0])
|
||||
}
|
||||
|
||||
p.SelfID = parseUInt64(chi.URLParam(r, "selfID"))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
var _ RequestFiller = NewPageReorder()
|
||||
|
||||
// Page delete request parameters
|
||||
type PageDelete struct {
|
||||
ID uint64 `json:",string"`
|
||||
|
||||
@@ -422,8 +422,8 @@ var _ RequestFiller = NewChannelPart()
|
||||
|
||||
// Channel invite request parameters
|
||||
type ChannelInvite struct {
|
||||
ChannelID uint64 `json:",string"`
|
||||
UserID []uint64
|
||||
ChannelID uint64 `json:",string"`
|
||||
UserID []uint64 `json:",string"`
|
||||
}
|
||||
|
||||
func NewChannelInvite() *ChannelInvite {
|
||||
|
||||
@@ -79,7 +79,7 @@ var _ RequestFiller = NewTeamList()
|
||||
// Team create request parameters
|
||||
type TeamCreate struct {
|
||||
Name string
|
||||
Members []uint64
|
||||
Members []uint64 `json:",string"`
|
||||
}
|
||||
|
||||
func NewTeamCreate() *TeamCreate {
|
||||
@@ -127,7 +127,7 @@ var _ RequestFiller = NewTeamCreate()
|
||||
type TeamEdit struct {
|
||||
TeamID uint64 `json:",string"`
|
||||
Name string
|
||||
Members []uint64
|
||||
Members []uint64 `json:",string"`
|
||||
}
|
||||
|
||||
func NewTeamEdit() *TeamEdit {
|
||||
|
||||
Reference in New Issue
Block a user