Add reminder routes
This commit is contained in:
@@ -1593,5 +1593,206 @@
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Reminders",
|
||||
"entrypoint": "reminder",
|
||||
"path": "/reminder",
|
||||
"authentication": [
|
||||
"Client ID",
|
||||
"Session ID"
|
||||
],
|
||||
"struct": [
|
||||
{
|
||||
"imports": [
|
||||
"sqlxTypes github.com/jmoiron/sqlx/types",
|
||||
"time"
|
||||
]
|
||||
}
|
||||
],
|
||||
"apis": [
|
||||
{
|
||||
"name": "list",
|
||||
"method": "GET",
|
||||
"title": "List/read reminders",
|
||||
"path": "/",
|
||||
"parameters": {
|
||||
"get": [
|
||||
{
|
||||
"name": "resource",
|
||||
"required": false,
|
||||
"title": "Only reminders of a specific resource",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "assignedTo",
|
||||
"required": false,
|
||||
"title": "Only reminders for a given user",
|
||||
"type": "uint64"
|
||||
},
|
||||
{
|
||||
"name": "page",
|
||||
"type": "uint",
|
||||
"required": false,
|
||||
"title": "Page number (1 based)"
|
||||
},
|
||||
{
|
||||
"name": "perPage",
|
||||
"type": "uint",
|
||||
"required": false,
|
||||
"title": "Returned items per page (default 50)"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "create",
|
||||
"method": "POST",
|
||||
"title": "Add new reminder",
|
||||
"path": "/",
|
||||
"parameters": {
|
||||
"post": [
|
||||
{
|
||||
"name": "resource",
|
||||
"title": "Resource",
|
||||
"type": "string",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "assignedTo",
|
||||
"title": "Assigned To",
|
||||
"type": "uint64",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "payload",
|
||||
"title": "Payload",
|
||||
"type": "sqlxTypes.JSONText",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "remindAt",
|
||||
"title": "Remind At",
|
||||
"type": "time.Time",
|
||||
"required": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "update",
|
||||
"method": "PUT",
|
||||
"title": "Update reminder",
|
||||
"path": "/{reminderID}",
|
||||
"parameters": {
|
||||
"path": [
|
||||
{
|
||||
"type": "uint64",
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "Reminder ID"
|
||||
}
|
||||
],
|
||||
"post": [
|
||||
{
|
||||
"name": "resource",
|
||||
"title": "Resource",
|
||||
"type": "string",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "assignedTo",
|
||||
"title": "Assigned To",
|
||||
"type": "uint64",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "payload",
|
||||
"title": "Payload",
|
||||
"type": "sqlxTypes.JSONText",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"name": "remindAt",
|
||||
"title": "Remind At",
|
||||
"type": "time.Time",
|
||||
"required": true
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "read",
|
||||
"method": "GET",
|
||||
"title": "Read reminder by ID",
|
||||
"path": "/{reminderID}",
|
||||
"parameters": {
|
||||
"path": [
|
||||
{
|
||||
"type": "uint64",
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "Reminder ID"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "delete",
|
||||
"method": "DELETE",
|
||||
"title": "Delete reminder",
|
||||
"path": "/{reminderID}",
|
||||
"parameters": {
|
||||
"path": [
|
||||
{
|
||||
"type": "uint64",
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "Reminder ID"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "dismiss",
|
||||
"method": "PATCH",
|
||||
"title": "Dismiss reminder",
|
||||
"path": "/{reminderID}/dismiss",
|
||||
"parameters": {
|
||||
"path": [
|
||||
{
|
||||
"type": "uint64",
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "reminder ID"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "snooze",
|
||||
"method": "PATCH",
|
||||
"title": "Snooze reminder",
|
||||
"path": "/{reminderID}/snooze",
|
||||
"parameters": {
|
||||
"path": [
|
||||
{
|
||||
"type": "uint64",
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "reminder ID"
|
||||
}
|
||||
],
|
||||
"post": [
|
||||
{
|
||||
"type": "time.Time",
|
||||
"name": "remindAt",
|
||||
"required": true,
|
||||
"title": "New Remind At Time"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
|
||||
203
api/system/spec/reminder.json
Normal file
203
api/system/spec/reminder.json
Normal file
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"Title": "Reminders",
|
||||
"Interface": "Reminder",
|
||||
"Struct": [
|
||||
{
|
||||
"imports": [
|
||||
"sqlxTypes github.com/jmoiron/sqlx/types",
|
||||
"time"
|
||||
]
|
||||
}
|
||||
],
|
||||
"Parameters": null,
|
||||
"Protocol": "",
|
||||
"Authentication": [
|
||||
"Client ID",
|
||||
"Session ID"
|
||||
],
|
||||
"Path": "/reminder",
|
||||
"APIs": [
|
||||
{
|
||||
"Name": "list",
|
||||
"Method": "GET",
|
||||
"Title": "List/read reminders",
|
||||
"Path": "/",
|
||||
"Parameters": {
|
||||
"get": [
|
||||
{
|
||||
"name": "resource",
|
||||
"required": false,
|
||||
"title": "Only reminders of a specific resource",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "assignedTo",
|
||||
"required": false,
|
||||
"title": "Only reminders for a given user",
|
||||
"type": "uint64"
|
||||
},
|
||||
{
|
||||
"name": "page",
|
||||
"required": false,
|
||||
"title": "Page number (1 based)",
|
||||
"type": "uint"
|
||||
},
|
||||
{
|
||||
"name": "perPage",
|
||||
"required": false,
|
||||
"title": "Returned items per page (default 50)",
|
||||
"type": "uint"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "create",
|
||||
"Method": "POST",
|
||||
"Title": "Add new reminder",
|
||||
"Path": "/",
|
||||
"Parameters": {
|
||||
"post": [
|
||||
{
|
||||
"name": "resource",
|
||||
"required": true,
|
||||
"title": "Resource",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "assignedTo",
|
||||
"required": true,
|
||||
"title": "Assigned To",
|
||||
"type": "uint64"
|
||||
},
|
||||
{
|
||||
"name": "payload",
|
||||
"required": true,
|
||||
"title": "Payload",
|
||||
"type": "sqlxTypes.JSONText"
|
||||
},
|
||||
{
|
||||
"name": "remindAt",
|
||||
"required": true,
|
||||
"title": "Remind At",
|
||||
"type": "time.Time"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "update",
|
||||
"Method": "PUT",
|
||||
"Title": "Update reminder",
|
||||
"Path": "/{reminderID}",
|
||||
"Parameters": {
|
||||
"path": [
|
||||
{
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "Reminder ID",
|
||||
"type": "uint64"
|
||||
}
|
||||
],
|
||||
"post": [
|
||||
{
|
||||
"name": "resource",
|
||||
"required": true,
|
||||
"title": "Resource",
|
||||
"type": "string"
|
||||
},
|
||||
{
|
||||
"name": "assignedTo",
|
||||
"required": true,
|
||||
"title": "Assigned To",
|
||||
"type": "uint64"
|
||||
},
|
||||
{
|
||||
"name": "payload",
|
||||
"required": true,
|
||||
"title": "Payload",
|
||||
"type": "sqlxTypes.JSONText"
|
||||
},
|
||||
{
|
||||
"name": "remindAt",
|
||||
"required": true,
|
||||
"title": "Remind At",
|
||||
"type": "time.Time"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "read",
|
||||
"Method": "GET",
|
||||
"Title": "Read reminder by ID",
|
||||
"Path": "/{reminderID}",
|
||||
"Parameters": {
|
||||
"path": [
|
||||
{
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "Reminder ID",
|
||||
"type": "uint64"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "delete",
|
||||
"Method": "DELETE",
|
||||
"Title": "Delete reminder",
|
||||
"Path": "/{reminderID}",
|
||||
"Parameters": {
|
||||
"path": [
|
||||
{
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "Reminder ID",
|
||||
"type": "uint64"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "dismiss",
|
||||
"Method": "PATCH",
|
||||
"Title": "Dismiss reminder",
|
||||
"Path": "/{reminderID}/dismiss",
|
||||
"Parameters": {
|
||||
"path": [
|
||||
{
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "reminder ID",
|
||||
"type": "uint64"
|
||||
}
|
||||
]
|
||||
}
|
||||
},
|
||||
{
|
||||
"Name": "snooze",
|
||||
"Method": "PATCH",
|
||||
"Title": "Snooze reminder",
|
||||
"Path": "/{reminderID}/snooze",
|
||||
"Parameters": {
|
||||
"path": [
|
||||
{
|
||||
"name": "reminderID",
|
||||
"required": true,
|
||||
"title": "reminder ID",
|
||||
"type": "uint64"
|
||||
}
|
||||
],
|
||||
"post": [
|
||||
{
|
||||
"name": "remindAt",
|
||||
"required": true,
|
||||
"title": "New Remind At Time",
|
||||
"type": "time.Time"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
||||
@@ -689,6 +689,132 @@ Organisations represent a top-level grouping entity. There may be many organisat
|
||||
|
||||
|
||||
|
||||
# Reminders
|
||||
|
||||
| Method | Endpoint | Purpose |
|
||||
| ------ | -------- | ------- |
|
||||
| `GET` | `/reminder/` | List/read reminders |
|
||||
| `POST` | `/reminder/` | Add new reminder |
|
||||
| `PUT` | `/reminder/{reminderID}` | Update reminder |
|
||||
| `GET` | `/reminder/{reminderID}` | Read reminder by ID |
|
||||
| `DELETE` | `/reminder/{reminderID}` | Delete reminder |
|
||||
| `PATCH` | `/reminder/{reminderID}/dismiss` | Dismiss reminder |
|
||||
| `PATCH` | `/reminder/{reminderID}/snooze` | Snooze reminder |
|
||||
|
||||
## List/read reminders
|
||||
|
||||
#### Method
|
||||
|
||||
| URI | Protocol | Method | Authentication |
|
||||
| --- | -------- | ------ | -------------- |
|
||||
| `/reminder/` | HTTP/S | GET | Client ID, Session ID |
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Method | Description | Default | Required? |
|
||||
| --------- | ---- | ------ | ----------- | ------- | --------- |
|
||||
| resource | string | GET | Only reminders of a specific resource | N/A | NO |
|
||||
| assignedTo | uint64 | GET | Only reminders for a given user | N/A | NO |
|
||||
| page | uint | GET | Page number (1 based) | N/A | NO |
|
||||
| perPage | uint | GET | Returned items per page (default 50) | N/A | NO |
|
||||
|
||||
## Add new reminder
|
||||
|
||||
#### Method
|
||||
|
||||
| URI | Protocol | Method | Authentication |
|
||||
| --- | -------- | ------ | -------------- |
|
||||
| `/reminder/` | HTTP/S | POST | Client ID, Session ID |
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Method | Description | Default | Required? |
|
||||
| --------- | ---- | ------ | ----------- | ------- | --------- |
|
||||
| resource | string | POST | Resource | N/A | YES |
|
||||
| assignedTo | uint64 | POST | Assigned To | N/A | YES |
|
||||
| payload | sqlxTypes.JSONText | POST | Payload | N/A | YES |
|
||||
| remindAt | time.Time | POST | Remind At | N/A | YES |
|
||||
|
||||
## Update reminder
|
||||
|
||||
#### Method
|
||||
|
||||
| URI | Protocol | Method | Authentication |
|
||||
| --- | -------- | ------ | -------------- |
|
||||
| `/reminder/{reminderID}` | HTTP/S | PUT | Client ID, Session ID |
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Method | Description | Default | Required? |
|
||||
| --------- | ---- | ------ | ----------- | ------- | --------- |
|
||||
| reminderID | uint64 | PATH | Reminder ID | N/A | YES |
|
||||
| resource | string | POST | Resource | N/A | YES |
|
||||
| assignedTo | uint64 | POST | Assigned To | N/A | YES |
|
||||
| payload | sqlxTypes.JSONText | POST | Payload | N/A | YES |
|
||||
| remindAt | time.Time | POST | Remind At | N/A | YES |
|
||||
|
||||
## Read reminder by ID
|
||||
|
||||
#### Method
|
||||
|
||||
| URI | Protocol | Method | Authentication |
|
||||
| --- | -------- | ------ | -------------- |
|
||||
| `/reminder/{reminderID}` | HTTP/S | GET | Client ID, Session ID |
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Method | Description | Default | Required? |
|
||||
| --------- | ---- | ------ | ----------- | ------- | --------- |
|
||||
| reminderID | uint64 | PATH | Reminder ID | N/A | YES |
|
||||
|
||||
## Delete reminder
|
||||
|
||||
#### Method
|
||||
|
||||
| URI | Protocol | Method | Authentication |
|
||||
| --- | -------- | ------ | -------------- |
|
||||
| `/reminder/{reminderID}` | HTTP/S | DELETE | Client ID, Session ID |
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Method | Description | Default | Required? |
|
||||
| --------- | ---- | ------ | ----------- | ------- | --------- |
|
||||
| reminderID | uint64 | PATH | Reminder ID | N/A | YES |
|
||||
|
||||
## Dismiss reminder
|
||||
|
||||
#### Method
|
||||
|
||||
| URI | Protocol | Method | Authentication |
|
||||
| --- | -------- | ------ | -------------- |
|
||||
| `/reminder/{reminderID}/dismiss` | HTTP/S | PATCH | Client ID, Session ID |
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Method | Description | Default | Required? |
|
||||
| --------- | ---- | ------ | ----------- | ------- | --------- |
|
||||
| reminderID | uint64 | PATH | reminder ID | N/A | YES |
|
||||
|
||||
## Snooze reminder
|
||||
|
||||
#### Method
|
||||
|
||||
| URI | Protocol | Method | Authentication |
|
||||
| --- | -------- | ------ | -------------- |
|
||||
| `/reminder/{reminderID}/snooze` | HTTP/S | PATCH | Client ID, Session ID |
|
||||
|
||||
#### Request parameters
|
||||
|
||||
| Parameter | Type | Method | Description | Default | Required? |
|
||||
| --------- | ---- | ------ | ----------- | ------- | --------- |
|
||||
| reminderID | uint64 | PATH | reminder ID | N/A | YES |
|
||||
| remindAt | time.Time | POST | New Remind At Time | N/A | YES |
|
||||
|
||||
---
|
||||
|
||||
|
||||
|
||||
|
||||
# Roles
|
||||
|
||||
An organisation may have many roles. Roles may have many channels available. Access to channels may be shared between roles.
|
||||
|
||||
208
system/rest/handlers/reminder.go
Normal file
208
system/rest/handlers/reminder.go
Normal file
@@ -0,0 +1,208 @@
|
||||
package handlers
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `reminder.go`, `reminder.util.go` or `reminder_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `reminder.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
"github.com/titpetric/factory/resputil"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/pkg/logger"
|
||||
"github.com/cortezaproject/corteza-server/system/rest/request"
|
||||
)
|
||||
|
||||
// Internal API interface
|
||||
type ReminderAPI interface {
|
||||
List(context.Context, *request.ReminderList) (interface{}, error)
|
||||
Create(context.Context, *request.ReminderCreate) (interface{}, error)
|
||||
Update(context.Context, *request.ReminderUpdate) (interface{}, error)
|
||||
Read(context.Context, *request.ReminderRead) (interface{}, error)
|
||||
Delete(context.Context, *request.ReminderDelete) (interface{}, error)
|
||||
Dismiss(context.Context, *request.ReminderDismiss) (interface{}, error)
|
||||
Snooze(context.Context, *request.ReminderSnooze) (interface{}, error)
|
||||
}
|
||||
|
||||
// HTTP API interface
|
||||
type Reminder struct {
|
||||
List func(http.ResponseWriter, *http.Request)
|
||||
Create func(http.ResponseWriter, *http.Request)
|
||||
Update func(http.ResponseWriter, *http.Request)
|
||||
Read func(http.ResponseWriter, *http.Request)
|
||||
Delete func(http.ResponseWriter, *http.Request)
|
||||
Dismiss func(http.ResponseWriter, *http.Request)
|
||||
Snooze func(http.ResponseWriter, *http.Request)
|
||||
}
|
||||
|
||||
func NewReminder(h ReminderAPI) *Reminder {
|
||||
return &Reminder{
|
||||
List: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewReminderList()
|
||||
if err := params.Fill(r); err != nil {
|
||||
logger.LogParamError("Reminder.List", r, err)
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
value, err := h.List(r.Context(), params)
|
||||
if err != nil {
|
||||
logger.LogControllerError("Reminder.List", r, err, params.Auditable())
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
logger.LogControllerCall("Reminder.List", r, params.Auditable())
|
||||
if !serveHTTP(value, w, r) {
|
||||
resputil.JSON(w, value)
|
||||
}
|
||||
},
|
||||
Create: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewReminderCreate()
|
||||
if err := params.Fill(r); err != nil {
|
||||
logger.LogParamError("Reminder.Create", r, err)
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
value, err := h.Create(r.Context(), params)
|
||||
if err != nil {
|
||||
logger.LogControllerError("Reminder.Create", r, err, params.Auditable())
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
logger.LogControllerCall("Reminder.Create", r, params.Auditable())
|
||||
if !serveHTTP(value, w, r) {
|
||||
resputil.JSON(w, value)
|
||||
}
|
||||
},
|
||||
Update: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewReminderUpdate()
|
||||
if err := params.Fill(r); err != nil {
|
||||
logger.LogParamError("Reminder.Update", r, err)
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
value, err := h.Update(r.Context(), params)
|
||||
if err != nil {
|
||||
logger.LogControllerError("Reminder.Update", r, err, params.Auditable())
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
logger.LogControllerCall("Reminder.Update", r, params.Auditable())
|
||||
if !serveHTTP(value, w, r) {
|
||||
resputil.JSON(w, value)
|
||||
}
|
||||
},
|
||||
Read: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewReminderRead()
|
||||
if err := params.Fill(r); err != nil {
|
||||
logger.LogParamError("Reminder.Read", r, err)
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
value, err := h.Read(r.Context(), params)
|
||||
if err != nil {
|
||||
logger.LogControllerError("Reminder.Read", r, err, params.Auditable())
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
logger.LogControllerCall("Reminder.Read", r, params.Auditable())
|
||||
if !serveHTTP(value, w, r) {
|
||||
resputil.JSON(w, value)
|
||||
}
|
||||
},
|
||||
Delete: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewReminderDelete()
|
||||
if err := params.Fill(r); err != nil {
|
||||
logger.LogParamError("Reminder.Delete", r, err)
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
value, err := h.Delete(r.Context(), params)
|
||||
if err != nil {
|
||||
logger.LogControllerError("Reminder.Delete", r, err, params.Auditable())
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
logger.LogControllerCall("Reminder.Delete", r, params.Auditable())
|
||||
if !serveHTTP(value, w, r) {
|
||||
resputil.JSON(w, value)
|
||||
}
|
||||
},
|
||||
Dismiss: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewReminderDismiss()
|
||||
if err := params.Fill(r); err != nil {
|
||||
logger.LogParamError("Reminder.Dismiss", r, err)
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
value, err := h.Dismiss(r.Context(), params)
|
||||
if err != nil {
|
||||
logger.LogControllerError("Reminder.Dismiss", r, err, params.Auditable())
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
logger.LogControllerCall("Reminder.Dismiss", r, params.Auditable())
|
||||
if !serveHTTP(value, w, r) {
|
||||
resputil.JSON(w, value)
|
||||
}
|
||||
},
|
||||
Snooze: func(w http.ResponseWriter, r *http.Request) {
|
||||
defer r.Body.Close()
|
||||
params := request.NewReminderSnooze()
|
||||
if err := params.Fill(r); err != nil {
|
||||
logger.LogParamError("Reminder.Snooze", r, err)
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
|
||||
value, err := h.Snooze(r.Context(), params)
|
||||
if err != nil {
|
||||
logger.LogControllerError("Reminder.Snooze", r, err, params.Auditable())
|
||||
resputil.JSON(w, err)
|
||||
return
|
||||
}
|
||||
logger.LogControllerCall("Reminder.Snooze", r, params.Auditable())
|
||||
if !serveHTTP(value, w, r) {
|
||||
resputil.JSON(w, value)
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
func (h Reminder) MountRoutes(r chi.Router, middlewares ...func(http.Handler) http.Handler) {
|
||||
r.Group(func(r chi.Router) {
|
||||
r.Use(middlewares...)
|
||||
r.Get("/reminder/", h.List)
|
||||
r.Post("/reminder/", h.Create)
|
||||
r.Put("/reminder/{reminderID}", h.Update)
|
||||
r.Get("/reminder/{reminderID}", h.Read)
|
||||
r.Delete("/reminder/{reminderID}", h.Delete)
|
||||
r.Patch("/reminder/{reminderID}/dismiss", h.Dismiss)
|
||||
r.Patch("/reminder/{reminderID}/snooze", h.Snooze)
|
||||
})
|
||||
}
|
||||
47
system/rest/reminder.go
Normal file
47
system/rest/reminder.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package rest
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/system/rest/request"
|
||||
)
|
||||
|
||||
var _ = errors.Wrap
|
||||
|
||||
type Reminder struct {
|
||||
// xxx service.XXXService
|
||||
}
|
||||
|
||||
func (Reminder) New() *Reminder {
|
||||
return &Reminder{}
|
||||
}
|
||||
|
||||
func (ctrl *Reminder) List(ctx context.Context, r *request.ReminderList) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Reminder.list")
|
||||
}
|
||||
|
||||
func (ctrl *Reminder) Create(ctx context.Context, r *request.ReminderCreate) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Reminder.create")
|
||||
}
|
||||
|
||||
func (ctrl *Reminder) Update(ctx context.Context, r *request.ReminderUpdate) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Reminder.update")
|
||||
}
|
||||
|
||||
func (ctrl *Reminder) Read(ctx context.Context, r *request.ReminderRead) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Reminder.read")
|
||||
}
|
||||
|
||||
func (ctrl *Reminder) Delete(ctx context.Context, r *request.ReminderDelete) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Reminder.delete")
|
||||
}
|
||||
|
||||
func (ctrl *Reminder) Dismiss(ctx context.Context, r *request.ReminderDismiss) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Reminder.dismiss")
|
||||
}
|
||||
|
||||
func (ctrl *Reminder) Snooze(ctx context.Context, r *request.ReminderSnooze) (interface{}, error) {
|
||||
return nil, errors.New("Not implemented: Reminder.snooze")
|
||||
}
|
||||
466
system/rest/request/reminder.go
Normal file
466
system/rest/request/reminder.go
Normal file
@@ -0,0 +1,466 @@
|
||||
package request
|
||||
|
||||
/*
|
||||
Hello! This file is auto-generated from `docs/src/spec.json`.
|
||||
|
||||
For development:
|
||||
In order to update the generated files, edit this file under the location,
|
||||
add your struct fields, imports, API definitions and whatever you want, and:
|
||||
|
||||
1. run [spec](https://github.com/titpetric/spec) in the same folder,
|
||||
2. run `./_gen.php` in this folder.
|
||||
|
||||
You may edit `reminder.go`, `reminder.util.go` or `reminder_test.go` to
|
||||
implement your API calls, helper functions and tests. The file `reminder.go`
|
||||
is only generated the first time, and will not be overwritten if it exists.
|
||||
*/
|
||||
|
||||
import (
|
||||
"io"
|
||||
"strings"
|
||||
|
||||
"encoding/json"
|
||||
"mime/multipart"
|
||||
"net/http"
|
||||
|
||||
"github.com/go-chi/chi"
|
||||
"github.com/pkg/errors"
|
||||
|
||||
"time"
|
||||
|
||||
sqlxTypes "github.com/jmoiron/sqlx/types"
|
||||
)
|
||||
|
||||
var _ = chi.URLParam
|
||||
var _ = multipart.FileHeader{}
|
||||
|
||||
// Reminder list request parameters
|
||||
type ReminderList struct {
|
||||
Resource string
|
||||
AssignedTo uint64 `json:",string"`
|
||||
Page uint
|
||||
PerPage uint
|
||||
}
|
||||
|
||||
func NewReminderList() *ReminderList {
|
||||
return &ReminderList{}
|
||||
}
|
||||
|
||||
func (r ReminderList) Auditable() map[string]interface{} {
|
||||
var out = map[string]interface{}{}
|
||||
|
||||
out["resource"] = r.Resource
|
||||
out["assignedTo"] = r.AssignedTo
|
||||
out["page"] = r.Page
|
||||
out["perPage"] = r.PerPage
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *ReminderList) Fill(req *http.Request) (err error) {
|
||||
if strings.ToLower(req.Header.Get("content-type")) == "application/json" {
|
||||
err = json.NewDecoder(req.Body).Decode(r)
|
||||
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
err = nil
|
||||
case err != nil:
|
||||
return errors.Wrap(err, "error parsing http request body")
|
||||
}
|
||||
}
|
||||
|
||||
if err = req.ParseForm(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
get := map[string]string{}
|
||||
post := map[string]string{}
|
||||
urlQuery := req.URL.Query()
|
||||
for name, param := range urlQuery {
|
||||
get[name] = string(param[0])
|
||||
}
|
||||
postVars := req.Form
|
||||
for name, param := range postVars {
|
||||
post[name] = string(param[0])
|
||||
}
|
||||
|
||||
if val, ok := get["resource"]; ok {
|
||||
r.Resource = val
|
||||
}
|
||||
if val, ok := get["assignedTo"]; ok {
|
||||
r.AssignedTo = parseUInt64(val)
|
||||
}
|
||||
if val, ok := get["page"]; ok {
|
||||
r.Page = parseUint(val)
|
||||
}
|
||||
if val, ok := get["perPage"]; ok {
|
||||
r.PerPage = parseUint(val)
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
var _ RequestFiller = NewReminderList()
|
||||
|
||||
// Reminder create request parameters
|
||||
type ReminderCreate struct {
|
||||
Resource string
|
||||
AssignedTo uint64 `json:",string"`
|
||||
Payload sqlxTypes.JSONText
|
||||
RemindAt time.Time
|
||||
}
|
||||
|
||||
func NewReminderCreate() *ReminderCreate {
|
||||
return &ReminderCreate{}
|
||||
}
|
||||
|
||||
func (r ReminderCreate) Auditable() map[string]interface{} {
|
||||
var out = map[string]interface{}{}
|
||||
|
||||
out["resource"] = r.Resource
|
||||
out["assignedTo"] = r.AssignedTo
|
||||
out["payload"] = r.Payload
|
||||
out["remindAt"] = r.RemindAt
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *ReminderCreate) Fill(req *http.Request) (err error) {
|
||||
if strings.ToLower(req.Header.Get("content-type")) == "application/json" {
|
||||
err = json.NewDecoder(req.Body).Decode(r)
|
||||
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
err = nil
|
||||
case err != nil:
|
||||
return errors.Wrap(err, "error parsing http request body")
|
||||
}
|
||||
}
|
||||
|
||||
if err = req.ParseForm(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
get := map[string]string{}
|
||||
post := map[string]string{}
|
||||
urlQuery := req.URL.Query()
|
||||
for name, param := range urlQuery {
|
||||
get[name] = string(param[0])
|
||||
}
|
||||
postVars := req.Form
|
||||
for name, param := range postVars {
|
||||
post[name] = string(param[0])
|
||||
}
|
||||
|
||||
if val, ok := post["resource"]; ok {
|
||||
r.Resource = val
|
||||
}
|
||||
if val, ok := post["assignedTo"]; ok {
|
||||
r.AssignedTo = parseUInt64(val)
|
||||
}
|
||||
if val, ok := post["payload"]; ok {
|
||||
|
||||
if r.Payload, err = parseJSONTextWithErr(val); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if val, ok := post["remindAt"]; ok {
|
||||
|
||||
if r.RemindAt, err = parseISODateWithErr(val); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
var _ RequestFiller = NewReminderCreate()
|
||||
|
||||
// Reminder update request parameters
|
||||
type ReminderUpdate struct {
|
||||
ReminderID uint64 `json:",string"`
|
||||
Resource string
|
||||
AssignedTo uint64 `json:",string"`
|
||||
Payload sqlxTypes.JSONText
|
||||
RemindAt time.Time
|
||||
}
|
||||
|
||||
func NewReminderUpdate() *ReminderUpdate {
|
||||
return &ReminderUpdate{}
|
||||
}
|
||||
|
||||
func (r ReminderUpdate) Auditable() map[string]interface{} {
|
||||
var out = map[string]interface{}{}
|
||||
|
||||
out["reminderID"] = r.ReminderID
|
||||
out["resource"] = r.Resource
|
||||
out["assignedTo"] = r.AssignedTo
|
||||
out["payload"] = r.Payload
|
||||
out["remindAt"] = r.RemindAt
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *ReminderUpdate) Fill(req *http.Request) (err error) {
|
||||
if strings.ToLower(req.Header.Get("content-type")) == "application/json" {
|
||||
err = json.NewDecoder(req.Body).Decode(r)
|
||||
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
err = nil
|
||||
case err != nil:
|
||||
return errors.Wrap(err, "error parsing http request body")
|
||||
}
|
||||
}
|
||||
|
||||
if err = req.ParseForm(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
get := map[string]string{}
|
||||
post := map[string]string{}
|
||||
urlQuery := req.URL.Query()
|
||||
for name, param := range urlQuery {
|
||||
get[name] = string(param[0])
|
||||
}
|
||||
postVars := req.Form
|
||||
for name, param := range postVars {
|
||||
post[name] = string(param[0])
|
||||
}
|
||||
|
||||
r.ReminderID = parseUInt64(chi.URLParam(req, "reminderID"))
|
||||
if val, ok := post["resource"]; ok {
|
||||
r.Resource = val
|
||||
}
|
||||
if val, ok := post["assignedTo"]; ok {
|
||||
r.AssignedTo = parseUInt64(val)
|
||||
}
|
||||
if val, ok := post["payload"]; ok {
|
||||
|
||||
if r.Payload, err = parseJSONTextWithErr(val); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if val, ok := post["remindAt"]; ok {
|
||||
|
||||
if r.RemindAt, err = parseISODateWithErr(val); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
var _ RequestFiller = NewReminderUpdate()
|
||||
|
||||
// Reminder read request parameters
|
||||
type ReminderRead struct {
|
||||
ReminderID uint64 `json:",string"`
|
||||
}
|
||||
|
||||
func NewReminderRead() *ReminderRead {
|
||||
return &ReminderRead{}
|
||||
}
|
||||
|
||||
func (r ReminderRead) Auditable() map[string]interface{} {
|
||||
var out = map[string]interface{}{}
|
||||
|
||||
out["reminderID"] = r.ReminderID
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *ReminderRead) Fill(req *http.Request) (err error) {
|
||||
if strings.ToLower(req.Header.Get("content-type")) == "application/json" {
|
||||
err = json.NewDecoder(req.Body).Decode(r)
|
||||
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
err = nil
|
||||
case err != nil:
|
||||
return errors.Wrap(err, "error parsing http request body")
|
||||
}
|
||||
}
|
||||
|
||||
if err = req.ParseForm(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
get := map[string]string{}
|
||||
post := map[string]string{}
|
||||
urlQuery := req.URL.Query()
|
||||
for name, param := range urlQuery {
|
||||
get[name] = string(param[0])
|
||||
}
|
||||
postVars := req.Form
|
||||
for name, param := range postVars {
|
||||
post[name] = string(param[0])
|
||||
}
|
||||
|
||||
r.ReminderID = parseUInt64(chi.URLParam(req, "reminderID"))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
var _ RequestFiller = NewReminderRead()
|
||||
|
||||
// Reminder delete request parameters
|
||||
type ReminderDelete struct {
|
||||
ReminderID uint64 `json:",string"`
|
||||
}
|
||||
|
||||
func NewReminderDelete() *ReminderDelete {
|
||||
return &ReminderDelete{}
|
||||
}
|
||||
|
||||
func (r ReminderDelete) Auditable() map[string]interface{} {
|
||||
var out = map[string]interface{}{}
|
||||
|
||||
out["reminderID"] = r.ReminderID
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *ReminderDelete) Fill(req *http.Request) (err error) {
|
||||
if strings.ToLower(req.Header.Get("content-type")) == "application/json" {
|
||||
err = json.NewDecoder(req.Body).Decode(r)
|
||||
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
err = nil
|
||||
case err != nil:
|
||||
return errors.Wrap(err, "error parsing http request body")
|
||||
}
|
||||
}
|
||||
|
||||
if err = req.ParseForm(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
get := map[string]string{}
|
||||
post := map[string]string{}
|
||||
urlQuery := req.URL.Query()
|
||||
for name, param := range urlQuery {
|
||||
get[name] = string(param[0])
|
||||
}
|
||||
postVars := req.Form
|
||||
for name, param := range postVars {
|
||||
post[name] = string(param[0])
|
||||
}
|
||||
|
||||
r.ReminderID = parseUInt64(chi.URLParam(req, "reminderID"))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
var _ RequestFiller = NewReminderDelete()
|
||||
|
||||
// Reminder dismiss request parameters
|
||||
type ReminderDismiss struct {
|
||||
ReminderID uint64 `json:",string"`
|
||||
}
|
||||
|
||||
func NewReminderDismiss() *ReminderDismiss {
|
||||
return &ReminderDismiss{}
|
||||
}
|
||||
|
||||
func (r ReminderDismiss) Auditable() map[string]interface{} {
|
||||
var out = map[string]interface{}{}
|
||||
|
||||
out["reminderID"] = r.ReminderID
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *ReminderDismiss) Fill(req *http.Request) (err error) {
|
||||
if strings.ToLower(req.Header.Get("content-type")) == "application/json" {
|
||||
err = json.NewDecoder(req.Body).Decode(r)
|
||||
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
err = nil
|
||||
case err != nil:
|
||||
return errors.Wrap(err, "error parsing http request body")
|
||||
}
|
||||
}
|
||||
|
||||
if err = req.ParseForm(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
get := map[string]string{}
|
||||
post := map[string]string{}
|
||||
urlQuery := req.URL.Query()
|
||||
for name, param := range urlQuery {
|
||||
get[name] = string(param[0])
|
||||
}
|
||||
postVars := req.Form
|
||||
for name, param := range postVars {
|
||||
post[name] = string(param[0])
|
||||
}
|
||||
|
||||
r.ReminderID = parseUInt64(chi.URLParam(req, "reminderID"))
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
var _ RequestFiller = NewReminderDismiss()
|
||||
|
||||
// Reminder snooze request parameters
|
||||
type ReminderSnooze struct {
|
||||
ReminderID uint64 `json:",string"`
|
||||
RemindAt time.Time
|
||||
}
|
||||
|
||||
func NewReminderSnooze() *ReminderSnooze {
|
||||
return &ReminderSnooze{}
|
||||
}
|
||||
|
||||
func (r ReminderSnooze) Auditable() map[string]interface{} {
|
||||
var out = map[string]interface{}{}
|
||||
|
||||
out["reminderID"] = r.ReminderID
|
||||
out["remindAt"] = r.RemindAt
|
||||
|
||||
return out
|
||||
}
|
||||
|
||||
func (r *ReminderSnooze) Fill(req *http.Request) (err error) {
|
||||
if strings.ToLower(req.Header.Get("content-type")) == "application/json" {
|
||||
err = json.NewDecoder(req.Body).Decode(r)
|
||||
|
||||
switch {
|
||||
case err == io.EOF:
|
||||
err = nil
|
||||
case err != nil:
|
||||
return errors.Wrap(err, "error parsing http request body")
|
||||
}
|
||||
}
|
||||
|
||||
if err = req.ParseForm(); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
get := map[string]string{}
|
||||
post := map[string]string{}
|
||||
urlQuery := req.URL.Query()
|
||||
for name, param := range urlQuery {
|
||||
get[name] = string(param[0])
|
||||
}
|
||||
postVars := req.Form
|
||||
for name, param := range postVars {
|
||||
post[name] = string(param[0])
|
||||
}
|
||||
|
||||
r.ReminderID = parseUInt64(chi.URLParam(req, "reminderID"))
|
||||
if val, ok := post["remindAt"]; ok {
|
||||
|
||||
if r.RemindAt, err = parseISODateWithErr(val); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return err
|
||||
}
|
||||
|
||||
var _ RequestFiller = NewReminderSnooze()
|
||||
@@ -6,6 +6,7 @@ import (
|
||||
"regexp"
|
||||
"strconv"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/jmoiron/sqlx/types"
|
||||
"github.com/pkg/errors"
|
||||
@@ -19,6 +20,19 @@ func parseJSONTextWithErr(s string) (types.JSONText, error) {
|
||||
return *result, err
|
||||
}
|
||||
|
||||
func parseISODateWithErr(s string) (time.Time, error) {
|
||||
return time.Parse(time.RFC3339, s)
|
||||
}
|
||||
|
||||
func parseISODatePtrWithErr(s string) (*time.Time, error) {
|
||||
t, err := parseISODateWithErr(s)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return &t, nil
|
||||
}
|
||||
|
||||
// parseInt parses a string to int
|
||||
func parseInt(s string) int {
|
||||
if s == "" {
|
||||
|
||||
@@ -36,5 +36,7 @@ func MountRoutes(r chi.Router) {
|
||||
|
||||
handlers.NewAutomationScript(AutomationScript{}.New()).MountRoutes(r)
|
||||
handlers.NewAutomationTrigger(AutomationTrigger{}.New()).MountRoutes(r)
|
||||
|
||||
handlers.NewReminder(Reminder{}.New()).MountRoutes(r)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user