
// index..js
const mongoose =require ('mongoose')
const express = require('express');
const cors = require('cors');
const bodyParser = require('body-parser');
const loginRouter =require('./Routes/Login')
const app = express();
const userRoutes = require('./Routes/userRoutes');
const signupRoute = require('./Routes/signup')
const {createAdminAccount} =require('./Script/setup')
// Use the user routes
app.use(cors());
app.use(bodyParser.json()); // Parse JSON bodie
app.use(express.urlencoded({extended: false}))
app.use('/api', userRoutes);
app.use('/user', signupRoute)
app.use('/user',loginRouter)
createAdminAccount()
// Start the server
const PORT = process.env.PORT || 3000;
app.listen(PORT, () => {
console.log(`Server is running on port ${PORT}`);
});
import './App.css';
import { Route, Routes } from 'react-router-dom';
import UserForm from './UserForm';
import Login from './Login';
import Dashboard from './Dashboard';
function App() {
return (
<Routes>
<Route path="/userform" element={<UserForm />} />
<Route path="/login" element={<Login />} />
<Route path="/dashboard" element={<Dashboard />} />
</Routes>
);
}
export default App;
import React from 'react'
function Dashboard() {
return (
<div>Dashboard</div>
)
}
export default Dashboard
import React from 'react'
function Login() {
return (
<div>Login</div>
)
}
export default Login
Routes
//Login.js
const express =require('express')
const LoginControl =require('../Controllers/login')
const router = express.Router()
router.post("/login", LoginControl.login)
module.exports =router
//signup.js
const express =require('express')
const router = express.Router()
const signupControl =require('../Controllers/Signup')
router.post('/register',signupControl.sigupUser)
module.exports = router
//userRoutes.js
// routes/userRoutes.js
const express = require('express');
const router = express.Router();
const userController = require('../Controllers/userControl');
// Route to get all users
router.get('/', userController.getAllUsers);
// Route to get a user by ID
router.get('/:id', userController.getUserById);
router.delete('/:id',userController.deleteUsersById)
router.post('/',userController.createUser)
module.exports = router;
//UserForm.jsx
import React, { useState } from 'react';
import axios from 'axios';
import { useNavigate,Link } from 'react-router-dom';
const UserForm = () => {
const navigate = useNavigate()
const [formData, setFormData] = useState({
firstName: '',
lastName: '',
email: '',
password: '',
});
const [error, setError] = useState('');
const [success, setSuccess] = useState('');
const handleChange = (e) => {
const { name, value } = e.target;
setFormData({
...formData,
[name]: value
});
};
const handleSubmit = async (e) => {
e.preventDefault();
try {
const response = await axios.post('http://localhost:3000/user/register', formData);
setSuccess('User created successfully!');
setError('');
console.log(response.data);
// Optional: Handle response data
} catch (err) {
setError('Failed to create user. Please check your input and try again.');
setSuccess('');
}
};
return (
<div>
<h2>Create User</h2>
{error && <p style={{ color: 'red' }}>{error}</p>}
{success && <p style={{ color: 'green' }}>{success}</p>}
<form onSubmit={handleSubmit}>
<div>
<label>First Name:</label>
<input
type="text"
name="firstName"
value={formData.firstName}
onChange={handleChange}
required
/>
</div>
<div>
<label>Last Name:</label>
<input
type="text"
name="lastName"
value={formData.lastName}
onChange={handleChange}
required
/>
</div>
<div>
<label>Email:</label>
<input
type="email"
name="email"
value={formData.email}
onChange={handleChange}
required
/>
</div>
<div>
Password:<input
type="text"
name="password"
value={formData.password}
onChange={handleChange}
required
/>
</div>
<div>
</div>
<button className="btn btn-primary" type="submit">Submit</button>
<Link to="/login">Already have account? login</Link>
</form>
</div>
);
};
export default UserForm;
Models
//user.js
const mongoose = require('../configuration/dbConfig')
const userSchema = new mongoose.Schema({
firstName:String,
lastName:String,
email:{type:String, unique:true },
password:String,
role: {type:String, enum:["admin", "customer"],default:"customer"},
})
module.exports = mongoose.model('user', userSchema)
Controllers
//login.js
const bcrypt = require("bcrypt");
const User = require('../Models/user');
const { generateToken } = require("../utils/authutils");
exports.login = async (req, res) => {
try {
const { email, password } = req.body;
const foundUser = await User.findOne({ email }); // Renamed to avoid confusion
if (!foundUser) {
throw new Error("User not found");
}
const isPasswordValid = await bcrypt.compare(password, foundUser.password);
if (!isPasswordValid) {
throw new Error("Invalid password");
}
const token = generateToken(foundUser);
res.status(200).json({ user: foundUser, token: token });
} catch (error) {
res.status(401).json({ message: error.message });
}
};
//Signup.js
const user = require ('../Models/user')
const bycrypt = require ('bcrypt')
exports.sigupUser = async(req,res)=>{
try{
const{firstName, lastName, email, password} = req.body
const hashedPassword =await bycrypt.hash(password,10)
const newUser= new user({
firstName,
lastName,
email,
password:hashedPassword,
role:"customer"
})
const SavedUser= await newUser.save()
res.status(201).json({message:"user created successfully",user:SavedUser})
}
catch(error){
res.status(400).json({message:error})
}
}
//userController.js
const users = require('../Models/usermodel.js')
// Get all users
exports.getAllUsers = async (req, res) => {
const allDbUsers = await users.find({});
res.json(allDbUsers); // Respond with JSON format
};
// Get user by ID
exports.getUserById = async (req,res)=>{
const user = await users.findById(req.params.id);
return res.json(user)
}
exports.deleteUsersById =(async (req,res)=>{
await users.findByIdAndDelete(req.params.id)
return res.json({status:"success"})
})
exports.createUser =(async(req,res)=>{
const body =req.body
if(!body ||!body.first_name||
!body.last_name||
!body.email||
!body.gender){
return res.status(404).json({msg:"all fields are required"})
}
const result =await users.create({
first_name:body.first_name,
last_name:body.last_name,
email:body.email,
gender:body.gender
})
console.log("result", result)
return res.status(201).json({msg:"success"})
})