From be49522fb3fd90ca24384ea1f38a6c829448e120 Mon Sep 17 00:00:00 2001 From: ShruthiRajaram Date: Tue, 23 Oct 2018 17:49:14 +0530 Subject: [PATCH] FINERACT-628 Self service APIs for Surveys --- api-docs/apiLive.htm | 160 ++++++++++++++++-- .../spm/api/SelfScorecardApiResource.java | 93 ++++++++++ .../self/spm/api/SelfSpmApiResource.java | 62 +++++++ 3 files changed, 305 insertions(+), 10 deletions(-) create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java create mode 100644 fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfSpmApiResource.java diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm index 9e10be258..4ead11adc 100644 --- a/api-docs/apiLive.htm +++ b/api-docs/apiLive.htm @@ -3617,6 +3617,14 @@ + + + self/clients/{clientId}/images + + + + Delete client image + Loan Product self/loanproducts?clientId={clientId} @@ -3651,14 +3659,6 @@ - - - self/clients/{clientId}/images - - - - Delete client image - Share Product self/shareproducts?clientId={clientId} @@ -3875,6 +3875,30 @@ + + Surveys + self/surveys?isActive=true + + Retrieve Active Surveys + + + + + + self/surveys/scorecards/{surveyId} + Take Survey + + + + + + + self/surveys/scorecards/clients/{clientId} + + Survey Scorecards + + + @@ -49700,8 +49724,7 @@ GET https://DomainName/api/v1/self/loanproducts?clientId={clientId} ] - - +   @@ -50414,6 +50437,123 @@ GET https://DomainName/api/v1/self/loanproducts/{productId}?clientId={clientId} + +  +
+
+

Retrieve Active Surveys

+ +

Example Requests :

+
self/surveys?isActive=true
+
+
+ GET https://domainname/api/v1/self/surveys?isActive=true + +[ + { + "id":1, + "componentDatas":[ + + ], + "questionDatas":[ + { + "id":1, + "responseDatas":[ + { + "id":2, + "text":"Own", + "value":1, + "sequenceNo":1 + }, + { + "id":1, + "text":"Rent", + "value":0, + "sequenceNo":2 + } + ], + "componentKey":Test, + "key":"t1", + "text":"Type of house", + "description":Test, + "sequenceNo":1 + } + ], + "key":"test", + "name":"test", + "description":"test", + "countryCode":"in", + "validFrom":1540233000000, + "validTo":4695906600000 + } +] + +
+
+ +  +
+
+

Submit Survey

+ +

Example Requests :

+
self/surveys/scorecards/1
+
+
+ POST https://domainname/api/v1/self/surveys/scorecards/{surveyId} + +{ + "userId":3, + "clientId":"1", + "surveyId":1, + "scorecardValues":[ + { + "questionId":1, + "responseId":2, + "value":1, + "createdOn":1540291482379 + } + ], + "surveyName":"", + "username":"", + "id":0 +} + +
+
+ +  +
+
+

Retrieve Survey records

+ +

Example Requests :

+
self/surveys/scorecards/clients/1
+
+
+ GET https://domainname/api/v1/self/surveys/scorecards/clients/{clientId} + +[ + { + "id":8, + "userId":, + "username":"mifos", + "clientId":3, + "surveyId":1, + "surveyName":"test", + "scorecardValues":[ + { + "questionId":1, + "responseId":2, + "value":1, + "createdOn":1540233000000 + } + ] + } +] +
+
+ diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java new file mode 100644 index 000000000..b097e10b4 --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfScorecardApiResource.java @@ -0,0 +1,93 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.fineract.portfolio.self.spm.api; + +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.portfolio.client.exception.ClientNotFoundException; +import org.apache.fineract.portfolio.self.client.service.AppuserClientMapperReadService; +import org.apache.fineract.spm.api.ScorecardApiResource; +import org.apache.fineract.spm.data.ScorecardData; +import org.apache.fineract.useradministration.domain.AppUser; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +@Path("/self/surveys/scorecards") +@Component +@Scope("singleton") +public class SelfScorecardApiResource { + + private final PlatformSecurityContext context; + private final ScorecardApiResource scorecardApiResource; + private final AppuserClientMapperReadService appuserClientMapperReadService; + + @Autowired + public SelfScorecardApiResource(final PlatformSecurityContext securityContext, + final AppuserClientMapperReadService appuserClientMapperReadService, + final ScorecardApiResource scorecardApiResource) { + this.context = securityContext; + this.scorecardApiResource = scorecardApiResource; + this.appuserClientMapperReadService = appuserClientMapperReadService; + } + + @GET + @Path("clients/{clientId}") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + @Transactional + public List findByClient(@PathParam("clientId") final Long clientId) { + + validateAppuserClientsMapping(clientId); + return this.scorecardApiResource.findByClient(clientId); + } + + @POST + @Path("{surveyId}") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + @Transactional + public void createScorecard(@PathParam("surveyId") final Long surveyId, final ScorecardData scorecardData) { + if (scorecardData.getClientId() != null) { + validateAppuserClientsMapping(scorecardData.getClientId()); + this.scorecardApiResource.createScorecard(surveyId, scorecardData); + } + + } + + private void validateAppuserClientsMapping(final Long clientId) { + AppUser user = this.context.authenticatedUser(); + final boolean mappedClientId = this.appuserClientMapperReadService.isClientMappedToUser(clientId, user.getId()); + if (!mappedClientId) { + throw new ClientNotFoundException(clientId); + } + } + +} diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfSpmApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfSpmApiResource.java new file mode 100644 index 000000000..5e2f5003c --- /dev/null +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/spm/api/SelfSpmApiResource.java @@ -0,0 +1,62 @@ +/** + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +package org.apache.fineract.portfolio.self.spm.api; + +import java.util.List; + +import javax.ws.rs.Consumes; +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; + +import org.apache.fineract.infrastructure.security.service.PlatformSecurityContext; +import org.apache.fineract.spm.api.SpmApiResource; +import org.apache.fineract.spm.data.SurveyData; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Scope; +import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; + +@Path("/self/surveys") +@Component +@Scope("singleton") +public class SelfSpmApiResource { + + private final PlatformSecurityContext securityContext; + private final SpmApiResource spmApiResource; + + @Autowired + public SelfSpmApiResource(final PlatformSecurityContext securityContext, final SpmApiResource spmApiResource) { + this.securityContext = securityContext; + this.spmApiResource = spmApiResource; + } + + @GET + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + @Transactional + public List fetchAllSurveys() { + securityContext.authenticatedUser(); + final Boolean isActive = true; + return this.spmApiResource.fetchAllSurveys(isActive); + } + +}