visit.model.js 2.1 KB

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