@apihawk/billia-sdk
Version:
The ApiHawk Billia SDK
147 lines (146 loc) • 6.1 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const billia_sdk_service_base_1 = require("../lib/billia-sdk-service-base");
const billia_sdk_catalog_1 = require("./billia-sdk-catalog");
class BilliaSDKMarketing extends billia_sdk_service_base_1.BilliaSDKServiceBase {
constructor(api) {
super(api);
this.billiaSDKCatalog = new billia_sdk_catalog_1.BilliaSDKCatalog(api);
}
/**
* Get banners group
* @param group banner group name
* @param session user session
*/
getBannersGroup(group, session) {
return __awaiter(this, void 0, void 0, function* () {
return this.api
.call({
url: `/marketing/banners-by-position/${group}`,
method: 'GET',
headers: {
Accept: 'application/hal+json',
'Content-Type': 'application/json',
'Accept-Response': 'Advanced'
}
})
.then((bannerGroup) => {
if (!bannerGroup.banners) {
bannerGroup.banners = [];
}
bannerGroup.banners = bannerGroup.banners.sort((a, b) => {
return (a.sort_weight || 0) - (b.sort_weight || 0);
});
const productIDs = new Set();
bannerGroup.banners.forEach((banner) => {
if (banner.data) {
try {
banner.data = JSON.parse(banner.data);
}
catch (err) {
banner.data = {};
}
if (banner.data.type === 'product' && banner.data.product_id) {
productIDs.add(banner.data.product_id);
}
}
});
if (productIDs.size) {
return this.billiaSDKCatalog
.getCatalogProducts(Array.from(productIDs), {}, { advanced: false })
.then((products) => {
const productsById = {};
const promises = [];
// Calculate all products prices;
products.items.forEach((product) => {
promises.push(this.billiaSDKCatalog.productCalculator(product.product_id, [product.default_quantity], session));
});
return Promise.all(promises).then((results) => {
// Assign prices to products;
results.forEach((result, index) => {
const price = Object.values(result)[0];
if (price) {
products.items[index].price = price;
}
productsById[products.items[index].product_id] =
products.items[index];
});
if (bannerGroup.banners) {
bannerGroup.banners.forEach((banner) => {
if (banner.data.type === 'product' &&
banner.data.product_id) {
banner.data.product =
productsById[banner.data.product_id];
}
});
}
return Promise.resolve(bannerGroup);
});
});
}
else {
return Promise.resolve(bannerGroup);
}
});
});
}
/**
* Subscribe to newsletter
* @param {string} email
* @param prefs
* @returns {Promise<boolean>}
*/
subscribe(email, prefs) {
return __awaiter(this, void 0, void 0, function* () {
const params = {
status: 'subscribed'
};
if (prefs && prefs.verify === false) {
params.verify = false;
}
if (prefs && prefs.firstname) {
params.firstname = prefs.firstname;
}
if (prefs && prefs.lastname) {
params.lastname = prefs.lastname;
}
return this.api
.call({
url: `/marketing/subscription/${email}`,
method: 'PATCH',
body: params,
headers: {
Accept: 'application/hal+json',
'Content-Type': 'application/json'
}
})
.then(() => true);
});
}
/**
* Get subscription status
* @param {string} email
* @returns {Promise<IMarketingSubscription>}
*/
getSubscription(email) {
return __awaiter(this, void 0, void 0, function* () {
return this.api.call({
url: `/marketing/subscription/${email}`,
method: 'GET',
headers: {
Accept: 'application/hal+json',
'Content-Type': 'application/json'
}
});
});
}
}
exports.BilliaSDKMarketing = BilliaSDKMarketing;