@sera4/essentia 1.1.17 → 1.1.19

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sera4/essentia",
3
- "version": "1.1.17",
3
+ "version": "1.1.19",
4
4
  "description": "A library of utilities for Teleporte Web Services",
5
5
  "main": "index.js",
6
6
  "type": "module",
package/package.tar.gz CHANGED
Binary file
@@ -2,10 +2,11 @@ import * as jsdiff from 'diff';
2
2
  import _ from 'lodash';
3
3
  import helpers from './helpers.js';
4
4
  import paginator from "../paginator/sql-pagination.js";
5
+ import { utils } from "../utils/index.js"
5
6
 
6
7
  let failHard = false;
7
8
  let als;
8
- let Sequelize = null
9
+ let Sequelize = null;
9
10
 
10
11
  const paperTrail = {};
11
12
 
@@ -28,11 +29,15 @@ paperTrail.init = (sequelize, sequelizePackage, optionsArg) => {
28
29
  'deleted_at',
29
30
  'revision',
30
31
  ],
32
+ // additional fields to exclude on a global basis
33
+ excludeExtras: [],
31
34
  revisionAttribute: 'revision',
32
35
  revisionModel: 'Revision',
33
36
  revisionChangeModel: 'RevisionChange',
34
37
  enableRevisionChangeModel: false,
35
38
  UUID: false,
39
+ // does this project use int's and UUIDs for some references (postgres)
40
+ mixedDocumentReference: false,
36
41
  underscored: false,
37
42
  underscoredAttributes: false,
