Skip to content

Commit

Permalink
[MODORDSTOR-364] Create routing_list table and API for it (#390)
Browse files Browse the repository at this point in the history
* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it

* Fix failing unit tests

* [MODORDSTOR-364] Create routing_list table and API for it

* [MODORDSTOR-364] Create routing_list table and API for it
  • Loading branch information
Saba-Zedginidze-EPAM authored Mar 26, 2024
1 parent e8745d9 commit 35d67ce
Show file tree
Hide file tree
Showing 10 changed files with 248 additions and 5 deletions.
71 changes: 70 additions & 1 deletion descriptors/ModuleDescriptor-template.json
Original file line number Diff line number Diff line change
Expand Up @@ -592,6 +592,37 @@
}
]
},
{
"id": "orders-storage.routing-lists",
"version": "1.0",
"handlers": [
{
"methods": ["GET"],
"pathPattern": "/orders-storage/routing-lists",
"permissionsRequired": ["orders-storage.routing-lists.collection.get"]
},
{
"methods": ["POST"],
"pathPattern": "/orders-storage/routing-lists",
"permissionsRequired": ["orders-storage.routing-lists.item.post"]
},
{
"methods": ["GET"],
"pathPattern": "/orders-storage/routing-lists/{id}",
"permissionsRequired": ["orders-storage.routing-lists.item.get"]
},
{
"methods": ["PUT"],
"pathPattern": "/orders-storage/routing-lists/{id}",
"permissionsRequired": ["orders-storage.routing-lists.item.put"]
},
{
"methods": ["DELETE"],
"pathPattern": "/orders-storage/routing-lists/{id}",
"permissionsRequired": ["orders-storage.routing-lists.item.delete"]
}
]
},
{
"id": "_tenant",
"version": "2.0",
Expand Down Expand Up @@ -1330,6 +1361,43 @@
],
"visible": false
},
{
"permissionName" : "orders-storage.routing-lists.collection.get",
"displayName" : "routing-lists-collection get",
"description" : "Get a collection of routing lists"
},
{
"permissionName" : "orders-storage.routing-lists.item.post",
"displayName" : "routing-lists-item post",
"description" : "Create a new routing list"
},
{
"permissionName" : "orders-storage.routing-lists.item.get",
"displayName" : "routing-lists-item get",
"description" : "Fetch a routing list"
},
{
"permissionName" : "orders-storage.routing-lists.item.put",
"displayName" : "routing-lists-item put",
"description" : "Update a outing list"
},
{
"permissionName" : "orders-storage.routing-lists.item.delete",
"displayName" : "routing-lists-item delete",
"description" : "Delete a routing list"
},
{
"permissionName" : "orders-storage.routing-lists.all",
"displayName" : "All routing list perms",
"description" : "All permissions for the routing list",
"subPermissions" : [
"orders-storage.routing-lists.collection.get",
"orders-storage.routing-lists.item.post",
"orders-storage.routing-lists.item.get",
"orders-storage.routing-lists.item.put",
"orders-storage.routing-lists.item.delete"
]
},
{
"permissionName" : "orders-storage.module.all",
"displayName" : "All orders-storage-module perms",
Expand All @@ -1355,7 +1423,8 @@
"orders-storage.export-history.all",
"orders-storage.audit-outbox.all",
"orders-storage.claiming.all",
"orders-storage.custom-fields.all"
"orders-storage.custom-fields.all",
"orders-storage.routing-lists.all"
]
}
],
Expand Down
82 changes: 82 additions & 0 deletions ramls/routing-list.raml
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
#%RAML 1.0
title: "mod-orders-storage"
baseUri: http://github.com/folio-org/mod-orders-storage
version: v1.0

documentation:
- title: Routing List
content: <b>This module implements the CRUD interface for Routing Lists. </b>

types:
routing-list: !include acq-models/mod-orders-storage/schemas/routing_list.json
routing-list-collection: !include acq-models/mod-orders-storage/schemas/routing_list_collection.json
error: !include raml-util/schemas/error.schema
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:
orderable: !include raml-util/traits/orderable.raml
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.raml
collection-item: !include raml-util/rtypes/item-collection.raml

