Monday, March 18, 2024

Day 7 || Real-time Bank Project Using MERN

                Hema Coding Bank Application

Day 7: 

Image:







WithdrawForm.js
import React, { useState } from "react";
import axios from "axios";
import Swal from "sweetalert";
import "./WithdrawalForm.css";
import logoImage from "../../src/Images/Logo.png";

const WithdrawalForm = ({ customer, upadetBalance }) => {
  const [withdrawalData, setWithdrawalData] = useState({
    username: customer.username,
    accountNumber: customer.accountNumber,
    withdrawalAmount: "",
    withdrawalType: "",
  });
  const handelSubmit = async (e) => {
    e.preventDefault();
    console.log(withdrawalData);
    try {
      const response = await axios.post(
        "http://localhost:3001/api/withdraw",
        withdrawalData
      );
      console.log(response.data);
      upadetBalance(response.data.balance);

      Swal({
        title: "Deposit Successful!",
        text: `Amount deposited: ${withdrawalData.withdrawalAmount}`,
        icon: "success",
      });
    } catch (error) {
      console.error("Withdraw failed", error);
    }
  };
  const handleClear = () => {
    setWithdrawalData({
      withdrawalAmount: "",
      withdrawalType: "",
    });
  };
  return (
    <div className="withdraw-container">
      <div className="image-withdraw-container"></div>

      <div className="text-withdraw-container">
        <img src={logoImage} alt="Hema Coding Bank logo" />
        <form onSubmit={handelSubmit}>
          <h2>Withdrawal Form :</h2>
          <p>Username:{customer.username} </p>
          <p>Account Number:{customer.accountNumber}</p>
          <label>Withdrawal Amount:</label>
          <input
            type="number"
            placeholder="Withdrawl Amount"
            value={withdrawalData.withdrawalAmount}
            onChange={(e) =>
              setWithdrawalData({
                ...withdrawalData,
                withdrawalAmount: e.target.value,
              })
            }
            required
          />
          <label>Withdrawal Type:</label>
          <input
            type="text"
            placeholder="Withdrawal Type"
            value={withdrawalData.withdrawalType}
            onChange={(e) =>
              setWithdrawalData({
                ...withdrawalData,
                withdrawalType: e.target.value,
              })
            }
            required
          />
          <button type="submit">Withdraw</button>
          <button type="submit" onClick={handleClear}>
            Clear
          </button>
        </form>
      </div>
    </div>
  );
};

export default WithdrawalForm;


