71 lines
1.3 KiB
Go
71 lines
1.3 KiB
Go
package onspring
|
|||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"net/http"
|
||
|
|
"strconv"
|
||
|
|
)
|
||
|
|
|
||
|
|
const (
|
||
|
|
appsPath = "/apps"
|
||
|
|
)
|
||
|
|
|
||
|
|
type AppsEndpoint struct {
|
||
|
|
client *Client
|
||
|
|
}
|
||
|
|
|
||
|
|
type PagingRequest struct {
|
||
|
|
pageSize int
|
||
|
|
pageNumber int
|
||
|
|
}
|
||
|
|
|
||
|
|
func (pr *PagingRequest) ToParams() map[string]string {
|
||
|
|
return map[string]string{
|
||
|
|
"pageSize": strconv.Itoa(pr.pageNumber),
|
||
|
|
"pageNumber": strconv.Itoa(pr.pageSize),
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
type PagingOption func(*PagingRequest)
|
||
|
|
|
||
|
|
type Page[T any] struct {
|
||
|
|
PageNumber int `json:"pageNumber"`
|
||
|
|
PageSize int `json:"pageSize"`
|
||
|
|
TotalPages int `json:"totalPages"`
|
||
|
|
TotalRecords int `json:"totalRecords"`
|
||
|
|
Items []T `json:"items"`
|
||
|
|
}
|
||
|
|
|
||
|
|
type App struct {
|
||
|
|
Href string `json:"href"`
|
||
|
|
Id int `json:"id"`
|
||
|
|
Name string `json:"name"`
|
||
|
|
}
|
||
|
|
|
||
|
|
func (p *AppsEndpoint) Get(ctx context.Context, pagingOpts ...PagingOption) (Page[App], error) {
|
||
|
|
pagingRequest := &PagingRequest{
|
||
|
|
pageSize: 1,
|
||
|
|
pageNumber: 50,
|
||
|
|
}
|
||
|
|
|
||
|
|
for _, opt := range pagingOpts {
|
||
|
|
opt(pagingRequest)
|
||
|
|
}
|
||
|
|
|
||
|
|
req, requestCreationErr := p.client.newRequest(ctx, http.MethodGet, appsPath, pagingRequest.ToParams(), nil)
|
||
|
|
|
||
|
|
var page Page[App]
|
||
|
|
|
||
|
|
if requestCreationErr != nil {
|
||
|
|
return page, requestCreationErr
|
||
|
|
}
|
||
|
|
|
||
|
|
responseErr := p.client.doWithJsonResponse(req, &page)
|
||
|
|
|
||
|
|
if responseErr != nil {
|
||
|
|
return page, responseErr
|
||
|
|
}
|
||
|
|
|
||
|
|
return page, nil
|
||
|
|
}
|