/orders-storage/routing-lists:
type:
collection:
exampleCollection: !include acq-models/mod-orders-storage/examples/routing_list_collection.sample
exampleItem: !include acq-models/mod-orders-storage/examples/routing_list_get.sample
schemaCollection: routing-list-collection
schemaItem: routing-list
get:
description: Get collection of routing lists
is: [
searchable: { description: "CQL query", example: "name=MyRoutingList" },
pageable
]
post:
description: Create a new routing list record
body:
application/json:
type: routing-list
example:
strict: false
value: !include acq-models/mod-orders-storage/examples/routing_list_get.sample
responses:
201:
description: "Returns a newly created item, with server-controlled fields like 'id' populated"
body:
application/json:
example: !include acq-models/mod-orders-storage/examples/routing_list_get.sample
400:
description: "Bad request, e.g. malformed request body or query parameter. Details of the error (e.g. name of the parameter or line/character number with malformed data) provided in the response."
body:
application/json:
type: error
401:
description: "Not authorized to perform requested action"
body:
application/json:
type: error
500:
description: "Internal server error, e.g. due to misconfiguration"
body:
application/json:
type: error
/{id}:
uriParameters:
id:
description: The UUID of a Routing List
type: UUID
displayName: Routing List
description: Get, Delete or Update a specific routing list
type:
collection-item:
exampleItem: !include acq-models/mod-orders-storage/examples/routing_list_get.sample
schema: routing-list

5 changes: 3 additions & 2 deletions src/main/java/org/folio/models/TableNames.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ public final class TableNames {
public static final String TITLES_TABLE = "titles";
public static final String RECEIVING_HISTORY_VIEW_TABLE = "receiving_history_view";
public static final String EXPORT_HISTORY_TABLE = "export_history";
public static final String ROUTING_LIST_TABLE = "routing_list";

private TableNames() { }

private TableNames() {
}
}
55 changes: 55 additions & 0 deletions src/main/java/org/folio/rest/impl/RoutingListsAPI.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package org.folio.rest.impl;

import io.vertx.core.AsyncResult;
import io.vertx.core.Context;
import io.vertx.core.Handler;
import org.folio.rest.annotations.Validate;
import org.folio.rest.jaxrs.model.RoutingList;
import org.folio.rest.jaxrs.model.RoutingListCollection;
import org.folio.rest.jaxrs.resource.OrdersStorageRoutingLists;
import org.folio.rest.persist.PgUtil;

import javax.ws.rs.core.Response;
import java.util.Map;

import static org.folio.models.TableNames.ROUTING_LIST_TABLE;