WithdrawForm.css
.withdraw-container{
    display: flex;
}
.image-withdraw-container{
    background-image: url("../Images/Withdraw.jpg");
    background-size: 100% 100%;
    width: 130vh;
    height: 90vh;
}
.text-withdraw-container{
    border: 1px solid rgba(0, 0, 0, 0.2);
    margin: 20px;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.text-withdraw-container input{
    border: 1px solid rgb(131, 140, 239);
    padding: 1vw 1vw;
    border-radius: 10px;
    width: 300px;
    display: flex;
    margin: 5px;
    margin-left: 40px;
    color: #ba1919;
}
.text-withdraw-container button{
    border: 1px solid rgb(131, 140, 239);
    padding: 0.8vw 1vw;
    border-radius: 10px;
    margin: 5px;
    margin-left: 40px;
}
.text-withdraw-container img{
    height: 60px;
    padding: 20px;
}
.text-withdraw-container h2{
    color: #333366;
    padding-left: 40px;
}
.text-withdraw-container  label{
    padding-left: 40px;
}

App.js
import "./App.css";
import Home from "./Home";
import Login from "./Forms/Login";
import Registration from "./Forms/Registration";
import AccountDetails from "./Forms/AccountDetails";
import { Routes, Route, Link, useNavigate } from "react-router-dom";
import { useState } from "react";
import DepositForm from "./Forms/DepositForm";
import WithdrawalForm from "./Forms/WithdrawalForm";
function App() {
  const navigate = useNavigate();
  const [customer, setCustomer] = useState();
  const [updatedBalance, setUpdatedBalance] = useState(0);
  const upadetBalance = (newBalance) => {
    setUpdatedBalance(newBalance);
  };
  console.log(updatedBalance);
  const updateCustomer = (userData) => {
    setCustomer(userData);
    console.log(userData);
  };
  const handleLogout = () => {
    navigate("/login");
    setCustomer(null);
  };
  return (
    <div>
      <nav>
        <ul>
          <li>
            <Link className="nav-link" to="/">
              Home
            </Link>
          </li>
          {!customer ? (
            <>
              <li>
                <Link className="nav-link" to="/login">
                  Login
                </Link>
              </li>
              <li>
                <Link className="nav-link" to="/register">
                  Register
                </Link>
              </li>
            </>
          ) : (
            <>
              <li>
                <Link className="nav-link" to="/account-details">
                  Account Details
                </Link>
              </li>
              <li>
                <Link className="nav-link" to="/deposit">
                  Deposit
                </Link>
              </li>
              <li>
                <Link className="nav-link" to="/withdraw">
                  Withdraw
                </Link>
              </li>
              <li>
                <button onClick={handleLogout}>Logout</button>
              </li>
            </>
          )}
        </ul>
      </nav>

      <Routes>
        <Route path="/" element={<Home />} />
        <Route
          path="/login"
          element={<Login updateCustomer={updateCustomer} />}
        />
        <Route path="/register" element={<Registration />} />
        <Route
          path="/account-details"
          element={
            <AccountDetails
              customer={customer}
              updatedBalance={updatedBalance}
            />
          }
        />
        <Route
          path="/deposit"
          element={
            <DepositForm customer={customer} upadetBalance={upadetBalance} />
          }
        />
        <Route
          path="/withdraw"
          element={
            <WithdrawalForm customer={customer} upadetBalance={upadetBalance} />
          }
        />
      </Routes>
    </div>
  );
}

export default App;

Index.js
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';
import { BrowserRouter as Router} from "react-router-dom";


const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(
  <React.StrictMode>
    <Router>
    <App />
    </Router>
  </React.StrictMode>
);

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();


Server.js

const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const cors = require("cors");

const app = express();
const port = 3001;

app.use(bodyParser.json());
app.use(cors());

mongoose.connect("mongodb://localhost:27017/Hema_Coding_Bank", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});
const db = mongoose.connection;

db.once("open", () => {
  console.log("Connected to MongoDB");
});

const userSchema = new mongoose.Schema({
  username: String,
  password: String,
  accountNumber: Number,
  branch: String,
  phoneNumber: Number,
  balance: {
    type: Number,
    default: 0,
  },
});

const Customer = mongoose.model("Customer", userSchema);

app.post("/api/signup", async (req, res) => {
  try {
    const { username, password, accountNumber, branch, phoneNumber } = req.body;
    const newCustomer = new Customer({
      username,
      password,
      accountNumber,
      branch,
      phoneNumber,
    });
    await newCustomer.save();
    res.status(201).json({ message: "User created successfully" });
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: "Internal server error" });
  }
});

app.post("/api/login", async (req, res) => {
  try {
    const { username, password } = req.body;
    const customer = await Customer.findOne({ username });
    if (!customer) {
      res.status(401).json({
        message: "Invalid username ",
      });
    }
    if (customer.password !== password) {
      res.status(401).json({
        message: "Invalid password ",
      });
    }
    res.status(200).json({
      message: "Login successful",
      customer: {
        username: customer.username,
        accountNumber: customer.accountNumber,
        branch: customer.branch,
        phoneNumber: customer.phoneNumber,
        balance: customer.balance,
      },
    });
    console.log(customer);
  } catch (error) {
    console.error(error);
    res.status(500).json({
      message: "Internal server error",
    });
  }
});

