Browse Source

fix: primary key definitions ordering in `getPropertiesDefinitionInBaseModelHierarchy`

e22m4u 4 months ago
parent
commit
d37673a593

+ 7 - 7
dist/cjs/index.cjs

@@ -2415,25 +2415,25 @@ var init_model_definition_utils = __esm({
        * @returns {object}
        */
       getPropertiesDefinitionInBaseModelHierarchy(modelName) {
-        let result = {};
         let pkPropDefs = {};
+        let regularPropDefs = {};
         const recursion = /* @__PURE__ */ __name((currModelName, prevModelName = void 0) => {
           if (currModelName === prevModelName)
             throw new InvalidArgumentError(
               "The model %v has a circular inheritance.",
               currModelName
             );
-          if (Object.keys(pkPropDefs).length === 0) {
+          if (Object.keys(pkPropDefs).length === 0)
             pkPropDefs = this.getOwnPropertiesDefinitionOfPrimaryKeys(currModelName);
-            result = { ...result, ...pkPropDefs };
-          }
-          const regularPropDefs = this.getOwnPropertiesDefinitionWithoutPrimaryKeys(currModelName);
-          result = { ...regularPropDefs, ...result };
+          regularPropDefs = {
+            ...this.getOwnPropertiesDefinitionWithoutPrimaryKeys(currModelName),
+            ...regularPropDefs
+          };
           const modelDef = this.getService(DefinitionRegistry).getModel(currModelName);
           if (modelDef.base) recursion(modelDef.base, currModelName);
         }, "recursion");
         recursion(modelName);
-        return result;
+        return { ...pkPropDefs, ...regularPropDefs };
       }
       /**
        * Get own relations definition.

+ 7 - 8
src/definition/model/model-definition-utils.js

@@ -372,28 +372,27 @@ export class ModelDefinitionUtils extends Service {
    * @returns {object}
    */
   getPropertiesDefinitionInBaseModelHierarchy(modelName) {
-    let result = {};
     let pkPropDefs = {};
+    let regularPropDefs = {};
     const recursion = (currModelName, prevModelName = undefined) => {
       if (currModelName === prevModelName)
         throw new InvalidArgumentError(
           'The model %v has a circular inheritance.',
           currModelName,
         );
-      if (Object.keys(pkPropDefs).length === 0) {
+      if (Object.keys(pkPropDefs).length === 0)
         pkPropDefs =
           this.getOwnPropertiesDefinitionOfPrimaryKeys(currModelName);
-        result = {...result, ...pkPropDefs};
-      }
-      const regularPropDefs =
-        this.getOwnPropertiesDefinitionWithoutPrimaryKeys(currModelName);
-      result = {...regularPropDefs, ...result};
+      regularPropDefs = {
+        ...this.getOwnPropertiesDefinitionWithoutPrimaryKeys(currModelName),
+        ...regularPropDefs,
+      };
       const modelDef =
         this.getService(DefinitionRegistry).getModel(currModelName);
       if (modelDef.base) recursion(modelDef.base, currModelName);
     };
     recursion(modelName);
-    return result;
+    return {...pkPropDefs, ...regularPropDefs};
   }
 
   /**

+ 19 - 0
src/definition/model/model-definition-utils.spec.js

@@ -1567,6 +1567,25 @@ describe('ModelDefinitionUtils', function () {
         'The model "model" has a circular inheritance.',
       );
     });
+
+    it('places a primary key definition at the start of the result', function () {
+      const dbs = new DatabaseSchema();
+      dbs.defineModel({
+        name: 'model',
+        properties: {
+          foo: DataType.STRING,
+          id: {
+            type: DataType.STRING,
+            primaryKey: true,
+          },
+          bar: DataType.NUMBER,
+        },
+      });
+      const result = dbs
+        .getService(ModelDefinitionUtils)
+        .getPropertiesDefinitionInBaseModelHierarchy('model');
+      expect(Object.keys(result)).to.be.eql(['id', 'foo', 'bar']);
+    });
   });
 
   describe('getOwnRelationsDefinition', function () {