visit.model.js 2.1 KB

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