Skip to content

Commit f23d7a1

Browse files
authored
Merge pull request #74 from bcgov/bug/no-db
Fix meta/tag updates for 'no-db' mode and with non-versioned objects
2 parents dfdd598 + ea286d1 commit f23d7a1

File tree

4 files changed

+13
-11
lines changed

4 files changed

+13
-11
lines changed

app/src/controllers/object.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -353,8 +353,10 @@ const controller = {
353353
const objectVersionId = s3Response.VersionId;
354354
// delete version in DB
355355
await versionService.delete(objId, objectVersionId);
356+
// prune tags amd metadata
357+
await metadataService.pruneOrphanedMetadata();
358+
await tagService.pruneOrphanedTags();
356359
// if other versions in DB, delete object record
357-
// TODO: synch with versions in S3
358360
const remainingVersions = await versionService.list(objId);
359361
if (remainingVersions.length === 0) await objectService.delete(objId);
360362
} else { // else deleting the object
@@ -371,6 +373,9 @@ const controller = {
371373
} else { // else object in bucket is not versioned
372374
// delete object record from DB
373375
await objectService.delete(objId);
376+
// prune tags amd metadata
377+
await metadataService.pruneOrphanedMetadata();
378+
await tagService.pruneOrphanedTags();
374379
}
375380
}
376381

app/src/db/models/utils.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const { Model } = require('objection');
2+
const config = require('config');
23

34
const utils = {
45
/**
@@ -60,6 +61,7 @@ const utils = {
6061
* @throws The error encountered upon db transaction failure
6162
*/
6263
async trxWrapper(callback) {
64+
if(!config.has('db.enabled')) return Promise.resolve(true);
6365
const trx = await Model.startTransaction();
6466
try {
6567
const result = await callback(trx);

app/src/services/metadata.js

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,16 +30,15 @@ const service = {
3030
// get DB records of all input metadata
3131
const dbMetadata = await service.createMetadata(metadata, trx);
3232

33-
// already joined
33+
// for non-versioned objects we are updating metadata joins for an existing version
3434
const associatedMetadata = await VersionMetadata.query(trx)
3535
.modify('filterVersionId', versionId);
36-
3736
// remove existing joins for metadata that is not in incomming set
3837
if (associatedMetadata.length) {
3938
const dissociateMetadata = associatedMetadata.filter(({ metadataId }) => !dbMetadata.some(({ id }) => id === metadataId));
4039
if (dissociateMetadata.length) {
4140
await VersionMetadata.query(trx)
42-
.whereIn('id', dissociateMetadata.map(meta => meta.id))
41+
.whereIn('metadataId', dissociateMetadata.map(vm => vm.metadataId))
4342
.modify('filterVersionId', versionId)
4443
.delete();
4544

app/src/services/version.js

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
const { v4: uuidv4, NIL: SYSTEM_USER } = require('uuid');
2-
const metadataService = require('./metadata');
32
const { Version } = require('../db/models');
43

54
/**
@@ -112,8 +111,6 @@ const service = {
112111
.returning('*')
113112
.throwIfNotFound();
114113

115-
// TODO: prune metadata and tags
116-
117114
if (!etrx) await trx.commit();
118115
return Promise.resolve(response);
119116
} catch (err) {
@@ -189,7 +186,6 @@ const service = {
189186
* Updates a version of an object.
190187
* Typically happens when updating the 'null-version' created for an object
191188
* on a non-versioned or version-suspnded bucket.
192-
* Replaces metadata/tags that already exists on this version by default
193189
* @param {object[]} data array of object attributes
194190
* @param {string} userId uuid of the current user
195191
* @param {object} [etrx=undefined] An optional Objection Transaction object
@@ -202,7 +198,7 @@ const service = {
202198
trx = etrx ? etrx : await Version.startTransaction();
203199
// update version record
204200
const versionId = data.versionId ? data.versionId : null;
205-
const response = await Version.query(trx)
201+
const version = await Version.query(trx)
206202
.where({ objectId: data.id, versionId: versionId })
207203
.patch({
208204
objectId: data.id,
@@ -212,10 +208,10 @@ const service = {
212208
.first()
213209
.returning('id');
214210

215-
if (data.metadata) await metadataService.updateMetadata(response.id, data.metadata, data.userId, trx);
211+
// TODO: consider updating metadata here instead of the controller
216212

217213
if (!etrx) await trx.commit();
218-
return Promise.resolve(response);
214+
return Promise.resolve(version);
219215
} catch (err) {
220216
if (!etrx && trx) await trx.rollback();
221217
throw err;

0 commit comments

Comments
 (0)