const depositSchema = new mongoose.Schema({
  username: String,
  accountNumber: Number,
  date: String,
  depositAmount: Number,
  depositType: String,
});
const Deposit = mongoose.model("Deposit", depositSchema);

app.post("/api/deposit", async (req, res) => {
  try {
    const { username, accountNumber, date, depositAmount, depositType } =
      req.body;
    console.log(req.body);
    const customer = await Customer.findOne({ username, accountNumber });
    console.log(customer);
    console.log(customer.balance);
    console.log(depositAmount);
    customer.balance = Number(customer.balance) + Number(depositAmount);
    console.log(customer.balance);
    await customer.save();

    if (!customer) {
      res.status(401).json({ message: "Invalid username and account number" });
    }
    const newDeposit = new Deposit({
      username,
      accountNumber,
      date,
      depositAmount,
      depositType,
    });

    await newDeposit.save();
    return res.status(200).json({
      message: "Deposit successful",
      balance: customer.balance,
    });
  } catch (error) {
    console.error(error);
    res.status(500).json({
      message: "Internal server error",
    });
  }
});
const withdrawalSchema = new mongoose.Schema({
  username: String,
  accountNumber: Number,
  withdrawalAmount: Number,
  withdrawalType: String,
  date: String,
});

const Withdrawal = mongoose.model("Withdrawal", withdrawalSchema);
app.post("/api/withdraw", async (req, res) => {
  try {
    const { username, accountNumber, withdrawalAmount, withdrawalType, date } =
      req.body;

    const customer = await Customer.findOne({ username, accountNumber });
    console.log(req.body);
    console.log(customer.balance);
    console.log(withdrawalAmount);
    customer.balance = customer.balance - withdrawalAmount;
    console.log(customer.balance);
    await customer.save();

    return res.status(200).json({
      message: "Withdrawal successful",
      balance: customer.balance,
    });
    const newWithdrawal = new Withdrawal({
      username,
      accountNumber,
      withdrawalAmount,
      withdrawalType,
      date,
    });
    await newWithdrawal.save();
  } catch (error) {
    console.error(error);
    res.status(500).json({
      message: "Internal server error",
    });
  }
});
app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});










Sunday, March 17, 2024

Day 6 || Real-time Bank Project Using MERN

               Hema Coding Bank Application

Day 6: 


Image:






DepositForm.js

import React, { useState } from "react";
import axios from "axios";
import Swal from "sweetalert";
import "./DepositForm.css";
import logoImage from "../../src/Images/Logo.png";

const DepositForm = ({ customer, upadetBalance }) => {
  const [depositData, setDepositData] = useState({
    username: customer.username,
    accountNumber: customer.accountNumber,
    date: "",
    depositAmount: "",
    depositType: "",
  });
  const handleDeposit = async (e) => {
    e.preventDefault();
    console.log(depositData);
    try {
      const response = await axios.post(
        "http://localhost:3001/api/deposit",
        depositData
      );
      console.log(response.data.balance);
      upadetBalance(response.data.balance);

      Swal({
        title: "Deposit Successful!",
        text: `Amount deposited: ${depositData.depositAmount}`,
        icon: "success",
      });
    } catch (error) {
      console.error("Deposit failed", error);
    }
  };
  const handleClear = () => {
    setDepositData({
      date: "",
      depositAmount: "",
      depositType: "",
    });
  };
  return (
    <div className="deposit-container">

      <div className="image-deposit-container"></div>
      <div className="text-deposit-container">
      <img src={logoImage} alt="Hema Coding Bank logo" />

        <form onSubmit={handleDeposit}>
          <h2>Deposit Form :</h2>
          <p>Username:{customer.username} </p>
          <p>Account Number:{customer.accountNumber}</p>
          <label>Date:</label>
          <input
            type="date"
            value={depositData.date}
            onChange={(e) =>
              setDepositData({ ...depositData, date: e.target.value })
            }
            required
          />
          <label>Deposit Amount:</label>
          <input
            type="number"
            value={depositData.depositAmount}
            onChange={(e) =>
              setDepositData({ ...depositData, depositAmount: e.target.value })
            }
            required
          />
          <label>Deposit Type:</label>
          <input
            type="text"
            value={depositData.depositType}
            onChange={(e) =>
              setDepositData({ ...depositData, depositType: e.target.value })
            }
            required
          />
          <button type="submit">Deposit</button>
          <button type="submit" onClick={handleClear}>
            Clear
          </button>
        </form>
      </div>
    </div>
  );
};

