20260707130000_add_unique_login_email_usuarios.cjs 897 B

1234567891011121314151617181920212223242526272829303132
  1. exports.up = async function (knex) {
  2. const dupLogin = await knex("usuarios")
  3. .select("Login")
  4. .count({ c: "*" })
  5. .groupBy("Login")
  6. .having(knex.raw("count(*) > 1"));
  7. const dupEmail = await knex("usuarios")
  8. .select("Email")
  9. .count({ c: "*" })
  10. .groupBy("Email")
  11. .having(knex.raw("count(*) > 1"));
  12. if (dupLogin.length || dupEmail.length) {
  13. throw new Error(
  14. `[migration] Não é possível aplicar UNIQUE: Logins duplicados=${dupLogin
  15. .map((d) => d.Login)
  16. .join(",")} Emails duplicados=${dupEmail.map((d) => d.Email).join(",")}. Resolva manualmente antes de migrar.`
  17. );
  18. }
  19. return knex.schema.alterTable("usuarios", (t) => {
  20. t.unique("Login");
  21. t.unique("Email");
  22. });
  23. };
  24. exports.down = function (knex) {
  25. return knex.schema.alterTable("usuarios", (t) => {
  26. t.dropUnique("Login");
  27. t.dropUnique("Email");
  28. });
  29. };