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  }