UI/UX tweaks and improvements.
This commit is contained in:
parent
4daec9b624
commit
418d3cc402
32 changed files with 2725 additions and 1201 deletions
77
server/api/members/update-email.post.js
Normal file
77
server/api/members/update-email.post.js
Normal file
|
|
@ -0,0 +1,77 @@
|
|||
// Update member's email address
|
||||
import Member from '../../models/member.js'
|
||||
import { connectDB } from '../../utils/mongoose.js'
|
||||
import { requireAuth } from '../../utils/auth.js'
|
||||
|
||||
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/
|
||||
|
||||
export default defineEventHandler(async (event) => {
|
||||
try {
|
||||
const member = await requireAuth(event)
|
||||
await connectDB()
|
||||
|
||||
const body = await readBody(event)
|
||||
const newEmail = (body?.email ?? '').trim().toLowerCase()
|
||||
|
||||
if (!newEmail) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: 'Email address is required',
|
||||
})
|
||||
}
|
||||
|
||||
if (!EMAIL_REGEX.test(newEmail)) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: 'Invalid email address format',
|
||||
})
|
||||
}
|
||||
|
||||
const oldEmail = member.email.trim().toLowerCase()
|
||||
|
||||
if (newEmail === oldEmail) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: 'New email address must be different from your current email',
|
||||
})
|
||||
}
|
||||
|
||||
const existing = await Member.findOne({
|
||||
email: newEmail,
|
||||
_id: { $ne: member._id },
|
||||
})
|
||||
|
||||
if (existing) {
|
||||
throw createError({
|
||||
statusCode: 409,
|
||||
statusMessage: 'This email address is already in use by another account',
|
||||
})
|
||||
}
|
||||
|
||||
await Member.findByIdAndUpdate(
|
||||
member._id,
|
||||
{
|
||||
$set: { email: newEmail },
|
||||
$push: {
|
||||
emailHistory: {
|
||||
email: oldEmail,
|
||||
changedAt: new Date(),
|
||||
},
|
||||
},
|
||||
},
|
||||
{ runValidators: false }
|
||||
)
|
||||
|
||||
return {
|
||||
success: true,
|
||||
email: newEmail,
|
||||
}
|
||||
} catch (error) {
|
||||
if (error.statusCode) throw error
|
||||
console.error('Error updating email:', error)
|
||||
throw createError({
|
||||
statusCode: 500,
|
||||
statusMessage: 'An unexpected error occurred',
|
||||
})
|
||||
}
|
||||
})
|
||||
Loading…
Add table
Add a link
Reference in a new issue