lngovn / sequelize-typescript-model-migration

Auto-generate migration script from sequelize-typescript model
MIT License
5 stars 6 forks source link

Unique constraint on many-to-many relations for primary keys: * is not defined. #1

Open jmwielandt opened 3 years ago

jmwielandt commented 3 years ago

Hi

This is what you generated:

await queryInterface.createTable("StudentSubjects", {
      studentId: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        unique: StudentSubjects_studentId_subjectId_unique,
      },
      subjectId: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        unique: StudentSubjects_studentId_subjectId_unique,
      },
      onItsOwn: { type: Sequelize.BOOLEAN },
      createdAt: { type: Sequelize.DATE, allowNull: false },
      updatedAt: { type: Sequelize.DATE, allowNull: false },
    });

Please note the missing quotation marks at StudentSubjects_studentId_subjectId_unique and StudentSubjects_studentId_subjectId_unique.

And this is what you should generate:

await queryInterface.createTable("StudentSubjects", {
      studentId: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        unique: "StudentSubjects_studentId_subjectId_unique",
      },
      subjectId: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        unique: "StudentSubjects_studentId_subjectId_unique",
      },
      onItsOwn: { type: Sequelize.BOOLEAN },
      createdAt: { type: Sequelize.DATE, allowNull: false },
      updatedAt: { type: Sequelize.DATE, allowNull: false },
    });

When I ran npx sequelize db:migrate i've got this error message:

PS > npx sequelize db:migrate

Sequelize CLI [Node: 14.16.1, CLI: 6.2.0, ORM: 6.6.2]

Loaded configuration file "config\config.js".
Using environment "development".
== 00000001-first-migraation: migrating =======

ERROR: StudentAnswers_userId_questionId_unique is not defined

This is the script I used:

import { dbConnect } from ".";
import { generateMigration } from "sequelize-typescript-model-migration";
import { ArgumentParser } from "argparse";
import path from "path";
// eslint-disable-next-line @typescript-eslint/no-var-requires
const config = require("../../config/config.js");

async function main(): Promise<void> {
  const parser = new ArgumentParser({
    description: "Script generador de migraciones.",
  });
  parser.add_argument("-n", "--name", { help: "Nombre de la migración." });

  const { name } = parser.parse_args();

  const sequelize = dbConnect(config);
  generateMigration(sequelize, {
    outDir: path.resolve(__dirname, "migrations"),
    migrationName: name,
  });
}

main();

And I executed with:

PS > ts-node .\src\db\migrationGeneratorScript.ts --name="first-migraation"
lngovn commented 3 years ago

Thanks for raising this issue.

After investigated, I've figured out this module is missing the unique constraint generator so it cannot generate the unique constraints properly.

I'm working on it.

Thank you for your patience!

lngovn commented 3 years ago

Hi @jmwielandt, the issue has been fixed here https://github.com/lngovn/sequelize-typescript-model-migration/pull/2.

Please try version sequelize-typescript-model-migration@1.0.9

Thanks!