link.model.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. async function createLinkTable(knex) {
  2. const hasTable = await knex.schema.hasTable("links");
  3. if (!hasTable) {
  4. await knex.schema.createTable("links", table => {
  5. table.increments("id").primary();
  6. table.string("address").notNullable();
  7. table.string("description");
  8. table
  9. .boolean("banned")
  10. .notNullable()
  11. .defaultTo(false);
  12. table
  13. .integer("banned_by_id")
  14. .unsigned()
  15. .references("id")
  16. .inTable("users");
  17. table
  18. .integer("domain_id")
  19. .unsigned()
  20. .references("id")
  21. .inTable("domains");
  22. table.string("password");
  23. table.dateTime("expire_in");
  24. table.string("target", 2040).notNullable();
  25. table
  26. .integer("user_id")
  27. .unsigned();
  28. table
  29. .foreign("user_id")
  30. .references("id")
  31. .inTable("users")
  32. .onDelete("CASCADE")
  33. .withKeyName("links_user_id_foreign");
  34. table
  35. .integer("visit_count")
  36. .notNullable()
  37. .defaultTo(0);
  38. table
  39. .uuid("uuid")
  40. .notNullable()
  41. .defaultTo(knex.fn.uuid());
  42. table.timestamps(false, true);
  43. });
  44. }
  45. const hasUUID = await knex.schema.hasColumn("links", "uuid");
  46. if (!hasUUID) {
  47. await knex.schema.alterTable("links", table => {
  48. table
  49. .uuid("uuid")
  50. .notNullable()
  51. .defaultTo(knex.fn.uuid());
  52. });
  53. }
  54. }
  55. module.exports = {
  56. createLinkTable
  57. }