fix: user email is set to a unique index (#7917)
This commit is contained in:
@@ -126,7 +126,7 @@
|
||||
"composite": false,
|
||||
"primary": false,
|
||||
"unique": false,
|
||||
"expression": "CREATE INDEX IF NOT EXISTS \"IDX_invite_token\" ON \"invite\" (deleted_at) WHERE deleted_at IS NOT NULL"
|
||||
"expression": "CREATE INDEX IF NOT EXISTS \"IDX_invite_deleted_at\" ON \"invite\" (deleted_at) WHERE deleted_at IS NOT NULL"
|
||||
},
|
||||
{
|
||||
"keyName": "invite_pkey",
|
||||
@@ -241,7 +241,7 @@
|
||||
"composite": false,
|
||||
"primary": false,
|
||||
"unique": false,
|
||||
"expression": "CREATE INDEX IF NOT EXISTS \"IDX_user_email\" ON \"user\" (email) WHERE deleted_at IS NULL"
|
||||
"expression": "CREATE UNIQUE INDEX IF NOT EXISTS \"IDX_user_email\" ON \"user\" (email) WHERE deleted_at IS NULL"
|
||||
},
|
||||
{
|
||||
"keyName": "IDX_user_deleted_at",
|
||||
|
||||
@@ -0,0 +1,21 @@
|
||||
import { Migration } from "@mikro-orm/migrations"
|
||||
|
||||
export class Migration20240703095850 extends Migration {
|
||||
async up(): Promise<void> {
|
||||
this.addSql('drop index if exists "IDX_user_email";')
|
||||
|
||||
this.addSql(
|
||||
'CREATE UNIQUE INDEX "IDX_user_email" ON "user" (email) WHERE deleted_at IS NULL;'
|
||||
)
|
||||
// Adding this log here as the point of failure is not in this function, but bundled up when running all pending migration
|
||||
console.warn(
|
||||
`Note: If the index "IDX_user_email" fails to create, then delete any existing users with duplicate emails before retrying the migration.`
|
||||
)
|
||||
}
|
||||
|
||||
async down(): Promise<void> {
|
||||
this.addSql(
|
||||
'CREATE INDEX IF NOT EXISTS "IDX_user_email" ON "user" (email) WHERE deleted_at IS NULL;'
|
||||
)
|
||||
}
|
||||
}
|
||||
@@ -11,8 +11,8 @@ import {
|
||||
|
||||
import { DAL } from "@medusajs/types"
|
||||
import {
|
||||
DALUtils,
|
||||
createPsqlIndexStatementHelper,
|
||||
DALUtils,
|
||||
generateEntityId,
|
||||
Searchable,
|
||||
} from "@medusajs/utils"
|
||||
@@ -20,10 +20,11 @@ import {
|
||||
const userEmailIndexName = "IDX_user_email"
|
||||
const userEmailIndexStatement = createPsqlIndexStatementHelper({
|
||||
name: userEmailIndexName,
|
||||
unique: true,
|
||||
tableName: "user",
|
||||
columns: "email",
|
||||
where: "deleted_at IS NULL",
|
||||
}).expression
|
||||
})
|
||||
|
||||
const userDeletedAtIndexName = "IDX_user_deleted_at"
|
||||
const userDeletedAtIndexStatement = createPsqlIndexStatementHelper({
|
||||
@@ -56,10 +57,7 @@ export default class User {
|
||||
@Property({ columnType: "text", nullable: true })
|
||||
last_name: string | null = null
|
||||
|
||||
@Index({
|
||||
name: userEmailIndexName,
|
||||
expression: userEmailIndexStatement,
|
||||
})
|
||||
@userEmailIndexStatement.MikroORMIndex()
|
||||
@Searchable()
|
||||
@Property({ columnType: "text" })
|
||||
email: string
|
||||
|
||||
Reference in New Issue
Block a user