visit.model.js 2.1 KB

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