scaffold module api
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
{
|
||||
"Title": "Modules",
|
||||
"Description": "CRM module definitions",
|
||||
"Package": "crm",
|
||||
"Interface": "Modules",
|
||||
"Struct": [
|
||||
{
|
||||
"name": "id",
|
||||
"type": "uint64"
|
||||
},
|
||||
{
|
||||
"name": "name",
|
||||
"type": "string"
|
||||
}
|
||||
],
|
||||
"Protocol": "",
|
||||
"Authentication": [],
|
||||
"Path": "/modules",
|
||||
"APIs": [
|
||||
{
|
||||
"Name": "list",
|
||||
"Method": "GET",
|
||||
"Title": "List defined modules",
|
||||
"Path": "/list",
|
||||
"Parameters": {
|
||||
"get": [
|
||||
{
|
||||
"name": "id",
|
||||
"title": "Module ID",
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "edit",
|
||||
"Method": "POST",
|
||||
"Title": "Add/edit module",
|
||||
"Path": "/edit",
|
||||
"Parameters": {
|
||||
"post": [
|
||||
{
|
||||
"name": "id",
|
||||
"required": false,
|
||||
"title": "Module ID",
|
||||
"type": "uint64"
|
||||
},
|
||||
{
|
||||
"name": "name",
|
||||
"required": true,
|
||||
"title": "Module Name",
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "content/list",
|
||||
"Method": "GET",
|
||||
"Title": "List contents from module section",
|
||||
"Path": "/content/list",
|
||||
"Parameters": null
|
||||
},
|
||||
{
|
||||
"Name": "content/edit",
|
||||
"Method": "POST",
|
||||
"Title": "Add/update contents in module section",
|
||||
"Path": "/content/edit",
|
||||
"Parameters": {
|
||||
"post": [
|
||||
{
|
||||
"name": "id",
|
||||
"required": false,
|
||||
"title": "Content ID",
|
||||
"type": "uint64"
|
||||
},
|
||||
{
|
||||
"name": "payload",
|
||||
"required": true,
|
||||
"title": "Content JSON",
|
||||
"type": "string"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "content/delete",
|
||||
"Method": "DELETE",
|
||||
"Title": "Delete content row from module section",
|
||||
"Path": "/content/delete",
|
||||
"Parameters": {
|
||||
"post": [
|
||||
{
|
||||
"name": "id",
|
||||
"required": true,
|
||||
"title": "Content ID",
|
||||
"type": "uint64"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -0,0 +1,27 @@
|
||||
package crm
|
||||
|
||||
import (
|
||||
"github.com/pkg/errors"
|
||||
)
|
||||
|
||||
var _ = errors.Wrap
|
||||
|
||||
func (*Modules) List(r *modulesListRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Modules.list")
|
||||
}
|
||||
|
||||
func (*Modules) Edit(r *modulesEditRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Modules.edit")
|
||||
}
|
||||
|
||||
func (*Modules) ContentList(r *modulesContentListRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Modules.content/list")
|
||||
}
|
||||
|
||||
func (*Modules) ContentEdit(r *modulesContentEditRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Modules.content/edit")
|
||||
}
|
||||
|
||||
func (*Modules) ContentDelete(r *modulesContentDeleteRequest) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Modules.content/delete")
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package crm
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
|
||||
"github.com/titpetric/factory/resputil"
|
||||
)
|
||||
|
||||
func (mh *ModulesHandlers) List(w http.ResponseWriter, r *http.Request) {
|
||||
params := modulesListRequest{}.new()
|
||||
resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return mh.Modules.List(params) })
|
||||
}
|
||||
func (mh *ModulesHandlers) Edit(w http.ResponseWriter, r *http.Request) {
|
||||
params := modulesEditRequest{}.new()
|
||||
resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return mh.Modules.Edit(params) })
|
||||
}
|
||||
func (mh *ModulesHandlers) ContentList(w http.ResponseWriter, r *http.Request) {
|
||||
params := modulesContentListRequest{}.new()
|
||||
resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return mh.Modules.ContentList(params) })
|
||||
}
|
||||
func (mh *ModulesHandlers) ContentEdit(w http.ResponseWriter, r *http.Request) {
|
||||
params := modulesContentEditRequest{}.new()
|
||||
resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return mh.Modules.ContentEdit(params) })
|
||||
}
|
||||
func (mh *ModulesHandlers) ContentDelete(w http.ResponseWriter, r *http.Request) {
|
||||
params := modulesContentDeleteRequest{}.new()
|
||||
resputil.JSON(w, params.Fill(r), func() (interface{}, error) { return mh.Modules.ContentDelete(params) })
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package crm
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
)
|
||||
|
||||
// HTTP handlers are a superset of internal APIs
|
||||
type ModulesHandlers struct {
|
||||
*Modules
|
||||
}
|
||||
|
||||
func (ModulesHandlers) new() *ModulesHandlers {
|
||||
return &ModulesHandlers{
|
||||
Modules{}.new(),
|
||||
}
|
||||
}
|
||||
|
||||
// Internal API interface
|
||||
type ModulesAPI interface {
|
||||
List(*modulesListRequest) (interface{}, error)
|
||||
Edit(*modulesEditRequest) (interface{}, error)
|
||||
ContentList(*modulesContentListRequest) (interface{}, error)
|
||||
ContentEdit(*modulesContentEditRequest) (interface{}, error)
|
||||
ContentDelete(*modulesContentDeleteRequest) (interface{}, error)
|
||||
}
|
||||
|
||||
// HTTP API interface
|
||||
type ModulesHandlersAPI interface {
|
||||
List(http.ResponseWriter, *http.Request)
|
||||
Edit(http.ResponseWriter, *http.Request)
|
||||
ContentList(http.ResponseWriter, *http.Request)
|
||||
ContentEdit(http.ResponseWriter, *http.Request)
|
||||
ContentDelete(http.ResponseWriter, *http.Request)
|
||||
}
|
||||
|
||||
// Compile time check to see if we implement the interfaces
|
||||
var _ ModulesHandlersAPI = &ModulesHandlers{}
|
||||
var _ ModulesAPI = &Modules{}
|
||||
@@ -0,0 +1,146 @@
|
||||
package crm
|
||||
|
||||
import (
|
||||
"github.com/go-chi/chi"
|
||||
"net/http"
|
||||
)
|
||||
|
||||
var _ = chi.URLParam
|
||||
|
||||
// Modules list request parameters
|
||||
type modulesListRequest struct {
|
||||
id string
|
||||
}
|
||||
|
||||
func (modulesListRequest) new() *modulesListRequest {
|
||||
return &modulesListRequest{}
|
||||
}
|
||||
|
||||
func (m *modulesListRequest) Fill(r *http.Request) error {
|
||||
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])
|
||||
}
|
||||
|
||||
m.id = get["id"]
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ RequestFiller = modulesListRequest{}.new()
|
||||
|
||||
// Modules edit request parameters
|
||||
type modulesEditRequest struct {
|
||||
id uint64
|
||||
name string
|
||||
}
|
||||
|
||||
func (modulesEditRequest) new() *modulesEditRequest {
|
||||
return &modulesEditRequest{}
|
||||
}
|
||||
|
||||
func (m *modulesEditRequest) Fill(r *http.Request) error {
|
||||
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])
|
||||
}
|
||||
|
||||
m.id = parseUInt64(post["id"])
|
||||
|
||||
m.name = post["name"]
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ RequestFiller = modulesEditRequest{}.new()
|
||||
|
||||
// Modules content/list request parameters
|
||||
type modulesContentListRequest struct {
|
||||
}
|
||||
|
||||
func (modulesContentListRequest) new() *modulesContentListRequest {
|
||||
return &modulesContentListRequest{}
|
||||
}
|
||||
|
||||
func (m *modulesContentListRequest) Fill(r *http.Request) error {
|
||||
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])
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ RequestFiller = modulesContentListRequest{}.new()
|
||||
|
||||
// Modules content/edit request parameters
|
||||
type modulesContentEditRequest struct {
|
||||
id uint64
|
||||
payload string
|
||||
}
|
||||
|
||||
func (modulesContentEditRequest) new() *modulesContentEditRequest {
|
||||
return &modulesContentEditRequest{}
|
||||
}
|
||||
|
||||
func (m *modulesContentEditRequest) Fill(r *http.Request) error {
|
||||
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])
|
||||
}
|
||||
|
||||
m.id = parseUInt64(post["id"])
|
||||
|
||||
m.payload = post["payload"]
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ RequestFiller = modulesContentEditRequest{}.new()
|
||||
|
||||
// Modules content/delete request parameters
|
||||
type modulesContentDeleteRequest struct {
|
||||
id uint64
|
||||
}
|
||||
|
||||
func (modulesContentDeleteRequest) new() *modulesContentDeleteRequest {
|
||||
return &modulesContentDeleteRequest{}
|
||||
}
|
||||
|
||||
func (m *modulesContentDeleteRequest) Fill(r *http.Request) error {
|
||||
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])
|
||||
}
|
||||
|
||||
m.id = parseUInt64(post["id"])
|
||||
return nil
|
||||
}
|
||||
|
||||
var _ RequestFiller = modulesContentDeleteRequest{}.new()
|
||||
@@ -0,0 +1,36 @@
|
||||
package crm
|
||||
|
||||
// Modules
|
||||
type Modules struct {
|
||||
id uint64
|
||||
name string
|
||||
|
||||
changed []string
|
||||
}
|
||||
|
||||
func (Modules) new() *Modules {
|
||||
return &Modules{}
|
||||
}
|
||||
|
||||
func (m *Modules) Getid() uint64 {
|
||||
return m.id
|
||||
}
|
||||
|
||||
func (m *Modules) Setid(value uint64) *Modules {
|
||||
if m.id != value {
|
||||
m.changed = append(m.changed, "id")
|
||||
m.id = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
func (m *Modules) Getname() string {
|
||||
return m.name
|
||||
}
|
||||
|
||||
func (m *Modules) Setname(value string) *Modules {
|
||||
if m.name != value {
|
||||
m.changed = append(m.changed, "name")
|
||||
m.name = value
|
||||
}
|
||||
return m
|
||||
}
|
||||
Reference in New Issue
Block a user