backend-scaffold-cli 1.5.1 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/bin/cli.js +106 -1
  2. package/package.json +5 -2
package/bin/cli.js CHANGED
@@ -7,8 +7,9 @@ const inquirer = require('inquirer');
7
7
  const fs = require('fs-extra');
8
8
  const path = require('path');
9
9
  const { execSync } = require('child_process');
10
+ const packageJson = require('../package.json');
10
11
 
11
- const version = '1.0.0';
12
+ const version = packageJson.version;
12
13
 
13
14
  program
14
15
  .version(version)
@@ -82,6 +83,7 @@ program
82
83
  }
83
84
  if(answers.useAxios){
84
85
  createAxiosUtil(projectPath);
86
+ createAuthController(projectPath);
85
87
  }
86
88
 
87
89
  console.log(chalk.cyan(' Initializing git repository...'));
@@ -464,6 +466,7 @@ const createRouteFiles = (projectPath, answers) => {
464
466
  const routes = `const express = require('express');
465
467
  const router = express.Router();
466
468
  ${answers.useAuth ? "const authenticateToken = require('../middleware/auth');" : ''}
469
+ ${answers.useAuth ? "const {register,login} = require('../controllers/authController');" : ''}
467
470
  ${answers.useFileUpload ? "const upload = require('../middleware/upload');" : ''}
468
471
 
469
472
  // Public routes
@@ -471,6 +474,13 @@ router.get('/health', (req, res) => {
471
474
  res.json({ status: 'API is running' });
472
475
  });
473
476
 
477
+ ${answers.useAuth? `
478
+ // Auth routes
479
+ // Register and Login routes
480
+ router.post('/auth/register', register);
481
+ router.post('/auth/login', login);
482
+ ` : ''}
483
+
474
484
  ${answers.useAuth ? `
475
485
  // Protected routes
476
486
  router.get('/protected', authenticateToken, (req, res) => {
@@ -679,6 +689,101 @@ function createUserModel(projectPath) {
679
689
 
680
690
 
681
691
 
692
+ function createAuthController(projectPath) {
693
+ const authController = `const jwt= require('jsonwebtoken');
694
+ const User=require('../models/User');
695
+ const { ErrorHandler } = require('../middleware/errorHandler');
696
+
697
+ //generate JWT token
698
+ const generateToken = (userId) => {
699
+ return jwt.sign({ id: userId }, process.env.JWT_SECRET, {
700
+ expiresIn: process.env.JWT_EXPIRE || '7d'
701
+ });
702
+ };
703
+
704
+
705
+ //register user
706
+ const register= async(req,res,next) =>{
707
+ try{
708
+ const {name,email,password}=req.body;
709
+
710
+ const existingUser= await User.findOne({email});
711
+ if(existingUser){
712
+ return next(new ErrorHandler('Email already Registered',400));
713
+ }
714
+
715
+ const user= await User.create({name,email,password});
716
+ const tocken= generateToken(user._id);
717
+
718
+ res.status(201).json({
719
+ success:true,
720
+ message:'User registered successfully',
721
+ token,
722
+ user:{
723
+ id:user._id,
724
+ name:user.name,
725
+ email:user.email
726
+ }
727
+ });
728
+ }catch(error){
729
+ next(error);
730
+ }
731
+ };
732
+
733
+
734
+
735
+ //login user
736
+ const login =async(req,res,next) =>{
737
+ try{
738
+ const {email,password}=req.body;
739
+
740
+ const user=await User.findOne({email}).select('+password');
741
+ if(!user){
742
+ return next(new ErrorHandler('Invalid email or password',401));
743
+ }
744
+
745
+ const isMatch= await user.comparePassword(password);
746
+ if(!isMatch){
747
+ return next(new ErrorHandler('Invalid email or password',401));
748
+ }
749
+
750
+ const token=generateToken(user._id);
751
+
752
+ res.status(200).json({
753
+ success:true,
754
+ message:'User logged in successfully',
755
+ token,
756
+ user:{
757
+ id:user._id,
758
+ name:user.name,
759
+ email: user.email
760
+ }
761
+ });
762
+ }catch(error){
763
+ next(error);
764
+ }
765
+ }
766
+
767
+
768
+ module.exports = {
769
+ register,
770
+ login
771
+ };
772
+
773
+ `;
774
+
775
+
776
+
777
+ fs.writeFileSync(
778
+ path.join(projectPath, 'src/controllers/authController.js'),
779
+ authController
780
+ );
781
+
782
+ console.log(chalk.green('Auth controller created'));
783
+ }
784
+
785
+
786
+
682
787
  function createAxiosUtil(projectPath){
683
788
  const axiosUtil = ` const axios = require('axios');
684
789
 
package/package.json CHANGED
@@ -1,13 +1,13 @@
1
1
  {
2
2
  "name": "backend-scaffold-cli",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "CLI tool to scaffold Express.js backend projects with MongoDB, middleware, and common setup",
5
5
  "main": "bin/cli.js",
6
6
  "bin": {
7
7
  "create-express-backend": "./bin/cli.js"
8
8
  },
9
9
  "scripts": {
10
- "test": "echo \"Error: no test specified\" && exit 1"
10
+ "test": "jest"
11
11
  },
12
12
  "keywords": [
13
13
  "express",
@@ -32,5 +32,8 @@
32
32
  "commander": "^11.0.0",
33
33
  "fs-extra": "^11.1.0",
34
34
  "inquirer": "^8.2.5"
35
+ },
36
+ "devDependencies": {
37
+ "jest": "^30.4.2"
35
38
  }
36
39
  }