Leon4gr45's picture
Upload folder using huggingface_hub (part 6)
d6f631f verified
Raw
History Blame Contribute Delete
5.45 kB
package httpdriver
import (
"context"
"errors"
"fmt"
"net/http"
"github.com/samber/lo"
"github.com/openmeterio/openmeter/api"
"github.com/openmeterio/openmeter/openmeter/notification"
"github.com/openmeterio/openmeter/pkg/framework/commonhttp"
"github.com/openmeterio/openmeter/pkg/framework/transport/httptransport"
"github.com/openmeterio/openmeter/pkg/models"
"github.com/openmeterio/openmeter/pkg/pagination"
"github.com/openmeterio/openmeter/pkg/sortx"
)
type (
ListEventsRequest = notification.ListEventsInput
ListEventsResponse = api.NotificationEventPaginatedResponse
ListEventsParams = api.ListNotificationEventsParams
ListEventsHandler httptransport.HandlerWithArgs[ListEventsRequest, ListEventsResponse, ListEventsParams]
)
func (h *handler) ListEvents() ListEventsHandler {
return httptransport.NewHandlerWithArgs(
func(ctx context.Context, r *http.Request, params ListEventsParams) (ListEventsRequest, error) {
ns, err := h.resolveNamespace(ctx)
if err != nil {
return ListEventsRequest{}, fmt.Errorf("failed to resolve namespace: %w", err)
}
req := ListEventsRequest{
Namespaces: []string{ns},
Order: sortx.Order(lo.FromPtrOr(params.Order, api.SortOrderDESC)),
OrderBy: notification.OrderBy(lo.FromPtrOr(params.OrderBy, api.NotificationEventOrderByCreatedAt)),
Page: pagination.Page{
PageSize: lo.FromPtrOr(params.PageSize, notification.DefaultPageSize),
PageNumber: lo.FromPtrOr(params.Page, notification.DefaultPageNumber),
},
Subjects: lo.FromPtr(params.Subject),
Features: lo.FromPtr(params.Feature),
Rules: lo.FromPtr(params.Rule),
Channels: lo.FromPtr(params.Channel),
From: lo.FromPtr(params.From),
To: lo.FromPtr(params.To),
}
return req, nil
},
func(ctx context.Context, request ListEventsRequest) (ListEventsResponse, error) {
resp, err := h.service.ListEvents(ctx, request)
if err != nil {
return ListEventsResponse{}, fmt.Errorf("failed to list events: %w", err)
}
items := make([]api.NotificationEvent, 0, len(resp.Items))
for _, event := range resp.Items {
var item api.NotificationEvent
item, err = FromEvent(event)
if err != nil {
return ListEventsResponse{}, fmt.Errorf("failed to cast event: %w", err)
}
items = append(items, item)
}
return ListEventsResponse{
Items: items,
Page: resp.Page.PageNumber,
PageSize: resp.Page.PageSize,
TotalCount: resp.TotalCount,
}, nil
},
commonhttp.JSONResponseEncoderWithStatus[ListEventsResponse](http.StatusOK),
httptransport.AppendOptions(
h.options,
httptransport.WithOperationName("listNotificationEvents"),
httptransport.WithErrorEncoder(errorEncoder()),
)...,
)
}
type (
GetEventRequest = notification.GetEventInput
GetEventResponse = api.NotificationEvent
GetEventHandler httptransport.HandlerWithArgs[GetEventRequest, GetEventResponse, string]
)
func (h *handler) GetEvent() GetEventHandler {
return httptransport.NewHandlerWithArgs(
func(ctx context.Context, r *http.Request, eventID string) (GetEventRequest, error) {
ns, err := h.resolveNamespace(ctx)
if err != nil {
return GetEventRequest{}, fmt.Errorf("failed to resolve namespace: %w", err)
}
req := GetEventRequest{
Namespace: ns,
ID: eventID,
}
return req, nil
},
func(ctx context.Context, request GetEventRequest) (GetEventResponse, error) {
event, err := h.service.GetEvent(ctx, request)
if err != nil {
return GetEventResponse{}, fmt.Errorf("failed to get event: %w", err)
}
if event == nil {
return GetEventResponse{}, errors.New("failed to create test event: nil event returned")
}
return FromEvent(*event)
},
commonhttp.JSONResponseEncoderWithStatus[GetEventResponse](http.StatusOK),
httptransport.AppendOptions(
h.options,
httptransport.WithOperationName("getNotificationEvent"),
httptransport.WithErrorEncoder(errorEncoder()),
)...,
)
}
type (
ResendEventRequest = notification.ResendEventInput
ResendEventResponse = interface{}
ResendEventHandler httptransport.HandlerWithArgs[ResendEventRequest, ResendEventResponse, string]
)
func (h *handler) ResendEvent() ResendEventHandler {
return httptransport.NewHandlerWithArgs(
func(ctx context.Context, r *http.Request, eventID string) (ResendEventRequest, error) {
body := api.NotificationEventResendRequest{}
if err := commonhttp.JSONRequestBodyDecoder(r, &body); err != nil {
return ResendEventRequest{}, fmt.Errorf("field to decode resend event request: %w", err)
}
ns, err := h.resolveNamespace(ctx)
if err != nil {
return ResendEventRequest{}, fmt.Errorf("failed to resolve namespace: %w", err)
}
req := ResendEventRequest{
NamespacedID: models.NamespacedID{
Namespace: ns,
ID: eventID,
},
Channels: lo.FromPtr(body.Channels),
}
return req, nil
},
func(ctx context.Context, request ResendEventRequest) (ResendEventResponse, error) {
err := h.service.ResendEvent(ctx, request)
if err != nil {
return nil, fmt.Errorf("failed to resend event: %w", err)
}
return nil, nil
},
commonhttp.EmptyResponseEncoder[ResendEventResponse](http.StatusAccepted),
httptransport.AppendOptions(
h.options,
httptransport.WithOperationName("resendNotificationEvent"),
httptransport.WithErrorEncoder(errorEncoder()),
)...,
)
}