Benutzerdefiniertes Preismodul
Wetterabhängige Grillwurstpreise
Wenn in der Schweiz der Sommer anbricht und die Leute anfangen, Freunde zur ersten Grillparty des Jahres einzuladen, steigt die Nachfrage nach Würstchen in die Höhe. Unser lieber Freund, der Metzger Bruno, möchte mit seinem Online-Shop seine hausgemachten Würste direkt an den Kunden verkaufen und hatte diese verrückte Idee einer speziellen Produktpreisgestaltung, die er wetterabhängige Grillwurstpreise nennt.
Hinzufügen eines Preismoduls
Um dies zu demonstrieren, werden wir eine ausgeklügelte Preisgestaltung implementieren, die den Katalogpreis um 1 USD erhöht, wenn die Temperatur in Zürich 20 Grad Celsius erreicht:
import { ProductPricingDirector, ProductPricingAdapter } from "meteor/unchained:core-pricing";
import fetch from "isomorphic-unfetch";
const PRODUCT_TAG_SAUSAGE = "sausage";
const SAUSAGE_THRESHOLD_CELSIUS = 20;
class WeatherDependentBarbequeSausagePricing extends ProductPricingAdapter {
static key = "shop.unchained.wd-bbq-sausage-pricing";
static version = "1.0";
static label = "Calculate the price of a sausage 🌭🌦";
static orderIndex = 3;
static isActivatedFor({product}) {
if (
product.tags &&
product.tags.length > 0 &&
product.tags.indexOf(PRODUCT_TAG_SAUSAGE) !== -1
) {
return true;
}
return false;
}
async calculate() {
const { currency, quantity } = this.context;
try {
const response = await fetch(
"https://community-open-weather-map.p.rapidapi.com/weather?q=zurich,ch&units=metric",
{
headers: {
"x-rapidapi-key": "2a849e288dmsh59370f28a9102f6p1c881cjsn28010ce8ff58",
"x-rapidapi-host": "community-open-weather-map.p.rapidapi.com",
"useQueryString": true
}
}
);
if (response.status === 200) {
const { main } = await response.json();
const { temp} = main;
if (temp) {
if (temp > SAUSAGE_THRESHOLD_CELSIUS) {
console.log("🌭 -> High season, sausage pricy!!");
this.result.addItem({
currency,
amount: 100 * quantity,
isTaxable: true,
isNetPrice: true,
meta: { adapter: this.constructor.key }
});
}
}
}
} catch (e) {
console.error('🌭 -> Failed while trying to price weather dependent');
}
return super.calculate();
}
}
ProductPricingDirector.registerAdapter(WeatherDependentBarbequeSausagePricing);
Abfrage erstellen
Unchained Commerce ist vom Design her headless. Um also die Produktdaten von unserer Unchained Engine zu bekommen, müssen wir eine kleine GraphQL-Abfrage basteln, die tatsächlich einige Texte und den aktuellen Preis unserer Wurst auflöst.
query getProduct {
product(slug: "🌭") {
_id
texts {
title
}
... on SimpleProduct {
catalogPrice {
price {
amount
currency
}
}
}
}
}
Erstellen der Benutzeroberfläche
Da Unchained Commerce headless ist, können Sie jedes UI auf jedem Betriebssystem erstellen, das sich irgendwie mit dem HTTP-Endpunkt verbinden kann. Wie genial ist das?