Skip to content

Commit a204ae1

Browse files
alexanderkurashMagzhanArtykovOleksandrVidinieiev
authored
CIRCSTORE-515 Create CRUD API for storing circulation settings (#467)
* CIRCSTORE-509: Create CRUD API for storing circulation settings (#466) * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Create CRUD API for storing circulation settings * CIRCSTORE-509 Fix formatting Co-authored-by: OleksandrVidinieiev <[email protected]> --------- Co-authored-by: Alexander Kurash <[email protected]> Co-authored-by: OleksandrVidinieiev <[email protected]> * CIRCSTORE-515 Remove context config * CIRCSTORE-515 Remove RunWith * CIRCSTORE-515 Add test to the suite --------- Co-authored-by: Magzhan <[email protected]> Co-authored-by: OleksandrVidinieiev <[email protected]>
1 parent 418597e commit a204ae1

18 files changed

+517
-4
lines changed

descriptors/ModuleDescriptor-template.json

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,44 @@
108108
}
109109
]
110110
},
111+
{
112+
"id": "circulation-settings-storage",
113+
"version": "1.0",
114+
"handlers": [
115+
{
116+
"methods": ["GET"],
117+
"pathPattern": "/circulation-settings-storage/circulation-settings",
118+
"permissionsRequired": [
119+
"circulation-storage.circulation-settings.collection.get"
120+
]
121+
},
122+
{
123+
"methods": ["GET"],
124+
"pathPattern": "/circulation-settings-storage/circulation-settings/{id}",
125+
"permissionsRequired": [
126+
"circulation-storage.circulation-settings.item.get"
127+
]
128+
}, {
129+
"methods": ["PUT"],
130+
"pathPattern": "/circulation-settings-storage/circulation-settings/{id}",
131+
"permissionsRequired": [
132+
"circulation-storage.circulation-settings.item.put"
133+
]
134+
}, {
135+
"methods": ["POST"],
136+
"pathPattern": "/circulation-settings-storage/circulation-settings",
137+
"permissionsRequired": [
138+
"circulation-storage.circulation-settings.item.post"
139+
]
140+
}, {
141+
"methods": ["DELETE"],
142+
"pathPattern": "/circulation-settings-storage/circulation-settings/{id}",
143+
"permissionsRequired": [
144+
"circulation-storage.circulation-settings.item.delete"
145+
]
146+
}
147+
]
148+
},
111149
{
112150
"id": "loan-policy-storage",
113151
"version": "2.3",
@@ -974,6 +1012,31 @@
9741012
"displayName": "Circulation storage - get expired session patron ids collection",
9751013
"description": "Get expired session patron ids collection from storage"
9761014
},
1015+
{
1016+
"permissionName": "circulation-storage.circulation-settings.collection.get",
1017+
"displayName": "Circulation storage - get circulation settings collection",
1018+
"description": "Get circulation settings collection from storage"
1019+
},
1020+
{
1021+
"permissionName": "circulation-storage.circulation-settings.item.get",
1022+
"displayName": "Circulation storage - get circulation setting by id",
1023+
"description": "Get circulation setting by id from storage"
1024+
},
1025+
{
1026+
"permissionName": "circulation-storage.circulation-settings.item.post",
1027+
"displayName": "Circulation storage - create circulation setting",
1028+
"description": "Create circulation setting in storage"
1029+
},
1030+
{
1031+
"permissionName": "circulation-storage.circulation-settings.item.put",
1032+
"displayName": "Circulation storage - update circulation setting by id",
1033+
"description": "Update circulation setting by id"
1034+
},
1035+
{
1036+
"permissionName": "circulation-storage.circulation-settings.item.delete",
1037+
"displayName": "Circulation storage - delete circulation setting by id",
1038+
"description": "Delete circulation setting by id"
1039+
},
9771040
{
9781041
"permissionName": "circulation-storage.all",
9791042
"displayName": "Circulation storage module - all permissions",
@@ -1065,7 +1128,12 @@
10651128
"checkout-lock-storage.checkout-locks.item.post",
10661129
"checkout-lock-storage.checkout-locks.item.delete",
10671130
"checkout-lock-storage.checkout-locks.item.get",
1068-
"checkout-lock-storage.checkout-locks.collection.get"
1131+
"checkout-lock-storage.checkout-locks.collection.get",
1132+
"circulation-storage.circulation-settings.collection.get",
1133+
"circulation-storage.circulation-settings.item.get",
1134+
"circulation-storage.circulation-settings.item.post",
1135+
"circulation-storage.circulation-settings.item.put",
1136+
"circulation-storage.circulation-settings.item.delete"
10691137
]
10701138
},
10711139
{

ramls/circulation-setting.json

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"title": "Circulation Setting Schema",
4+
"description": "Circulation setting",
5+
"type": "object",
6+
"properties": {
7+
"id": {
8+
"description": "ID of the circulation setting",
9+
"type": "string",
10+
"$ref": "raml-util/schemas/uuid.schema"
11+
},
12+
"name": {
13+
"description": "Circulation setting name",
14+
"type": "string"
15+
},
16+
"value": {
17+
"description": "Circulation setting",
18+
"type": "object",
19+
"additionalProperties": true
20+
},
21+
"metadata": {
22+
"description": "Metadata about creation and changes, provided by the server (client should not provide)",
23+
"type": "object",
24+
"$ref": "raml-util/schemas/metadata.schema"
25+
}
26+
},
27+
"additionalProperties": false,
28+
"required": [
29+
"id",
30+
"name",
31+
"value"
32+
]
33+
}
Lines changed: 106 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,106 @@
1+
#%RAML 1.0
2+
title: Circulation Settings Storage
3+
version: v1.0
4+
protocols: [ HTTP, HTTPS ]
5+
baseUri: http://localhost:9130
6+
7+
documentation:
8+
- title: Circulation Settings Storage API
9+
content: <b>Storage for circulation settings</b>
10+
11+
traits:
12+
language: !include raml-util/traits/language.raml
13+
pageable: !include raml-util/traits/pageable.raml
14+
searchable: !include raml-util/traits/searchable.raml
15+
validate: !include raml-util/traits/validation.raml
16+
17+
types:
18+
circulation-setting: !include circulation-setting.json
19+
circulation-settings: !include circulation-settings.json
20+
errors: !include raml-util/schemas/errors.schema
21+
parameters: !include raml-util/schemas/parameters.schema
22+
23+
resourceTypes:
24+
collection: !include raml-util/rtypes/collection.raml
25+
collection-item: !include raml-util/rtypes/item-collection.raml
26+
27+
/circulation-settings-storage:
28+
/circulation-settings:
29+
type:
30+
collection:
31+
exampleCollection: !include examples/circulation-settings.json
32+
exampleItem: !include examples/circulation-setting.json
33+
schemaCollection: circulation-settings
34+
schemaItem: circulation-setting
35+
post:
36+
is: [validate]
37+
description: Create a new circulation setting
38+
body:
39+
application/json:
40+
type: circulation-setting
41+
responses:
42+
201:
43+
description: "Circulation setting has been created"
44+
body:
45+
application/json:
46+
type: circulation-setting
47+
500:
48+
description: "Internal server error"
49+
body:
50+
text/plain:
51+
example: "Internal server error"
52+
get:
53+
is: [validate, pageable, searchable: { description: "with valid searchable fields", example: "id=497f6eca-6276-4993-bfeb-98cbbbba8f79" }]
54+
description: Get all circulation settings
55+
responses:
56+
200:
57+
description: "Circulation settings successfully retreived"
58+
body:
59+
application/json:
60+
type: circulation-settings
61+
500:
62+
description: "Internal server error"
63+
body:
64+
text/plain:
65+
example: "Internal server error"
66+
/{circulationSettingsId}:
67+
type:
68+
collection-item:
69+
exampleItem: !include examples/circulation-setting.json
70+
schema: circulation-setting
71+
get:
72+
responses:
73+
200:
74+
description: "Circulation setting successfully retreived"
75+
body:
76+
application/json:
77+
type: circulation-setting
78+
500:
79+
description: "Internal server error"
80+
body:
81+
text/plain:
82+
example: "Internal server error"
83+
put:
84+
is: [ validate ]
85+
body:
86+
application/json:
87+
type: circulation-setting
88+
responses:
89+
204:
90+
description: "Circulation settings have been saved."
91+
500:
92+
description: "Internal server error"
93+
body:
94+
text/plain:
95+
example: "Internal server error"
96+
delete:
97+
is: [ validate ]
98+
responses:
99+
204:
100+
description: "Circulation settings deleted"
101+
500:
102+
description: "Internal server error"
103+
body:
104+
text/plain:
105+
example: "Internal server error"
106+

