diff --git a/force-app/main/default/classes/service/SyncPlaylist.cls b/force-app/main/default/classes/service/SyncPlaylist.cls index 0fe458a..a6e7bcd 100644 --- a/force-app/main/default/classes/service/SyncPlaylist.cls +++ b/force-app/main/default/classes/service/SyncPlaylist.cls @@ -17,13 +17,13 @@ public class SyncPlaylist { if (token.getStatusCode() != SpotifyApiHttpClient.SUCCESS_STATUS_CODE) continue; - + TokenResponse tokenRes = TokenResponse.parse(token.getBody()); PlaylistResponse playlists; Integer cont = 0; do { - + HttpResponse playlistsRes = SpotifyApiHttpClient.getPlaylist( tokenRes.access_token, cred.SpotifyUserId__c, @@ -37,8 +37,18 @@ public class SyncPlaylist { .replaceAll('"public" :', '"publicField" :')); for (SimplefiedPlaylistObject playlist : playlists.items) { + Integer duration = 0; - playlistTrackMap.putAll(getPlaylistTrack(tokenRes.access_token, playlist.id)); + for (SimplefieldTracksObject track : getPlaylistTrack(tokenRes.access_token, playlist.id)) { + + duration += track.duration_ms; + String key = track.id + playlist.id; + PlaylistTrack__c playlistTrackRecord = new PlaylistTrack__c( + PlaylistTrack__c = key, + Playlist__r = new Playlist__c(SpotifyId__c = playlist.id), + Track__r = new Track__c(SpotifyId__c = track.id)); + playlistTrackMap.put(key, playlistTrackRecord); + } Playlist__c record = new Playlist__c( SpotifyId__c = playlist.id, @@ -46,7 +56,8 @@ public class SyncPlaylist { Description__c = playlist.description, Public__c = playlist.publicField, url__c = playlist.external_urls?.spotify, - followers__c = playlist.followers + followers__c = playlist.followers, + Duration__c = duration ); forInsert.add(record); } @@ -68,25 +79,15 @@ public class SyncPlaylist { } } - private static Map getPlaylistTrack(String token,String playlistId) { - - Map result = new Map(); + private static List getPlaylistTrack(String token,String playlistId) { + List result = new List(); HttpResponse trackRes = SpotifyApiHttpClient.getPlaylistTracks(token, playlistId); if (trackRes.getStatusCode() == SpotifyApiHttpClient.SUCCESS_STATUS_CODE) { TrackResponse tracks = TrackResponse.parse(trackRes.getBody()); - - for (SimplefieldTracksObject track : tracks.getTracks()) { - - String key = track.id + playlistId; - PlaylistTrack__c playlistTrackRecord = new PlaylistTrack__c( - PlaylistTrack__c = key, - Playlist__r = new Playlist__c(SpotifyId__c = playlistId), - Track__r = new Track__c(SpotifyId__c = track.id)); - result.put(key, playlistTrackRecord); - } + result.addAll(tracks.getTracks()); } return result; diff --git a/force-app/main/default/classes/service/test/SyncPlaylistTest.cls b/force-app/main/default/classes/service/test/SyncPlaylistTest.cls index 82b41fe..a97d94d 100644 --- a/force-app/main/default/classes/service/test/SyncPlaylistTest.cls +++ b/force-app/main/default/classes/service/test/SyncPlaylistTest.cls @@ -7,9 +7,9 @@ private class SyncPlaylistTest { List responseList = new List(); addResponse(responseList, '{"access_token":"1111"}'); addResponse(responseList, '{"total":2,"items":[{"id":"0","name":"name","publicField":true}]}'); - addResponse(responseList, '{"items":[{"track":{"id":"trackId"}}]}'); + addResponse(responseList, '{"items":[{"track":{"id":"trackId","duration_ms":"1"}}]}'); addResponse(responseList, '{"total":2,"items":[{"id":"1","name":"name","publicField":true}]}'); - addResponse(responseList, '{"items":[{"track":{"id":"trackId1"}}]}'); + addResponse(responseList, '{"items":[{"track":{"id":"trackId1","duration_ms":"1"}}]}'); Test.setMock(HttpCalloutMock.class, new HttpCalloutMockFactory(responseList)); List newCredentials = new List{ diff --git a/force-app/main/default/layouts/Playlist__c-Playlist Layout.layout-meta.xml b/force-app/main/default/layouts/Playlist__c-Playlist Layout.layout-meta.xml index 157205d..4583659 100644 --- a/force-app/main/default/layouts/Playlist__c-Playlist Layout.layout-meta.xml +++ b/force-app/main/default/layouts/Playlist__c-Playlist Layout.layout-meta.xml @@ -41,6 +41,10 @@ Edit Public__c + + Readonly + Duration__c + diff --git a/force-app/main/default/objects/Playlist__c/fields/Duration__c.field-meta.xml b/force-app/main/default/objects/Playlist__c/fields/Duration__c.field-meta.xml new file mode 100644 index 0000000..a9b81ef --- /dev/null +++ b/force-app/main/default/objects/Playlist__c/fields/Duration__c.field-meta.xml @@ -0,0 +1,12 @@ + + + Duration__c + false + + 18 + false + 0 + false + Number + false + diff --git a/force-app/main/default/permissionsets/Spotify_App_Basic.permissionset-meta.xml b/force-app/main/default/permissionsets/Spotify_App_Basic.permissionset-meta.xml index aa82220..0d6ffd9 100644 --- a/force-app/main/default/permissionsets/Spotify_App_Basic.permissionset-meta.xml +++ b/force-app/main/default/permissionsets/Spotify_App_Basic.permissionset-meta.xml @@ -104,6 +104,11 @@ Playlist__c.Description__c true + + false + Playlist__c.Duration__c + true + true Playlist__c.Followers__c