56 lines
1.4 KiB
Go
56 lines
1.4 KiB
Go
|
|
package resource
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"net/http"
|
||
|
|
"strconv"
|
||
|
|
|
||
|
|
nhttp "github.com/Gleipnir-Technology/nidus-sync/http"
|
||
|
|
"github.com/Gleipnir-Technology/nidus-sync/platform"
|
||
|
|
"github.com/Gleipnir-Technology/nidus-sync/platform/types"
|
||
|
|
//"github.com/aarondl/opt/null"
|
||
|
|
"github.com/gorilla/mux"
|
||
|
|
)
|
||
|
|
|
||
|
|
type mailerR struct {
|
||
|
|
router *router
|
||
|
|
}
|
||
|
|
|
||
|
|
func Mailer(r *router) *mailerR {
|
||
|
|
return &mailerR{
|
||
|
|
router: r,
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
func (res *mailerR) ByIDGet(ctx context.Context, r *http.Request, user platform.User, query QueryParams) (*types.Mailer, *nhttp.ErrorWithStatus) {
|
||
|
|
vars := mux.Vars(r)
|
||
|
|
id_str := vars["id"]
|
||
|
|
id, err := strconv.Atoi(id_str)
|
||
|
|
if err != nil {
|
||
|
|
return nil, nhttp.NewBadRequest("'%s' is not a valid mailer ID: %w", id_str, err)
|
||
|
|
}
|
||
|
|
mailer, err := platform.MailerByID(ctx, user, int32(id))
|
||
|
|
if err != nil {
|
||
|
|
return nil, nhttp.NewError("mailer by id: %w", err)
|
||
|
|
}
|
||
|
|
return mailer, nil
|
||
|
|
}
|
||
|
|
func (res *mailerR) List(ctx context.Context, r *http.Request, user platform.User, query QueryParams) ([]*types.Mailer, *nhttp.ErrorWithStatus) {
|
||
|
|
limit := 1000
|
||
|
|
if query.Limit != nil {
|
||
|
|
limit = *query.Limit
|
||
|
|
}
|
||
|
|
mailers, err := platform.MailerList(ctx, user, limit)
|
||
|
|
if err != nil {
|
||
|
|
return nil, nhttp.NewError("list signals: %w", err)
|
||
|
|
}
|
||
|
|
for _, mailer := range mailers {
|
||
|
|
uri, err := res.router.IDToURI("mailer.ByIDGet", int(mailer.ID))
|
||
|
|
if err != nil {
|
||
|
|
return nil, nhttp.NewError("set uri: %w", err)
|
||
|
|
}
|
||
|
|
mailer.URI = uri
|
||
|
|
}
|
||
|
|
return mailers, nil
|
||
|
|
}
|