diff --git a/api-docs/apiLive.htm b/api-docs/apiLive.htm index 1dcb321fb..c182e6588 100644 --- a/api-docs/apiLive.htm +++ b/api-docs/apiLive.htm @@ -3601,6 +3601,30 @@ + + + self/clients/{clientId}/images + Upload client image (Data URI) + + + + + + + self/clients/{clientId}/images + Upload client image (Multi-part Form data) + + + + + + + self/clients/{clientId}/images + + + + Delete client image + Loans self/loans/template?templateType=individual @@ -49110,6 +49134,98 @@ GET https://DomainName/api/v1/self/clients/{clientId}/obligeedetails + +   +
+
+

Upload client image (Data URI)

+
+
+ +POST https://DomainName/api/v1/self/clients/{clientId}/images + + +POST self/clients/14/images +Content-Type: text/plain +Request Body: +data:image/png;base64,iVBORw0KGgoAA +AANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAABlBMVEUAAAD///+l2Z/dAAAAM0l +EQVR4nGP4/5/h/1+G/58ZDrAz3D/McH8yw83NDDeNGe4Ug9C9zwz3gVLMDA/A6 +P9/AFGGFyjOXZtQAAAAAElFTkSuQmCC + + +{ + "resourceId": 14, + "changes": {}, + "resourceIdentifier": "14" +} + +
+
+ +   +
+
+

Upload client image (Multi-part Form data)

+ + + + + + + +
Mandatory Fields
file +
+

+ The form should contain a required named body part with the + name "file".

+ If you are using a HTML form, a snippet like + <input type="file" name="file"></input> + can be used for uploading the image file +

+
+
+ +POST https://DomainName/api/v1/self/clients/{clientId}/images + + +POST self/clients/14/images +Content-Type: multipart/form-data +Request Body: Not shown + + +{ + "resourceId": 14, + "changes": {}, + "resourceIdentifier": "14" +} + +
+
+   +
+
+

Delete an client's Image

+
+
+ +DELETE https://DomainName/api/v1/self/clients/{clientId}/images + + +DELETE self/clients/14/images +Content-Type: application/json +No Request Body: + + +{ + "resourceId": 14, + "changes": {}, + "resourceIdentifier": "14" +} + +
+
+ diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java index 6d6738153..64edab861 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/client/api/ClientApiConstants.java @@ -188,6 +188,7 @@ public class ClientApiConstants { public static final String datatables = "datatables"; public static final String obligeeData = "ObligeeDetails"; + public static final String clientEntityName = "clients"; /** * These parameters will match the class level parameters of diff --git a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java index d9f1a06a6..d34ad27e4 100644 --- a/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java +++ b/fineract-provider/src/main/java/org/apache/fineract/portfolio/self/client/api/SelfClientsApiResource.java @@ -18,9 +18,14 @@ */ package org.apache.fineract.portfolio.self.client.api; +import java.io.InputStream; + import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; +import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @@ -44,6 +49,10 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; +import com.sun.jersey.core.header.FormDataContentDisposition; +import com.sun.jersey.multipart.FormDataBodyPart; +import com.sun.jersey.multipart.FormDataParam; + @Path("/self/clients") @Component @Scope("singleton") @@ -217,6 +226,43 @@ public class SelfClientsApiResource { throw new ClientNotFoundException(clientId); } } + + @POST + @Path("{clientId}/images") + @Consumes({ MediaType.MULTIPART_FORM_DATA }) + @Produces({ MediaType.APPLICATION_JSON }) + public String addNewClientImage(@PathParam("clientId") final Long clientId, + @HeaderParam("Content-Length") final Long fileSize, @FormDataParam("file") final InputStream inputStream, + @FormDataParam("file") final FormDataContentDisposition fileDetails, + @FormDataParam("file") final FormDataBodyPart bodyPart) { + + validateAppuserClientsMapping(clientId); + return this.imagesApiResource.addNewClientImage(ClientApiConstants.clientEntityName, clientId, fileSize, + inputStream, fileDetails, bodyPart); + + } + + @POST + @Path("{clientId}/images") + @Consumes({ MediaType.TEXT_PLAIN, MediaType.TEXT_HTML, MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + public String addNewClientImage(@PathParam("entity") final String entityName, + @PathParam("clientId") final Long clientId, final String jsonRequestBody) { + validateAppuserClientsMapping(clientId); + return this.imagesApiResource.addNewClientImage(ClientApiConstants.clientEntityName, clientId, jsonRequestBody); + + } + + @DELETE + @Path("{clientId}/images") + @Consumes({ MediaType.APPLICATION_JSON }) + @Produces({ MediaType.APPLICATION_JSON }) + public String deleteClientImage(@PathParam("clientId") final Long clientId) { + + validateAppuserClientsMapping(clientId); + return this.imagesApiResource.deleteClientImage(ClientApiConstants.clientEntityName, clientId); + + } @GET @Path("{clientId}/obligeedetails")