Skip to content

Commit

Permalink
-#96 prevent duplicate records and other changes
Browse files Browse the repository at this point in the history
  • Loading branch information
unknown authored and santiagoparradev committed Feb 26, 2024
1 parent e74dfce commit 2ddf23d
Show file tree
Hide file tree
Showing 4 changed files with 52 additions and 28 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -15,24 +15,4 @@ public class SimplefieldTracksObject {
public static SimplefieldTracksObject parse(String jsonBody) {
return (SimplefieldTracksObject) JSON.deserialize(jsonBody, SimplefieldTracksObject.class);
}

public List<TrackArtist__c> getTrackArtist() {

List<TrackArtist__c> result = new List<TrackArtist__c>();

for (SimplefieldArtistObject artist : this.artists) {

TrackArtist__c trackArtistRecord = new TrackArtist__c(
Track__r = new Track__c(
SpotifyId__c = id
),
Artist__r = new Artist__c(
SpotifyId__c = artist.id
)
);
result.add(trackArtistRecord);
}

return result;
}
}
30 changes: 25 additions & 5 deletions force-app/main/default/classes/service/SyncTrack.cls
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ public class SyncTrack {

try {
Map<String, Track__c> recordsToUpsertTracksMap = new Map<String, Track__c>();
List<TrackArtist__c> trackArtistList = new List<TrackArtist__c>();
Map<String, TrackArtist__c> trackArtistMap = new Map<String, TrackArtist__c>();

for (ClientCredential__c cred : credentials) {

Expand All @@ -24,7 +24,7 @@ public class SyncTrack {

for (SimplefieldTracksObject track : tracks) {

trackArtistList.addAll(track.getTrackArtist());
trackArtistMap.putAll(getTrackArtist(track.artists, track.id));

if (!recordsToUpsertTracksMap.containsKey(track.id)) {

Expand All @@ -49,9 +49,7 @@ public class SyncTrack {
upsert recordsToUpsertTracksMap.values() SpotifyId__c;
}

if (!trackArtistList.isEmpty()) {
insert trackArtistList;
}
upsert trackArtistMap.values() TrackArtistKey__c;

} catch (Exception error) {
Spotify_Request_Log__e errorEvent = new Spotify_Request_Log__e(
Expand Down Expand Up @@ -97,4 +95,26 @@ public class SyncTrack {

return result;
}

private static Map<String, TrackArtist__c> getTrackArtist(List<SimplefieldArtistObject> artists, String trackId) {

Map<String, TrackArtist__c> trackArtistMap = new Map<String, TrackArtist__c>();

for (SimplefieldArtistObject artist : artists) {

String key = artist.id + trackId;
TrackArtist__c trackArtistRecord = new TrackArtist__c(
TrackArtistKey__c = key,
Track__r = new Track__c(
SpotifyId__c = trackId
),
Artist__r = new Artist__c(
SpotifyId__c = artist.id
)
);
trackArtistMap.put(key, trackArtistRecord);
}

return trackArtistMap;
}
}
18 changes: 15 additions & 3 deletions force-app/main/default/classes/service/test/SyncTrackTest.cls
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,25 @@ private class SyncTrackTest {

addResponse(responseList, '{"access_token":"1111"}');
addResponse(responseList, '{"total":2,"items":[{"id":"0"}]}');
addResponse(responseList, '{"items":[{"track":{"name":"track name","id":"trackId","explicit":true,"album":{"name":null,"id":"albumId"}}}]}');
addResponse(responseList, '{"items":[{"track":{' +
'"name":"track name",' +
'"id":"trackId",' +
'"explicit":true,' +
'"album":{"name":null,"id":"albumId"},' +
'"artists":[{"id":"artistId"}]}}]}');
addResponse(responseList, '{"total":2,"items":[{"id":"1"}]}');
addResponse(responseList, '{"items":[{"track":{"name":"track name","id":"trackId","explicit":true,"album":{"name":null,"id":"albumId"}}}]}');
addResponse(responseList, '{"items":[{"track":{' +
'"name":"track name",' +
'"id":"trackId1",' +
'"explicit":true,' +
'"album":{"name":null,"id":"albumId1"},' +
'"artists":[{"id":"artistId1"}]}}]}');
Test.setMock(HttpCalloutMock.class, new HttpCalloutMockFactory(responseList));
Album__c album = new Album__c(SpotifyId__c = 'albumId');
Album__c album1 = new Album__c(SpotifyId__c = 'albumId1');

insert album;
insert album1;

List<ClientCredential__c> newCredentials = new List<ClientCredential__c>{
new ClientCredential__c(
Expand All @@ -33,7 +45,7 @@ private class SyncTrackTest {
Test.stopTest();
//assert
List<Track__c> tracks = [SELECT Name FROM Track__c WHERE Name = 'track name'];
Assert.areEqual(1, tracks.size(), 'is should add one track');
Assert.areEqual(2, tracks.size(), 'is should add one track');
}

private static void addResponse(List<HttpResponse> responseList, String body) {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8" ?>
<CustomField xmlns="http://soap.sforce.com/2006/04/metadata">
<fullName>TrackArtistKey__c</fullName>
<caseSensitive>false</caseSensitive>
<externalId>true</externalId>
<label>TrackArtistKey</label>
<length>255</length>
<required>true</required>
<trackTrending>false</trackTrending>
<type>Text</type>
<unique>true</unique>
</CustomField>

0 comments on commit 2ddf23d

Please sign in to comment.