Files

102 lines
2.8 KiB
Go

package v1
import (
"net/http"
"strings"
"github.com/formancehq/stack/libs/go-libs/bun/bunpaginate"
ledger "github.com/formancehq/ledger/internal"
"github.com/formancehq/ledger/internal/engine/command"
"github.com/formancehq/ledger/internal/storage/ledgerstore"
"github.com/formancehq/stack/libs/go-libs/collectionutils"
"github.com/formancehq/stack/libs/go-libs/pointer"
"github.com/formancehq/stack/libs/go-libs/query"
)
func getPITFilter(r *http.Request) (*ledgerstore.PITFilter, error) {
pitString := r.URL.Query().Get("pit")
if pitString == "" {
return &ledgerstore.PITFilter{}, nil
}
pit, err := ledger.ParseTime(pitString)
if err != nil {
return nil, err
}
return &ledgerstore.PITFilter{
PIT: &pit,
}, nil
}
func getPITFilterWithVolumes(r *http.Request) (*ledgerstore.PITFilterWithVolumes, error) {
pit, err := getPITFilter(r)
if err != nil {
return nil, err
}
return &ledgerstore.PITFilterWithVolumes{
PITFilter: *pit,
ExpandVolumes: collectionutils.Contains(r.URL.Query()["expand"], "volumes"),
ExpandEffectiveVolumes: collectionutils.Contains(r.URL.Query()["expand"], "effectiveVolumes"),
}, nil
}
func getQueryBuilder(r *http.Request) (query.Builder, error) {
return query.ParseJSON(r.URL.Query().Get("query"))
}
func getPaginatedQueryOptionsOfPITFilterWithVolumes(r *http.Request) (*ledgerstore.PaginatedQueryOptions[ledgerstore.PITFilterWithVolumes], error) {
qb, err := getQueryBuilder(r)
if err != nil {
return nil, err
}
pitFilter, err := getPITFilterWithVolumes(r)
if err != nil {
return nil, err
}
pageSize, err := bunpaginate.GetPageSize(r, bunpaginate.WithMaxPageSize(MaxPageSize), bunpaginate.WithDefaultPageSize(DefaultPageSize))
if err != nil {
return nil, err
}
return pointer.For(ledgerstore.NewPaginatedQueryOptions(*pitFilter).
WithQueryBuilder(qb).
WithPageSize(pageSize)), nil
}
func getPaginatedQueryOptionsOfPITFilter(r *http.Request) (*ledgerstore.PaginatedQueryOptions[ledgerstore.PITFilter], error) {
qb, err := getQueryBuilder(r)
if err != nil {
return nil, err
}
pitFilter, err := getPITFilter(r)
if err != nil {
return nil, err
}
pageSize, err := bunpaginate.GetPageSize(r,
bunpaginate.WithDefaultPageSize(DefaultPageSize),
bunpaginate.WithMaxPageSize(MaxPageSize))
if err != nil {
return nil, err
}
return pointer.For(ledgerstore.NewPaginatedQueryOptions(*pitFilter).
WithQueryBuilder(qb).
WithPageSize(pageSize)), nil
}
func getCommandParameters(r *http.Request) command.Parameters {
dryRunAsString := r.URL.Query().Get("preview")
dryRun := strings.ToUpper(dryRunAsString) == "YES" || strings.ToUpper(dryRunAsString) == "TRUE" || dryRunAsString == "1"
idempotencyKey := r.Header.Get("Idempotency-Key")
return command.Parameters{
DryRun: dryRun,
IdempotencyKey: idempotencyKey,
}
}