-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[MODORG-54] - Added bankingInformation API
- Loading branch information
Dzmitry_Butramyou
committed
Oct 30, 2023
1 parent
426feee
commit 93f35ad
Showing
13 changed files
with
465 additions
and
39 deletions.
There are no files selected for viewing
Submodule acq-models
updated
30 files
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,66 @@ | ||
#%RAML 1.0 | ||
|
||
title: Banking information | ||
baseUri: https://github.com/folio-org/mod-organizations | ||
version: v1.0 | ||
protocols: [ HTTP, HTTPS ] | ||
|
||
documentation: | ||
- title: Banking information Logic API | ||
content: <b>API for banking information</b> | ||
|
||
types: | ||
banking_information: !include acq-models/mod-orgs/schemas/banking_information.json | ||
banking_information_collection: !include acq-models/mod-orgs/schemas/banking_information_collection.json | ||
errors: !include raml-util/schemas/errors.schema | ||
UUID: | ||
type: string | ||
pattern: ^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-5][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}$ | ||
|
||
traits: | ||
pageable: !include raml-util/traits/pageable.raml | ||
searchable: !include raml-util/traits/searchable.raml | ||
validate: !include raml-util/traits/validation.raml | ||
|
||
resourceTypes: | ||
collection: !include raml-util/rtypes/collection-with-json-response.raml | ||
collection-item: !include raml-util/rtypes/item-collection-with-json-response.raml | ||
|
||
/organizations/banking-information: | ||
type: | ||
collection: | ||
exampleCollection: !include acq-models/mod-orgs/examples/banking_information_collection.sample | ||
exampleItem: !include acq-models/mod-orgs/examples/banking_information_post.sample | ||
schemaCollection: banking_information_collection | ||
schemaItem: banking_information | ||
is: [validate] | ||
get: | ||
description: Get a list of banking information | ||
is: [ | ||
searchable: { description: "CQL query", example: "bankName=TRC" }, | ||
pageable | ||
] | ||
post: | ||
description: Create a banking information | ||
is: [ validate ] | ||
/{id}: | ||
uriParameters: | ||
id: | ||
description: The UUID of a banking information | ||
type: UUID | ||
type: | ||
collection-item: | ||
exampleItem: !include acq-models/mod-orgs/examples/banking_information_get.sample | ||
schema: banking_information | ||
is: [validate] | ||
put: | ||
description: Update a banking information by id | ||
body: | ||
application/json: | ||
example: | ||
strict: false | ||
value: !include acq-models/mod-orgs/examples/banking_information_post.sample | ||
type: banking_information | ||
delete: | ||
description: Delete a banking information by id | ||
is: [ validate ] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
73 changes: 73 additions & 0 deletions
73
src/main/java/org/folio/rest/impl/BankingInformationAPI.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
package org.folio.rest.impl; | ||
|
||
import io.vertx.core.AsyncResult; | ||
import io.vertx.core.Context; | ||
import io.vertx.core.Handler; | ||
import io.vertx.core.Vertx; | ||
import org.apache.logging.log4j.LogManager; | ||
import org.folio.rest.jaxrs.model.BankingInformation; | ||
import org.folio.rest.jaxrs.resource.OrganizationsBankingInformation; | ||
|
||
import javax.ws.rs.core.Response; | ||
import java.util.Map; | ||
import org.apache.logging.log4j.Logger; | ||
import org.folio.service.organization.BankingInformationService; | ||
import org.folio.spring.SpringContextUtil; | ||
import org.springframework.beans.factory.annotation.Autowired; | ||
|
||
import static io.vertx.core.Future.succeededFuture; | ||
import static org.folio.config.Constants.OKAPI_URL; | ||
|
||
public class BankingInformationAPI extends BaseApi implements OrganizationsBankingInformation { | ||
|
||
private static final Logger logger = LogManager.getLogger(BankingInformationAPI.class); | ||
private static final String BANKING_INFORMATION_LOCATION_PREFIX = "/organizations/banking-information/%s"; | ||
|
||
@Autowired | ||
private BankingInformationService bankingInformationService; | ||
|
||
public BankingInformationAPI() { | ||
SpringContextUtil.autowireDependencies(this, Vertx.currentContext()); | ||
} | ||
|
||
@Override | ||
public void getOrganizationsBankingInformation(String query, String totalRecords, int offset, int limit, Map<String, String> okapiHeaders, Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) { | ||
bankingInformationService.getBankingInformationCollection(offset, limit, query, vertxContext, okapiHeaders) | ||
.onSuccess(bankingInformation -> asyncResultHandler.handle(succeededFuture(buildOkResponse(bankingInformation)))) | ||
.onFailure(t -> handleErrorResponse(asyncResultHandler, t)); | ||
} | ||
|
||
@Override | ||
public void postOrganizationsBankingInformation(BankingInformation entity, Map<String, String> okapiHeaders, | ||
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) { | ||
logger.debug("Trying to create banking information with id: {}", entity.getId()); | ||
bankingInformationService.createBankingInformation(entity, vertxContext, okapiHeaders) | ||
.onSuccess(bankingInformation -> asyncResultHandler.handle(succeededFuture(buildResponseWithLocation(okapiHeaders.get(OKAPI_URL), | ||
String.format(BANKING_INFORMATION_LOCATION_PREFIX, bankingInformation.getId()), bankingInformation)))) | ||
.onFailure(t -> handleErrorResponse(asyncResultHandler, t)); | ||
} | ||
|
||
@Override | ||
public void putOrganizationsBankingInformationById(String id, BankingInformation entity, Map<String, String> okapiHeaders, Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) { | ||
logger.debug("Trying to update banking information with id: {}", id); | ||
bankingInformationService.updateBankingInformation(id, entity, vertxContext, okapiHeaders) | ||
.onSuccess(vVoid -> asyncResultHandler.handle(succeededFuture(buildNoContentResponse()))) | ||
.onFailure(t -> handleErrorResponse(asyncResultHandler, t)); | ||
} | ||
|
||
@Override | ||
public void deleteOrganizationsBankingInformationById(String id, Map<String, String> okapiHeaders, Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) { | ||
logger.debug("Trying to delete banking information by id: {}", id); | ||
bankingInformationService.deleteBankingInformation(id, vertxContext, okapiHeaders) | ||
.onSuccess(vVoid -> asyncResultHandler.handle(succeededFuture(buildNoContentResponse()))) | ||
.onFailure(t -> handleErrorResponse(asyncResultHandler, t)); | ||
} | ||
|
||
@Override | ||
public void getOrganizationsBankingInformationById(String id, Map<String, String> okapiHeaders, Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) { | ||
logger.debug("Trying to get banking information with id: {}", id); | ||
bankingInformationService.getBankingInformationById(id, vertxContext, okapiHeaders) | ||
.onSuccess(bankingInformation -> asyncResultHandler.handle(succeededFuture(buildOkResponse(bankingInformation)))) | ||
.onFailure(t -> handleErrorResponse(asyncResultHandler, t)); | ||
} | ||
} |
63 changes: 63 additions & 0 deletions
63
src/main/java/org/folio/service/organization/BankingInformationService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package org.folio.service.organization; | ||
|
||
import io.vertx.core.Context; | ||
import io.vertx.core.Future; | ||
import org.folio.rest.jaxrs.model.BankingInformation; | ||
import org.folio.rest.jaxrs.model.BankingInformationCollection; | ||
|
||
import java.util.Map; | ||
|
||
public interface BankingInformationService { | ||
|
||
/** | ||
* This method creates {@link BankingInformation} | ||
* | ||
* @param bankingInformation bankingInformation | ||
* @param context Vert.X context | ||
* @param headers OKAPI headers | ||
* @return created {@link BankingInformation} | ||
*/ | ||
Future<BankingInformation> createBankingInformation(BankingInformation bankingInformation, Context context, Map<String, String> headers); | ||
|
||
/** | ||
* This method returns {@link BankingInformation} by ID | ||
* | ||
* @param id bankingInformation's id | ||
* @param context Vert.X context | ||
* @param headers OKAPI headers | ||
* @return {@link BankingInformation} | ||
*/ | ||
Future<BankingInformation> getBankingInformationById(String id, Context context, Map<String, String> headers); | ||
|
||
/** | ||
* This method returns {@link BankingInformationCollection} by query | ||
* | ||
* @param offset offset | ||
* @param limit limit | ||
* @param query query | ||
* @param context Vert.X context | ||
* @param headers OKAPI headers | ||
* @return collection of bankingInformation {@link BankingInformationCollection} | ||
*/ | ||
Future<BankingInformationCollection> getBankingInformationCollection(int offset, int limit, String query, | ||
Context context, Map<String, String> headers); | ||
|
||
/** | ||
* This method updates {@link BankingInformation} by ID | ||
* @param id updated bankingInformation's id | ||
* @param entity updated {@link BankingInformation} entity | ||
* @param context Vert.X context | ||
* @param headers OKAPI headers | ||
* @return void future | ||
*/ | ||
Future<Void> updateBankingInformation (String id, BankingInformation entity, Context context, Map<String, String> headers); | ||
|
||
/** | ||
* This method deletes {@link BankingInformation} by ID | ||
* @param id deleted bankingInformation's id | ||
* @param context Vert.X context | ||
* @param headers OKAPI headers | ||
* @return void future | ||
*/ | ||
Future<Void> deleteBankingInformation (String id, Context context, Map<String, String> headers); | ||
} |
76 changes: 76 additions & 0 deletions
76
src/main/java/org/folio/service/organization/BankingInformationServiceImpl.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
package org.folio.service.organization; | ||
|
||
import io.vertx.core.Context; | ||
import io.vertx.core.Future; | ||
import org.apache.logging.log4j.LogManager; | ||
import org.apache.logging.log4j.Logger; | ||
import org.folio.HttpStatus; | ||
import org.folio.exception.HttpException; | ||
import org.folio.rest.client.RequestContext; | ||
import org.folio.rest.client.RestClient; | ||
import org.folio.rest.jaxrs.model.BankingInformation; | ||
import org.folio.rest.jaxrs.model.BankingInformationCollection; | ||
import org.springframework.stereotype.Service; | ||
|
||
import java.util.Map; | ||
|
||
import static org.apache.commons.lang3.StringUtils.isEmpty; | ||
import static org.folio.exception.ErrorCodes.MISMATCH_BETWEEN_ID_IN_PATH_AND_BODY; | ||
import static org.folio.util.ResourcePathResolver.*; | ||
import static org.folio.util.ResourcePathResolver.resourceByIdPath; | ||
import static org.folio.util.RestUtils.*; | ||
|
||
@Service | ||
public class BankingInformationServiceImpl implements BankingInformationService { | ||
|
||
private static final Logger logger = LogManager.getLogger(BankingInformationServiceImpl.class); | ||
public static final String GET_BANKING_INFORMATION_BY_QUERY = resourcesPath(BANKING_INFORMATION) + SEARCH_PARAMS; | ||
|
||
private final RestClient restClient; | ||
|
||
public BankingInformationServiceImpl(RestClient restClient) { | ||
this.restClient = restClient; | ||
} | ||
|
||
@Override | ||
public Future<BankingInformation> createBankingInformation(BankingInformation bankingInformation, Context context, Map<String, String> headers) { | ||
logger.debug("createBankingInformation:: Trying to create banking information with id: {}", bankingInformation.getId()); | ||
RequestContext requestContext = new RequestContext(context, headers); | ||
return restClient.post(bankingInformation, resourcesPath(BANKING_INFORMATION), BankingInformation.class, requestContext); | ||
} | ||
|
||
@Override | ||
public Future<BankingInformation> getBankingInformationById(String id, Context context, Map<String, String> headers) { | ||
logger.debug("getBankingInformationById:: Trying to get banking information by id: {}", id); | ||
RequestContext requestContext = new RequestContext(context, headers); | ||
return restClient.get(resourceByIdPath(BANKING_INFORMATION, id), BankingInformation.class, requestContext); | ||
} | ||
|
||
@Override | ||
public Future<BankingInformationCollection> getBankingInformationCollection(int offset, int limit, String query, Context context, Map<String, String> headers) { | ||
logger.debug("getBankingInformationCollection:: Trying to get banking information collection with query: {}, offset: {}, limit: {}", query, offset, limit); | ||
RequestContext requestContext = new RequestContext(context, headers); | ||
String endpoint = String.format(GET_BANKING_INFORMATION_BY_QUERY, limit, offset, buildQuery(query)); | ||
return restClient.get(endpoint, BankingInformationCollection.class, requestContext); | ||
} | ||
|
||
@Override | ||
public Future<Void> updateBankingInformation(String id, BankingInformation updatedBankingInformation, Context context, Map<String, String> headers) { | ||
logger.debug("updateBankingInformation:: Trying to update banking information with id: {}", id); | ||
RequestContext requestContext = new RequestContext(context, headers); | ||
if (isEmpty(updatedBankingInformation.getId())) { | ||
updatedBankingInformation.setId(id); | ||
} else if (!id.equals(updatedBankingInformation.getId())) { | ||
logger.warn("updateBankingInformation:: Mismatch between id '{}' in path and request body '{}'", id, updatedBankingInformation.getId()); | ||
return Future.failedFuture(new HttpException(HttpStatus.HTTP_UNPROCESSABLE_ENTITY.toInt(), MISMATCH_BETWEEN_ID_IN_PATH_AND_BODY.toError())); | ||
} | ||
return restClient.put(resourceByIdPath(BANKING_INFORMATION, updatedBankingInformation.getId()), updatedBankingInformation, requestContext); | ||
} | ||
|
||
@Override | ||
public Future<Void> deleteBankingInformation(String id, Context context, Map<String, String> headers) { | ||
logger.debug("deleteBankingInformation:: Trying to banking information by id: {}", id); | ||
RequestContext requestContext = new RequestContext(context, headers); | ||
return restClient.delete(resourceByIdPath(BANKING_INFORMATION, id), requestContext); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.