public class RoutingListsAPI implements OrdersStorageRoutingLists {

@Override
@Validate
public void getOrdersStorageRoutingLists(String query, String totalRecords, int offset, int limit,Map<String, String> okapiHeaders,
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
PgUtil.get(ROUTING_LIST_TABLE, RoutingList.class, RoutingListCollection.class, query, offset, limit, okapiHeaders,
vertxContext, GetOrdersStorageRoutingListsResponse.class, asyncResultHandler);
}

@Override
@Validate
public void postOrdersStorageRoutingLists(RoutingList entity, Map<String, String> okapiHeaders,
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
PgUtil.post(ROUTING_LIST_TABLE, entity, okapiHeaders, vertxContext, PostOrdersStorageRoutingListsResponse.class, asyncResultHandler);
}

@Override
@Validate
public void getOrdersStorageRoutingListsById(String id, Map<String, String> okapiHeaders,
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
PgUtil.getById(ROUTING_LIST_TABLE, RoutingList.class, id, okapiHeaders,vertxContext, GetOrdersStorageRoutingListsByIdResponse.class, asyncResultHandler);
}

@Override
@Validate
public void deleteOrdersStorageRoutingListsById(String id, Map<String, String> okapiHeaders,
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
PgUtil.deleteById(ROUTING_LIST_TABLE, id, okapiHeaders, vertxContext, DeleteOrdersStorageRoutingListsByIdResponse.class, asyncResultHandler);
}

@Override
@Validate
public void putOrdersStorageRoutingListsById(String id, RoutingList entity, Map<String, String> okapiHeaders,
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
PgUtil.put(ROUTING_LIST_TABLE, entity, id, okapiHeaders, vertxContext, PutOrdersStorageRoutingListsByIdResponse.class, asyncResultHandler);
}

}
20 changes: 20 additions & 0 deletions src/main/resources/templates/db_scripts/schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -687,6 +687,26 @@
"removeAccents": true
}
]
},
{
"tableName": "routing_list",
"fromModuleVersion": "mod-orders-storage-13.8.0",
"withOptimisticLocking": "failOnConflict",
"withMetadata": true,
"foreignKeys": [
{
"fieldName": "poLineId",
"targetTable": "po_line",
"targetTableAlias": "poLine",
"tableAlias": "routing_list"
}
],
"uniqueIndex": [
{
"fieldName": "name",
"caseSensitive": false
}
]
}
]
}
1 change: 1 addition & 0 deletions src/test/java/org/folio/rest/impl/EntitiesCrudTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ public class EntitiesCrudTest extends TestBase {

public static Stream<TestEntities> deleteOrder() {
return Stream.of(
TestEntities.ROUTING_LIST,
TestEntities.PIECE,
TestEntities.TITLES,
TestEntities.ORDER_INVOICE_RELNS,
Expand Down
4 changes: 4 additions & 0 deletions src/test/java/org/folio/rest/utils/TestData.java
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,10 @@ public interface ExportHistory {
String EXPORT_HISTORY_2 = "mockdata/export-history/99fb699a-cdf1-11e9-a9d9-f2801f1b9aa2.json";
}

public interface RoutingList {
String DEFAULT = "mockdata/routing-lists/c0d13648-347b-4ac9-8c2f-5bc47248b871.json";
}

public interface CustomFields {
String PO = "data/custom-fields/custom-field-po.json";
String POL = "data/custom-fields/custom-field-pol.json";
Expand Down
3 changes: 2 additions & 1 deletion src/test/java/org/folio/rest/utils/TestEntities.java
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,8 @@ public enum TestEntities {
REASON_FOR_CLOSURE("/orders-storage/configuration/reasons-for-closure", ReasonForClosure.class, TestData.ReasonForClosure.DEFAULT, "reason", "New reason for closure", 1),
PREFIX("/orders-storage/configuration/prefixes", Prefix.class, TestData.Prefix.DEFAULT , "description", "New description", 1),
SUFFIX("/orders-storage/configuration/suffixes", Suffix.class, TestData.Suffix.DEFAULT, "description", "New description", 1),
EXPORT_HISTORY("/orders-storage/export-history", ExportHistory.class, TestData.ExportHistory.EXPORT_HISTORY_1, "exportType", "BURSAR_FEES_FINES", 1);
EXPORT_HISTORY("/orders-storage/export-history", ExportHistory.class, TestData.ExportHistory.EXPORT_HISTORY_1, "exportType", "BURSAR_FEES_FINES", 1),
ROUTING_LIST("/orders-storage/routing-lists", RoutingList.class, TestData.RoutingList.DEFAULT, "notes", "Updated notes", 0);

TestEntities(String endpoint, Class<?> clazz, String sampleFileName, String updatedFieldName, String updatedFieldValue, int initialQuantity) {
this.endpoint = endpoint;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"id": "c0d13648-347b-4ac9-8c2f-5bc47248b871",
"_version": 1,
"name": "List name",
"notes": "Original notes",
"userIds": [
"d926d900-e27d-46d6-bba8-31e9d5c2cf44"
],
"poLineId": "baec48dd-1594-2712-be8f-de336bc83fcc"
}

0 comments on commit 35d67ce

Please sign in to comment.