visit.model.js 2.3 KB

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