ref(effect) supprime une ancienne version de service API

This commit is contained in:
gcch 2026-04-29 10:45:49 +02:00
commit c66cf7faba

View file

@ -1,52 +0,0 @@
import { Context, Effect, Layer, Schema } from "effect";
import { ENTETE_WC_NONCE, ROUTE_API_AJOUTE_ARTICLE_PANIER } from "../scripts/constantes/api.ts";
import { CartProduct } from "./schemas/api.ts";
/** Délai par défaut pour la réalisation d'une Requête. */
const REQUEST_TIMEOUT = 5_000;
/** Représente un soucis lors de l'exécution d'une Requête auprès de l'API WooCommerce. */
class APIError extends Schema.TaggedErrorClass<APIError>()("APIError", {
cause: Schema.Defect,
}) {}
class WooCommerceAPI extends Context.Service<
WooCommerceAPI,
{
AddProductToCart: (nonce: string, requestBody: CartProduct) => Effect.Effect<Response, APIError>;
}
>()("haikuatelier.fr/WooCommerceAPI") {
static readonly layer = Layer.effect(
WooCommerceAPI,
// oxlint-disable-next-line require-yield
Effect.gen(function*() {
const AddProductToCart = Effect.fn("AddProductToCart")(function*(nonce: string, product: CartProduct) {
const response = yield* Effect.tryPromise({
catch: error => new APIError({ cause: error }),
try: async () =>
fetch(ROUTE_API_AJOUTE_ARTICLE_PANIER, {
// Convertis en chaîne de caractères (équivalent à JSON.stringify).
body: Schema.encodeSync(Schema.fromJsonString(CartProduct))(product),
credentials: "same-origin",
headers: {
Accept: "application/json",
"Content-Type": "application/json",
[ENTETE_WC_NONCE]: nonce,
},
method: "POST",
mode: "same-origin",
signal: AbortSignal.timeout(REQUEST_TIMEOUT),
}),
});
return response;
});
return WooCommerceAPI.of({
AddProductToCart,
});
}),
);
}
export { WooCommerceAPI };