Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
173 changes: 94 additions & 79 deletions api/admin/asset.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,25 +14,27 @@ import (

// AssetParams are the parameters for Asset.
type AssetParams struct {
AssetType api.AssetType `json:"-"`
DeliveryType api.DeliveryType `json:"-"`
PublicID string `json:"-"`
Exif *bool `json:"exif,omitempty"`
Colors *bool `json:"colors,omitempty"`
Faces *bool `json:"faces,omitempty"`
QualityAnalysis *bool `json:"quality_analysis,omitempty"`
ImageMetadata *bool `json:"image_metadata,omitempty"`
MediaMetadata *bool `json:"media_metadata,omitempty"`
Phash *bool `json:"phash,omitempty"`
Pages *bool `json:"pages,omitempty"`
AccessibilityAnalysis *bool `json:"accessibility_analysis,omitempty"`
CinemagraphAnalysis *bool `json:"cinemagraph_analysis,omitempty"`
Coordinates *bool `json:"coordinates,omitempty"`
MaxResults int `json:"max_results,omitempty"`
DerivedNextCursor string `json:"derived_next_cursor,omitempty"`
Related *bool `json:"related,omitempty"`
RelatedNextCursor string `json:"related_next_cursor,omitempty"`
Versions *bool `json:"versions,omitempty"`
AssetType api.AssetType `json:"-"`
DeliveryType api.DeliveryType `json:"-"`
PublicID string `json:"-"`
Exif *bool `json:"exif,omitempty"`
Colors *bool `json:"colors,omitempty"`
Faces *bool `json:"faces,omitempty"`
QualityAnalysis *bool `json:"quality_analysis,omitempty"`
ImageMetadata *bool `json:"image_metadata,omitempty"`
MediaMetadata *bool `json:"media_metadata,omitempty"`
Phash *bool `json:"phash,omitempty"`
Pages *bool `json:"pages,omitempty"`
AccessibilityAnalysis *bool `json:"accessibility_analysis,omitempty"`
CinemagraphAnalysis *bool `json:"cinemagraph_analysis,omitempty"`
Coordinates *bool `json:"coordinates,omitempty"`
MaxResults int `json:"max_results,omitempty"`
DerivedNextCursor string `json:"derived_next_cursor,omitempty"`
Related *bool `json:"related,omitempty"`
RelatedNextCursor string `json:"related_next_cursor,omitempty"`
RelatedComplementary *bool `json:"related_complementary,omitempty"`
RelatedComplementaryNextCursor string `json:"related_complementary_next_cursor,omitempty"`
Versions *bool `json:"versions,omitempty"`
}

// Asset returns the details of the specified asset and all its derived resources.
Expand All @@ -52,51 +54,52 @@ func (a *API) Asset(ctx context.Context, params AssetParams) (*AssetResult, erro

// AssetResult is the result of the Asset.
type AssetResult struct {
AssetID string `json:"asset_id"`
PublicID string `json:"public_id"`
Format string `json:"format"`
AssetFolder string `json:"asset_folder"`
DisplayName string `json:"display_name"`
Version int `json:"version"`
ResourceType string `json:"resource_type"`
Type string `json:"type"`
CreatedAt time.Time `json:"created_at"`
Bytes int `json:"bytes"`
Width int `json:"width"`
Height int `json:"height"`
Backup bool `json:"backup"`
AccessMode string `json:"access_mode"`
AccessControl api.AccessControl `json:"access_control,omitempty"`
URL string `json:"url"`
SecureURL string `json:"secure_url"`
Metadata api.Metadata `json:"metadata,omitempty"`
Tags []string `json:"tags"`
LastUpdated api.LastUpdated `json:"last_updated"`
NextCursor string `json:"next_cursor"`
Derived []interface{} `json:"derived"`
Etag string `json:"etag"`
ImageMetadata ImageMetadataResult `json:"image_metadata"`
VideoMetadata MediaMetadataResult `json:"video_metadata"`
Coordinates interface{} `json:"coordinates"`
Info interface{} `json:"info"`
Exif interface{} `json:"exif"`
Faces [][]int `json:"faces"`
IllustrationScore float64 `json:"illustration_score"`
SemiTransparent bool `json:"semi_transparent"`
Grayscale bool `json:"grayscale"`
Colors [][]interface{} `json:"colors"`
Predominant PredominantResult `json:"predominant"`
Phash string `json:"phash"`
QualityAnalysis QualityAnalysisResult `json:"quality_analysis"`
QualityScore float64 `json:"quality_score"`
AccessibilityAnalysis AccessibilityAnalysisResult `json:"accessibility_analysis"`
Pages int `json:"pages"`
CinemagraphAnalysis CinemagraphAnalysisResult `json:"cinemagraph_analysis"`
Usage interface{} `json:"usage"`
OriginalFilename string `json:"original_filename"`
Context AssetContextResult `json:"context"`
Error api.ErrorResp `json:"error,omitempty"`
Response interface{}
AssetID string `json:"asset_id"`
PublicID string `json:"public_id"`
Format string `json:"format"`
AssetFolder string `json:"asset_folder"`
DisplayName string `json:"display_name"`
Version int `json:"version"`
ResourceType string `json:"resource_type"`
Type string `json:"type"`
CreatedAt time.Time `json:"created_at"`
Bytes int `json:"bytes"`
Width int `json:"width"`
Height int `json:"height"`
Backup bool `json:"backup"`
AccessMode string `json:"access_mode"`
AccessControl api.AccessControl `json:"access_control,omitempty"`
URL string `json:"url"`
SecureURL string `json:"secure_url"`
Metadata api.Metadata `json:"metadata,omitempty"`
Tags []string `json:"tags"`
LastUpdated api.LastUpdated `json:"last_updated"`
NextCursor string `json:"next_cursor"`
Derived []interface{} `json:"derived"`
Etag string `json:"etag"`
ImageMetadata ImageMetadataResult `json:"image_metadata"`
VideoMetadata MediaMetadataResult `json:"video_metadata"`
Coordinates interface{} `json:"coordinates"`
Info interface{} `json:"info"`
Exif interface{} `json:"exif"`
Faces [][]int `json:"faces"`
IllustrationScore float64 `json:"illustration_score"`
SemiTransparent bool `json:"semi_transparent"`
Grayscale bool `json:"grayscale"`
Colors [][]interface{} `json:"colors"`
Predominant PredominantResult `json:"predominant"`
Phash string `json:"phash"`
QualityAnalysis QualityAnalysisResult `json:"quality_analysis"`
QualityScore float64 `json:"quality_score"`
RelatedComplementaryAssets []RelatedComplementaryAssetResult `json:"related_complementary_assets"`
AccessibilityAnalysis AccessibilityAnalysisResult `json:"accessibility_analysis"`
Pages int `json:"pages"`
CinemagraphAnalysis CinemagraphAnalysisResult `json:"cinemagraph_analysis"`
Usage interface{} `json:"usage"`
OriginalFilename string `json:"original_filename"`
Context AssetContextResult `json:"context"`
Error api.ErrorResp `json:"error,omitempty"`
Response interface{}
}

// QualityAnalysisResult contains the details about quality analysis.
Expand All @@ -117,6 +120,16 @@ type QualityAnalysisResult struct {
Resolution float64 `json:"resolution"`
}

// RelatedComplementaryAssetResult contains the details about a related complementary asset.
type RelatedComplementaryAssetResult struct {
AssetID string `json:"asset_id"`
PublicID string `json:"public_id"`
ResourceType string `json:"resource_type"`
Type string `json:"type"`
Status string `json:"status"`
ComplementaryType string `json:"complementary_type"`
}

// AccessibilityAnalysisResult contains the details about accessibility analysis.
type AccessibilityAnalysisResult struct {
ColorblindAccessibilityAnalysis struct {
Expand Down Expand Up @@ -222,21 +235,23 @@ func (a *API) UpdateAsset(ctx context.Context, params UpdateAssetParams) (*Asset

// AssetByAssetIDParams are the parameters for AssetByAssetID.
type AssetByAssetIDParams struct {
AssetID string `json:"-"`
Colors *bool `json:"colors,omitempty"`
Exif *bool `json:"exif,omitempty"`
Faces *bool `json:"faces,omitempty"`
QualityAnalysis *bool `json:"quality_analysis,omitempty"`
ImageMetadata *bool `json:"image_metadata,omitempty"`
MediaMetadata *bool `json:"media_metadata,omitempty"`
Phash *bool `json:"phash,omitempty"`
Pages *bool `json:"pages,omitempty"`
CinemagraphAnalysis *bool `json:"cinemagraph_analysis,omitempty"`
Coordinates *bool `json:"coordinates,omitempty"`
MaxResults int `json:"max_results,omitempty"`
DerivedNextCursor string `json:"derived_next_cursor,omitempty"`
AccessibilityAnalysis *bool `json:"accessibility_analysis,omitempty"`
Versions *bool `json:"versions,omitempty"`
AssetID string `json:"-"`
Colors *bool `json:"colors,omitempty"`
Exif *bool `json:"exif,omitempty"`
Faces *bool `json:"faces,omitempty"`
QualityAnalysis *bool `json:"quality_analysis,omitempty"`
ImageMetadata *bool `json:"image_metadata,omitempty"`
MediaMetadata *bool `json:"media_metadata,omitempty"`
Phash *bool `json:"phash,omitempty"`
Pages *bool `json:"pages,omitempty"`
CinemagraphAnalysis *bool `json:"cinemagraph_analysis,omitempty"`
Coordinates *bool `json:"coordinates,omitempty"`
MaxResults int `json:"max_results,omitempty"`
DerivedNextCursor string `json:"derived_next_cursor,omitempty"`
AccessibilityAnalysis *bool `json:"accessibility_analysis,omitempty"`
Versions *bool `json:"versions,omitempty"`
RelatedComplementary *bool `json:"related_complementary,omitempty"`
RelatedComplementaryNextCursor string `json:"related_complementary_next_cursor,omitempty"`
}

// AssetByAssetID returns the details of the specified asset and all its derived assets by asset id.
Expand Down
9 changes: 9 additions & 0 deletions api/admin/asset_acceptance_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,15 @@ func getAssetTestCases() []AdminAPIAcceptanceTestCase {
"related_next_cursor": []string{"NEXT_CURSOR"},
},
},
{
requestParams: admin.AssetParams{PublicID: cldtest.PublicID,
RelatedComplementary: api.Bool(true), RelatedComplementaryNextCursor: "NEXT_CURSOR"},
uri: "/resources/image/upload/" + cldtest.PublicID,
expectedParams: &url.Values{
"related_complementary": []string{"true"},
"related_complementary_next_cursor": []string{"NEXT_CURSOR"},
},
},
}

for num, testCase := range assetTestCases {
Expand Down
41 changes: 32 additions & 9 deletions api/admin/assets.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,16 @@ import (
)

const (
assets api.EndPoint = "resources"
byAssetFolder api.EndPoint = "by_asset_folder"
visualSearch api.EndPoint = "visual_search"
derivedAssets api.EndPoint = "derived_resources"
relatedAssets api.EndPoint = "related_assets"
tags api.EndPoint = "tags"
cldContext api.EndPoint = "context"
moderations api.EndPoint = "moderations"
restore api.EndPoint = "restore"
assets api.EndPoint = "resources"
byAssetFolder api.EndPoint = "by_asset_folder"
visualSearch api.EndPoint = "visual_search"
derivedAssets api.EndPoint = "derived_resources"
relatedAssets api.EndPoint = "related_assets"
relatedComplementaryAssets api.EndPoint = "related_complementary_assets"
tags api.EndPoint = "tags"
cldContext api.EndPoint = "context"
moderations api.EndPoint = "moderations"
restore api.EndPoint = "restore"
)

// AssetTypes lists available asset types.
Expand Down Expand Up @@ -450,3 +451,25 @@ func (a *API) DeleteRelatedAssetsByAssetIDs(ctx context.Context, params DeleteRe

return res, err
}

// RelatedComplementaryAssetsByAssetIDsParams are the parameters for AddRelatedComplementaryAssetsByAssetIDs.
type RelatedComplementaryAssetsByAssetIDsParams struct {
AssetID string `json:"-"`
RelatedAssetIDs []string `json:"related_asset_ids"`
ComplementaryType string `json:"complementary_type"`
}

// AddRelatedComplementaryAssetsByAssetIDs relates an asset to other complementary assets by asset IDs.
func (a *API) AddRelatedComplementaryAssetsByAssetIDs(ctx context.Context, params RelatedComplementaryAssetsByAssetIDsParams) (*AddRelatedAssetsResult, error) {
res := &AddRelatedAssetsResult{}
_, err := a.post(ctx, api.BuildPath(assets, relatedComplementaryAssets, params.AssetID), params, res)

return res, err
}

func (a *API) DeleteRelatedComplementaryAssetsByAssetIDs(ctx context.Context, params RelatedComplementaryAssetsByAssetIDsParams) (*DeleteRelatedAssetsResult, error) {
res := &DeleteRelatedAssetsResult{}
_, err := a.delete(ctx, api.BuildPath(assets, relatedComplementaryAssets, params.AssetID), params, res)

return res, err
}
Loading