package main import ( "bytes" "fmt" "net/http" "time" "git.k6n.net/go-cart-actor/pkg/cart" "github.com/gogo/protobuf/proto" ) type CartClient struct { httpClient *http.Client baseUrl string } func NewCartClient(baseUrl string) *CartClient { return &CartClient{ httpClient: &http.Client{Timeout: 10 * time.Second}, baseUrl: baseUrl, } } func (c *CartClient) ApplyMutation(cartId cart.CartId, mutation proto.Message) error { url := fmt.Sprintf("%s/internal/cart/%s/mutation", c.baseUrl, cartId.String()) data, err := proto.Marshal(mutation) if err != nil { return err } req, err := http.NewRequest("POST", url, bytes.NewReader(data)) if err != nil { return err } req.Header.Set("Content-Type", "application/protobuf") resp, err := c.httpClient.Do(req) if err != nil { return err } defer resp.Body.Close() if resp.StatusCode != http.StatusOK { return fmt.Errorf("cart mutation failed: %s", resp.Status) } return nil }