20190912145032_create_users_indexes.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. /* eslint-disable no-unused-vars */
  2. const Helpers = require('./lib/helpers')
  3. exports.tags = ['server-ce', 'server-pro', 'saas']
  4. const indexes = [
  5. {
  6. unique: true,
  7. key: {
  8. email: 1,
  9. },
  10. name: 'email_case_insensitive',
  11. collation: {
  12. locale: 'en',
  13. caseLevel: false,
  14. caseFirst: 'off',
  15. strength: 2,
  16. numericOrdering: false,
  17. alternate: 'non-ignorable',
  18. maxVariable: 'punct',
  19. normalization: false,
  20. backwards: false,
  21. version: '57.1',
  22. },
  23. },
  24. {
  25. key: {
  26. 'dropbox.access_token.oauth_token_secret': 1,
  27. },
  28. name: 'has dropbox',
  29. },
  30. {
  31. unique: true,
  32. key: {
  33. 'overleaf.id': 1,
  34. },
  35. name: 'overleaf.id_1',
  36. partialFilterExpression: {
  37. 'overleaf.id': {
  38. $exists: true,
  39. },
  40. },
  41. },
  42. {
  43. unique: true,
  44. key: {
  45. 'thirdPartyIdentifiers.externalUserId': 1,
  46. 'thirdPartyIdentifiers.providerId': 1,
  47. },
  48. name:
  49. 'thirdPartyIdentifiers.externalUserId_1_thirdPartyIdentifiers.providerId_1',
  50. sparse: true,
  51. },
  52. {
  53. key: {
  54. 'subscription.freeTrialDowngraded': 1,
  55. },
  56. name: 'subscription.freeTrialDowngraded_1',
  57. },
  58. {
  59. key: {
  60. signUpDate: 1,
  61. },
  62. name: 'signUpDate',
  63. },
  64. {
  65. unique: true,
  66. key: {
  67. 'emails.email': 1,
  68. },
  69. name: 'emails_email_1',
  70. partialFilterExpression: {
  71. 'emails.email': {
  72. $exists: true,
  73. },
  74. },
  75. },
  76. {
  77. unique: true,
  78. key: {
  79. 'emails.email': 1,
  80. },
  81. name: 'emails_email_case_insensitive',
  82. partialFilterExpression: {
  83. 'emails.email': {
  84. $exists: true,
  85. },
  86. },
  87. collation: {
  88. locale: 'en',
  89. caseLevel: false,
  90. caseFirst: 'off',
  91. strength: 2,
  92. numericOrdering: false,
  93. alternate: 'non-ignorable',
  94. maxVariable: 'punct',
  95. normalization: false,
  96. backwards: false,
  97. version: '57.1',
  98. },
  99. },
  100. {
  101. unique: true,
  102. key: {
  103. 'dropbox.access_token.uid': 1,
  104. },
  105. name: 'dropbox.access_token.uid_unique',
  106. sparse: true,
  107. },
  108. {
  109. key: {
  110. password: 1,
  111. email: 1,
  112. },
  113. name: 'password_and_email',
  114. },
  115. {
  116. key: {
  117. referal_id: 1,
  118. },
  119. name: 'referal_id',
  120. },
  121. {
  122. key: {
  123. 'subscription.freeTrialExpiresAt': 1,
  124. },
  125. name: 'subscription.freeTrialExpiresAt_1',
  126. },
  127. {
  128. key: {
  129. auth_token: 1,
  130. },
  131. name: 'auth_token_1',
  132. },
  133. {
  134. unique: true,
  135. key: {
  136. email: 1,
  137. },
  138. name: 'email_1',
  139. },
  140. {
  141. key: {
  142. 'emails.reversedHostname': 1,
  143. },
  144. name: 'emails.reversedHostname_1',
  145. },
  146. ]
  147. exports.migrate = async client => {
  148. const { db } = client
  149. await Helpers.addIndexesToCollection(db.users, indexes)
  150. }
  151. exports.rollback = async client => {
  152. const { db } = client
  153. try {
  154. await Helpers.dropIndexesFromCollection(db.users, indexes)
  155. } catch (err) {
  156. console.error('Something went wrong rolling back the migrations', err)
  157. }
  158. }