export default DepositForm;




DepositForm.css
.deposit-container{
    display: flex;
}
.image-deposit-container{
    background-image: url("../Images/Deposit.jpg");
    background-size: 100% 100%;
    width: 130vh;
    height: 90vh;
}
.text-deposit-container{
    border: 1px solid rgba(0, 0, 0, 0.2);
    margin: 20px;
    padding: 20px;
    border-radius: 10px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}
.text-deposit-container input{
    border: 1px solid rgb(131, 140, 239);
    padding: 1vw 1vw;
    border-radius: 10px;
    width: 300px;
    display: flex;
    margin: 5px;
    margin-left: 40px;
}
.text-deposit-container button{
    border: 1px solid rgb(131, 140, 239);
    padding: 0.8vw 1vw;
    border-radius: 10px;
    margin: 5px;
    margin-left: 40px;
}
.text-deposit-container button:hover{
  background-color: #a4a4db;

}
.text-deposit-container img{
    height: 60px;
    padding: 20px;
}
.text-deposit-container label{
    padding-left: 40px;
}
.text-deposit-container h2{
    color: #333366;
    padding-left: 40px;
}


App.js
import "./App.css";
import Home from "./Home";
import Login from "./Forms/Login";
import Registration from "./Forms/Registration";
import AccountDetails from "./Forms/AccountDetails";
import { BrowserRouter as Router, Routes, Route, Link } from "react-router-dom";
import { useState } from "react";
import DepositForm from "./Forms/DepositForm";
function App() {
  const [customer, setCustomer] = useState();
  const [updatedBalance,setUpdatedBalance] = useState(0)
  const upadetBalance = (newBalance)=>{
    setUpdatedBalance(newBalance)
  }
  console.log(updatedBalance)
  const updateCustomer = (userData) => {
    setCustomer(userData);
    console.log(userData);
  };

  return (
    <Router>
      <div>
        <nav>
          <ul>
            <li>
              <Link className="nav-link" to="/">
                Home
              </Link>
            </li>
            {!customer ? (
              <>
                <li>
                  <Link className="nav-link" to="/login">
                    Login
                  </Link>
                </li>
                <li>
                  <Link className="nav-link" to="/register">
                    Register
                  </Link>
                </li>
              </>
            ) : (
              <>
                <li>
                  <Link className="nav-link" to="/account-details">
                    Account Details
                  </Link>
                </li>
                <li>
                  <Link className="nav-link" to="/deposit">
                    Deposit
                  </Link>
                </li>
                <li>
                  <Link className="nav-link">Withdraw</Link>
                </li>
                <li>
                  <button>Logout</button>
                </li>
              </>
            )}
          </ul>
        </nav>

        <Routes>
          <Route path="/" element={<Home />} />
          <Route
            path="/login"
            element={<Login updateCustomer={updateCustomer} />}
          />
          <Route path="/register" element={<Registration />} />
          <Route
            path="/account-details"
            element={<AccountDetails customer={customer} updatedBalance={updatedBalance}/>}
          />
          <Route path="/deposit" element={<DepositForm customer={customer} upadetBalance={upadetBalance}/>} />
        </Routes>
      </div>
    </Router>
  );
}

export default App;

AccountDetails.js

import React from "react";
import './AccountDetails.css';
import logoImage from "../../src/Images/Logo.png";

