visit.ts 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { Knex } from "knex";
  2. export async function createVisitTable(knex: Knex) {
  3. const hasTable = await knex.schema.hasTable("visits");
  4. if (!hasTable) {
  5. await knex.schema.createTable("visits", table => {
  6. table.increments("id").primary();
  7. table.jsonb("countries").defaultTo("{}");
  8. table
  9. .dateTime("created_at")
  10. .notNullable()
  11. .defaultTo(knex.fn.now());
  12. table.dateTime("updated_at").defaultTo(knex.fn.now());
  13. table
  14. .integer("link_id")
  15. .references("id")
  16. .inTable("links")
  17. .notNullable()
  18. .onDelete("CASCADE");
  19. table.jsonb("referrers").defaultTo("{}");
  20. table
  21. .integer("total")
  22. .notNullable()
  23. .defaultTo(0);
  24. table
  25. .integer("br_chrome")
  26. .notNullable()
  27. .defaultTo(0);
  28. table
  29. .integer("br_edge")
  30. .notNullable()
  31. .defaultTo(0);
  32. table
  33. .integer("br_firefox")
  34. .notNullable()
  35. .defaultTo(0);
  36. table
  37. .integer("br_ie")
  38. .notNullable()
  39. .defaultTo(0);
  40. table
  41. .integer("br_opera")
  42. .notNullable()
  43. .defaultTo(0);
  44. table
  45. .integer("br_other")
  46. .notNullable()
  47. .defaultTo(0);
  48. table
  49. .integer("br_safari")
  50. .notNullable()
  51. .defaultTo(0);
  52. table
  53. .integer("os_android")
  54. .notNullable()
  55. .defaultTo(0);
  56. table
  57. .integer("os_ios")
  58. .notNullable()
  59. .defaultTo(0);
  60. table
  61. .integer("os_linux")
  62. .notNullable()
  63. .defaultTo(0);
  64. table
  65. .integer("os_macos")
  66. .notNullable()
  67. .defaultTo(0);
  68. table
  69. .integer("os_other")
  70. .notNullable()
  71. .defaultTo(0);
  72. table
  73. .integer("os_windows")
  74. .notNullable()
  75. .defaultTo(0);
  76. });
  77. }
  78. const hasUpdatedAt = await knex.schema.hasColumn("visits", "updated_at");
  79. if (!hasUpdatedAt) {
  80. await knex.schema.alterTable("visits", table => {
  81. table.dateTime("updated_at").defaultTo(knex.fn.now());
  82. });
  83. }
  84. }