visit.ts 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. import * as 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
  13. .integer("link_id")
  14. .references("id")
  15. .inTable("links")
  16. .notNullable();
  17. table.jsonb("referrers").defaultTo("{}");
  18. table
  19. .integer("total")
  20. .notNullable()
  21. .defaultTo(0);
  22. table
  23. .integer("br_chrome")
  24. .notNullable()
  25. .defaultTo(0);
  26. table
  27. .integer("br_edge")
  28. .notNullable()
  29. .defaultTo(0);
  30. table
  31. .integer("br_firefox")
  32. .notNullable()
  33. .defaultTo(0);
  34. table
  35. .integer("br_ie")
  36. .notNullable()
  37. .defaultTo(0);
  38. table
  39. .integer("br_opera")
  40. .notNullable()
  41. .defaultTo(0);
  42. table
  43. .integer("br_other")
  44. .notNullable()
  45. .defaultTo(0);
  46. table
  47. .integer("br_safari")
  48. .notNullable()
  49. .defaultTo(0);
  50. table
  51. .integer("os_android")
  52. .notNullable()
  53. .defaultTo(0);
  54. table
  55. .integer("os_ios")
  56. .notNullable()
  57. .defaultTo(0);
  58. table
  59. .integer("os_linux")
  60. .notNullable()
  61. .defaultTo(0);
  62. table
  63. .integer("os_macos")
  64. .notNullable()
  65. .defaultTo(0);
  66. table
  67. .integer("os_other")
  68. .notNullable()
  69. .defaultTo(0);
  70. table
  71. .integer("os_windows")
  72. .notNullable()
  73. .defaultTo(0);
  74. });
  75. }
  76. }