const AccountDetails = ({customer, updatedBalance}) => {
  return (
    <div className="account-container">
      <div className="image-account-container"></div>
      <div className="text-account-container">
      <img src={logoImage} alt="Hema Coding Bank logo" />

      <h2>Account Details :</h2>

      <p>Username:{customer.username}</p>
      <p>Account Number:{customer.accountNumber}</p>
      <p>Branch:{customer.branch}</p>
      <p>Phone Number:{customer.phoneNumber}</p>
      {/* <p>Available Balance:{customer.balance}</p> */}
      <p>Available Balance:{updatedBalance === 0 ? customer.balance : updatedBalance} Balance</p>

     

    </div>
    </div>
  );
};

export default AccountDetails;


server.js
const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
const cors = require("cors");

const app = express();
const port = 3001;

app.use(bodyParser.json());
app.use(cors());

mongoose.connect("mongodb://localhost:27017/Hema_Coding_Bank", {
  useNewUrlParser: true,
  useUnifiedTopology: true,
});
const db = mongoose.connection;

db.once("open", () => {
  console.log("Connected to MongoDB");
});

const userSchema = new mongoose.Schema({
  username: String,
  password: String,
  accountNumber: Number,
  branch: String,
  phoneNumber: Number,
  balance: {
    type: Number,
    default: 0,
  },
});

const Customer = mongoose.model("Customer", userSchema);

app.post("/api/signup", async (req, res) => {
  try {
    const { username, password, accountNumber, branch, phoneNumber } = req.body;
    const newCustomer = new Customer({
      username,
      password,
      accountNumber,
      branch,
      phoneNumber,
    });
    await newCustomer.save();
    res.status(201).json({ message: "User created successfully" });
  } catch (error) {
    console.error(error);
    res.status(500).json({ message: "Internal server error" });
  }
});

app.post("/api/login", async (req, res) => {
  try {
    const { username, password } = req.body;
    const customer = await Customer.findOne({ username });
    if (!customer) {
      res.status(401).json({
        message: "Invalid username ",
      });
    }
    if (customer.password !== password) {
      res.status(401).json({
        message: "Invalid password ",
      });
    }
    res.status(200).json({
      message: "Login successful",
      customer: {
        username: customer.username,
        accountNumber: customer.accountNumber,
        branch: customer.branch,
        phoneNumber: customer.phoneNumber,
        balance: customer.balance,
      },
    });
    console.log(customer);
  } catch (error) {
    console.error(error);
    res.status(500).json({
      message: "Internal server error",
    });
  }
});

const depositSchema = new mongoose.Schema({
  username: String,
  accountNumber: Number,
  date: String,
  depositAmount: Number,
  depositType: String,
});
const Deposit = mongoose.model("Deposit", depositSchema);

app.post("/api/deposit", async (req, res) => {
  try {
    const { username, accountNumber, date, depositAmount, depositType } =
      req.body;
    console.log(req.body);
    const customer = await Customer.findOne({ username, accountNumber });
    console.log(customer);
    console.log(customer.balance)
    console.log(depositAmount)
    customer.balance = Number(customer.balance) + Number(depositAmount)
    console.log(customer.balance)
    await customer.save()

    if (!customer) {
      res.status(401).json({ message: "Invalid username and account number" });
    }
    const newDeposit = new Deposit({
      username,
      accountNumber,
      date,
      depositAmount,
      depositType,
    });

    await newDeposit.save();
     return res.status(200).json({
      message:"Deposit successful",
      balance:customer.balance

     });
  } catch (error) {
    console.error(error);
    res.status(500).json({
      message: "Internal server error",
    });
  }

 
});

app.listen(port, () => {
  console.log(`Server is running on port ${port}`);
});



Top 10 | JavaScript Coding Interview Question | Beginner Level

               JavaScript Coding Interview  Q. No. 01/10:  console . log ( "1" + "4" + "1" ) // 141 console . ...