File size: 2,004 Bytes
d6f631f | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | package httpdriver
import (
"context"
"fmt"
"net/http"
"github.com/openmeterio/openmeter/api"
progressmanagerentity "github.com/openmeterio/openmeter/openmeter/progressmanager/entity"
"github.com/openmeterio/openmeter/pkg/framework/commonhttp"
"github.com/openmeterio/openmeter/pkg/framework/transport/httptransport"
"github.com/openmeterio/openmeter/pkg/models"
)
type (
GetProgressRequest = progressmanagerentity.GetProgressInput
GetProgressResponse = api.Progress
GetProgressHandler httptransport.HandlerWithArgs[GetProgressRequest, GetProgressResponse, string]
)
// GetProgress returns a handler for getting the progress by id.
func (h *handler) GetProgress() GetProgressHandler {
return httptransport.NewHandlerWithArgs(
func(ctx context.Context, r *http.Request, progressID string) (GetProgressRequest, error) {
ns, err := h.resolveNamespace(ctx)
if err != nil {
return GetProgressRequest{}, err
}
return GetProgressRequest{
ProgressID: progressmanagerentity.ProgressID{
NamespacedModel: models.NamespacedModel{
Namespace: ns,
},
ID: progressID,
},
}, nil
},
func(ctx context.Context, request GetProgressRequest) (GetProgressResponse, error) {
progress, err := h.service.GetProgress(ctx, request)
if err != nil {
return GetProgressResponse{}, err
}
if progress == nil {
return GetProgressResponse{}, fmt.Errorf("progress exists but contains nil data for ID: %s", request.ProgressID.ID)
}
apiProgress := progressToAPI(*progress)
return apiProgress, nil
},
commonhttp.JSONResponseEncoderWithStatus[GetProgressResponse](http.StatusOK),
httptransport.AppendOptions(
h.options,
httptransport.WithOperationName("getProgress"),
)...,
)
}
// progressToAPI converts a Progress to an API Progress
func progressToAPI(p progressmanagerentity.Progress) api.Progress {
return api.Progress{
Success: p.Success,
Failed: p.Failed,
Total: p.Total,
UpdatedAt: p.UpdatedAt,
}
}
|