@plattar/plattar-api
Advanced tools
{ | ||
"name": "@plattar/plattar-api", | ||
"version": "1.90.8-dev", | ||
"version": "1.90.9-dev", | ||
"description": "Module for interfacing with the Plattar API (https://www.plattar.com)", | ||
@@ -5,0 +5,0 @@ "main": "index.js", |
@@ -112,3 +112,3 @@ const got = require('got'); | ||
if (!error || !error.response || !error.response.body) { | ||
reject(new Error('PlattarQuery.' + target.type() + '.get(' + target.id + ') - critical error occured, cannot proceed')); | ||
reject(new Error('PlattarQuery.' + target.type() + '.get(' + target.id + ') - critical error occured, cannot proceed. error was ' + error)); | ||
return; | ||
@@ -115,0 +115,0 @@ } |
'use strict'; | ||
const PlattarQuery = require('../../server/plattar-query.js'); | ||
const PlattarObjectRelations = require('./plattar-object-relations.js'); | ||
@@ -14,2 +15,3 @@ class PlattarObject { | ||
this._query = new PlattarQuery(this, server); | ||
this._relationships = new PlattarObjectRelations(this); | ||
} | ||
@@ -45,2 +47,6 @@ | ||
get relationships() { | ||
return this._relationships; | ||
} | ||
get(opt) { | ||
@@ -47,0 +53,0 @@ return this._query._get(opt); |
@@ -86,3 +86,39 @@ 'use strict'; | ||
// todo | ||
const server = parent._query.server; | ||
// fill the relationships for the object | ||
if (json.data.relationships) { | ||
for (const [key, value] of Object.entries(json.data.relationships)) { | ||
const data = value.data; | ||
if (Array.isArray(data)) { | ||
data.forEach((item) => { | ||
const construct = PlattarUtil.create(key, item.id, server); | ||
construct._attributes = item.attributes || {}; | ||
parent.relationships._put(construct); | ||
}); | ||
} | ||
else { | ||
const construct = PlattarUtil.create(key, data.id, server); | ||
construct._attributes = data.attributes || {}; | ||
parent.relationships._put(construct); | ||
} | ||
} | ||
} | ||
// loop through the includes and populate as required | ||
if (json.included) { | ||
json.included.forEach((item) => { | ||
const existing = parent.relationships.find(PlattarUtil.match(item.type), item.id); | ||
if (existing) { | ||
PlattarUtil.reconstruct(existing, { | ||
data: item, | ||
included: json.included | ||
}, options); | ||
} | ||
}); | ||
} | ||
} | ||
@@ -99,39 +135,51 @@ | ||
static create(type, id, server) { | ||
// dynamic class matching from a string type | ||
const clazz = PlattarUtil.match(type); | ||
return new clazz(id, server); | ||
} | ||
/** | ||
* Dynamic class matching provided an object type as a string | ||
* | ||
* @param {*} type The type of class to construct | ||
*/ | ||
static match(type) { | ||
switch (type) { | ||
case Application.type(): return new Application(id, server); | ||
case Scene.type(): return new Scene(id, server); | ||
case SceneAnnotation.type(): return new SceneAnnotation(id, server); | ||
case SceneAudio.type(): return new SceneAudio(id, server); | ||
case SceneButton.type(): return new SceneButton(id, server); | ||
case SceneCamera.type(): return new SceneCamera(id, server); | ||
case SceneCarousel.type(): return new SceneCarousel(id, server); | ||
case SceneImage.type(): return new SceneImage(id, server); | ||
case SceneModel.type(): return new SceneModel(id, server); | ||
case ScenePanorama.type(): return new ScenePanorama(id, server); | ||
case ScenePoller.type(): return new ScenePoller(id, server); | ||
case SceneProduct.type(): return new SceneProduct(id, server); | ||
case SceneShadow.type(): return new SceneShadow(id, server); | ||
case SceneVideo.type(): return new SceneVideo(id, server); | ||
case SceneVolumetric.type(): return new SceneVolumetric(id, server); | ||
case SceneYoutube.type(): return new SceneYoutube(id, server); | ||
case Page.type(): return new Page(id, server); | ||
case CardButton.type(): return new CardButton(id, server); | ||
case CardHTML.type(): return new CardHTML(id, server); | ||
case CardIFrame.type(): return new CardIFrame(id, server); | ||
case Product.type(): return new Product(id, server); | ||
case ProductVariation.type(): return new ProductVariation(id, server); | ||
case ProductAnnotation.type(): return new ProductAnnotation(id, server); | ||
case FileAudio.type(): return new FileAudio(id, server); | ||
case FileVideo.type(): return new FileVideo(id, server); | ||
case FileModel.type(): return new FileModel(id, server); | ||
case FileImage.type(): return new FileImage(id, server); | ||
case CardMap.type(): return new CardMap(id, server); | ||
case CardParagraph.type(): return new CardParagraph(id, server); | ||
case CardRow.type(): return new CardRow(id, server); | ||
case CardSlider.type(): return new CardSlider(id, server); | ||
case CardTitle.type(): return new CardTitle(id, server); | ||
case CardVideo.type(): return new CardVideo(id, server); | ||
case CardYoutube.type(): return new CardYoutube(id, server); | ||
case CardImage.type(): return new CardImage(id, server); | ||
default: throw new Error('PlattarUtil.create(type, id, server) - provided type of \'' + type + '\' does not exist'); | ||
case Application.type(): return Application; | ||
case Scene.type(): return Scene; | ||
case SceneAnnotation.type(): return SceneAnnotation; | ||
case SceneAudio.type(): return SceneAudio; | ||
case SceneButton.type(): return SceneButton; | ||
case SceneCamera.type(): return SceneCamera; | ||
case SceneCarousel.type(): return SceneCarousel; | ||
case SceneImage.type(): return SceneImage; | ||
case SceneModel.type(): return SceneModel; | ||
case ScenePanorama.type(): return ScenePanorama; | ||
case ScenePoller.type(): return ScenePoller; | ||
case SceneProduct.type(): return SceneProduct; | ||
case SceneShadow.type(): return SceneShadow; | ||
case SceneVideo.type(): return SceneVideo; | ||
case SceneVolumetric.type(): return SceneVolumetric; | ||
case SceneYoutube.type(): return SceneYoutube; | ||
case Page.type(): return Page; | ||
case CardButton.type(): return CardButton; | ||
case CardHTML.type(): return CardHTML; | ||
case CardIFrame.type(): return CardIFrame; | ||
case Product.type(): return Product; | ||
case ProductVariation.type(): return ProductVariation; | ||
case ProductAnnotation.type(): return ProductAnnotation; | ||
case FileAudio.type(): return FileAudio; | ||
case FileVideo.type(): return FileVideo; | ||
case FileModel.type(): return FileModel; | ||
case FileImage.type(): return FileImage; | ||
case CardMap.type(): return CardMap; | ||
case CardParagraph.type(): return CardParagraph; | ||
case CardRow.type(): return CardRow; | ||
case CardSlider.type(): return CardSlider; | ||
case CardTitle.type(): return CardTitle; | ||
case CardVideo.type(): return CardVideo; | ||
case CardYoutube.type(): return CardYoutube; | ||
case CardImage.type(): return CardImage; | ||
default: throw new Error('PlattarUtil.match(type) - provided type of \'' + type + '\' does not exist and cannot be created'); | ||
} | ||
@@ -138,0 +186,0 @@ } |
35811
13.41%47
2.17%984
14.82%