Commit 2840b79f authored by Prashanth Vagalaboina's avatar Prashanth Vagalaboina

'loginRegisterUI'

parent aeb53a38
...@@ -44,32 +44,56 @@ app.get('/products/:id', (req, res) => { ...@@ -44,32 +44,56 @@ app.get('/products/:id', (req, res) => {
} }
}) })
app.post('/registeruser',(req,res)=>{ // Middleware function to check if userId already exists
const user=req.body const checkUserIdExists = (req, res, next) => {
const userId = req.body.userId.trim();
db.collection('users').findOne({ userId: userId })
.then(result => {
if (result) {
res.status(400).json({ error: "userId already exists" });
} else {
next(); // Proceed to register user if userId is not taken
}
})
.catch(error => res.status(500).json({ error: "Internal server error" }));
};
// Register User endpoint with middleware
app.post('/registeruser', checkUserIdExists, (req, res) => {
const user = req.body;
const userid=req.body.userId;
db.collection('users').insertOne(user) db.collection('users').insertOne(user)
.then(result => { .then(result => {
res.status(201).json(result)}) res.status(201).json(result);
.catch((err)=>res.status(500).json({error:"Could not create a new document"})) db.collection('cartitems').insertOne({userId:userid,cartItems:[]})
}) })
.catch(err => res.status(500).json({ error: "Could not create a new document" }));
});
// Get Users endpoint
app.get('/users', (req, res) => { app.get('/users', (req, res) => {
db.collection('users').find().toArray() db.collection('users').find({}, { projection: { _id: false, userId: true, password: true } }).toArray()
.then(result => {res.send(result)}) .then(result => {
.catch(error => res.status(500).send(error)) res.send(result);
}) })
.catch(error => res.status(500).send(error));
});
app.delete('/deregister/:id', (req, res) => { app.delete('/deregister/:userid', (req, res) => {
const Id = req.params.id const userid = req.params.userid
if(ObjectId.isValid(Id)){ if(isNaN(userid)){
db.collection('users').deleteOne({_id:new ObjectId(Id)}) db.collection('users').deleteOne({userId:userid})
.then(result => { res.send(result) }) .then(result => {
res.send(result)
db.collection('cartitems').deleteOne({userId:userid})
})
.catch(error => res.status(500).send(error)) .catch(error => res.status(500).send(error))
} else { } else {
res.status(500).json({ error: 'Invalid ID' }) res.status(500).json({ error: 'Invalid ID' })
} }
}) })
app.patch('/update/:id', (req, res) => { app.patch('/updateuser/:id', (req, res) => {
const Id = req.params.id const Id = req.params.id
const data = req.body const data = req.body
if(ObjectId.isValid(Id)){ if(ObjectId.isValid(Id)){
...@@ -80,3 +104,26 @@ app.patch('/update/:id', (req, res) => { ...@@ -80,3 +104,26 @@ app.patch('/update/:id', (req, res) => {
res.status(500).json({ error: 'Invalid ID' }) res.status(500).json({ error: 'Invalid ID' })
} }
}) })
app.get('/cartItems/:userid', (req, res) => {
const userid = req.params.userid
if(isNaN(userid)){
db.collection('cartitems').find({userId: userid}).toArray()
.then(result => { res.send(result) })
.catch(error => res.status(500).send(error))
} else {
res.status(500).json({ error: 'Invalid UserId' })
}
})
app.post('/updateCartItems/:userid', (req, res) => {
const userid=req.params.userid
const newCartItems = req.body
if(isNaN(userid)){
db.collection('cartitems').updateOne({userId: userid},{$set:{cartItems:newCartItems}})
.then(result => { res.send(result).status(200) })
.catch(error => res.status(500).send(error))
} else {
res.status(500).json({ error: 'Invalid UserId' })
}
})
\ No newline at end of file
.App {
text-align: center;
}
.App-logo {
height: 40vmin;
pointer-events: none;
}
@media (prefers-reduced-motion: no-preference) {
.App-logo {
animation: App-logo-spin infinite 20s linear;
}
}
.App-header {
background-color: #282c34;
min-height: 100vh;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
font-size: calc(10px + 2vmin);
color: white;
}
.App-link {
color: #61dafb;
}
@keyframes App-logo-spin {
from {
transform: rotate(0deg);
}
to {
transform: rotate(360deg);
}
}
...@@ -6,13 +6,16 @@ import Register from './components/Register/Register'; ...@@ -6,13 +6,16 @@ import Register from './components/Register/Register';
import Cart from './components/Cart/Cart'; import Cart from './components/Cart/Cart';
import Profile from './components/Profile/Profile'; import Profile from './components/Profile/Profile';
import ForgetPasswordForm from './components/ForgetPasswordForm/ForgetPasswordForm'; import ForgetPasswordForm from './components/ForgetPasswordForm/ForgetPasswordForm';
import { Provider } from 'react-redux';
import store from './reduxstore/store';
function App() { function App() {
return ( return (
<BrowserRouter> <Provider store={store}>
<BrowserRouter>
<Routes> <Routes>
<Route path="/home" Component={Home}/> <Route path="/" Component={Home}/>
<Route path="/login" Component={Login} /> <Route path="/login" Component={Login} />
<Route path="/register" Component={Register} /> <Route path="/register" Component={Register} />
<Route path="/cart" Component={Cart}/> <Route path="/cart" Component={Cart}/>
...@@ -21,6 +24,7 @@ function App() { ...@@ -21,6 +24,7 @@ function App() {
</Routes> </Routes>
</BrowserRouter> </BrowserRouter>
</Provider>
); );
} }
export default App export default App
\ No newline at end of file
import React, { memo, useState } from 'react'; import React, { memo, useState,useEffect,useCallback } from 'react';
import { Link } from 'react-router-dom'; import { Link } from 'react-router-dom';
import "./Login.css" import "./Login.css"
import { useNavigate } from 'react-router-dom';
import {useSelector, useDispatch} from 'react-redux'
import { fetchUsers } from '../../reduxstore/usersSlice';
import { RootState } from '../../reduxstore/store';
const Login: React.FC = memo(() => { const Login: React.FC = memo(() => {
const [name, setName] = useState<string>(''); const navigate=useNavigate()
const [email, setEmail] = useState<string>(''); const dispatch=useDispatch()
const [password, setPassword] = useState<string>(''); const users=useSelector((state:RootState)=> state.users.users)
const [error, setError] = useState<string>('');
const [values, setValues] = useState<any>({
userId: "",
password: ""
})
// const validateUserID=useCallback(()=>{
// },[values])
// useEffect(()=>{validateUserID()},[values])
const handleNameChange = (e: React.ChangeEvent<HTMLInputElement>) => { useEffect(() => {
setName(e.target.value); dispatch(fetchUsers());
}; }, []);
const handleEmailChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setEmail(e.target.value);
};
const handlePasswordChange = (e: React.ChangeEvent<HTMLInputElement>) => {
setPassword(e.target.value);
};
const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => { const handleSubmit = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault(); e.preventDefault();
console.log('Submitted values:', { name, email, password }); users.map((user)=>{
if(user.userId==values.userId.trim()){
if(user.password==values.password.trim()){
console.log(user.userId)
navigate("/")
}
else{
setError(("UserId/Password is incorrect"))
}
}
else{
setError(("UserId/Password is incorrect"))
}
})
}; };
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { name, value } = e.target;
setValues({ ...values, [name]: value })
};
return ( return (
<div className='loginsignup'> <div className='loginsignup'>
...@@ -32,24 +63,22 @@ const Login: React.FC = memo(() => { ...@@ -32,24 +63,22 @@ const Login: React.FC = memo(() => {
<div className='loginsighnup-fields'> <div className='loginsighnup-fields'>
<input <input
type="text" type="text"
placeholder='Your Name' placeholder='User Id'
value={name} value={values.userId}
onChange={handleNameChange} name='userId'
/> onChange={handleChange}
<input
type="email"
placeholder='Email Address'
value={email}
onChange={handleEmailChange}
/> />
<input <input
type="password" type="password"
placeholder='Password' placeholder='Password'
value={password} value={values.password}
onChange={handlePasswordChange} name="password"
onChange={handleChange}
/> />
</div> </div>
<button type="submit">Login</button> {error!="" && <span style={{textAlign:"center",color:"red"}}>{error}</span>}
<button type="submit" >Login</button>
</form> </form>
<p className='loginsignup-login'> <p className='loginsignup-login'>
<span> <Link to="/forgot-password">Forgot Password</Link></span> <span> <Link to="/forgot-password">Forgot Password</Link></span>
......
import React, { memo, useState } from 'react'; import React, { memo, useState, useEffect, useCallback } from 'react';
import axios from 'axios'; import axios from 'axios';
import { useNavigate } from 'react-router-dom';
import './Register.css';
import {useSelector, useDispatch} from 'react-redux'
import { fetchUsers } from '../../reduxstore/usersSlice';
import { RootState } from '../../reduxstore/store';
const Register = memo(() => { const Register = () => {
// const [userId,setUserId]=useState('') const navigate=useNavigate()
// const [fname,setFname]=useState('') const dispatch=useDispatch()
// const [lname,setLname]=useState('') const users=useSelector((state:RootState)=> state.users.users)
// const [email,setEmail]=useState('') const [userErr,setUserErr]=useState<string>('')
// const [mobile,setMobile]=useState('') const [enablesubmit, setEnablesubmit] = useState(true);
// const [password,setPassword]=useState('')
// const [confirmpassword,setConfirmpassword]=useState('')
// const values1={
// "userId":userId,
// "fname":fname,
// "lname":lname,
// "email": email.toLowerCase(),
// "mobno": mobile,
// "passwd": password,
// "c_passwd": confirmpassword
// }
const [values, setValues] = useState({ const [values, setValues] = useState<any>({
userid: "", userId: "",
fname: "", fname: "",
lname: "", lname: "",
email: "", email: "",
mobno: "", mobile: "",
passwd: "", password: ""
c_passwd: "" })
})
const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => { const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
const { name, value } = e.target; const { name, value } = e.target;
setValues({ ...values, [name]: value }); setValues({ ...values, [name]: value })
}; };
const validateUserID=useCallback(()=>{
users.map((user)=>{
if(user.userId==values.userId.trim()){
setUserErr("userId taken")
setEnablesubmit(true)
}else{
setUserErr("userId available")
setEnablesubmit(false)
}
})
},[values])
useEffect(()=>{validateUserID()},[values])
const handleSubmit=(e:any)=>{ const handleSubmit=(e:any)=>{
e.preventDefault() e.preventDefault()
console.log(values) axios.post('http://localhost:4000/registeruser', values)
.then((res)=>{
navigate("/login")
console.log(res.data)})
.catch((err)=>console.log(err))
} }
useEffect(() => {
dispatch(fetchUsers());
}, []);
return ( return (
<div className='wrapper'> <div className='wrapper'>
...@@ -50,9 +65,14 @@ const Register = memo(() => { ...@@ -50,9 +65,14 @@ const Register = memo(() => {
<tr> <tr>
{/* <div className='userId'> */} {/* <div className='userId'> */}
<td><label>User ID : </label></td> <td><label>User ID : </label></td>
<td><input value={values.userid} name='userid' onChange={handleChange}/></td> <td><input value={values.userId} name='userId' onChange={handleChange}/></td>
{/* </div> */} {/* </div> */}
</tr> </tr>
{
userErr!="" && <tr>
<td colSpan={2} style={{textAlign:"center",color:"red"}}><span>{userErr}</span></td>
</tr>
}
<tr> <tr>
{/* <div className='fname'> */} {/* <div className='fname'> */}
<td><label>First Name : </label></td> <td><label>First Name : </label></td>
...@@ -74,25 +94,19 @@ const Register = memo(() => { ...@@ -74,25 +94,19 @@ const Register = memo(() => {
<tr> <tr>
{/* <div className='mobile'> */} {/* <div className='mobile'> */}
<td><label>Mobile : </label></td> <td><label>Mobile : </label></td>
<td><input value={values.mobno} name='mobno' onChange={handleChange}/></td> <td><input value={values.mobile} name='mobile' onChange={handleChange}/></td>
{/* </div> */} {/* </div> */}
</tr> </tr>
<tr> <tr>
{/* <div className='password'> */} {/* <div className='password'> */}
<td><label>Password : </label></td> <td><label>Password : </label></td>
<td><input value={values.passwd} name='passwd' onChange={handleChange}/></td> <td><input value={values.password} name='password' onChange={handleChange}/></td>
{/* </div> */}
</tr>
<tr>
{/* <div className='confirmpassword'> */}
<td><label>Confirm Password : </label></td>
<td><input value={values.c_passwd} name='c_passwd' onChange={handleChange}/></td>
{/* </div> */} {/* </div> */}
</tr> </tr>
<tr> <tr>
<td></td> <td></td>
<div className='submit'> <div className='submit'>
<td><button>Submit</button></td> <td><button type='submit' disabled={enablesubmit}>Submit</button></td>
</div> </div>
</tr> </tr>
</table> </table>
...@@ -100,6 +114,5 @@ const Register = memo(() => { ...@@ -100,6 +114,5 @@ const Register = memo(() => {
</div> </div>
</div> </div>
); );
}); };
export default Register; export default Register;
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment