3
0

upd(all): json []uint64 should also be encoded as str

This commit is contained in:
Tit Petric
2018-10-25 10:52:13 +02:00
parent 44f0ca33e1
commit 31c38f683c
8 changed files with 117 additions and 10 deletions

View File

@@ -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}
}

View File

@@ -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

View File

@@ -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}",

View File

@@ -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",

View File

@@ -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)
})
})

View File

@@ -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"`

View File

@@ -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 {

View File

@@ -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 {