20190912145032_create_users_indexes.mjs 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. /* eslint-disable no-unused-vars */
  2. import Helpers from './lib/helpers.mjs'
  3. const 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: 'thirdPartyIdentifiers.externalUserId_1_thirdPartyIdentifiers.providerId_1',
  49. sparse: true,
  50. },
  51. {
  52. key: {
  53. 'subscription.freeTrialDowngraded': 1,
  54. },
  55. name: 'subscription.freeTrialDowngraded_1',
  56. },
  57. {
  58. key: {
  59. signUpDate: 1,
  60. },
  61. name: 'signUpDate',
  62. },
  63. {
  64. unique: true,
  65. key: {
  66. 'emails.email': 1,
  67. },
  68. name: 'emails_email_1',
  69. partialFilterExpression: {
  70. 'emails.email': {
  71. $exists: true,
  72. },
  73. },
  74. },
  75. {
  76. unique: true,
  77. key: {
  78. 'emails.email': 1,
  79. },
  80. name: 'emails_email_case_insensitive',
  81. partialFilterExpression: {
  82. 'emails.email': {
  83. $exists: true,
  84. },
  85. },
  86. collation: {
  87. locale: 'en',
  88. caseLevel: false,
  89. caseFirst: 'off',
  90. strength: 2,
  91. numericOrdering: false,
  92. alternate: 'non-ignorable',
  93. maxVariable: 'punct',
  94. normalization: false,
  95. backwards: false,
  96. version: '57.1',
  97. },
  98. },
  99. {
  100. unique: true,
  101. key: {
  102. 'dropbox.access_token.uid': 1,
  103. },
  104. name: 'dropbox.access_token.uid_unique',
  105. sparse: true,
  106. },
  107. {
  108. key: {
  109. password: 1,
  110. email: 1,
  111. },
  112. name: 'password_and_email',
  113. },
  114. {
  115. key: {
  116. referal_id: 1,
  117. },
  118. name: 'referal_id',
  119. },
  120. {
  121. key: {
  122. 'subscription.freeTrialExpiresAt': 1,
  123. },
  124. name: 'subscription.freeTrialExpiresAt_1',
  125. },
  126. {
  127. key: {
  128. auth_token: 1,
  129. },
  130. name: 'auth_token_1',
  131. },
  132. {
  133. unique: true,
  134. key: {
  135. email: 1,
  136. },
  137. name: 'email_1',
  138. },
  139. {
  140. key: {
  141. 'emails.reversedHostname': 1,
  142. },
  143. name: 'emails.reversedHostname_1',
  144. },
  145. ]
  146. const migrate = async client => {
  147. const { db } = client
  148. await Helpers.addIndexesToCollection(db.users, indexes)
  149. }
  150. const rollback = async client => {
  151. const { db } = client
  152. try {
  153. await Helpers.dropIndexesFromCollection(db.users, indexes)
  154. } catch (err) {
  155. console.error('Something went wrong rolling back the migrations', err)
  156. }
  157. }
  158. export default {
  159. tags,
  160. migrate,
  161. rollback,
  162. }