add profile actors
This commit is contained in:
@@ -73,6 +73,30 @@ func CheckoutHandler(applier CheckoutApplier, orderSvc ...OrderApplier) http.Han
|
||||
return withUCPAgent(withJSONContentType(mux))
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Customer HTTP handler mounting
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
// CustomerHandler returns an http.Handler that routes UCP customer/profile
|
||||
// REST endpoints. Mount it under any prefix (e.g. /ucp/v1) in a ServeMux:
|
||||
//
|
||||
// mux.Handle("/ucp/v1/customers", ucp.CustomerHandler(pool))
|
||||
// mux.Handle("/ucp/v1/customers/", ucp.CustomerHandler(pool))
|
||||
//
|
||||
// To sign responses with RFC 9421 HTTP Message Signatures, wrap with WithSigning:
|
||||
//
|
||||
// mux.Handle("/ucp/v1/customers", ucp.WithSigning(ucp.CustomerHandler(pool), signer))
|
||||
func CustomerHandler(applier ProfileApplier) http.Handler {
|
||||
s := NewCustomerServer(applier)
|
||||
mux := http.NewServeMux()
|
||||
mux.HandleFunc("GET /{id}", s.handleGetCustomer)
|
||||
mux.HandleFunc("PUT /{id}", s.handleUpdateCustomer)
|
||||
mux.HandleFunc("POST /{id}/addresses", s.handleAddAddress)
|
||||
mux.HandleFunc("PUT /{id}/addresses/{addressId}", s.handleUpdateAddress)
|
||||
mux.HandleFunc("DELETE /{id}/addresses/{addressId}", s.handleRemoveAddress)
|
||||
return withUCPAgent(withJSONContentType(mux))
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
// Combined handler for mounting all UCP endpoints under one prefix
|
||||
// ---------------------------------------------------------------------------
|
||||
@@ -81,6 +105,7 @@ func CheckoutHandler(applier CheckoutApplier, orderSvc ...OrderApplier) http.Han
|
||||
type Options struct {
|
||||
CheckoutApplier CheckoutApplier // when set, mounts /checkout-sessions
|
||||
OrderApplier OrderApplier // optional order creation for complete endpoint
|
||||
ProfileApplier ProfileApplier // when set, mounts /customers + enables identity linking
|
||||
}
|
||||
|
||||
// Handler returns an http.Handler that serves all mounted UCP endpoints under
|
||||
@@ -88,12 +113,16 @@ type Options struct {
|
||||
//
|
||||
// mux.Handle("/ucp/v1/", ucp.Handler(pool, ucp.Options{
|
||||
// CheckoutApplier: checkoutPool,
|
||||
// ProfileApplier: profilePool,
|
||||
// }))
|
||||
func Handler(cartApplier CartApplier, opts Options) http.Handler {
|
||||
mux := http.NewServeMux()
|
||||
|
||||
// Cart endpoints
|
||||
cartSrv := NewCartServer(cartApplier)
|
||||
if opts.ProfileApplier != nil {
|
||||
cartSrv.SetProfileApplier(opts.ProfileApplier)
|
||||
}
|
||||
mux.HandleFunc("POST /carts", cartSrv.handleCreateCart)
|
||||
mux.HandleFunc("GET /carts/{id}", cartSrv.handleGetCart)
|
||||
mux.HandleFunc("PUT /carts/{id}", cartSrv.handleUpdateCart)
|
||||
@@ -106,6 +135,9 @@ func Handler(cartApplier CartApplier, opts Options) http.Handler {
|
||||
orderOpts = []OrderApplier{opts.OrderApplier}
|
||||
}
|
||||
checkoutSrv := NewCheckoutServer(opts.CheckoutApplier, orderOpts...)
|
||||
if opts.ProfileApplier != nil {
|
||||
checkoutSrv.SetProfileApplier(opts.ProfileApplier)
|
||||
}
|
||||
mux.HandleFunc("POST /checkout-sessions", checkoutSrv.handleCreateCheckout)
|
||||
mux.HandleFunc("GET /checkout-sessions/{id}", checkoutSrv.handleGetCheckout)
|
||||
mux.HandleFunc("PUT /checkout-sessions/{id}", checkoutSrv.handleUpdateCheckout)
|
||||
@@ -113,6 +145,16 @@ func Handler(cartApplier CartApplier, opts Options) http.Handler {
|
||||
mux.HandleFunc("POST /checkout-sessions/{id}/cancel", checkoutSrv.handleCancelCheckout)
|
||||
}
|
||||
|
||||
// Customer endpoints (optional)
|
||||
if opts.ProfileApplier != nil {
|
||||
customerSrv := NewCustomerServer(opts.ProfileApplier)
|
||||
mux.HandleFunc("GET /customers/{id}", customerSrv.handleGetCustomer)
|
||||
mux.HandleFunc("PUT /customers/{id}", customerSrv.handleUpdateCustomer)
|
||||
mux.HandleFunc("POST /customers/{id}/addresses", customerSrv.handleAddAddress)
|
||||
mux.HandleFunc("PUT /customers/{id}/addresses/{addressId}", customerSrv.handleUpdateAddress)
|
||||
mux.HandleFunc("DELETE /customers/{id}/addresses/{addressId}", customerSrv.handleRemoveAddress)
|
||||
}
|
||||
|
||||
return withUCPAgent(withJSONContentType(mux))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user