link.model.js 1.3 KB

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