@apihawk/billia-sdk
Version:
The ApiHawk Billia SDK
169 lines (168 loc) • 7.05 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 gravatar_1 = require("./common/gravatar");
const to_rest_resource_1 = require("./common/to-rest-resource");
class BilliaSDKMigration extends billia_sdk_service_base_1.BilliaSDKServiceBase {
/**
* Lists all product migrations for the current user with pagination.
*
* @param session - user session
* @param query - query options
*/
getProductMigrations(session, query = {}) {
return __awaiter(this, void 0, void 0, function* () {
const q = {
page: query.page || 1,
page_size: query.page_size || 25
};
const response = yield this.api.call({
url: `/customer/customer-product-migrate`,
method: 'GET',
query: q,
headers: {
Accept: 'application/hal+json',
'Accept-Response': 'Advanced'
},
session
});
const migrationsRestResource = to_rest_resource_1.toRestResource(response, 'customer_product_migrate');
const productIds = migrationsRestResource.items
.filter((item) => item.customer_product && !Array.isArray(item.customer_product))
.map((item) => item.customer_product.product_id.toString());
const catalogProducts = yield this.getCatalogProducts(session, productIds);
// add the catalog product information to each migration record
const migrations = migrationsRestResource.items.map((migration) => {
const catalogProduct = catalogProducts.items.find((cp) => cp.product_id ===
migration.customer_product
.product_id);
return {
migrate_id: migration.migrate_id,
receiver: Object.assign({
receiver_id: migration.receiver_id
}, migration.receiver, { gravatar: gravatar_1.default(migration.receiver.username) }),
owner: Object.assign({ owner_id: migration.user_id }, migration.owner, { gravatar: gravatar_1.default(migration.owner.username) }),
customer_product: Object.assign({ customer_product_id: migration.customer_product_id }, migration.customer_product),
purchase_id: migration.purchase_id,
status: migration.status,
customer_product_id: migration.customer_product_id,
owner_approved: !!migration.owner_approved,
receiver_approved: !!migration.receiver_approved,
catalog_product: catalogProduct
};
});
const result = {
items: migrations,
page: migrationsRestResource.page,
page_count: migrationsRestResource.page_count,
page_size: migrationsRestResource.page_size,
total_items: migrationsRestResource.total_items
};
return result;
});
}
/**
* Request a customer product migration.
*
* @param session - user session
* @param migration - the customer product ID and the user ID of the receiver
*/
requestMigration(session, migration) {
return __awaiter(this, void 0, void 0, function* () {
const response = yield this.api.call({
url: `/customer/product-migrate?customer_product_id=${migration.customerProductId}&receiver_id=${migration.receiverId}`,
method: 'GET',
headers: {
Accept: 'application/hal+json'
},
session
});
return response;
});
}
/**
* Confirm a customer product migration request.
*
* @param session - user session
* @param token - the confirmation code which was sent to the user
*/
confirmMigration(session, confirmationToken) {
return __awaiter(this, void 0, void 0, function* () {
const response = yield this.api.call({
url: '/customer/product-migrate',
method: 'POST',
headers: {
Accept: 'application/hal+json',
'Content-Type': 'application/json'
},
body: {
token: confirmationToken
},
session
});
return response;
});
}
/**
* Cancel a product migration request.
*
* @param session - user session
* @param migrationId - the ID of the migration request
*/
cancelMigration(session, migrationId) {
return __awaiter(this, void 0, void 0, function* () {
yield this.api.call({
url: `/customer/customer-product-migrate/${migrationId}`,
method: 'DELETE',
headers: {
Accept: 'application/hal+json'
},
session
});
return null;
});
}
getCatalogProducts(session, productIds) {
return __awaiter(this, void 0, void 0, function* () {
if (!productIds || !productIds.length) {
const emptyRestResource = {
items: [],
page: 1,
page_count: 1,
page_size: 25,
total_items: 0
};
return emptyRestResource;
}
const query = {
page: 1,
page_size: -1,
where: [
{
field: 'product_id',
where: 'and',
type: 'in',
values: productIds
}
]
};
const response = yield this.api.call({
url: `/billing/product`,
method: 'GET',
query,
session
});
const restResource = to_rest_resource_1.toRestResource(response, 'catalog_product');
return restResource;
});
}
}
exports.BilliaSDKMigration = BilliaSDKMigration;