1725485641-create-users-table.ts 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import { Sequelize, DataTypes } from "sequelize";
  2. import { MigrationParams } from "umzug";
  3. export const up = async ({
  4. context: sequelize
  5. }: MigrationParams<Sequelize>) => {
  6. await sequelize.getQueryInterface().createTable("users", {
  7. _id: {
  8. // eslint-disable-next-line
  9. // @ts-ignore
  10. type: DataTypes.OBJECTID,
  11. autoNull: false,
  12. primaryKey: true
  13. },
  14. name: {
  15. type: DataTypes.STRING,
  16. allowNull: false
  17. },
  18. username: {
  19. type: DataTypes.STRING,
  20. allowNull: false
  21. },
  22. role: {
  23. type: DataTypes.ENUM("admin", "moderator", "user"),
  24. allowNull: false
  25. },
  26. emailAddress: {
  27. type: DataTypes.STRING,
  28. allowNull: false
  29. },
  30. emailVerifiedAt: {
  31. type: DataTypes.DATE,
  32. allowNull: true
  33. },
  34. emailVerificationToken: {
  35. type: DataTypes.STRING,
  36. allowNull: true
  37. },
  38. avatarType: {
  39. type: DataTypes.ENUM("gravatar", "initials"),
  40. allowNull: false
  41. },
  42. avatarColor: {
  43. type: DataTypes.ENUM(
  44. "blue",
  45. "green",
  46. "orange",
  47. "purple",
  48. "red",
  49. "teal"
  50. ),
  51. allowNull: true
  52. },
  53. avatarUrl: {
  54. type: DataTypes.STRING,
  55. allowNull: true
  56. },
  57. password: {
  58. type: DataTypes.STRING,
  59. allowNull: false
  60. },
  61. passwordResetToken: {
  62. type: DataTypes.STRING,
  63. allowNull: true
  64. },
  65. passwordResetExpiresAt: {
  66. type: DataTypes.DATE,
  67. allowNull: true
  68. },
  69. githubId: {
  70. type: DataTypes.BIGINT,
  71. allowNull: true
  72. },
  73. githubAccessToken: {
  74. type: DataTypes.STRING,
  75. allowNull: true
  76. },
  77. songsRequested: {
  78. type: DataTypes.BIGINT,
  79. allowNull: false,
  80. defaultValue: 0
  81. },
  82. location: {
  83. type: DataTypes.STRING,
  84. allowNull: true
  85. },
  86. bio: {
  87. type: DataTypes.STRING,
  88. allowNull: true
  89. },
  90. nightmode: {
  91. type: DataTypes.BOOLEAN,
  92. allowNull: false,
  93. defaultValue: false
  94. },
  95. autoSkipDisliked: {
  96. type: DataTypes.BOOLEAN,
  97. allowNull: false,
  98. defaultValue: true
  99. },
  100. activityLogPublic: {
  101. type: DataTypes.BOOLEAN,
  102. allowNull: false,
  103. defaultValue: false
  104. },
  105. anonymousSongRequests: {
  106. type: DataTypes.BOOLEAN,
  107. allowNull: false,
  108. defaultValue: false
  109. },
  110. activityWatch: {
  111. type: DataTypes.BOOLEAN,
  112. allowNull: false,
  113. defaultValue: false
  114. },
  115. createdAt: DataTypes.DATE,
  116. updatedAt: DataTypes.DATE
  117. });
  118. };
  119. export const down = async ({
  120. context: sequelize
  121. }: MigrationParams<Sequelize>) => {
  122. await sequelize.getQueryInterface().dropTable("users");
  123. };