From dcc1b7e036c9e09b6726aae88c74c927fcfc18ce Mon Sep 17 00:00:00 2001 From: Akash Gupta Date: Fri, 16 Jul 2021 18:56:18 +0530 Subject: [PATCH 1/5] feat(series): create revision endpoint --- src/server/routes/entity/series.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/server/routes/entity/series.js b/src/server/routes/entity/series.js index c3381edaaa..4d1879ae8a 100644 --- a/src/server/routes/entity/series.js +++ b/src/server/routes/entity/series.js @@ -146,6 +146,18 @@ router.post( } ); +router.get('/:bbid/revisions', (req, res, next) => { + const {SeriesRevision} = req.app.locals.orm; + _setSeriesTitle(res); + entityRoutes.displayRevisions(req, res, next, SeriesRevision); +}); + +router.get('/:bbid/revisions/revisions', (req, res, next) => { + const {SeriesRevision} = req.app.locals.orm; + _setSeriesTitle(res); + entityRoutes.updateDisplayedRevisions(req, res, next, SeriesRevision); +}); + function seriesToFormState(series) { const aliases = series.aliasSet ? series.aliasSet.aliases.map(({languageId, ...rest}) => ({ From 8475740ea8c4c2c458df132a40ae27c5da051b56 Mon Sep 17 00:00:00 2001 From: Akash Gupta Date: Fri, 16 Jul 2021 18:58:12 +0530 Subject: [PATCH 2/5] feat(series,revision): add series revision formatter --- src/server/routes/revision.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/server/routes/revision.js b/src/server/routes/revision.js index 00de13055a..d756dbf920 100644 --- a/src/server/routes/revision.js +++ b/src/server/routes/revision.js @@ -144,6 +144,14 @@ function formatPublisherChange(change) { return null; } +function formatSeriesChange(change) { + if (_.isEqual(change.path, ['seriesOrderingType']) || + _.isEqual(change.path, ['seriesOrderingType', 'label'])) { + return baseFormatter.formatTypeChange(change, 'Series Ordering Type'); + } + return null; +} + function formatWorkChange(change) { if (languageSetFormatter.changed(change)) { return languageSetFormatter.format(change); @@ -212,7 +220,7 @@ function diffRevisionsWithParents(orm, entityRevisions, entityType) { router.get('/:id', async (req, res, next) => { const { AuthorRevision, EditionRevision, EditionGroupRevision, - PublisherRevision, Revision, WorkRevision + SeriesRevision, PublisherRevision, Revision, WorkRevision } = req.app.locals.orm; let revision; @@ -256,6 +264,7 @@ router.get('/:id', async (req, res, next) => { const editionDiffs = await _createRevision(EditionRevision, 'Edition'); const editionGroupDiffs = await _createRevision(EditionGroupRevision, 'EditionGroup'); const publisherDiffs = await _createRevision(PublisherRevision, 'Publisher'); + const seriesDiffs = await _createRevision(SeriesRevision, 'Series'); const workDiffs = await _createRevision(WorkRevision, 'Work'); const diffs = _.concat( entityFormatter.formatEntityDiffs( @@ -278,6 +287,11 @@ router.get('/:id', async (req, res, next) => { 'Publisher', formatPublisherChange ), + entityFormatter.formatEntityDiffs( + seriesDiffs, + 'Series', + formatSeriesChange + ), entityFormatter.formatEntityDiffs( workDiffs, 'Work', From 986c9a59231044e2b64522cf884c03210d465da1 Mon Sep 17 00:00:00 2001 From: Akash Gupta Date: Fri, 16 Jul 2021 18:59:19 +0530 Subject: [PATCH 3/5] feat(series,revision): add series type to series change formatter --- src/server/routes/revision.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/server/routes/revision.js b/src/server/routes/revision.js index d756dbf920..345f662e41 100644 --- a/src/server/routes/revision.js +++ b/src/server/routes/revision.js @@ -149,6 +149,9 @@ function formatSeriesChange(change) { _.isEqual(change.path, ['seriesOrderingType', 'label'])) { return baseFormatter.formatTypeChange(change, 'Series Ordering Type'); } + if (_.isEqual(change.path, ['entityType'])) { + return baseFormatter.formatTypeChange(change, 'Series Type'); + } return null; } From 297f402fc67422a8340590daac893f33d94ccbb1 Mon Sep 17 00:00:00 2001 From: Akash Gupta Date: Fri, 16 Jul 2021 18:59:44 +0530 Subject: [PATCH 4/5] feat(revision): add relationship attribute change --- src/server/helpers/diffFormatters/entity.js | 32 +++++++++++++++++---- src/server/helpers/revisions.ts | 3 +- 2 files changed, 28 insertions(+), 7 deletions(-) diff --git a/src/server/helpers/diffFormatters/entity.js b/src/server/helpers/diffFormatters/entity.js index aa849d15d9..53ba71cb95 100644 --- a/src/server/helpers/diffFormatters/entity.js +++ b/src/server/helpers/diffFormatters/entity.js @@ -236,6 +236,14 @@ function formatIdentifier(change) { return null; } +function formatRelationshipAttrubuteAddOrDelete(relationshipAttributes) { + const attributes = []; + relationshipAttributes.forEach((attribute) => { + attributes.push(`${attribute.type.name}: ${attribute.value.textValue}`); + }); + return attributes; +} + function formatRelationshipAdd(entity, change) { const changes = []; const {rhs} = change.item; @@ -244,17 +252,21 @@ function formatRelationshipAdd(entity, change) { return changes; } const key = rhs.type && rhs.type.label ? `Relationship : ${rhs.type.label}` : 'Relationship'; + let attributes = []; + if (rhs.attributeSetId) { + attributes = formatRelationshipAttrubuteAddOrDelete(rhs.attributeSet.relationshipAttributes); + } if (rhs.sourceBbid === entity.get('bbid')) { changes.push( base.formatRow( - 'N', key, null, [rhs.targetBbid] + 'N', key, null, [rhs.targetBbid, ...attributes] ) ); } else { changes.push( base.formatRow( - 'N', key, null, [rhs.sourceBbid] + 'N', key, null, [rhs.sourceBbid, ...attributes] ) ); } @@ -276,17 +288,21 @@ function formatAddOrDeleteRelationshipSet(entity, change) { allRelationships.forEach((relationship) => { const key = relationship.type && relationship.type.label ? `Relationship: ${relationship.type.label}` : 'Relationship'; + let attributes = []; + if (relationship.attributeSetId) { + attributes = formatRelationshipAttrubuteAddOrDelete(relationship.attributeSet.relationshipAttributes); + } if (relationship.sourceBbid === entity.get('bbid')) { changes.push( base.formatRow( - change.kind, key, [relationship.targetBbid], [relationship.targetBbid] + change.kind, key, [relationship.targetBbid, ...attributes], [relationship.targetBbid, ...attributes] ) ); } else { changes.push( base.formatRow( - change.kind, key, [relationship.sourceBbid], [relationship.sourceBbid] + change.kind, key, [relationship.sourceBbid, ...attributes], [relationship.sourceBbid, ...attributes] ) ); } @@ -302,17 +318,21 @@ function formatRelationshipRemove(entity, change) { return changes; } const key = lhs.type && lhs.type.label ? `Relationship : ${lhs.type.label}` : 'Relationship'; + let attributes = []; + if (lhs.attributeSetId) { + attributes = formatRelationshipAttrubuteAddOrDelete(lhs.attributeSet.relationshipAttributes); + } if (lhs.sourceBbid === entity.get('bbid')) { changes.push( base.formatRow( - 'D', key, [lhs.targetBbid], null + 'D', key, [lhs.targetBbid, ...attributes], null ) ); } else { changes.push( base.formatRow( - 'D', key, [lhs.sourceBbid], null + 'D', key, [lhs.sourceBbid, ...attributes], null ) ); } diff --git a/src/server/helpers/revisions.ts b/src/server/helpers/revisions.ts index bc76471903..f1e8d7b620 100644 --- a/src/server/helpers/revisions.ts +++ b/src/server/helpers/revisions.ts @@ -21,12 +21,13 @@ import {flatMap} from 'lodash'; function getRevisionModels(orm) { - const {AuthorRevision, EditionRevision, EditionGroupRevision, PublisherRevision, WorkRevision} = orm; + const {AuthorRevision, EditionRevision, EditionGroupRevision, PublisherRevision, SeriesRevision, WorkRevision} = orm; return [ AuthorRevision, EditionGroupRevision, EditionRevision, PublisherRevision, + SeriesRevision, WorkRevision ]; } From 5c40158c6fbdeb33cde8c0c888a91c4a661d451c Mon Sep 17 00:00:00 2001 From: Monkey Do Date: Thu, 29 Jul 2021 11:54:53 +0200 Subject: [PATCH 5/5] chore: Update bookbrainz-data-js package version Contains a PR for the addition of relationship attributes to revision diffs --- package-lock.json | 22 +++++++++++----------- package.json | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/package-lock.json b/package-lock.json index 6fa6ed410d..861105cff2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5164,9 +5164,9 @@ "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" }, "bookbrainz-data": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/bookbrainz-data/-/bookbrainz-data-2.11.0.tgz", - "integrity": "sha512-a6LQiE2u9PbuDHB3JEJ5YMdajb+T3krdD7PqpxZpNLS6+GxuR1Dm4rEQJ4UBEN1BXzEYWjUAgpiwif2gDEyFbA==", + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/bookbrainz-data/-/bookbrainz-data-2.12.0.tgz", + "integrity": "sha512-XMKhkkLkxs3897IliG8qriTExqxPUVwjiVwCusjt/Xauf0q2QeXui9W6gzZmeAN7A3W7kqQmQ+W03qNjehQooQ==", "requires": { "bookshelf": "^1.2.0", "bookshelf-virtuals-plugin": "^0.1.1", @@ -5175,7 +5175,7 @@ "knex": "^0.21.12", "lodash": "^4.17.21", "moment": "^2.29.1", - "pg": "^8.5.1" + "pg": "^8.6.0" } }, "bookshelf": { @@ -12606,14 +12606,14 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=" }, "pg": { - "version": "8.6.0", - "resolved": "https://registry.npmjs.org/pg/-/pg-8.6.0.tgz", - "integrity": "sha512-qNS9u61lqljTDFvmk/N66EeGq3n6Ujzj0FFyNMGQr6XuEv4tgNTXvJQTfJdcvGit5p5/DWPu+wj920hAJFI+QQ==", + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/pg/-/pg-8.7.1.tgz", + "integrity": "sha512-7bdYcv7V6U3KAtWjpQJJBww0UEsWuh4yQ/EjNf2HeO/NnvKjpvhEIe/A/TleP6wtmSKnUnghs5A9jUoK6iDdkA==", "requires": { "buffer-writer": "2.0.0", "packet-reader": "1.0.0", "pg-connection-string": "^2.5.0", - "pg-pool": "^3.3.0", + "pg-pool": "^3.4.1", "pg-protocol": "^1.5.0", "pg-types": "^2.1.0", "pgpass": "1.x" @@ -12637,9 +12637,9 @@ "integrity": "sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==" }, "pg-pool": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.3.0.tgz", - "integrity": "sha512-0O5huCql8/D6PIRFAlmccjphLYWC+JIzvUhSzXSpGaf+tjTZc4nn+Lr7mLXBbFJfvwbP0ywDv73EiaBsxn7zdg==" + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/pg-pool/-/pg-pool-3.4.1.tgz", + "integrity": "sha512-TVHxR/gf3MeJRvchgNHxsYsTCHQ+4wm3VIHSS19z8NC0+gioEhq1okDY1sm/TYbfoP6JLFx01s0ShvZ3puP/iQ==" }, "pg-protocol": { "version": "1.5.0", diff --git a/package.json b/package.json index b7a02521da..a77a292f4a 100644 --- a/package.json +++ b/package.json @@ -36,7 +36,7 @@ "@fortawesome/free-solid-svg-icons": "^5.14.0", "@fortawesome/react-fontawesome": "^0.1.11", "array-move": "^3.0.1", - "bookbrainz-data": "^2.11.0", + "bookbrainz-data": "^2.12.0", "chart.js": "^2.9.4", "chartjs-adapter-date-fns": "^1.0.0", "classnames": "^2.3.1",