ramls/circulation-settings.json

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
{
2+
"$schema": "http://json-schema.org/draft-04/schema#",
3+
"description": "Collection of Circulation settings",
4+
"type": "object",
5+
"properties": {
6+
"circulationSettings": {
7+
"description": "List of circulation settings",
8+
"id": "circulationSettings",
9+
"type": "array",
10+
"items": {
11+
"type": "object",
12+
"$ref": "circulation-setting.json"
13+
}
14+
},
15+
"totalRecords": {
16+
"type": "integer"
17+
}
18+
},
19+
"required": [
20+
"circulationSettings",
21+
"totalRecords"
22+
]
23+
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f09",
3+
"name": "Sample settings",
4+
"value": {
5+
"org.folio.circulation.settings": "true"
6+
}
7+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
{
2+
"circulationSettings": [
3+
{
4+
"id": "497f6eca-6276-4993-bfeb-53cbbbba6f09",
5+
"name": "Sample settings",
6+
"value": {
7+
"org.folio.circulation.settings": "true"
8+
}
9+
}
10+
],
11+
"totalRecords": 1
12+
}
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package org.folio.persist;
2+
3+
import static org.folio.rest.persist.PgUtil.postgresClient;
4+
import static org.folio.support.ModuleConstants.CIRCULATION_SETTINGS_TABLE;
5+
6+
import java.util.Map;
7+
8+
import org.folio.rest.jaxrs.model.CirculationSetting;
9+
10+
import io.vertx.core.Context;
11+
12+
public class CirculationSettingsRepository
13+
extends AbstractRepository<CirculationSetting> {
14+
15+
public CirculationSettingsRepository(Context context, Map<String,
16+
String> okapiHeaders) {
17+
18+
super(postgresClient(context, okapiHeaders), CIRCULATION_SETTINGS_TABLE,
19+
CirculationSetting.class);
20+
}
21+
22+
}
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
package org.folio.rest.impl;
2+
3+
import java.util.Map;
4+
5+
import javax.ws.rs.core.Response;
6+
7+
import org.folio.rest.jaxrs.model.CirculationSetting;
8+
import org.folio.rest.jaxrs.resource.CirculationSettingsStorage;
9+
import org.folio.service.CirculationSettingsService;
10+
11+
import io.vertx.core.AsyncResult;
12+
import io.vertx.core.Context;
13+
import io.vertx.core.Handler;
14+
15+
public class CirculationSettingsAPI implements CirculationSettingsStorage {
16+
17+
@Override
18+
public void postCirculationSettingsStorageCirculationSettings(String lang,
19+
CirculationSetting circulationSettings, Map<String, String> okapiHeaders,
20+
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
21+
22+
new CirculationSettingsService(vertxContext, okapiHeaders)
23+
.create(circulationSettings)
24+
.onComplete(asyncResultHandler);
25+
}
26+
27+
@Override
28+
public void getCirculationSettingsStorageCirculationSettings(int offset,
29+
int limit, String query, String lang, Map<String, String> okapiHeaders,
30+
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
31+
32+
new CirculationSettingsService(vertxContext, okapiHeaders)
33+
.getAll(offset, limit, query)
34+
.onComplete(asyncResultHandler);
35+
}
36+
37+
@Override
38+
public void getCirculationSettingsStorageCirculationSettingsByCirculationSettingsId(
39+
String circulationSettingsId, String lang, Map<String, String> okapiHeaders,
40+
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
41+
42+
new CirculationSettingsService(vertxContext, okapiHeaders)
43+
.findById(circulationSettingsId)
44+
.onComplete(asyncResultHandler);
45+
}
46+
47+
@Override
48+
public void putCirculationSettingsStorageCirculationSettingsByCirculationSettingsId(
49+
String circulationSettingsId, String lang, CirculationSetting entity,
50+
Map<String, String> okapiHeaders, Handler<AsyncResult<Response>> asyncResultHandler,
51+
Context vertxContext) {
52+
53+
new CirculationSettingsService(vertxContext, okapiHeaders)
54+
.update(circulationSettingsId, entity)
55+
.onComplete(asyncResultHandler);
56+
}
57+
58+
@Override
59+
public void deleteCirculationSettingsStorageCirculationSettingsByCirculationSettingsId(
60+
String circulationSettingsId, String lang, Map<String, String> okapiHeaders,
61+
Handler<AsyncResult<Response>> asyncResultHandler, Context vertxContext) {
62+
63+
new CirculationSettingsService(vertxContext, okapiHeaders)
64+
.delete(circulationSettingsId)
65+
.onComplete(asyncResultHandler);
66+
}
67+
}

src/main/java/org/folio/rest/impl/TenantRefAPI.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,9 @@ Future<Integer> loadData(TenantAttributes attributes, String tenantId,
5858
.add("cancellation-reason-storage/cancellation-reasons")
5959
.withKey(SAMPLE_KEY).withLead(SAMPLE_LEAD)
6060
.add("loans", "loan-storage/loans")
61-
.add("requests", "request-storage/requests");
61+
.add("requests", "request-storage/requests")
62+
.add("circulation-settings-storage/circulation-settings");
63+
6264

6365
tl.perform(attributes, headers, vertx, res -> {
6466
if (res.failed()) {

0 commit comments

Comments
 (0)