@@ -2,6 +2,7 @@ package controllers
22
33import org .apache .pekko .stream .scaladsl .StreamConverters
44import com .google .common .net .HttpHeaders
5+ import com .gu .mediaservice .lib .ImageStorageProps
56import com .gu .mediaservice .{GridClient , JsonDiff }
67import com .gu .mediaservice .lib .argo ._
78import com .gu .mediaservice .lib .argo .model .{Action , _ }
@@ -14,6 +15,7 @@ import com.gu.mediaservice.lib.formatting.printDateTime
1415import com .gu .mediaservice .lib .logging .MarkerMap
1516import com .gu .mediaservice .lib .metadata .SoftDeletedMetadataTable
1617import com .gu .mediaservice .model ._
18+ import com .gu .mediaservice .model .usage .{DerivativeUsageStatus , ReplacedUsageStatus }
1719import com .gu .mediaservice .syntax .MessageSubjects
1820import lib ._
1921import lib .elasticsearch ._
@@ -494,6 +496,14 @@ class MediaApi(
494496 val deleteImagePermission = authorisation.isUploaderOrHasPermission(request.user, source.instance.uploadedBy, DeleteImagePermission )
495497 val deleteCropsOrUsagePermission = canUserDeleteCropsOrUsages(request.user)
496498
499+ val getRelationDetails = elasticSearch.getRelationDetails(id, imageResponse.getSecureThumbUrl)_
500+ val relationDetails = Map (
501+ " Replacement for" -> source.instance.identifiers.get(ImageStorageProps .replacesMediaIdIdentifierKey).map(getRelationDetails),
502+ " Replaced by" -> source.instance.usages.filter(_.status == ReplacedUsageStatus ).flatMap(_.childUsageMetadata.map(_.childMediaId)).map(getRelationDetails),
503+ " Derivative of" -> source.instance.identifiers.get(ImageStorageProps .derivativeOfMediaIdsIdentifierKey).toList.flatMap(_.split(" ," ).map(_.trim)).map(getRelationDetails),
504+ " Derivatives" -> source.instance.usages.filter(_.status == DerivativeUsageStatus ).flatMap(_.childUsageMetadata.map(_.childMediaId)).map(getRelationDetails)
505+ ).view.mapValues(_.iterator.toMap).toMap
506+
497507 val (imageData, imageLinks, imageActions) = imageResponse.create(
498508 id,
499509 source,
@@ -504,8 +514,12 @@ class MediaApi(
504514 request.user.accessor.tier
505515 )
506516
507- Some ((source.instance, imageData, imageLinks, imageActions))
508-
517+ Some ((
518+ source.instance,
519+ imageData.asInstanceOf [JsObject ] + (" parentAndChildDetails" -> Json .toJson(relationDetails)),
520+ imageLinks,
521+ imageActions
522+ ))
509523 case _ => None
510524 }
511525 }
0 commit comments