import dbConnect from 'configs/dbConnect' import sendMail from 'configs/sendMail' import withSession from 'hocs/withSession' import mailData from 'helpers/email' import User from 'models/User' import NoteList from 'apps/Notes/models/NoteList' import log from 'helpers/log' export default withSession(async (req, res) => { const conn = await dbConnect() switch (req.method) { case 'POST': try { const session = await conn.startSession() await session.withTransaction(async () => { const noteList = await NoteList.create({}) const body = JSON.parse(req.body) const { _id, email, verificationKey: key, theme, language } = await User.create({ ...body, noteList }) if (!email) { throw new Error('Something went wrong') } try { sendMail({to: email, ...mailData('v', language, key)}) } catch (e) { log({ email, action: 'register_mail', error: e }) } const user = { _id, email, noteList, theme, language, isVerified: false, isLoggedIn: true } req.session.set('user', user) await req.session.save() session.endSession() log({ email, action: 'register' }) res.status(201).json(user) }) } catch (error) { log({ email: JSON.parse(req.body)?.email, action: 'register', error, }) res.status(400).json({ isLoggedIn: false }) } break default: res.status(400).json({ isLoggedIn: false }) break } })