From 8873b6cb9c8addd5d950819031a154cc58a88d6f Mon Sep 17 00:00:00 2001 From: MSSG-07 Date: Wed, 5 Mar 2025 01:48:34 +0530 Subject: [PATCH] solutionn.md updated --- app.js | 275 ++++++++++++++++++++++++++++++++ login.png | Bin 0 -> 68107 bytes solution.md | 448 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 723 insertions(+) create mode 100644 app.js create mode 100644 login.png create mode 100644 solution.md diff --git a/app.js b/app.js new file mode 100644 index 0000000..8c9456f --- /dev/null +++ b/app.js @@ -0,0 +1,275 @@ + +const storageKey = 'savedAccount'; +let state = Object.freeze({ + account: null +}); +const routes = { + '/login': { + templateId: 'login', + title: 'Login - Bank App' + }, + '/dashboard': { + templateId: 'dashboard', + title: 'Dashboard - Bank App', + init: refresh + }, + '/credits': { + templateId: 'credits', + title: 'Credits - Bank App' + }, +}; + +function navigate(path) { + window.history.pushState({}, path, path); + updateRoute(); +} + +function updateRoute() { + const path = window.location.pathname; + const route = routes[path]; + + if (!route) { + return navigate('/dashboard'); + } + + const template = document.getElementById(route.templateId); + const view = template ? template.content.cloneNode(true) : null; + const app = document.getElementById('app'); + + if (app && view) { + app.innerHTML = ''; + app.appendChild(view); + document.title = route.title; + } + + if (typeof route.init === 'function') { + route.init(); + } +} + + +function onLinkClick(event) { + event.preventDefault(); + navigate(event.target.href); +} + + +function updateElement(id, textOrNode) { + const element = document.getElementById(id); + if (!element) { + console.warn(`Element with id '${id}' not found.`); + return; + } + element.textContent = ''; + element.append(textOrNode); +} + +// Register a new user +async function register() { + const registerForm = document.getElementById('registerForm'); + const formData = new FormData(registerForm); + const jsonData = JSON.stringify(Object.fromEntries(formData)); + const result = await createAccount(jsonData); + + if (result.error) { + return updateElement('registerError', result.error); + } + + updateState('account', result); + navigate('/dashboard'); +} + +// API call to create an account +async function createAccount(account) { + try { + const response = await fetch('//localhost:5000/api/accounts', { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: account + }); + return await response.json(); + } catch (error) { + return { error: error.message || 'Unknown error' }; + } +} + +// Login existing user +async function login() { + const loginForm = document.getElementById('loginForm'); + const user = loginForm.user.value; + const data = await getAccount(user); + + if (data.error) { + return updateElement('loginError', data.error); + } + + updateState('account', data); + navigate('/dashboard'); +} + +// Fetch account data from API +async function getAccount(user) { + try { + const response = await fetch(`//localhost:5000/api/accounts/${encodeURIComponent(user)}`); + return await response.json(); + } catch (error) { + return { error: error.message || 'Unknown error' }; + } +} + + +function updateDashboard() { + if (!state.account) return navigate('/login'); + + updateElement('description', state.account.description); + updateElement('balance', state.account.balance.toFixed(2)); + updateElement('currency', state.account.currency); + + if (!state.account.transactions || state.account.transactions.length === 0) { + console.warn("No transactions found!"); + return; + } + + const transactionsTable = document.getElementById('transactions'); + if (!transactionsTable) { + console.error("Transactions table not found!"); + return; + } + + transactionsTable.innerHTML = ''; + + for (const transaction of state.account.transactions) { + transactionsTable.appendChild(createTransactionRow(transaction)); + } +} + +// Refresh the dashboard data +async function refresh() { + await updateAccountData(); + if (typeof updateDashboard === "function") { + updateDashboard(); + } else { + console.warn("updateDashboard is not defined!"); + } +} + +function createTransactionRow(transaction) { + const tr = document.createElement('tr'); + + const dateTd = document.createElement('td'); + dateTd.textContent = transaction.date; + + const objectTd = document.createElement('td'); + objectTd.textContent = transaction.object; + + const amountTd = document.createElement('td'); + amountTd.textContent = transaction.amount.toFixed(2); + + tr.appendChild(dateTd); + tr.appendChild(objectTd); + tr.appendChild(amountTd); + + return tr; +} + +function updateState(property, newData) { + state = Object.freeze({ + ...state, + [property]: newData + }); + + if (property === 'account' && newData) { + localStorage.setItem(storageKey, newData.user); // Only username + } else if (property === 'account' && !newData) { + localStorage.removeItem(storageKey); + } +} +function logout() { + updateState('account', null); + navigate('/login'); +} + +// Initialize +async function init() { + const savedUser = localStorage.getItem(storageKey); + if (savedUser) { + const data = await getAccount(savedUser); + if (!data.error) { + updateState('account', data); + } + } + + window.onpopstate = () => updateRoute(); + updateRoute(); +} + +init(); + +// Fetch latest account data +async function updateAccountData() { + const account = state.account; + if (!account) { + return logout(); + } + + const data = await getAccount(account.user); + if (data.error) { + return logout(); + } + + updateState('account', data); +} + +// Show transaction dialog +function showTransactionDialog() { + const dialog = document.getElementById('transactionDialog'); + if (dialog) { + dialog.showModal(); + } else { + console.warn("Transaction dialog not found."); + } +} + +function closeTransactionDialog() { + const dialog = document.getElementById('transactionDialog'); + if (dialog) { + dialog.close(); + } +} +async function submitTransaction(event) { + event.preventDefault(); + + const form = document.getElementById('transactionForm'); + const formData = new FormData(form); + const transactionData = Object.fromEntries(formData); + transactionData.amount = parseFloat(transactionData.amount); + + const user = state.account?.user; + if (!user) { + console.error("User not found in state!"); + return; + } + + const response = await fetch(`//localhost:5000/api/accounts/${encodeURIComponent(user)}/transactions`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(transactionData), + }); + + if (!response.ok) { + console.error(`Transaction failed: ${response.status}`); + return; + } + + closeTransactionDialog(); + await refresh(); +} +document.addEventListener("DOMContentLoaded", function () { + const transactionForm = document.getElementById("transactionForm"); + + if (transactionForm) { + transactionForm.addEventListener("submit", submitTransaction); + } else { + console.error("Transaction form not found!"); + } +}); diff --git a/login.png b/login.png new file mode 100644 index 0000000000000000000000000000000000000000..7ded0ecc2a8d0604bd51fc2e2840e681c5fd3fec GIT binary patch literal 68107 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 console.log('Dashboard is shown') + }, + '/credits': { + templateId: 'credits', + title: 'Credits - Bank App' + }, +}; + +function navigate(path) { + window.history.pushState({}, path, path); + updateRoute(); +} + +function updateRoute() { + const path = window.location.pathname; + const route = routes[path]; + + if (!route) { + return navigate('/login'); + + const template = document.getElementById(route.templateId); + const view = template.content.cloneNode(true); + const app = document.getElementById('app'); + app.innerHTML = ''; + app.appendChild(view); + document.title = route.title; + if (route.onDisplay) { + route.onDisplay(); + } +}} + +function onLinkClick(event) { + event.preventDefault(); + navigate(event.target.href); +} +``` +## CHALLENGE +***Added a new template and route for a third page that shows the credits for this app.*** +```html + +``` +```js +const routes = { + '/login': { templateId: 'login' }, + '/dashboard': { templateId: 'dashboard' }, + '/credits': { templateId: 'credits' }, } +``` + +### Build a Login and Registration Form + +## ASSIGNMENT +***Styling the bank app using css.*** +```css +body { + font-family: Arial, sans-serif; + background: rgb(58, 126, 205); + display: flex; + justify-content: center; + align-items: center; + height: 200vh; + margin: 0; +} +.container { + background: #f5f5f5; + padding: 40px; + border-radius: 10px; + width: 200px; + height: 250%; + text-align: center; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); + display: flex; + flex-direction: column; + align-items: center; +} +h1 { + font-size: 24px; + color: rgb(8, 157, 226); + margin-bottom: 10px; + top:50px; +} + +h2 { + font-size: 20px; + color: rgb(58, 126, 205); + margin-bottom: 15px; +} +form { + display: flex; + flex-direction: column; + gap: 12px; + width: 100%; + align-items: center; +} + +label { + display: block; + text-align: left; + font-weight: bold; + margin: 10px 0 5px; + width: 90%; +} + +input { + width: 90%; + padding: 8px; + border: 1px solid #ccc; + border-radius: 5px; + font-size: 14px; +} +button { + width: 90%; + padding: 10px; + background-color: rgb(58, 126, 205); + color: white; + font-size: 16px; + border: none; + border-radius: 5px; + cursor: pointer; +} + +button:hover { + background-color: rgb(8, 157, 226); +} +``` +The interface after styling: +![Screenshot of the login page after adding CSS styles](./login.png) +## CHALLENGE +***Show an error message in the HTML if the user already exists.*** +```html + +``` +```js +function showError(message) { + const errorDiv = document.getElementById('error'); + errorDiv.textContent = message; + errorDiv.hidden = false; + } +``` +same has been implemented in the login portal too. +### Methods of Fetching and Using Data +## ASSIGNMENT +Added comments and refactored app.js to improve the code quality. +Created a constant to extract server api base URL,the createAccount function and getAccount function is regrouped to reudce the bulkiness of the code and the comments were added for the better understanding of the web app. +## CHALLENGE +```css +.dashboard-container { + max-width: 700px; + background: white; + padding: 20px; + margin: 20px auto; + border-radius: 10px; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); + text-align: center; + font-family: 'Arial', sans-serif; +} +.dashboard-header { + display: flex; + justify-content: space-between; + align-items: center; + background: #2b2b3d; + color: white; + padding: 15px; + border-radius: 10px 10px 0 0; +} + +.logout-btn { + background: transparent; + color: white; + border: 1px solid white; + padding: 5px 10px; + border-radius: 5px; + cursor: pointer; +} + +.logout-btn:hover { + background: rgba(255, 255, 255, 0.2); +} +.balance-section { + background: linear-gradient(to right, #4facfe, #00f2fe); + color: white; + padding: 15px; + font-size: 28px; + font-weight: bold; + border-radius: 5px; + margin-top: -10px; +} +.account-name { + font-size: 20px; + font-weight: bold; + margin: 15px 0; + text-align: left; +} +.add-transaction { + background: #007bff; + color: white; + padding: 10px 15px; + border: none; + border-radius: 5px; + cursor: pointer; + float: right; +} + +.add-transaction:hover { + background: #0056b3; +} + +.transactions-table { + width: 100%; + border-collapse: collapse; + margin-top: 10px; +} + +.transactions-table th, .transactions-table td { + padding: 12px; + text-align: left; +} + +.transactions-table th { + background: #007bff; + color: white; +} + +.transactions-table tr:nth-child(even) { + background: #f2f2f2; +} + +@media (max-width: 600px) { + .dashboard-container { + max-width: 90%; + padding: 15px; + } + + .balance-section { + font-size: 24px; + } + + .add-transaction { + width: 100%; + text-align: center; + } +} +``` + +### Concepts of State Management +## ASSIGNMENT +```js +const API_BASE_URL = 'http://localhost:5000/api/accounts'; +const STORAGE_KEY = 'savedUser'; + +function updateState(property, newData) { + state = Object.freeze({ + ...state, + [property]: newData + }); + if (property === 'account' && newData) { + localStorage.setItem(storageKey, newData.user); + } else if (property === 'account' && !newData) { + localStorage.removeItem(storageKey); + } +} + +async function init() { + const savedUser = localStorage.getItem(storageKey); + if (savedUser) { + const data = await getAccount(savedUser); + if (!data.error) { + updateState('account', data); + } + }}; +``` +## CHALLENGE +Implementing the transaction dialog box; +```html + +``` +Styling using CSS +```css +dialog { + width: 400px; + padding: 20px; + border: none; + border-radius: 8px; + box-shadow: 0px 4px 8px rgba(0, 0, 0, 0.2); + text-align: center; +} + +.dialog-buttons { + display: flex; + justify-content: space-between; + margin-top: 15px; +} + +button { + padding: 10px 15px; + border: none; + border-radius: 5px; + cursor: pointer; +} + +button[type="submit"] { + background: #007bff; + color: white; +} + +button[type="button"] { + background: red; + color: white; +} +.logout-btn, +.add-transaction { + font-size: 14px; + padding: 8px 12px; + border-radius: 5px; +} + +.logout-btn { + width: auto; + height: 30px; +} + +.add-transaction { + width: auto; + height: 35px; + margin-top: 10px; +} + +``` +Enhancing interactivity using javascript +```js +function showTransactionDialog() { + const dialog = document.getElementById('transactionDialog'); + if (dialog) { + dialog.showModal(); + } else { + console.warn("Transaction dialog not found."); + } +} + +function closeTransactionDialog() { + const dialog = document.getElementById('transactionDialog'); + if (dialog) { + dialog.close(); + } +} + +async function submitTransaction(event) { + event.preventDefault(); + + const form = document.getElementById('transactionForm'); + const formData = new FormData(form); + const transactionData = Object.fromEntries(formData); + transactionData.amount = parseFloat(transactionData.amount); + + const user = state.account?.user; + if (!user) { + console.error("User not found in state!"); + return; + } + + const response = await fetch(`//localhost:5000/api/accounts/${encodeURIComponent(user)}/transactions`, { + method: 'POST', + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify(transactionData), + }); + + if (!response.ok) { + console.error(`Transaction failed: ${response.status}`); + return; + } + + closeTransactionDialog(); + await refresh(); +} + +document.getElementById('transactionForm').addEventListener('submit', submitTransaction); +document.addEventListener("DOMContentLoaded", function () { + const transactionForm = document.getElementById("transactionForm"); + + if (transactionForm) { + transactionForm.addEventListener("submit", submitTransaction); + } else { + console.error("Transaction form not found!"); + } +}); + + ``` \ No newline at end of file