link.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  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. knex.raw('create extension if not exists "uuid-ossp"');
  7. table.increments("id").primary();
  8. table.string("address").notNullable();
  9. table.string("description");
  10. table
  11. .boolean("banned")
  12. .notNullable()
  13. .defaultTo(false);
  14. table
  15. .integer("banned_by_id")
  16. .references("id")
  17. .inTable("users");
  18. table
  19. .integer("domain_id")
  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. .references("id")
  28. .inTable("users")
  29. .onDelete("CASCADE");
  30. table
  31. .integer("visit_count")
  32. .notNullable()
  33. .defaultTo(0);
  34. table.timestamps(false, true);
  35. });
  36. }
  37. const hasUUID = await knex.schema.hasColumn("links", "uuid");
  38. if (!hasUUID) {
  39. await knex.schema.raw('create extension if not exists "uuid-ossp"');
  40. await knex.schema.alterTable("links", table => {
  41. table
  42. .uuid("uuid")
  43. .notNullable()
  44. .defaultTo(knex.raw("uuid_generate_v4()"));
  45. });
  46. }
  47. }
  48. module.exports = {
  49. createLinkTable
  50. }