top of page

// 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"})

 

})

bottom of page