github.com/Ilhicas/nomad@v1.0.4-0.20210304152020-e86851182bc3/ui/app/serializers/recommendation-summary.js (about) 1 import ApplicationSerializer from './application'; 2 import classic from 'ember-classic-decorator'; 3 4 /* 5 There’s no grouping of recommendations on the server, so this 6 processes a list of recommendations and groups them by task 7 group. 8 */ 9 10 @classic 11 export default class RecommendationSummarySerializer extends ApplicationSerializer { 12 normalizeArrayResponse(store, modelClass, payload) { 13 const recommendationSerializer = store.serializerFor('recommendation'); 14 const RecommendationModel = store.modelFor('recommendation'); 15 16 const slugToSummaryObject = {}; 17 const allRecommendations = []; 18 19 payload.forEach(recommendationHash => { 20 const slug = `${JSON.stringify([recommendationHash.JobID, recommendationHash.Namespace])}/${ 21 recommendationHash.Group 22 }`; 23 24 if (!slugToSummaryObject[slug]) { 25 slugToSummaryObject[slug] = { 26 attributes: { 27 jobId: recommendationHash.JobID, 28 jobNamespace: recommendationHash.Namespace, 29 taskGroupName: recommendationHash.Group, 30 }, 31 recommendations: [], 32 }; 33 } 34 35 slugToSummaryObject[slug].recommendations.push(recommendationHash); 36 allRecommendations.push(recommendationHash); 37 }); 38 39 return { 40 data: Object.values(slugToSummaryObject).map(summaryObject => { 41 const latest = Math.max(...summaryObject.recommendations.mapBy('SubmitTime')); 42 43 return { 44 type: 'recommendation-summary', 45 id: summaryObject.recommendations 46 .mapBy('ID') 47 .sort() 48 .join('-'), 49 attributes: { 50 ...summaryObject.attributes, 51 submitTime: new Date(Math.floor(latest / 1000000)), 52 }, 53 relationships: { 54 job: { 55 data: { 56 type: 'job', 57 id: JSON.stringify([ 58 summaryObject.attributes.jobId, 59 summaryObject.attributes.jobNamespace, 60 ]), 61 }, 62 }, 63 recommendations: { 64 data: summaryObject.recommendations.map(r => { 65 return { 66 type: 'recommendation', 67 id: r.ID, 68 }; 69 }), 70 }, 71 }, 72 }; 73 }), 74 included: allRecommendations.map( 75 recommendationHash => 76 recommendationSerializer.normalize(RecommendationModel, recommendationHash).data 77 ), 78 }; 79 } 80 81 normalizeUpdateRecordResponse(store, primaryModelClass, payload, id) { 82 return { 83 data: { 84 id, 85 attributes: { 86 isProcessed: true, 87 }, 88 }, 89 }; 90 } 91 }