const { genRandomSequence } = require('../../utils/gen'); const { User } = require('../../models/User'); const generateGuestToken = () => { const id = `guest:${genRandomSequence(16)}`; return User.find({ id }).then(user => { if (user.length) return generateGuestToken(); return id; }); }; const generateUser = (id, role = 'guest') => { const token = `seq:${genRandomSequence(32)}`; return { id, token, role }; }; const saveUser = user => { const model = new User({ ...user }); return model.save() .then(() => model.toObject()) .catch(() => ({ ...user, success: false, error: 'Error saving user model', error_code: 1232, })); }; const generateRandomUrl = () => Promise.resolve(genRandomSequence(16)); const generateGuest = async () => { const user = await generateGuestToken() .then(generateUser); const random_url = await generateRandomUrl(); return { ...user, random_url }; }; module.exports = async (req, res) => { const user = await generateGuest().then(saveUser); res.send({ success: true, ...user }); }; module.exports.generateUser = generateUser; module.exports.generateGuest = generateGuest; module.exports.generateGuestToken = generateGuestToken; module.exports.generateRandomUrl = generateRandomUrl;