38
43
  defaultAttributes: {
@@ -52,10 +57,22 @@ paperTrail.init = (sequelize, sequelizePackage, optionsArg) => {
52
57
  mysql: false,
53
58
  };
54
59
 
60
+ if (optsArg.mixedDocumentReference)
61
+ defaultOptions.defaultAttributes.documentUuid = "documentUuid";
62
+
55
63
  if (optsArg.underscoredAttributes) {
56
64
  helpers.toUnderscored(defaultOptions.defaultAttributes);
57
65
  }
58
66
 
67
+ // deals with not wanting to overwrite the initial ones, just add some
68
+ if (optsArg.excludeExtras) {
69
+ if (optsArg.exclude) {
70
+ optsArg.exclude = [...optsArg.exclude, ...optsArg.excludeExtras ]
71
+ } else {
72
+ optsArg.exclude = [...defaultOptions.exclude, ...optsArg.excludeExtras ]
73
+ }
74
+ }
75
+
59
76
  const options = _.defaults(optsArg, defaultOptions);
60
77
 
61
78
  const log = options.log || console.log;
@@ -305,7 +322,11 @@ paperTrail.init = (sequelize, sequelizePackage, optionsArg) => {
305
322
  query[options.userModelAttribute] =
306
323
  (store && store.get(options.continuationKey)) || opt.userId;
307
324
 
308
- query[options.defaultAttributes.documentId] = instance.id;
325
+ if (options.mixedDocumentReference && utils.isValidUuidV4(instance.id)) {
326
+ query[options.defaultAttributes.documentUuid] = instance.id;
327
+ } else {
328
+ query[options.defaultAttributes.documentId] = instance.id;
329
+ }
309
330
 
310
331
  const revision = Revision.build(query);
311
332
 
@@ -313,7 +334,6 @@ paperTrail.init = (sequelize, sequelizePackage, optionsArg) => {
313
334
  options.revisionAttribute,
314
335
  );
315
336
 
316
- // Save revision(
317
337
  return revision
318
338
  .save({ transaction: opt.transaction })
319
339
  .then(objectRevision => {
@@ -462,13 +482,29 @@ paperTrail.init = (sequelize, sequelizePackage, optionsArg) => {
462
482
  this.addHook('afterUpdate', createAfterHook('update'));
463
483
 
464
484
  // create association
465
- return this.hasMany(sequelize.models[options.revisionModel], {
466
- foreignKey: options.defaultAttributes.documentId,
467
- constraints: false,
468
- scope: {
469
- model: this.name,
470
- },
471
- });
485
+ if (options.mixedDocumentReference) {
486
+ this.hasMany(sequelize.models[options.revisionModel], {
487
+ constraints: false,
488
+ foreignKey: options.defaultAttributes.documentUuid,
489
+ });
490
+ this.hasMany(sequelize.models[options.revisionModel], {
491
+ foreignKey: options.defaultAttributes.documentId,
492
+ constraints: false,
493
+ scope: {
494
+ model: this.name,
495
+ },
496
+ });
497
+ } else {
498
+ return this.hasMany(sequelize.models[options.revisionModel], {
499
+ foreignKey: options.defaultAttributes.documentId,
500
+ constraints: false,
501
+ scope: {
502
+ model: this.name,
503
+ },
504
+ });
505
+ }
506
+
507
+
472
508
  },
473
509
  });
474
510
 
@@ -521,17 +557,40 @@ paperTrail.init = (sequelize, sequelizePackage, optionsArg) => {
521
557
  type: Sequelize.UUID,
522
558
  defaultValue: Sequelize.UUIDV4,
523
559
  };
524
- attributes[options.defaultAttributes.documentId].type =
525
- Sequelize.UUID;
526
560
 
527
- console.log("userModelatribute", options.userModelAttribute)
561
+ if (!options.mixedDocumentReference)
562
+ attributes[options.defaultAttributes.documentId].type = Sequelize.UUID;
563
+
528
564
  attributes[options.userModelAttribute].type = Sequelize.UUID;
529
565
  }
530
566
 
567
+ if (options.mixedDocumentReference) {
568
+ attributes[options.defaultAttributes.documentId].allowNull = true;
569
+ attributes[options.defaultAttributes.documentUuid] = {
570
+ type: Sequelize.UUID,
571
+ allowNull: true
572
+ }
573
+ }
574
+
531
575
  if (options.debug) {
532
576
  log('attributes', attributes);
533
577
  }
534
578
 
579
+ let indexes = [{
580
+ name: "document_reference_id",
581
+ fields: [options.defaultAttributes.documentId]
582
+ }];
583
+
584
+ if (options.userModel)
585
+ indexes.push({ fields: [options.userModelAttribute]});
586
+
587
+ if (options.mixedDocumentReference) {
588
+ indexes.push({
589
+ name: "document_reference_uuid",
590
+ fields: [options.defaultAttributes.documentUuid]
591
+ })
592
+ }
593
+
535
594
  // Revision model
536
595
  const Revision = sequelize.define(
537
596
  options.revisionModel,
@@ -539,8 +598,27 @@ paperTrail.init = (sequelize, sequelizePackage, optionsArg) => {
539
598
  {
540
599
  underscored: options.underscored,
541
600
  tableName: options.tableName,
601
+ timestamps: true,
602
+ createdAt: options.underscored ? "created_at" : "createdAt",
603
+ updatedAt: options.underscored ? "updated_at" : "updatedAt",
604
+ indexes
542
605
  },
543
606
  );
607
+
608
+ // safely prune down values
609
+ Revision.prototype.toJSON = function() {
610
+ let values = this.get();
611
+ const excludedFields = ["updated_at"];
612
+
613
+ // ensure that we always reference the id as document_id
614
+ values.document_id = values.document_id || values.document_uuid;
615
+ delete values.document_uuid;
616
+
617
+ return _.omitBy(values, function(value, key) {
618
+ return (excludedFields.includes(key) || (value === null));
619
+ });
620
+ };
621
+
544
622
  Revision.associate = function associate(models) {
545
623
  if (options.debug) {
546
624
  log('models', models);
@@ -615,10 +693,13 @@ paperTrail.init = (sequelize, sequelizePackage, optionsArg) => {
615
693
  * association through the associate call above.
616
694
  */
617
695
  if (options.userModel) {
618
- Revision.belongsTo(
619
- sequelize.model(options.userModel),
620
- options.belongsToUserOptions,
621
- );
696
+ Revision.belongsTo(sequelize.model(options.userModel), {
697
+ as: "account",
698
+ foreignKey: {
699
+ fieldName: options.userModelAttribute
700
+ },
701
+ onDelete: "CASCADE"
702
+ });
622
703
  }
623
704
 
624
705
  return Revision;