diff --git a/.gitignore b/.gitignore index a75d1b15a..099aa8c43 100644 --- a/.gitignore +++ b/.gitignore @@ -66,3 +66,6 @@ target/ **/.history .python-version + +# Virtual env +.venv/ diff --git a/cds_ils/config.py b/cds_ils/config.py index 2ee0a1cda..044d4fc36 100644 --- a/cds_ils/config.py +++ b/cds_ils/config.py @@ -31,7 +31,7 @@ ) from invenio_app_ils.config import CELERY_BEAT_SCHEDULE as ILS_CELERY_BEAT_SCHEDULE from invenio_app_ils.config import RECORDS_REST_ENDPOINTS, RECORDS_REST_FACETS -from invenio_app_ils.documents.api import DOCUMENT_PID_TYPE, Document +from invenio_app_ils.documents.api import DOCUMENT_PID_TYPE from invenio_app_ils.eitems.api import EITEM_PID_TYPE from invenio_app_ils.ill.api import ( can_item_circulate, @@ -61,6 +61,8 @@ from invenio_records_rest.utils import deny_all from marshmallow.fields import Bool, List +from cds_ils.documents.api import Document + from .circulation.utils import circulation_cds_extension_max_count from .document_requests.notifications.filters import ( document_requests_notifications_filter, @@ -402,6 +404,13 @@ def query_params_modifier(extra_params): RECORDS_REST_ENDPOINTS[DOCUMENT_PID_TYPE]["record_serializers"] = { "application/json": "cds_ils.literature.serializers:json_v1_response" } +RECORDS_REST_ENDPOINTS[DOCUMENT_PID_TYPE]["record_loaders"] = { + "application/json": "cds_ils.documents.loaders:document_loader" +} +RECORDS_REST_ENDPOINTS[DOCUMENT_PID_TYPE]["record_class"] = Document +RECORDS_REST_ENDPOINTS[DOCUMENT_PID_TYPE][ + "item_route" +] = '/documents/' RECORDS_REST_ENDPOINTS[DOCUMENT_PID_TYPE]["search_serializers"] = { "application/json": "cds_ils.literature.serializers:json_v1_search", "text/csv": "cds_ils.literature.serializers:csv_v1_search", diff --git a/cds_ils/documents/api.py b/cds_ils/documents/api.py new file mode 100644 index 000000000..73ec7b4f8 --- /dev/null +++ b/cds_ils/documents/api.py @@ -0,0 +1,12 @@ +# SPDX-FileCopyrightText: 2026 CERN. +# SPDX-License-Identifier: MIT + +"""CDS-ILS Document APIs.""" + +from invenio_app_ils.documents.api import Document as ILSDocument + + +class Document(ILSDocument): + """CDS-ILS Document record class.""" + + DOCUMENT_TYPES = ILSDocument.DOCUMENT_TYPES + ["THESIS"] diff --git a/cds_ils/documents/loaders/__init__.py b/cds_ils/documents/loaders/__init__.py new file mode 100644 index 000000000..793667476 --- /dev/null +++ b/cds_ils/documents/loaders/__init__.py @@ -0,0 +1,10 @@ +# SPDX-FileCopyrightText: 2026 CERN. +# SPDX-License-Identifier: MIT + +"""CDS-ILS document loaders.""" + +from invenio_app_ils.records.loaders import ils_marshmallow_loader + +from .jsonschemas.document import DocumentSchemaV1 + +document_loader = ils_marshmallow_loader(DocumentSchemaV1) diff --git a/cds_ils/documents/loaders/jsonschemas/__init__.py b/cds_ils/documents/loaders/jsonschemas/__init__.py new file mode 100644 index 000000000..9f77228b3 --- /dev/null +++ b/cds_ils/documents/loaders/jsonschemas/__init__.py @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2026 CERN. +# SPDX-License-Identifier: MIT + +"""CDS-ILS Document JSON loader.""" diff --git a/cds_ils/documents/loaders/jsonschemas/document.py b/cds_ils/documents/loaders/jsonschemas/document.py new file mode 100644 index 000000000..0930dc05d --- /dev/null +++ b/cds_ils/documents/loaders/jsonschemas/document.py @@ -0,0 +1,19 @@ +# SPDX-FileCopyrightText: 2026 CERN. +# SPDX-License-Identifier: MIT + +"""Document schema for overwritten marshmallow loader with new document type.""" + +from invenio_app_ils.documents.loaders.jsonschemas.document import ( + DocumentSchemaV1 as ILSDocumentSchemaV1, +) +from marshmallow import fields, validate + +from cds_ils.documents.api import Document + + +class DocumentSchemaV1(ILSDocumentSchemaV1): + """CDS-ILS Document schema.""" + + document_type = fields.Str( + required=True, validate=validate.OneOf(Document.DOCUMENT_TYPES) + ) diff --git a/docker-compose.yml b/docker-compose.yml index 3ae631068..a14cb928f 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -18,7 +18,6 @@ # - Message queue: RabbitMQ (exposed ports: 5672, 15672) # - Elasticsearch (exposed ports: 9200, 9300) # -version: '2.3' services: cache: extends: diff --git a/ui/src/config.js b/ui/src/config.js index a84f76458..5ce193cc8 100644 --- a/ui/src/config.js +++ b/ui/src/config.js @@ -151,6 +151,15 @@ export const config = { authors: { maxEditable: 30, }, + types: [ + { value: "BOOK", text: "Book", label: "Book", order: 1 }, + { value: "PROCEEDINGS", text: "Proceedings", label: "Proceedings", order: 2 }, + { value: "STANDARD", text: "Standard", label: "Standard", order: 3 }, + { value: "SERIAL_ISSUE", text: "Serial issue", label: "Serial issue", order: 4 }, + { value: "ARTICLE", text: "Article", label: "Article", order: 5 }, + { value: "MULTIMEDIA", text: "Multimedia", label: "Multimedia", order: 6 }, + { value: "THESIS", text: "Thesis", label: "Thesis", order: 7 }, + ], }, ILL_BORROWING_REQUESTS: { defaultType: "PHYSICAL_COPY",