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 => { const token = `seq:${genRandomSequence(32)}`; const role = 'guest'; 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.generateGuest = generateGuest; module.exports.generateRandomUrl = generateRandomUrl;