From 1543e07fd85e8891593c6af409cf5f88872298cc Mon Sep 17 00:00:00 2001 From: Konstantinos Feretos Date: Fri, 8 Sep 2023 18:19:05 +0300 Subject: [PATCH] fix(database): schema/extension creation timestamp field values mismatch (#682) --- .../database/src/adapters/DatabaseAdapter.ts | 5 ++-- .../mongoose-adapter/MongooseSchema.ts | 9 +------- .../sequelize-adapter/SequelizeSchema.ts | 23 ++++++++++++++----- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/modules/database/src/adapters/DatabaseAdapter.ts b/modules/database/src/adapters/DatabaseAdapter.ts index 4de579399..b1af3df2c 100644 --- a/modules/database/src/adapters/DatabaseAdapter.ts +++ b/modules/database/src/adapters/DatabaseAdapter.ts @@ -323,12 +323,13 @@ export abstract class DatabaseAdapter { if (extIndex === -1 && extFieldsCount === 0) { return Promise.resolve(schema as unknown as Schema); // @dirty-type-cast } else if (extIndex === -1) { + const date = new Date(); // TODO FORMAT // Create Extension schema.extensions.push({ fields: extFields, ownerModule: extOwner, - createdAt: new Date(), // TODO FORMAT - updatedAt: new Date(), // TODO FORMAT + createdAt: date, + updatedAt: date, }); } else { if (extFieldsCount === 0) { diff --git a/modules/database/src/adapters/mongoose-adapter/MongooseSchema.ts b/modules/database/src/adapters/mongoose-adapter/MongooseSchema.ts index 595d04cf8..c0591ba02 100644 --- a/modules/database/src/adapters/mongoose-adapter/MongooseSchema.ts +++ b/modules/database/src/adapters/mongoose-adapter/MongooseSchema.ts @@ -70,11 +70,7 @@ export class MongooseSchema extends SchemaAdapter> { }, ) { await this.createPermissionCheck(options?.userId, options?.scope); - const parsedQuery = { - ...this.parseStringToQuery(query), - createdAt: new Date(), - updatedAt: new Date(), - }; + const parsedQuery = this.parseStringToQuery(query); const obj = await this.model.create(parsedQuery).then(r => r.toObject()); await this.addPermissionToData(obj, options); @@ -140,7 +136,6 @@ export class MongooseSchema extends SchemaAdapter> { if (parsedQuery.hasOwnProperty('$set')) { parsedQuery = parsedQuery['$set']; } - parsedQuery['updatedAt'] = new Date(); let finalQuery = this.model.findOneAndReplace(parsedFilter!, parsedQuery, { new: true, }); @@ -171,7 +166,6 @@ export class MongooseSchema extends SchemaAdapter> { if (parsedQuery.hasOwnProperty('$set')) { parsedQuery = parsedQuery['$set']; } - parsedQuery['updatedAt'] = new Date(); let finalQuery = this.model.findOneAndUpdate(parsedFilter!, parsedQuery, { new: true, }); @@ -205,7 +199,6 @@ export class MongooseSchema extends SchemaAdapter> { if (parsedQuery.hasOwnProperty('$set')) { parsedQuery = parsedQuery['$set']; } - parsedQuery['updatedAt'] = new Date(); return this.model.updateMany(parsedFilter, parsedQuery).exec(); } diff --git a/modules/database/src/adapters/sequelize-adapter/SequelizeSchema.ts b/modules/database/src/adapters/sequelize-adapter/SequelizeSchema.ts index 6e1a3164a..d1197b7c8 100644 --- a/modules/database/src/adapters/sequelize-adapter/SequelizeSchema.ts +++ b/modules/database/src/adapters/sequelize-adapter/SequelizeSchema.ts @@ -67,6 +67,22 @@ export class SequelizeSchema extends SchemaAdapter> { this.model = sequelize.define(schema.collectionName, schema.fields, { ...schema.modelOptions, freezeTableName: true, + hooks: this.schema.modelOptions + ? { + beforeCreate: doc => { + const date = new Date(); + doc.createdAt = date; + doc.updatedAt = date; + }, + beforeBulkCreate: docs => { + const date = new Date(); + docs.forEach(doc => { + doc.createdAt = date; + doc.updatedAt = date; + }); + }, + } + : undefined, }); // if a relation is to self, then it will be undefined inside the extractedRelations // so we set it manually to self @@ -186,7 +202,6 @@ export class SequelizeSchema extends SchemaAdapter> { } // process the update query after special conditions have been handled. processCreateQuery(parsedQuery, this.objectPaths); - parsedQuery.updatedAt = new Date(); incrementDbQueries(); const relationObjects = extractRelationsModification(this, parsedQuery); await this.model.update( @@ -233,8 +248,6 @@ export class SequelizeSchema extends SchemaAdapter> { ) { await this.createPermissionCheck(options?.userId, options?.scope); const parsedQuery: ParsedQuery = this.parseStringToQuery(query); - parsedQuery.createdAt = new Date(); - parsedQuery.updatedAt = new Date(); incrementDbQueries(); processCreateQuery(parsedQuery, this.objectPaths); const relationObjects = extractRelationsModification(this, parsedQuery); @@ -247,9 +260,7 @@ export class SequelizeSchema extends SchemaAdapter> { .create(parsedQuery, { transaction: t, }) - .then(doc => { - return createWithPopulation(this, doc, relationObjects, t); - }) + .then(doc => createWithPopulation(this, doc, relationObjects, t)) .then(doc => { if (!transactionProvided) { t!.commit();