diff --git a/solr/solr.sh b/solr/solr.sh index 401022a87d7..f29234bccd6 100755 --- a/solr/solr.sh +++ b/solr/solr.sh @@ -17,3 +17,5 @@ bin/solr create -c accountrequests -s 2 -rf 2 bin/solr config -c accountrequests -p 8983 -action set-user-property -property update.autoCreateFields -value false curl -X POST -H 'Content-type: application/json' --data-binary '{"add-field": {"name": "email", "type": "string"}}' localhost:8983/solr/accountrequests/schema curl -X POST -H 'Content-type: application/json' --data-binary '{"add-field": {"name": "institute", "type": "string"}}' localhost:8983/solr/accountrequests/schema +curl -X POST -H 'Content-type: application/json' --data-binary '{"add-field": {"name": "comments", "type": "string"}}' localhost:8983/solr/accountrequests/schema +curl -X POST -H 'Content-type: application/json' --data-binary '{"add-field": {"name": "status", "type": "string"}}' localhost:8983/solr/accountrequests/schema diff --git a/src/it/java/teammates/it/storage/sqlsearch/AccountRequestSearchIT.java b/src/it/java/teammates/it/storage/sqlsearch/AccountRequestSearchIT.java index db64c17c2ab..a9b196eafc8 100644 --- a/src/it/java/teammates/it/storage/sqlsearch/AccountRequestSearchIT.java +++ b/src/it/java/teammates/it/storage/sqlsearch/AccountRequestSearchIT.java @@ -89,6 +89,16 @@ public void allTests() throws Exception { results = accountRequestsDb.searchAccountRequestsInWholeSystem("\"TEAMMATES Test Institute 2\""); verifySearchResults(results, unregisteredInstructor2); + ______TS("success: search for account requests; account requests should be searchable by their comments"); + + results = accountRequestsDb.searchAccountRequestsInWholeSystem("Comments for account request from instructor2"); + verifySearchResults(results, ins2General); + + ______TS("success: search for account requests; account requests should be searchable by their status"); + + results = accountRequestsDb.searchAccountRequestsInWholeSystem("registered"); + verifySearchResults(results, ins2General); + ______TS("success: search for account requests; unregistered account requests should be searchable"); results = accountRequestsDb.searchAccountRequestsInWholeSystem("\"unregisteredinstructor1@gmail.tmt\""); diff --git a/src/it/resources/data/typicalDataBundle.json b/src/it/resources/data/typicalDataBundle.json index 2372b2fa35f..887488e829d 100644 --- a/src/it/resources/data/typicalDataBundle.json +++ b/src/it/resources/data/typicalDataBundle.json @@ -80,7 +80,9 @@ "name": "Instructor 2", "email": "instr2@teammates.tmt", "institute": "TEAMMATES Test Institute 1", - "registeredAt": "2015-02-14T00:00:00Z" + "registeredAt": "2015-02-14T00:00:00Z", + "comments": "Comments for account request from instructor2", + "status": "REGISTERED" }, "instructor3": { "name": "Instructor 3 of CourseNoRegister", diff --git a/src/main/java/teammates/storage/sqlapi/AccountRequestsDb.java b/src/main/java/teammates/storage/sqlapi/AccountRequestsDb.java index f95f93bc7d9..b05b544d5b9 100644 --- a/src/main/java/teammates/storage/sqlapi/AccountRequestsDb.java +++ b/src/main/java/teammates/storage/sqlapi/AccountRequestsDb.java @@ -152,10 +152,8 @@ public void deleteAccountRequest(AccountRequest accountRequest) { */ public void deleteDocumentByAccountRequestId(UUID accountRequestId) { if (getSearchManager() != null) { - // Solr saves the id with the prefix "java.util.UUID:", so we need to add it here to - // identify and delete the document from the index getSearchManager().deleteDocuments( - Collections.singletonList("java.util.UUID:" + accountRequestId.toString())); + Collections.singletonList(accountRequestId.toString())); } } diff --git a/src/main/java/teammates/storage/sqlsearch/AccountRequestSearchDocument.java b/src/main/java/teammates/storage/sqlsearch/AccountRequestSearchDocument.java index 9fbaf38ef14..15b6dd02e37 100644 --- a/src/main/java/teammates/storage/sqlsearch/AccountRequestSearchDocument.java +++ b/src/main/java/teammates/storage/sqlsearch/AccountRequestSearchDocument.java @@ -1,5 +1,6 @@ package teammates.storage.sqlsearch; +import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -19,14 +20,29 @@ class AccountRequestSearchDocument extends SearchDocument { Map getSearchableFields() { Map fields = new HashMap<>(); AccountRequest accountRequest = entity; - String[] searchableTexts = { - accountRequest.getName(), accountRequest.getEmail(), accountRequest.getInstitute(), - }; - fields.put("id", accountRequest.getId()); + ArrayList searchableTexts = new ArrayList<>(); + searchableTexts.add(accountRequest.getName()); + searchableTexts.add(accountRequest.getEmail()); + searchableTexts.add(accountRequest.getInstitute()); + + if (accountRequest.getComments() != null) { + searchableTexts.add(accountRequest.getComments()); + } + if (accountRequest.getStatus() != null) { + searchableTexts.add(accountRequest.getStatus().toString()); + } + + fields.put("id", accountRequest.getId().toString()); fields.put("_text_", String.join(" ", searchableTexts)); fields.put("email", accountRequest.getEmail()); fields.put("institute", accountRequest.getInstitute()); + if (accountRequest.getComments() != null) { + fields.put("comments", accountRequest.getComments()); + } + if (accountRequest.getStatus() != null) { + fields.put("status", accountRequest.getStatus().toString()); + } return fields; } diff --git a/src/main/java/teammates/storage/sqlsearch/AccountRequestSearchManager.java b/src/main/java/teammates/storage/sqlsearch/AccountRequestSearchManager.java index c5dc5d44428..5325836af32 100644 --- a/src/main/java/teammates/storage/sqlsearch/AccountRequestSearchManager.java +++ b/src/main/java/teammates/storage/sqlsearch/AccountRequestSearchManager.java @@ -2,6 +2,7 @@ import java.util.Comparator; import java.util.List; +import java.util.UUID; import org.apache.solr.client.solrj.SolrQuery; import org.apache.solr.client.solrj.response.QueryResponse; @@ -35,9 +36,8 @@ AccountRequestSearchDocument createDocument(AccountRequest accountRequest) { @Override AccountRequest getEntityFromDocument(SolrDocument document) { - String email = (String) document.getFirstValue("email"); - String institute = (String) document.getFirstValue("institute"); - return accountRequestsDb.getAccountRequest(email, institute); + UUID id = UUID.fromString((String) document.getFieldValue("id")); + return accountRequestsDb.getAccountRequest(id); } @Override