const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const { check, validationResult } = require('express-validator'); const router = express.Router(); // User Model const User = require('./models/User'); // Register Route for Studio Owners router.post( '/register', [ check('email', 'Please include a valid email').isEmail(), check('password', 'Password is required').exists(), ], async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) { return res.status(400).json({ errors: errors.array() }); } const { email, password, role } = req.body; try { let user = await User.findOne({ email }); if (user) { return res.status(400).json({ msg: 'User already exists' }); } user = new User({ email, password, role, // "Studio Owner", "Judge", etc. }); // Hash password before saving const salt = await bcrypt.genSalt(10); user.password = await bcrypt.hash(password, salt); await user.save(); // Generate JWT Token const payload = { user: { id: user.id, role: user.role, }, }; jwt.sign( payload, process.env.JWT_SECRET, { expiresIn: 3600 }, (err, token) => { if (err) throw err; res.json({ token }); } ); } catch (err) { console.error(err.message); res.status(500).send('Server error'); } } ); module.exports = router;
top of page

AGE DIVISIONS

SOLO/DUET/TRIO AGE DIVISION: Solos will be placed in the age division based on the dancers age at the time of the competition.  Duets and trios will be determined by the average age of the dancers.

TEAM & PRODUCTION AGE DIVISION:  Teams will be placed in the age division based on the average age of the dancers at the time of the competition. 

​

*Age division may be adjusted to create a more balanced and fair competition

bottom of page