link.ts 1.4 KB

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