Skip to content

Commit e312c74

Browse files
authored
Merge pull request #1278 from ORCID/memberNameUpdates
Member name updates
2 parents 00a3cf7 + 0e17b90 commit e312c74

File tree

20 files changed

+278
-92
lines changed

20 files changed

+278
-92
lines changed

assertion-service/src/main/java/org/orcid/memberportal/service/assertion/repository/OrcidRecordRepository.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.springframework.stereotype.Repository;
1212

1313
@Repository
14-
public interface OrcidRecordRepository extends MongoRepository<OrcidRecord, String> {
14+
public interface OrcidRecordRepository extends MongoRepository<OrcidRecord, String>, OrcidRecordRepositoryCustom {
1515

1616
Optional<OrcidRecord> findOneByEmail(String email);
1717

@@ -20,4 +20,5 @@ public interface OrcidRecordRepository extends MongoRepository<OrcidRecord, Stri
2020

2121
@Query("{tokens: {salesforce_id: ?0}}")
2222
Page<OrcidRecord> findBySalesforceId(String salesforceId, Pageable pageable);
23+
2324
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package org.orcid.memberportal.service.assertion.repository;
2+
3+
import org.orcid.memberportal.service.assertion.domain.Assertion;
4+
import org.orcid.memberportal.service.assertion.domain.MemberAssertionStatusCount;
5+
import org.springframework.data.domain.Pageable;
6+
7+
import java.util.Iterator;
8+
import java.util.List;
9+
10+
public interface OrcidRecordRepositoryCustom {
11+
12+
void updateTokenSalesforceIds(String oldSalesforceId, String newSalesforceId);
13+
14+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package org.orcid.memberportal.service.assertion.repository.impl;
2+
3+
import com.mongodb.MongoClient;
4+
import com.mongodb.client.DistinctIterable;
5+
import com.mongodb.client.model.Filters;
6+
import org.orcid.memberportal.service.assertion.domain.Assertion;
7+
import org.orcid.memberportal.service.assertion.domain.MemberAssertionStatusCount;
8+
import org.orcid.memberportal.service.assertion.domain.OrcidRecord;
9+
import org.orcid.memberportal.service.assertion.domain.enumeration.AssertionStatus;
10+
import org.orcid.memberportal.service.assertion.repository.AssertionRepositoryCustom;
11+
import org.orcid.memberportal.service.assertion.repository.OrcidRecordRepositoryCustom;
12+
import org.springframework.beans.factory.annotation.Autowired;
13+
import org.springframework.data.domain.Pageable;
14+
import org.springframework.data.mongodb.core.MongoTemplate;
15+
import org.springframework.data.mongodb.core.aggregation.*;
16+
import org.springframework.data.mongodb.core.query.Criteria;
17+
import org.springframework.data.mongodb.core.query.Query;
18+
import org.springframework.data.mongodb.core.query.Update;
19+
import org.springframework.stereotype.Repository;
20+
21+
import java.util.Iterator;
22+
import java.util.List;
23+
24+
@Repository
25+
public class OrcidRecordRepositoryCustomImpl implements OrcidRecordRepositoryCustom {
26+
27+
@Autowired
28+
private MongoTemplate mongoTemplate;
29+
30+
public OrcidRecordRepositoryCustomImpl(MongoTemplate mongoTemplate) {
31+
this.mongoTemplate = mongoTemplate;
32+
}
33+
34+
35+
@Override
36+
public void updateTokenSalesforceIds(String oldSalesforceId, String newSalesforceId) {
37+
mongoTemplate.updateMulti(Query.query(Criteria.where("tokens.salesforce_id").is(oldSalesforceId)),
38+
new Update().set("tokens.$.salesforce_id", newSalesforceId), OrcidRecord.class);
39+
}
40+
}

assertion-service/src/main/java/org/orcid/memberportal/service/assertion/services/AssertionService.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,9 @@ private String getAssertionStatus(Assertion assertion) {
235235
}
236236

237237
public boolean updateAssertionsSalesforceId(String from, String to) {
238-
return updateAssertionsSalesforceId(from, to, true);
238+
boolean updated = updateAssertionsSalesforceId(from, to, true);
239+
updated = updated && orcidRecordService.updateTokenSalesforceIds(from, to);
240+
return updated;
239241
}
240242

241243
private boolean updateAssertionsSalesforceId(String from, String to, boolean rollback) {

assertion-service/src/main/java/org/orcid/memberportal/service/assertion/services/OrcidRecordService.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import org.slf4j.Logger;
1818
import org.slf4j.LoggerFactory;
1919
import org.springframework.beans.factory.annotation.Autowired;
20+
import org.springframework.data.domain.Page;
2021
import org.springframework.stereotype.Service;
2122

2223
@Service
@@ -117,7 +118,7 @@ public String generateLinkForEmail(String email) {
117118
String salesforceId = assertionsUserService.getLoggedInUserSalesforceId();
118119
return generateLinkForEmailAndSalesforceId(email, salesforceId);
119120
}
120-
121+
121122
public String generateLinkForEmailAndSalesforceId(String email, String salesforceId) {
122123
String landingPageUrl = applicationProperties.getLandingPageUrl();
123124
Optional<OrcidRecord> record = orcidRecordRepository.findOneByEmail(email);
@@ -178,14 +179,18 @@ public void deleteOrcidRecordTokenByEmailAndSalesforceId(String email, String sa
178179
}
179180
}
180181
}
181-
182+
182183
public boolean userHasGrantedOrDeniedPermission(String email, String salesforceId) {
183184
Optional<OrcidRecord> orcidRecordOptional = findOneByEmail(email);
184185
if (orcidRecordOptional.isEmpty()) {
185186
return false;
186187
}
187-
188+
188189
return !StringUtils.isBlank(orcidRecordOptional.get().getToken(salesforceId, true));
189190
}
190191

192+
public boolean updateTokenSalesforceIds(String salesforceId, String newSalesforceId) {
193+
orcidRecordRepository.updateTokenSalesforceIds(salesforceId, newSalesforceId);
194+
return true;
195+
}
191196
}

assertion-service/src/main/java/org/orcid/memberportal/service/assertion/web/rest/AssertionResource.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public class AssertionResource {
105105

106106
@Autowired
107107
private NotificationService notificationService;
108-
108+
109109
@Autowired
110110
private MemberService memberService;
111111

@@ -452,6 +452,7 @@ private String encodeUrl(String urlString) throws MalformedURLException, URISynt
452452
public ResponseEntity<Void> updateSalesforceId(@PathVariable String salesforceId, @PathVariable String newSalesforceId) {
453453
LOG.debug("REST request to update Assertions by salesforce : {}", salesforceId);
454454
boolean success = assertionService.updateAssertionsSalesforceId(salesforceId, newSalesforceId);
455+
success = success && orcidRecordService.updateTokenSalesforceIds(salesforceId, newSalesforceId);
455456
if (success) {
456457
return ResponseEntity.ok().headers(HeaderUtil.createEntityUpdateAlert(applicationName, true, "assertion", salesforceId)).build();
457458
} else {

assertion-service/src/test/java/org/orcid/memberportal/service/assertion/services/AssertionServiceTest.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1835,10 +1835,13 @@ void testUpdateAssertionsSalesforceId() {
18351835
;
18361836
Mockito.when(assertionRepository.findBySalesforceId(Mockito.eq("salesforce-id"), Mockito.any(Pageable.class))).thenReturn(new PageImpl<Assertion>(firstPage))
18371837
.thenReturn(new PageImpl<Assertion>(secondPage)).thenReturn(new PageImpl<Assertion>(thirdPage)).thenReturn(new PageImpl<Assertion>(new ArrayList<>()));
1838+
Mockito.when(orcidRecordService.updateTokenSalesforceIds(Mockito.anyString(), Mockito.anyString())).thenReturn(true);
1839+
18381840
boolean success = assertionService.updateAssertionsSalesforceId("salesforce-id", "new-salesforce-id");
18391841
assertThat(success).isTrue();
18401842

18411843
Mockito.verify(assertionRepository, Mockito.times((AssertionService.REGISTRY_SYNC_BATCH_SIZE * 3) - 10)).save(assertionCaptor.capture());
1844+
Mockito.verify(orcidRecordService).updateTokenSalesforceIds(Mockito.anyString(), Mockito.anyString());
18421845
List<Assertion> saved = assertionCaptor.getAllValues();
18431846
saved.forEach(a -> assertThat(a.getSalesforceId()).isEqualTo("new-salesforce-id"));
18441847
}

assertion-service/src/test/java/org/orcid/memberportal/service/assertion/web/rest/AssertionResourceTest.java

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -86,10 +86,10 @@ class AssertionResourceTest {
8686

8787
@Mock
8888
private RorOrgValidator rorOrgValidator;
89-
89+
9090
@Mock
9191
private MemberService memberService;
92-
92+
9393
@Mock
9494
private NotificationService notificationService;
9595

@@ -101,7 +101,7 @@ class AssertionResourceTest {
101101

102102
@Mock
103103
private GridOrgValidator gridOrgValidator;
104-
104+
105105
@InjectMocks
106106
private AssertionResource assertionResource;
107107

@@ -115,7 +115,7 @@ public void setUp() {
115115
Mockito.when(assertionsUserService.getLoggedInUser()).thenReturn(getUser());
116116
Mockito.when(assertionsUserService.getLoggedInUserSalesforceId()).thenReturn(DEFAULT_SALESFORCE_ID);
117117
}
118-
118+
119119
@Test
120120
void testGetAssertionOfPendingStatus() {
121121
Assertion pendingAssertion = new Assertion();
@@ -126,7 +126,7 @@ void testGetAssertionOfPendingStatus() {
126126
Mockito.verify(assertionService).findById(Mockito.eq("test"));
127127
Mockito.verify(assertionService).populatePermissionLink(Mockito.any(Assertion.class));
128128
}
129-
129+
130130
@Test
131131
void testGetAssertionOfNotificationSentStatus() {
132132
Assertion pendingAssertion = new Assertion();
@@ -137,7 +137,7 @@ void testGetAssertionOfNotificationSentStatus() {
137137
Mockito.verify(assertionService).findById(Mockito.eq("test"));
138138
Mockito.verify(assertionService).populatePermissionLink(Mockito.any(Assertion.class));
139139
}
140-
140+
141141
@Test
142142
void testGetAssertionOfDeniedAccessStatus() {
143143
Assertion pendingAssertion = new Assertion();
@@ -148,7 +148,7 @@ void testGetAssertionOfDeniedAccessStatus() {
148148
Mockito.verify(assertionService).findById(Mockito.eq("test"));
149149
Mockito.verify(assertionService).populatePermissionLink(Mockito.any(Assertion.class));
150150
}
151-
151+
152152
@Test
153153
void testGetAssertionOfRevokedAccessStatus() {
154154
Assertion pendingAssertion = new Assertion();
@@ -159,7 +159,7 @@ void testGetAssertionOfRevokedAccessStatus() {
159159
Mockito.verify(assertionService).findById(Mockito.eq("test"));
160160
Mockito.verify(assertionService).populatePermissionLink(Mockito.any(Assertion.class));
161161
}
162-
162+
163163
@Test
164164
void testGetAssertionOfInOrcidStatus() {
165165
Assertion pendingAssertion = new Assertion();
@@ -169,7 +169,7 @@ void testGetAssertionOfInOrcidStatus() {
169169
Mockito.verify(assertionService).findById(Mockito.eq("test"));
170170
Mockito.verify(assertionService, Mockito.never()).populatePermissionLink(Mockito.any(Assertion.class));
171171
}
172-
172+
173173
@Test
174174
void testSendNotifications() {
175175
Mockito.when(assertionsUserService.getLoggedInUser()).thenReturn(getUser());
@@ -180,23 +180,23 @@ void testSendNotifications() {
180180
Mockito.verify(assertionService).markPendingAssertionsAsNotificationRequested(Mockito.eq(DEFAULT_SALESFORCE_ID));
181181
Mockito.verify(memberService).updateMemberDefaultLanguage(Mockito.eq(DEFAULT_SALESFORCE_ID), Mockito.eq("en"));
182182
}
183-
183+
184184
@Test
185185
void testGetNotificationRequestInProgress_inProgressIsTrue() {
186186
Mockito.when(assertionsUserService.getLoggedInUserSalesforceId()).thenReturn(DEFAULT_SALESFORCE_ID);
187187
Mockito.when(notificationService.requestInProgress(Mockito.eq(DEFAULT_SALESFORCE_ID))).thenReturn(true);
188-
188+
189189
ResponseEntity<NotificationRequestInProgress> response = assertionResource.getNotificationRequestInProgress();
190190
assertTrue(response.getStatusCode().is2xxSuccessful());
191191
assertNotNull(response.getBody());
192192
assertTrue(response.getBody().getInProgress());
193193
}
194-
194+
195195
@Test
196196
void testGetNotificationRequestInProgress_inProgressIsFalse() {
197197
Mockito.when(assertionsUserService.getLoggedInUserSalesforceId()).thenReturn(DEFAULT_SALESFORCE_ID);
198198
Mockito.when(notificationService.requestInProgress(Mockito.eq(DEFAULT_SALESFORCE_ID))).thenReturn(false);
199-
199+
200200
ResponseEntity<NotificationRequestInProgress> response = assertionResource.getNotificationRequestInProgress();
201201
assertTrue(response.getStatusCode().is2xxSuccessful());
202202
assertNotNull(response.getBody());
@@ -390,14 +390,15 @@ void testGetAssertions() throws BadRequestAlertException, org.codehaus.jettison.
390390
ResponseEntity<List<Assertion>> page = assertionResource.getAssertions(Mockito.mock(Pageable.class), new HttpHeaders(), UriComponentsBuilder.newInstance(), "");
391391
assertNotNull(page.getBody());
392392
}
393-
393+
394394
@Test
395395
void testUpdateSalesforceId() {
396396
Mockito.when(assertionService.updateAssertionsSalesforceId(Mockito.eq("salesforce-id"), Mockito.eq("new-salesforce-id"))).thenReturn(true);
397+
Mockito.when(orcidRecordService.updateTokenSalesforceIds(Mockito.eq("salesforce-id"), Mockito.eq("new-salesforce-id"))).thenReturn(true);
397398
ResponseEntity<Void> response = assertionResource.updateSalesforceId("salesforce-id", "new-salesforce-id");
398399
assertTrue(response.getStatusCode().is2xxSuccessful());
399400
}
400-
401+
401402
@Test
402403
void testUpdateSalesforceIdWithError() {
403404
Mockito.when(assertionService.updateAssertionsSalesforceId(Mockito.eq("salesforce-id"), Mockito.eq("new-salesforce-id"))).thenReturn(false);
@@ -477,7 +478,7 @@ private AssertionServiceUser getUser() {
477478
user.setLangKey("en");
478479
return user;
479480
}
480-
481+
481482
private NotificationRequest getNotificationRequest() {
482483
NotificationRequest request = new NotificationRequest();
483484
request.setLanguage("en");

member-service/src/main/java/org/orcid/memberportal/service/member/client/UserServiceClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,4 +42,7 @@ public interface UserServiceClient {
4242
ResponseEntity<Void> deleteUser(@PathVariable("loginOrId") String loginOrId,
4343
@RequestParam(value = "noMainContactCheck", required = false) boolean noMainContactCheck);
4444

45+
@RequestMapping(method = RequestMethod.PUT, value = "/api/users/memberName/{salesforceId}/{newMemberName}", consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON)
46+
@HystrixProperty(name = "hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds", value = "50000")
47+
ResponseEntity<String> updateUsersMemberNames(@PathVariable("salesforceId") String salesforceId, @PathVariable("newMemberName") String newMemberName);
4548
}

0 commit comments

Comments
 (0)