|
|
@@ -1,58 +1,34 @@
|
|
|
-import {AnyJson, ApiResponse, HydraMetadata} from '~/types/interfaces'
|
|
|
-import {METADATA_TYPE} from '~/types/enums'
|
|
|
+import {AnyJson, ApiResponse, HydraMetadata, METADATA_TYPE} from "~/types/data.d";
|
|
|
|
|
|
/**
|
|
|
- * Classe permettant d'assurer la dénormalization d'un objet Hydra en JSON
|
|
|
+ * Classe permettant d'assurer la dé-normalization d'un objet Hydra en JSON
|
|
|
*/
|
|
|
class HydraDenormalizer {
|
|
|
/**
|
|
|
- * Parcourt une réponse Hydra pour retourner son équivalent en Json
|
|
|
+ * Parse une réponse Hydra pour retourner son équivalent en Json
|
|
|
*
|
|
|
* @param {AnyJson} data
|
|
|
* @return {AnyJson} réponse parsée
|
|
|
*/
|
|
|
- public static denormalize (data: AnyJson): AnyJson {
|
|
|
+ public static denormalize (data: AnyJson): ApiResponse {
|
|
|
if (data['hydra:member']) {
|
|
|
- data.totalCount = data['hydra:totalItems']
|
|
|
return HydraDenormalizer.parseCollection(data)
|
|
|
- } else {
|
|
|
- return HydraDenormalizer.parseItem(data)
|
|
|
}
|
|
|
+
|
|
|
+ return HydraDenormalizer.parseItem(data)
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Parse une réponse Hydra contenant un item
|
|
|
+ *
|
|
|
+ * @param hydraData
|
|
|
+ * @private
|
|
|
+ */
|
|
|
private static parseItem (hydraData: AnyJson): ApiResponse {
|
|
|
return {
|
|
|
data: hydraData,
|
|
|
metadata: HydraDenormalizer.definedMetadataForItem(hydraData)
|
|
|
}
|
|
|
- }
|
|
|
- /**
|
|
|
- * Méthode de parsing appelé si on est dans un GET
|
|
|
- *
|
|
|
- * @param {AnyJson} hydraData
|
|
|
- */
|
|
|
- private static definedMetadataForItem (hydraData: AnyJson): AnyJson {
|
|
|
- const metadata:HydraMetadata = {}
|
|
|
-
|
|
|
- // if (hydraData['hydra:previous']) {
|
|
|
- // const iriParts = hydraData['hydra:previous'].split('/')
|
|
|
- // hydraData.previous = iriParts[iriParts.length - 1]
|
|
|
- // }
|
|
|
- // if (hydraData['hydra:next']) {
|
|
|
- // const iriParts = hydraData['hydra:next'].split('/')
|
|
|
- // hydraData.next = iriParts[iriParts.length - 1]
|
|
|
- // }
|
|
|
- // if (hydraData['hydra:totalItems']) {
|
|
|
- // hydraData.totalItems = hydraData['hydra:totalItems']
|
|
|
- // }
|
|
|
- // if (hydraData['hydra:itemPosition']) {
|
|
|
- // hydraData.itemPosition = hydraData['hydra:itemPosition']
|
|
|
- // }
|
|
|
-
|
|
|
- metadata.type = METADATA_TYPE.ITEM
|
|
|
-
|
|
|
- return metadata
|
|
|
-
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -91,6 +67,41 @@ class HydraDenormalizer {
|
|
|
return collectionResponse
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * Génère les metadonnées d'un item
|
|
|
+ *
|
|
|
+ * @param {AnyJson} hydraData
|
|
|
+ */
|
|
|
+ private static definedMetadataForItem (hydraData: AnyJson): AnyJson {
|
|
|
+ const metadata: HydraMetadata = {}
|
|
|
+
|
|
|
+ // if (hydraData['hydra:previous']) {
|
|
|
+ // const iriParts = hydraData['hydra:previous'].split('/')
|
|
|
+ // hydraData.previous = iriParts[iriParts.length - 1]
|
|
|
+ // }
|
|
|
+ // if (hydraData['hydra:next']) {
|
|
|
+ // const iriParts = hydraData['hydra:next'].split('/')
|
|
|
+ // hydraData.next = iriParts[iriParts.length - 1]
|
|
|
+ // }
|
|
|
+ // if (hydraData['hydra:totalItems']) {
|
|
|
+ // hydraData.totalItems = hydraData['hydra:totalItems']
|
|
|
+ // }
|
|
|
+ // if (hydraData['hydra:itemPosition']) {
|
|
|
+ // hydraData.itemPosition = hydraData['hydra:itemPosition']
|
|
|
+ // }
|
|
|
+
|
|
|
+ metadata.type = METADATA_TYPE.ITEM
|
|
|
+
|
|
|
+ return metadata
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * Génère les métadonnées d'une collection
|
|
|
+ *
|
|
|
+ * @param data
|
|
|
+ * @private
|
|
|
+ */
|
|
|
private static definedMetadataForCollection(data:AnyJson){
|
|
|
const metadata:HydraMetadata = {
|
|
|
totalItems: data['hydra:totalItems']
|
|
|
@@ -108,10 +119,17 @@ class HydraDenormalizer {
|
|
|
return metadata
|
|
|
}
|
|
|
|
|
|
- private static getPageNumber(uri:string):number {
|
|
|
+ /**
|
|
|
+ * Parse an URI to retrieve the page number
|
|
|
+ *
|
|
|
+ * @param uri
|
|
|
+ * @private
|
|
|
+ */
|
|
|
+ private static getPageNumber(uri:string):number {
|
|
|
if(uri){
|
|
|
- const number = uri.split('page=').pop()
|
|
|
- return number ? parseInt(number) : 0
|
|
|
+ const urlParams = new URLSearchParams(uri);
|
|
|
+ const page = urlParams.get('page');
|
|
|
+ return page ? parseInt(page) : 0
|
|
|
}
|
|
|
return 0
|
|
|
}
|