<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abhijit Meshram</title>
    <description>The latest articles on DEV Community by Abhijit Meshram (@abhijit_meshram_e459b6a2a).</description>
    <link>https://dev.to/abhijit_meshram_e459b6a2a</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2553882%2F4c34ba32-cd75-4aae-a7fe-2ee1a6e5df9d.jpg</url>
      <title>DEV Community: Abhijit Meshram</title>
      <link>https://dev.to/abhijit_meshram_e459b6a2a</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abhijit_meshram_e459b6a2a"/>
    <language>en</language>
    <item>
      <title>Redux-toolkit</title>
      <dc:creator>Abhijit Meshram</dc:creator>
      <pubDate>Fri, 21 Feb 2025 08:51:04 +0000</pubDate>
      <link>https://dev.to/abhijit_meshram_e459b6a2a/redux-toolkit-23cn</link>
      <guid>https://dev.to/abhijit_meshram_e459b6a2a/redux-toolkit-23cn</guid>
      <description>&lt;p&gt;`rootReducer.js&lt;/p&gt;

&lt;p&gt;import { combineReducers } from "redux";&lt;br&gt;
import storage from "redux-persist/lib/storage";&lt;br&gt;
import products from "./slices/product/products";&lt;br&gt;
//--------auth------------------------&lt;br&gt;
import signin from "./slices/auth/sign-in";&lt;br&gt;
//--------LocalStorage-----------------------&lt;br&gt;
import localStorage from "./slices/localstorage/localStorage";&lt;br&gt;
//---------Dashboard----------------------&lt;br&gt;
import home from "./slices/home";&lt;br&gt;
//---------Access Permission-------------------&lt;br&gt;
import menus from "./slices/access-permission/menus";&lt;br&gt;
import roles from "./slices/access-permission/roles";&lt;br&gt;
import employeeRoleMapping from "./slices/access-permission/employee-role-mapping";&lt;br&gt;
//---------Masters-------------------&lt;br&gt;
import levels from "./slices/masters/levels";&lt;br&gt;
import States from "./slices/masters/State";&lt;br&gt;
//---------Nodal Officer---------------------&lt;br&gt;
import nodalOfficer from "./slices/nodal-officer/nodal-officer";&lt;br&gt;
//---------Common---------------------&lt;br&gt;
import common from "./slices/common";&lt;br&gt;
//---------Customer---------------------&lt;br&gt;
import customer from './slices/customer';&lt;br&gt;
//---------meeting---------------------&lt;br&gt;
import meetings from "./slices/meetings";&lt;br&gt;
//---------meeting---------------------&lt;br&gt;
import employee from "./slices/employee";&lt;br&gt;
import zones from "./slices/masters/zones";&lt;br&gt;
import cities from "./slices/masters/City";&lt;br&gt;
//---------reports---------------------&lt;br&gt;
import reports from "./slices/reports";&lt;/p&gt;

&lt;p&gt;const rootPersistConfig = {&lt;br&gt;
  key: "root",&lt;br&gt;
  storage,&lt;br&gt;
  keyPrefix: "redux-",&lt;br&gt;
  whitelist: [],&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;const rootReducer = (state, action) =&amp;gt; {&lt;br&gt;
  if (action.type == 'LOGOUT') {&lt;br&gt;
    // Reset the state to its initial values for all slices&lt;br&gt;
    state = {};&lt;br&gt;
  }&lt;br&gt;
  return combineReducers({&lt;br&gt;
    product: products,&lt;br&gt;
    signinData: signin,&lt;br&gt;
    localData: localStorage,&lt;br&gt;
    homeData: home,&lt;br&gt;
    menusData: menus,&lt;br&gt;
    rolesData: roles,&lt;br&gt;
    employeeRoleMappingData: employeeRoleMapping,&lt;br&gt;
    levelData: levels,&lt;br&gt;
    zoneData: zones,&lt;br&gt;
    stateData: States,&lt;br&gt;
    cityData: cities,&lt;br&gt;
    nodalOfficerData: nodalOfficer,&lt;br&gt;
    commonData: common,&lt;br&gt;
    customerData: customer,&lt;br&gt;
    meetingsData: meetings,&lt;br&gt;
    employeeData: employee,&lt;br&gt;
    reportsData: reports&lt;br&gt;
  })(state, action);&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;export { rootPersistConfig, rootReducer };&lt;/p&gt;

&lt;p&gt;store.js&lt;/p&gt;

&lt;p&gt;import { useMemo } from "react";&lt;br&gt;
import { configureStore } from '@reduxjs/toolkit';&lt;br&gt;
import { rootPersistConfig, rootReducer } from './rootReducer';&lt;br&gt;
import { persistReducer } from 'redux-persist';&lt;/p&gt;

&lt;p&gt;let store;&lt;/p&gt;

&lt;p&gt;function initStore(initialState) {&lt;br&gt;
    return configureStore({&lt;br&gt;
        reducer: persistReducer(rootPersistConfig, rootReducer),&lt;br&gt;
        initialState,&lt;br&gt;
        middleware: (getDefaultMiddleware) =&amp;gt;&lt;br&gt;
            getDefaultMiddleware({&lt;br&gt;
            serializableCheck: false,&lt;br&gt;
            immutableCheck: false,&lt;br&gt;
        }),&lt;br&gt;
      });&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;export const initializeStore = (preloadedState) =&amp;gt; {&lt;br&gt;
    let initialStore = store ?? initStore(preloadedState);&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// After navigating to a page with an initial Redux state, merge that state
// with the current state in the store, and create a new store
if (preloadedState &amp;amp;&amp;amp; store) {
    initialStore = initStore({
        ...store.getState(),
        ...preloadedState,
    });
    // Reset the current store
    store = undefined;
}

// For SSG and SSR always create a new store
if (typeof window === "undefined") {
    return initialStore;
}
// Create the store once in the client
if (!store) store = initialStore;

return initialStore;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;export function useStore(initialState) {&lt;br&gt;
    return useMemo(() =&amp;gt; initializeStore(initialState), [initialState]);&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;home.js&lt;/p&gt;

&lt;p&gt;import { createSlice } from "@reduxjs/toolkit";&lt;br&gt;
// utils&lt;br&gt;
import axios from "../axios/axiosMain";&lt;br&gt;
import api from "../api_urls";&lt;/p&gt;

&lt;p&gt;const initialState = {&lt;br&gt;
  isLoading: false,&lt;br&gt;
  error: null,&lt;br&gt;
  meetDayList: [],&lt;br&gt;
  dashboardData: [],&lt;br&gt;
  reqsCustomersNodalOffsData : [],&lt;br&gt;
  graphData : []&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;const slice = createSlice({&lt;br&gt;
  name: "homeData",&lt;br&gt;
  initialState,&lt;br&gt;
  reducers: {&lt;br&gt;
    hasgetMeetingDayByMonthSucc(state, action) {&lt;br&gt;
      state.meetDayList = action.payload;&lt;br&gt;
    },&lt;br&gt;
      hasGetListOfMappedNodalOfficerSucc(state, action) {&lt;br&gt;
      state.dashboardData = action.payload;&lt;br&gt;
    },&lt;br&gt;
    hasReqsCustomersNodalOffsSucc(state, action) {&lt;br&gt;
      state.reqsCustomersNodalOffsData = action.payload;&lt;br&gt;
    },&lt;br&gt;
    hasReqGraphDataSucc(state, action) {&lt;br&gt;
      state.graphData = action.payload;&lt;br&gt;
    },&lt;br&gt;
    // HAS ERROR&lt;br&gt;
    hasError(state, action) {&lt;br&gt;
      state.error = action.payload;&lt;br&gt;
    },&lt;br&gt;
  },&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;export function getMeetingDayByMonth(month) {&lt;br&gt;
    return async (dispatch) =&amp;gt; {&lt;br&gt;
      try {&lt;br&gt;
        const response = await axios.get(&lt;code&gt;${api?.home_meetingday}/${month}&lt;/code&gt;);&lt;br&gt;
        dispatch(slice.actions.hasgetMeetingDayByMonthSucc(response.data));&lt;br&gt;
      } catch (error) {&lt;br&gt;
        dispatch(slice.actions.hasError(error));&lt;br&gt;
      }&lt;br&gt;
    };&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;export function getListOfMappedNodalOfficer() {&lt;br&gt;
  return async (dispatch) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
      const response = await axios.get(&lt;code&gt;${api?.mapped_nodal_officers}&lt;/code&gt;);&lt;br&gt;
      dispatch(slice.actions.hasGetListOfMappedNodalOfficerSucc(response.data));&lt;br&gt;
    } catch (error) {&lt;br&gt;
      dispatch(slice.actions.hasError(error));&lt;br&gt;
    }&lt;br&gt;
  };&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;export function getReqsCustomersNodalOffs() {&lt;br&gt;
  return async (dispatch) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
      const response = await axios.get(&lt;code&gt;${api?.reqs_customers_nodaloff}&lt;/code&gt;);&lt;br&gt;
      dispatch(slice.actions.hasReqsCustomersNodalOffsSucc(response.data));&lt;br&gt;
    } catch (error) {&lt;br&gt;
      dispatch(slice.actions.hasError(error));&lt;br&gt;
    }&lt;br&gt;
  };&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;export function getDashboardGraphsData(payload) {&lt;br&gt;
  return async (dispatch) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
      const response = await axios.post(&lt;code&gt;${api?.get_dashboard_graph_data}&lt;/code&gt;, payload);&lt;br&gt;
      dispatch(slice.actions.hasReqGraphDataSucc(response.data));&lt;br&gt;
    } catch (error) {&lt;br&gt;
      dispatch(slice.actions.hasError(error));&lt;br&gt;
    }&lt;br&gt;
  };&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;// Reducer&lt;br&gt;
export default slice.reducer;&lt;/p&gt;

&lt;p&gt;axios.js&lt;/p&gt;

&lt;p&gt;import axios from "axios";&lt;br&gt;
import { toast } from "react-toastify";&lt;/p&gt;

&lt;p&gt;const crypto = require("crypto");&lt;/p&gt;

&lt;p&gt;const keyString = process.env.CRYPTO_SECURITY_KEY; // This must be exactly 16 characters&lt;br&gt;
const key = Buffer.from(keyString, "utf-8");&lt;/p&gt;

&lt;p&gt;const axiosInstance = axios.create({ baseURL: process.env.API_URL });&lt;/p&gt;

&lt;p&gt;axiosInstance.interceptors.request.use((config) =&amp;gt; {&lt;br&gt;
  // Encrypt the data before sending it&lt;br&gt;
  // if (config.data) {&lt;br&gt;
  //   const jsonString = JSON.stringify(config.data);&lt;br&gt;
  //   const iv = crypto.randomBytes(16); // Generate a random IV&lt;br&gt;
  //   const cipher = crypto.createCipheriv('aes-128-cbc', key, iv);&lt;br&gt;
  //   let encrypted = cipher.update(jsonString, 'utf-8', 'binary');&lt;br&gt;
  //   encrypted += cipher.final('binary');&lt;br&gt;
  //   const encryptedBase64 = Buffer.from(encrypted, 'binary').toString('base64');&lt;br&gt;
  //   const ivBase64 = iv.toString('base64');&lt;br&gt;
  //   let encryptedPayload = &lt;code&gt;${ivBase64}:${encryptedBase64}&lt;/code&gt;;&lt;br&gt;
  //   config.data = {payload:encryptedPayload};&lt;br&gt;
  // }&lt;br&gt;
  return config;&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;axiosInstance.interceptors.response.use(&lt;br&gt;
  (response) =&amp;gt; {&lt;br&gt;
    // Decrypt the response data&lt;br&gt;
    if (response &amp;amp;&amp;amp; response.data &amp;amp;&amp;amp; typeof response?.data?.data == "string") {&lt;br&gt;
      const encryptedData = response?.data?.data;&lt;br&gt;
      const parts = encryptedData.split(":");&lt;br&gt;
      const iv = Buffer.from(parts[0], "base64");&lt;br&gt;
      const encryptedText = Buffer.from(parts[1], "base64");&lt;br&gt;
      const decipher = crypto.createDecipheriv("aes-128-cbc", key, iv);&lt;br&gt;
      let decrypted = decipher.update(encryptedText, "binary", "utf-8");&lt;br&gt;
      decrypted += decipher.final("utf-8");&lt;br&gt;
      // Parse the decrypted JSON string&lt;br&gt;
      response.data.data = JSON.parse(decrypted);&lt;br&gt;
    }&lt;br&gt;
    if (response.data.statusCode == 200 &amp;amp;&amp;amp; response.data.message) {&lt;br&gt;
      toast.success(&lt;br&gt;
        &lt;/p&gt;
&lt;p&gt;&lt;br&gt;
          {response.data.message}&lt;br&gt;
        &lt;/p&gt;,&lt;br&gt;
        {&lt;br&gt;
          position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
          hideProgressBar: true,&lt;br&gt;
          theme: "colored",&lt;br&gt;
        }&lt;br&gt;
      );&lt;br&gt;
    }&lt;br&gt;
    return response;&lt;br&gt;
  },&lt;br&gt;
  (error) =&amp;gt; {&lt;br&gt;
    if (error?.response?.status === 400) {&lt;br&gt;
      error?.response?.data.errors &amp;amp;&amp;amp; error?.response?.data.errors.length &amp;gt; 0&lt;br&gt;
        ? error?.response?.data.errors.map((data) =&amp;gt; {&lt;br&gt;
            toast.error(&lt;br&gt;
              &lt;p&gt;&lt;br&gt;
                {data}&lt;br&gt;
              &lt;/p&gt;,&lt;br&gt;
              {&lt;br&gt;
                position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
                hideProgressBar: true,&lt;br&gt;
                theme: "colored",&lt;br&gt;
              }&lt;br&gt;
            );&lt;br&gt;
          })&lt;br&gt;
        : toast.error(&lt;br&gt;
            &lt;p&gt;&lt;br&gt;
              We're sorry for the inconvenience. Please try again after some&lt;br&gt;
              time.&lt;br&gt;
            &lt;/p&gt;,&lt;br&gt;
            {&lt;br&gt;
              position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
              hideProgressBar: true,&lt;br&gt;
              theme: "colored",&lt;br&gt;
            }&lt;br&gt;
          );&lt;br&gt;
    } else if (&lt;br&gt;
      error?.response?.status === 404 ||&lt;br&gt;
      error?.response?.status === 500&lt;br&gt;
    ) {&lt;br&gt;
      //Requested Resource Not Found OR Server Side Wrror&lt;br&gt;
      if (error?.response?.data.error) {&lt;br&gt;
        toast.error(&lt;br&gt;
          &lt;p&gt;&lt;br&gt;
            {error?.response?.data.error}.&lt;br&gt;
          &lt;/p&gt;,&lt;br&gt;
          {&lt;br&gt;
            position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
            theme: "colored",&lt;br&gt;
            autoClose: 5000,&lt;br&gt;
            closeButton: false,&lt;br&gt;
            closeOnClick: false,&lt;br&gt;
            draggable: false,&lt;br&gt;
            pauseOnHover: false,&lt;br&gt;
            style: {&lt;br&gt;
              width: "400px",&lt;br&gt;
            },&lt;br&gt;
          }&lt;br&gt;
        );&lt;br&gt;
      } else {&lt;br&gt;
        toast.error(&lt;br&gt;
          &lt;p&gt;&lt;br&gt;
            {error?.response?.data.message}.&lt;br&gt;
          &lt;/p&gt;,&lt;br&gt;
          {&lt;br&gt;
            position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
            theme: "colored",&lt;br&gt;
            autoClose: 5000,&lt;br&gt;
            closeButton: false,&lt;br&gt;
            closeOnClick: false,&lt;br&gt;
            draggable: false,&lt;br&gt;
            pauseOnHover: false,&lt;br&gt;
            style: {&lt;br&gt;
              width: "400px",&lt;br&gt;
            },&lt;br&gt;
          }&lt;br&gt;
        );&lt;br&gt;
      }&lt;br&gt;
    } else {&lt;br&gt;
      console.warn(&lt;br&gt;
        "Status : ",&lt;br&gt;
        error?.response?.status,&lt;br&gt;
        "Error Log :",&lt;br&gt;
        error?.response?.data&lt;br&gt;
      );&lt;br&gt;
      toast.error(&lt;br&gt;
        &lt;p&gt;&lt;br&gt;
          We're having trouble connecting to the server. Please try again later.&lt;br&gt;
        &lt;/p&gt;,&lt;br&gt;
        {&lt;br&gt;
          position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
          theme: "colored",&lt;br&gt;
          autoClose: 5000,&lt;br&gt;
          closeButton: false,&lt;br&gt;
          closeOnClick: false,&lt;br&gt;
          draggable: false,&lt;br&gt;
          pauseOnHover: false,&lt;br&gt;
          style: {&lt;br&gt;
            width: "400px",&lt;br&gt;
          },&lt;br&gt;
        }&lt;br&gt;
      );&lt;br&gt;
    }&lt;br&gt;
    return Promise.reject(&lt;br&gt;
      (error.response &amp;amp;&amp;amp; error.response?.data) || "Something went wrong"&lt;br&gt;
    );&lt;br&gt;
  }&lt;br&gt;
);

&lt;p&gt;export default axiosInstance;&lt;/p&gt;

&lt;p&gt;axiosMain.js&lt;/p&gt;

&lt;p&gt;const crypto = require("crypto");&lt;br&gt;
import axios from "axios";&lt;br&gt;
import Router from "next/router";&lt;br&gt;
import { toast } from "react-toastify";&lt;br&gt;
import Swal from "sweetalert2";&lt;/p&gt;

&lt;p&gt;let isSwalOpen401 = false;&lt;br&gt;
let isSwalOpen403 = false;&lt;/p&gt;

&lt;p&gt;const keyString = process.env.CRYPTO_SECURITY_KEY; // This must be exactly 16 characters&lt;br&gt;
const key = Buffer.from(keyString, "utf-8");&lt;/p&gt;

&lt;p&gt;const axiosInstance = axios.create({ baseURL: process.env.API_URL });&lt;br&gt;
axiosInstance.interceptors.request.use((config) =&amp;gt; {&lt;br&gt;
  // Set Token In Process&lt;br&gt;
  const accessToken = JSON.parse(localStorage.getItem("accessToken"));&lt;br&gt;
  if (accessToken) {&lt;br&gt;
    config.headers["Authorization"] = &lt;code&gt;Bearer ${accessToken}&lt;/code&gt;;&lt;br&gt;
  }&lt;br&gt;
  if (config.data?.is_crypto) {&lt;br&gt;
    const jsonString = JSON.stringify(config.data);&lt;br&gt;
    const iv = crypto.randomBytes(16); // Generate a random IV&lt;br&gt;
    const cipher = crypto.createCipheriv("aes-128-cbc", key, iv);&lt;br&gt;
    let encrypted = cipher.update(jsonString, "utf-8", "binary");&lt;br&gt;
    encrypted += cipher.final("binary");&lt;br&gt;
    const encryptedBase64 = Buffer.from(encrypted, "binary").toString("base64");&lt;br&gt;
    const ivBase64 = iv.toString("base64");&lt;br&gt;
    let encryptedPayload = &lt;code&gt;${ivBase64}:${encryptedBase64}&lt;/code&gt;;&lt;br&gt;
    config.data = { payload: encryptedPayload };&lt;br&gt;
  }&lt;br&gt;
  return config;&lt;br&gt;
});&lt;br&gt;
axiosInstance.interceptors.response.use(&lt;br&gt;
  (response) =&amp;gt; {&lt;br&gt;
    // Decrypt the response data&lt;br&gt;
    if (response &amp;amp;&amp;amp; response.data &amp;amp;&amp;amp; typeof response?.data?.data == "string") {&lt;br&gt;
      const encryptedData = response?.data?.data;&lt;br&gt;
      const parts = encryptedData.split(":");&lt;br&gt;
      const iv = Buffer.from(parts[0], "base64");&lt;br&gt;
      const encryptedText = Buffer.from(parts[1], "base64");&lt;br&gt;
      const decipher = crypto.createDecipheriv("aes-128-cbc", key, iv);&lt;br&gt;
      let decrypted = decipher.update(encryptedText, "binary", "utf-8");&lt;br&gt;
      decrypted += decipher.final("utf-8");&lt;br&gt;
      // Parse the decrypted JSON string&lt;br&gt;
      response.data.data = JSON.parse(decrypted);&lt;br&gt;
      if (response.data.data?.accessToken) {&lt;br&gt;
        localStorage.setItem(&lt;br&gt;
          "accessToken",&lt;br&gt;
          JSON.stringify(response.data.data.accessToken)&lt;br&gt;
        );&lt;br&gt;
        isSwalOpen401 = false;&lt;br&gt;
      }&lt;br&gt;
    }&lt;br&gt;
    if (response.data.statusCode == 200 &amp;amp;&amp;amp; response.data.message) {&lt;br&gt;
      toast.success(&lt;br&gt;
        &lt;/p&gt;
&lt;p&gt;&lt;br&gt;
          {response.data.message}&lt;br&gt;
        &lt;/p&gt;,&lt;br&gt;
        {&lt;br&gt;
          position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
          hideProgressBar: true,&lt;br&gt;
          theme: "colored",&lt;br&gt;
        }&lt;br&gt;
      );&lt;br&gt;
    }&lt;br&gt;
    return response;&lt;br&gt;
  },&lt;br&gt;
  (error) =&amp;gt; {&lt;br&gt;
    if (error?.response?.status === 400) {&lt;br&gt;
      error?.response?.data.errors &amp;amp;&amp;amp; error?.response?.data.errors.length &amp;gt; 0&lt;br&gt;
        ? error?.response?.data.errors.map((data) =&amp;gt; {&lt;br&gt;
            toast.error(&lt;br&gt;
              &lt;p&gt;&lt;br&gt;
                {data}&lt;br&gt;
              &lt;/p&gt;,&lt;br&gt;
              {&lt;br&gt;
                position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
                hideProgressBar: true,&lt;br&gt;
                theme: "colored",&lt;br&gt;
              }&lt;br&gt;
            );&lt;br&gt;
          })&lt;br&gt;
        : toast.error(&lt;br&gt;
            &lt;p&gt;&lt;br&gt;
              We're sorry for the inconvenience. Please try again after some&lt;br&gt;
              time.&lt;br&gt;
            &lt;/p&gt;,&lt;br&gt;
            {&lt;br&gt;
              position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
              hideProgressBar: true,&lt;br&gt;
              theme: "colored",&lt;br&gt;
            }&lt;br&gt;
          );&lt;br&gt;
    } else if (error?.response?.status === 401) {&lt;br&gt;
      //Unauthorized Request&lt;br&gt;
      if (!isSwalOpen401) {&lt;br&gt;
        isSwalOpen401 = true;&lt;br&gt;
        Swal.fire({&lt;br&gt;
          title: "",&lt;br&gt;
          text: "Your session has ended. Would you like to start over?",&lt;br&gt;
          icon: "warning",&lt;br&gt;
          showCancelButton: true,&lt;br&gt;
          confirmButtonText: "Yes",&lt;br&gt;
          cancelButtonText: "No",&lt;br&gt;
          allowOutsideClick: false,&lt;br&gt;
        }).then((result) =&amp;gt; {&lt;br&gt;
          if (result.isConfirmed) {&lt;br&gt;
            axiosInstance.get(&lt;code&gt;/authapi/refresh&lt;/code&gt;).finally(() =&amp;gt; {});&lt;br&gt;
          } else {&lt;br&gt;
            axiosInstance.get(&lt;code&gt;/authapi/logout&lt;/code&gt;).finally(() =&amp;gt; {&lt;br&gt;
              isSwalOpen401 = false;&lt;br&gt;
              localStorage.clear();&lt;br&gt;
              Router.push("/");&lt;br&gt;
            });&lt;br&gt;
          }&lt;br&gt;
        });&lt;br&gt;
      }&lt;br&gt;
    } else if (error?.response?.status === 403) {&lt;br&gt;
      if (!isSwalOpen403) {&lt;br&gt;
        isSwalOpen403 = true;&lt;br&gt;
        Swal.fire({&lt;br&gt;
          title: "",&lt;br&gt;
          text: error?.response?.data.message,&lt;br&gt;
          icon: "warning",&lt;br&gt;
          showCancelButton: false,&lt;br&gt;
          showConfirmButton: false,&lt;br&gt;
          allowOutsideClick: false,&lt;br&gt;
          timer: 5000,&lt;br&gt;
          timerProgressBar: true,&lt;br&gt;
          didClose: () =&amp;gt; {&lt;br&gt;
            axiosInstance.get(&lt;code&gt;/authapi/logout&lt;/code&gt;).finally(() =&amp;gt; {&lt;br&gt;
              isSwalOpen403 = false;&lt;br&gt;
              Router.push("/");&lt;br&gt;
              localStorage.clear();&lt;br&gt;
            });&lt;br&gt;
          },&lt;br&gt;
        });&lt;br&gt;
      }&lt;br&gt;
    } else if (error?.response?.status === 404) {&lt;br&gt;
      //Requested Resource Not Found OR Server Side Wrror&lt;br&gt;
      if (Router.pathname !== "/404") {&lt;br&gt;
        // Router.push("/404");&lt;br&gt;
      }&lt;br&gt;
    } else if (error?.response?.status === 500) {&lt;br&gt;
      //Requested Resource Not Found OR Server Side Wrror&lt;br&gt;
      if (error?.response?.data.error) {&lt;br&gt;
        toast.error(&lt;br&gt;
          &lt;p&gt;&lt;br&gt;
            {error?.response?.data.error}&lt;br&gt;
          &lt;/p&gt;,&lt;br&gt;
          {&lt;br&gt;
            position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
            theme: "colored",&lt;br&gt;
            autoClose: 5000,&lt;br&gt;
            closeButton: false,&lt;br&gt;
            closeOnClick: false,&lt;br&gt;
            draggable: false,&lt;br&gt;
            pauseOnHover: false,&lt;br&gt;
            style: {&lt;br&gt;
              width: "400px",&lt;br&gt;
            },&lt;br&gt;
          }&lt;br&gt;
        );&lt;br&gt;
      } else {&lt;br&gt;
        toast.error(&lt;br&gt;
          &lt;p&gt;&lt;br&gt;
            {error?.response?.data.message}&lt;br&gt;
          &lt;/p&gt;,&lt;br&gt;
          {&lt;br&gt;
            position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
            theme: "colored",&lt;br&gt;
            autoClose: 5000,&lt;br&gt;
            closeButton: false,&lt;br&gt;
            closeOnClick: false,&lt;br&gt;
            draggable: false,&lt;br&gt;
            pauseOnHover: false,&lt;br&gt;
            style: {&lt;br&gt;
              width: "400px",&lt;br&gt;
            },&lt;br&gt;
          }&lt;br&gt;
        );&lt;br&gt;
      }&lt;br&gt;
    } else {&lt;br&gt;
      console.warn(&lt;br&gt;
        "Status : ",&lt;br&gt;
        error?.response?.status,&lt;br&gt;
        "Error Log :",&lt;br&gt;
        error?.response?.data&lt;br&gt;
      );&lt;br&gt;
      toast.error(&lt;br&gt;
        &lt;p&gt;&lt;br&gt;
          We're having trouble connecting to the server. Please try again later.&lt;br&gt;
        &lt;/p&gt;,&lt;br&gt;
        {&lt;br&gt;
          position: toast.POSITION.TOP_RIGHT,&lt;br&gt;
          theme: "colored",&lt;br&gt;
          autoClose: 5000,&lt;br&gt;
          closeButton: false,&lt;br&gt;
          closeOnClick: false,&lt;br&gt;
          draggable: false,&lt;br&gt;
          pauseOnHover: false,&lt;br&gt;
          style: {&lt;br&gt;
            width: "400px",&lt;br&gt;
          },&lt;br&gt;
        }&lt;br&gt;
      );&lt;br&gt;
    }&lt;br&gt;
    return Promise.reject(&lt;br&gt;
      (error.response &amp;amp;&amp;amp; error.response?.data) || "Something went wrong"&lt;br&gt;
    );&lt;br&gt;
  }&lt;br&gt;
);&lt;br&gt;
export default axiosInstance;

&lt;p&gt;_app.js&lt;/p&gt;

&lt;p&gt;import '../styles/globals.scss'&lt;br&gt;
import Contentlayout from '../shared/layout-components/layout/content-layout'&lt;br&gt;
import Authenticationlayout from '../shared/layout-components/layout/authentication-layout'&lt;br&gt;
import { Provider } from "react-redux";&lt;br&gt;
import { useStore } from "../shared/redux/store";&lt;br&gt;
import PropTypes from 'prop-types';&lt;/p&gt;

&lt;p&gt;const layouts = {&lt;br&gt;
  Contentlayout: Contentlayout,&lt;br&gt;
  Authenticationlayout: Authenticationlayout,&lt;br&gt;
};&lt;br&gt;
function MyApp({ Component, pageProps }) {&lt;br&gt;
  const store = useStore(pageProps?.initialReduxState);&lt;br&gt;
  const Layout = layouts[Component.layout] || ((pageProps) =&amp;gt; {pageProps});&lt;br&gt;
  return (&lt;br&gt;
    &lt;br&gt;
      &lt;br&gt;
        &lt;br&gt;
      &lt;br&gt;
    &lt;br&gt;
  )&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;MyApp.propTypes = {&lt;br&gt;
  Component: PropTypes.elementType,&lt;br&gt;
  pageProps: PropTypes.object,&lt;br&gt;
};&lt;br&gt;
export default MyApp;&lt;/p&gt;

&lt;p&gt;`&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My-Dcorm</title>
      <dc:creator>Abhijit Meshram</dc:creator>
      <pubDate>Mon, 03 Feb 2025 03:27:00 +0000</pubDate>
      <link>https://dev.to/abhijit_meshram_e459b6a2a/my-dcorm-1469</link>
      <guid>https://dev.to/abhijit_meshram_e459b6a2a/my-dcorm-1469</guid>
      <description>&lt;p&gt;myapi/&lt;br&gt;
│── node_modules/         # Dependencies&lt;br&gt;
│── uploads/              # Uploaded images (auto-created)&lt;br&gt;
│── config/&lt;br&gt;
│   ├── config.json       # Database configuration&lt;br&gt;
│── models/&lt;br&gt;
│   ├── index.js          # Sequelize setup&lt;br&gt;
│   ├── user.js           # User model&lt;br&gt;
│── migrations/&lt;br&gt;
│── controllers/&lt;br&gt;
│   ├── userController.js # User API logic&lt;br&gt;
│── routes/&lt;br&gt;
│   ├── userRoutes.js     # User routes&lt;br&gt;
│── middleware/&lt;br&gt;
│   ├── upload.js         # Multer file upload configuration&lt;br&gt;
│── .env                  # Environment variables&lt;br&gt;
│── .gitignore            # Ignore unnecessary files&lt;br&gt;
│── package.json          # Project dependencies&lt;br&gt;
│── package-lock.json     # Locked dependencies&lt;br&gt;
│── server.js             # Main entry point&lt;/p&gt;

&lt;p&gt;//table creation&lt;br&gt;
USE mydb;&lt;/p&gt;

&lt;p&gt;CREATE TABLE users (&lt;br&gt;
    id INT AUTO_INCREMENT PRIMARY KEY,&lt;br&gt;
    name VARCHAR(100),&lt;br&gt;
    email VARCHAR(100) UNIQUE,&lt;br&gt;
    password VARCHAR(255),&lt;br&gt;
    photo VARCHAR(255),&lt;br&gt;
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;CREATE TABLE customers (&lt;br&gt;
    id INT AUTO_INCREMENT PRIMARY KEY,&lt;br&gt;
    name VARCHAR(100),&lt;br&gt;
    phone VARCHAR(15),&lt;br&gt;
    email VARCHAR(100) UNIQUE,&lt;br&gt;
    address TEXT,&lt;br&gt;
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP&lt;br&gt;
);&lt;/p&gt;

&lt;p&gt;//&lt;br&gt;
mkdir myapi &amp;amp;&amp;amp; cd myapi&lt;br&gt;
npm init -y&lt;/p&gt;

&lt;p&gt;//&lt;br&gt;
npm install express mysql2 sequelize bcryptjs jsonwebtoken multer dotenv body-parser cors&lt;/p&gt;

&lt;p&gt;//set-up ORM&lt;br&gt;
npx sequelize-cli init&lt;/p&gt;

&lt;p&gt;//config.json&lt;br&gt;
{&lt;br&gt;
    "development": {&lt;br&gt;
      "username": "root",&lt;br&gt;
      "password": "",&lt;br&gt;
      "database": "mydb",&lt;br&gt;
      "host": "127.0.0.1",&lt;br&gt;
      "dialect": "mysql"&lt;br&gt;
    }&lt;br&gt;
  }&lt;br&gt;
//create model&lt;br&gt;
npx sequelize-cli model:generate --name User --attributes name:string,email:string,password:string,photo:string&lt;br&gt;
//migrate databse&lt;br&gt;
npx sequelize-cli db:migrate&lt;/p&gt;

&lt;p&gt;//server.js&lt;br&gt;
require("dotenv").config();&lt;br&gt;
const express = require("express");&lt;br&gt;
const bodyParser = require("body-parser");&lt;br&gt;
const cors = require("cors");&lt;br&gt;
const userRoutes = require("./routes/userRoutes");&lt;/p&gt;

&lt;p&gt;const app = express();&lt;/p&gt;

&lt;p&gt;app.use(cors());&lt;br&gt;
app.use(bodyParser.json());&lt;br&gt;
app.use("/uploads", express.static("uploads")); // Serve uploaded images&lt;br&gt;
app.use("/users", userRoutes);&lt;/p&gt;

&lt;p&gt;const PORT = process.env.PORT || 5000;&lt;br&gt;
app.listen(PORT, () =&amp;gt; console.log(&lt;code&gt;Server running on port ${PORT}&lt;/code&gt;));&lt;/p&gt;

&lt;p&gt;//user-route&lt;br&gt;
const express = require("express");&lt;br&gt;
const { register, login, getUsers, updateUser, deleteUser, forgotPassword } = require("../controllers/userController");&lt;br&gt;
const upload = require("../middleware/upload");&lt;/p&gt;

&lt;p&gt;const router = express.Router();&lt;/p&gt;

&lt;p&gt;router.get("/", getUsers);&lt;br&gt;
router.post("/register", upload.single("photo"), register);&lt;br&gt;
router.post("/login", login);&lt;br&gt;
router.put("/:id", upload.single("photo"), updateUser);&lt;br&gt;
router.delete("/:id", deleteUser);&lt;br&gt;
router.post("/forgot-password", forgotPassword);&lt;/p&gt;

&lt;p&gt;module.exports = router;&lt;/p&gt;

&lt;p&gt;//cantroller&lt;br&gt;
const bcrypt = require("bcryptjs");&lt;br&gt;
const jwt = require("jsonwebtoken");&lt;br&gt;
const { User } = require("../models");&lt;/p&gt;

&lt;p&gt;exports.getUsers = async (req, res) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
        const users = await User.findAll();&lt;br&gt;
        res.json(users);&lt;br&gt;
    } catch (err) {&lt;br&gt;
        res.status(500).json({ error: err.message });&lt;br&gt;
    }&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;exports.register = async (req, res) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
        const { name, email, password } = req.body;&lt;br&gt;
        const hashedPassword = await bcrypt.hash(password, 10);&lt;br&gt;
        const photo = req.file ? req.file.path : null;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    const user = await User.create({ name, email, password: hashedPassword, photo });
    res.status(201).json(user);
} catch (err) {
    res.status(500).json({ error: err.message });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;exports.login = async (req, res) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
        const { email, password } = req.body;&lt;br&gt;
        const user = await User.findOne({ where: { email } });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    if (!user) return res.status(404).json({ message: "User not found" });

    const isMatch = await bcrypt.compare(password, user.password);
    if (!isMatch) return res.status(400).json({ message: "Invalid credentials" });

    const token = jwt.sign({ id: user.id }, "secret", { expiresIn: "1h" });
    res.json({ token, user });
} catch (err) {
    res.status(500).json({ error: err.message });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;exports.updateUser = async (req, res) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
        const { id } = req.params;&lt;br&gt;
        const { name, email } = req.body;&lt;br&gt;
        const photo = req.file ? req.file.path : null;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    const user = await User.findByPk(id);
    if (!user) return res.status(404).json({ message: "User not found" });

    await user.update({ name, email, photo });
    res.json(user);
} catch (err) {
    res.status(500).json({ error: err.message });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;exports.deleteUser = async (req, res) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
        const { id } = req.params;&lt;br&gt;
        const user = await User.findByPk(id);&lt;br&gt;
        if (!user) return res.status(404).json({ message: "User not found" });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    await user.destroy();
    res.json({ message: "User deleted successfully" });
} catch (err) {
    res.status(500).json({ error: err.message });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;exports.forgotPassword = async (req, res) =&amp;gt; {&lt;br&gt;
    try {&lt;br&gt;
        const { email, newPassword } = req.body;&lt;br&gt;
        const user = await User.findOne({ where: { email } });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    if (!user) return res.status(404).json({ message: "User not found" });

    const hashedPassword = await bcrypt.hash(newPassword, 10);
    await user.update({ password: hashedPassword });

    res.json({ message: "Password reset successful" });
} catch (err) {
    res.status(500).json({ error: err.message });
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;//middleware upload&lt;br&gt;
const multer = require("multer");&lt;/p&gt;

&lt;p&gt;const storage = multer.diskStorage({&lt;br&gt;
    destination: (req, file, cb) =&amp;gt; {&lt;br&gt;
        cb(null, "uploads/");&lt;br&gt;
    },&lt;br&gt;
    filename: (req, file, cb) =&amp;gt; {&lt;br&gt;
        cb(null, Date.now() + "-" + file.originalname);&lt;br&gt;
    }&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;const upload = multer({ storage });&lt;br&gt;
module.exports = upload;&lt;/p&gt;

&lt;p&gt;//model index.js&lt;br&gt;
const { Sequelize, DataTypes } = require("sequelize");&lt;br&gt;
const config = require("../config/config.json")["development"];&lt;/p&gt;

&lt;p&gt;const sequelize = new Sequelize(config.database, config.username, config.password, {&lt;br&gt;
    host: config.host,&lt;br&gt;
    dialect: config.dialect&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;const db = {};&lt;br&gt;
db.sequelize = sequelize;&lt;br&gt;
db.Sequelize = Sequelize;&lt;/p&gt;

&lt;p&gt;// Import models&lt;br&gt;
db.User = require("./user")(sequelize, DataTypes);&lt;/p&gt;

&lt;p&gt;module.exports = db;&lt;/p&gt;

&lt;p&gt;//model-usermigration.js&lt;br&gt;
module.exports = {&lt;br&gt;
    up: async (queryInterface, Sequelize) =&amp;gt; {&lt;br&gt;
        await queryInterface.createTable("Users", {&lt;br&gt;
            id: {&lt;br&gt;
                allowNull: false,&lt;br&gt;
                autoIncrement: true,&lt;br&gt;
                primaryKey: true,&lt;br&gt;
                type: Sequelize.INTEGER&lt;br&gt;
            },&lt;br&gt;
            name: {&lt;br&gt;
                type: Sequelize.STRING,&lt;br&gt;
                allowNull: false&lt;br&gt;
            },&lt;br&gt;
            email: {&lt;br&gt;
                type: Sequelize.STRING,&lt;br&gt;
                allowNull: false,&lt;br&gt;
                unique: true&lt;br&gt;
            },&lt;br&gt;
            password: {&lt;br&gt;
                type: Sequelize.STRING,&lt;br&gt;
                allowNull: false&lt;br&gt;
            },&lt;br&gt;
            photo: {&lt;br&gt;
                type: Sequelize.STRING&lt;br&gt;
            },&lt;br&gt;
            createdAt: {&lt;br&gt;
                allowNull: false,&lt;br&gt;
                type: Sequelize.DATE,&lt;br&gt;
                defaultValue: Sequelize.literal("CURRENT_TIMESTAMP")&lt;br&gt;
            },&lt;br&gt;
            updatedAt: {&lt;br&gt;
                allowNull: false,&lt;br&gt;
                type: Sequelize.DATE,&lt;br&gt;
                defaultValue: Sequelize.literal("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")&lt;br&gt;
            }&lt;br&gt;
        });&lt;br&gt;
    },&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;down: async (queryInterface, Sequelize) =&amp;gt; {
    await queryInterface.dropTable("Users");
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;/p&gt;

&lt;p&gt;//model user.js&lt;br&gt;
module.exports = (sequelize, DataTypes) =&amp;gt; {&lt;br&gt;
    const User = sequelize.define("User", {&lt;br&gt;
        name: {&lt;br&gt;
            type: DataTypes.STRING,&lt;br&gt;
            allowNull: false&lt;br&gt;
        },&lt;br&gt;
        email: {&lt;br&gt;
            type: DataTypes.STRING,&lt;br&gt;
            allowNull: false,&lt;br&gt;
            unique: true&lt;br&gt;
        },&lt;br&gt;
        password: {&lt;br&gt;
            type: DataTypes.STRING,&lt;br&gt;
            allowNull: false&lt;br&gt;
        },&lt;br&gt;
        photo: {&lt;br&gt;
            type: DataTypes.STRING&lt;br&gt;
        }&lt;br&gt;
    });&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;return User;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;};&lt;br&gt;
//&lt;br&gt;
module.exports = (sequelize, DataTypes) =&amp;gt; {&lt;br&gt;
    return sequelize.define("User", {&lt;br&gt;
        name: { type: DataTypes.STRING, allowNull: false },&lt;br&gt;
        email: { type: DataTypes.STRING, allowNull: false, unique: true },&lt;br&gt;
        password: { type: DataTypes.STRING, allowNull: false },&lt;br&gt;
        photo: { type: DataTypes.STRING }&lt;br&gt;
    }, { timestamps: true });&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;//&lt;/p&gt;

&lt;h1&gt;
  
  
  Node.js dependencies
&lt;/h1&gt;

&lt;p&gt;node_modules/&lt;br&gt;
npm-debug.log&lt;br&gt;
yarn-error.log&lt;/p&gt;

&lt;h1&gt;
  
  
  Environment variables
&lt;/h1&gt;

&lt;p&gt;.env&lt;/p&gt;

&lt;h1&gt;
  
  
  Logs
&lt;/h1&gt;

&lt;p&gt;logs/&lt;br&gt;
&lt;em&gt;.log&lt;br&gt;
npm-debug.log&lt;/em&gt;&lt;br&gt;
yarn-debug.log*&lt;br&gt;
yarn-error.log*&lt;/p&gt;

&lt;h1&gt;
  
  
  Database files
&lt;/h1&gt;

&lt;p&gt;*.sqlite&lt;br&gt;
*.sqlite-journal&lt;/p&gt;

&lt;h1&gt;
  
  
  Uploaded images
&lt;/h1&gt;

&lt;p&gt;uploads/&lt;/p&gt;

&lt;h1&gt;
  
  
  IDE and OS files
&lt;/h1&gt;

&lt;p&gt;.vscode/&lt;br&gt;
.DS_Store&lt;br&gt;
Thumbs.db&lt;/p&gt;

</description>
      <category>dcur</category>
    </item>
    <item>
      <title>React-Dcur</title>
      <dc:creator>Abhijit Meshram</dc:creator>
      <pubDate>Tue, 10 Dec 2024 20:28:15 +0000</pubDate>
      <link>https://dev.to/abhijit_meshram_e459b6a2a/react-dcur-3mgi</link>
      <guid>https://dev.to/abhijit_meshram_e459b6a2a/react-dcur-3mgi</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn616dxd28ysupc4kp87u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn616dxd28ysupc4kp87u.png" alt="Image description" width="800" height="440"&gt;&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "name": "merncrud",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "axios": "^1.3.4",
    "bootstrap": "^5.3.3",
    "cra-template": "1.2.0",
    "formik": "^2.2.9",
    "react": "^19.0.0",
    "react-bootstrap": "^2.10.6",
    "react-dom": "^19.0.0",
    "react-scripts": "5.0.1",
    "react-toastify": "^10.0.6",
    "sweetalert2": "^11.7.0",
    "web-vitals": "^4.2.4",
    "yup": "^0.32.11"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test",
    "eject": "react-scripts eject"
  },
  "eslintConfig": {
    "extends": [
      "react-app",
      "react-app/jest"
    ]
  },
  "browserslist": {
    "production": [
      "&amp;gt;0.2%",
      "not dead",
      "not op_mini all"
    ],
    "development": [
      "last 1 chrome version",
      "last 1 firefox version",
      "last 1 safari version"
    ]
  }
}
`


`import React, {useState, useEffect} from 'react';
import './App.css';
import { Table, Row, Col, Button } from 'react-bootstrap';
import AddModal from './component/AddModal';
import axios from 'axios';
import { ToastContainer, toast } from 'react-toastify';
import Swal from 'sweetalert2';

function App() {
  const [show, setShow] = useState(false);

  const handleClose = () =&amp;gt; setShow(false);

  const [rowData, setRowData] = useState([
    {firstname: "Punam", lastname: "Khobragade" },

]);

const [rowValues, setRowValues] = useState("")


useEffect(()=&amp;gt;{
  fetch('http://localhost:5001/api/users') 
    .then(response =&amp;gt; response.json())
    .then(data =&amp;gt; setRowData(data));
},[])

const handleShow = () =&amp;gt; {
  setRowValues("")
  setShow(true);
}

const handleDelete = (data) =&amp;gt; {
  Swal.fire({
    title: 'Are you sure?',
    text: "You wan't to delete data!",
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#3085d6',
    cancelButtonColor: '#d33',
    confirmButtonText: 'Yes, delete it!',
  }).then((result) =&amp;gt; {
    if (result.isConfirmed) {
   fetch(`http://localhost:5001/api/user/${data._id}`, {
    method: "DELETE",
    body: JSON.stringify({

    }),
    headers: {
      "Content-type": "application/json; charset=UTF-8",
    },
  })
    .then(response =&amp;gt; response.json())
    .then(data =&amp;gt; {
      Swal.fire('Deleted!', 'The user has been deleted.', 'success');
      fetch('http://localhost:5001/api/users') // api for the get request
      .then(response =&amp;gt; response.json())
      .then(data =&amp;gt; setRowData(data));
    })
  }
});
}

const handleEdit = (data) =&amp;gt; {
  Swal.fire({
    title: 'Are you sure?',
    text: "You wan't to Edit data!",
    icon: 'warning',
    showCancelButton: true,
    confirmButtonColor: '#3085d6',
    cancelButtonColor: '#d33',
    confirmButtonText: 'Yes',
  }).then((result) =&amp;gt; {
    if (result.isConfirmed) {
  setRowValues(data);
  setShow(true)
}
});
}

const formatDate = (date) =&amp;gt; {
  if (!date) return '';
  const parsedDate = new Date(date);
  const year = parsedDate.getFullYear();
  const month = (parsedDate.getMonth() + 1).toString().padStart(2, '0');
  const day = parsedDate.getDate().toString().padStart(2, '0');
  return `${year}-${month}-${day}`;
};


  return (
    &amp;lt;&amp;gt;
    &amp;lt;ToastContainer/&amp;gt;
    &amp;lt;Row className="p-5"&amp;gt;
     &amp;lt;Col md={12} className='d-flex justify-content-between align-items-center'&amp;gt;
      &amp;lt;h4&amp;gt;User List&amp;lt;/h4&amp;gt;
      &amp;lt;span&amp;gt;
        &amp;lt;Button variant="info" onClick={(()=&amp;gt;handleShow())}&amp;gt;Add User&amp;lt;/Button&amp;gt;
      &amp;lt;/span&amp;gt;
     &amp;lt;/Col&amp;gt;
     &amp;lt;Col md={12} className='mg-t-15'&amp;gt;
    &amp;lt;Table striped bordered hover responsive&amp;gt;
      &amp;lt;thead&amp;gt;
        &amp;lt;tr&amp;gt;
          &amp;lt;th&amp;gt;#&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;First Name&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;Last Name&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;Photo&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;Gender&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;Email&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;Mobile Number&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;DOB&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;City&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;Professional Skills&amp;lt;/th&amp;gt;
          &amp;lt;th&amp;gt;Actions&amp;lt;/th&amp;gt;
        &amp;lt;/tr&amp;gt;
      &amp;lt;/thead&amp;gt;
      &amp;lt;tbody&amp;gt;
        {rowData?.length &amp;gt; 0 &amp;amp;&amp;amp; rowData.map((item, index)=&amp;gt;(
        &amp;lt;tr key={index}&amp;gt;
          &amp;lt;td&amp;gt;{index + 1}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;{item?.firstname}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;{item?.lastname}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;&amp;lt;img src={item?.photo} alt="" height={50} width={50}/&amp;gt;&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;{item?.gender}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;{item?.email}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;{item?.mobile}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;{formatDate(item?.dob)}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;{item?.city}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;{item?.skills}&amp;lt;/td&amp;gt;
          &amp;lt;td&amp;gt;
            &amp;lt;Button variant='info' onClick={(()=&amp;gt;handleEdit(item))}&amp;gt;Edit&amp;lt;/Button&amp;gt; &amp;amp;nbsp;
            &amp;lt;Button variant = "danger" onClick={(()=&amp;gt;handleDelete(item))}&amp;gt;Delete&amp;lt;/Button&amp;gt;

          &amp;lt;/td&amp;gt;

        &amp;lt;/tr&amp;gt;

        ))}

      &amp;lt;/tbody&amp;gt;
    &amp;lt;/Table&amp;gt;
    &amp;lt;/Col&amp;gt;
    &amp;lt;/Row&amp;gt;
    {show &amp;amp;&amp;amp;
    &amp;lt;AddModal
    show={show}
    handleClose={handleClose}
    rowValues={rowValues}
    setRowData={setRowData}
    /&amp;gt;}
    &amp;lt;/&amp;gt;
  );
}

export default App;

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/n9kxt17uvl5694gn0l7n.png)`



`import React, { useState } from "react";
import { Form, Button, Modal, Row } from "react-bootstrap";
import { ToastContainer, toast } from "react-toastify";
import { useFormik } from "formik";
import * as Yup from "yup";
import axios from "axios";
import Swal from "sweetalert2";

const AddModal = (props) =&amp;gt; {
  const { show, handleClose, rowValues, setRowData } = props;

  const handleSave = (data) =&amp;gt; {
    console.log(data, "data1111111111");
    if (!rowValues) {
      fetch(`http://localhost:5001/api/user/`, {
        method: "POST",
        body: JSON.stringify(data),
        headers: {
          "Content-type": "application/json; charset=UTF-8",
        },
      })
        .then((response) =&amp;gt; response.json())
        .then((data) =&amp;gt; {
          if (data) {
            Swal.fire(
              "Created!",
              "The user has been Created successfully.",
              "success"
            );
            handleClose();
            fetch("http://localhost:5001/api/users")
              .then((response) =&amp;gt; response.json())
              .then((data) =&amp;gt; setRowData(data));
          }
        });
    } else {
      fetch(`http://localhost:5001/api/user/${rowValues._id}`, {
        method: "PUT",
        body: JSON.stringify(data),
        headers: {
          "Content-type": "application/json; charset=UTF-8",
        },
      })
        .then((response) =&amp;gt; response.json())
        .then((data) =&amp;gt; {
          if (data) {
            if (data) {
              Swal.fire(
                "Updated!",
                "The user has been Updated successfully.",
                "success"
              );
              handleClose();
              fetch("http://localhost:5001/api/users") // api for the get request
                .then((response) =&amp;gt; response.json())
                .then((data) =&amp;gt; setRowData(data));
            }
          }
        });
    }
  };

  const formatDate = (date) =&amp;gt; {
    if (!date) return "";
    const parsedDate = new Date(date);
    const year = parsedDate.getFullYear();
    const month = (parsedDate.getMonth() + 1).toString().padStart(2, "0");
    const day = parsedDate.getDate().toString().padStart(2, "0");
    return `${year}-${month}-${day}`;
  };

  const addEditUserForm = useFormik({
    enableReinitialize: true,
    initialValues: {
      firstName: rowValues?.firstname || "",
      lastName: rowValues?.lastname || "",
      email: rowValues?.email || "",
      mobile: rowValues?.mobile || "",
      photo: rowValues?.photo || "",
      gender: rowValues?.gender || "",
      city: rowValues?.city || "",
      skills: rowValues?.skills ? rowValues.skills.split(",") : [],
      dob: rowValues?.dob ? formatDate(rowValues.dob) : "",
    },
    validationSchema: Yup.object().shape({
      firstName: Yup.string().required("Required"),
      lastName: Yup.string().required("Required"),
      email: Yup.string().required("Required").email("Invalid email address"),
      mobile: Yup.string()
        .required("Required")
        .matches(/^[0-9]{10}$/, "Mobile number must be 10 digits"),
      city: Yup.string().required("Required"),
      dob: Yup.string().required("Required"),
      gender: Yup.string()
        .required("Gender is required")
        .oneOf(["male", "female"], "Required"),
      skills: Yup.array().min(1, "At least one skill is required"),
    }),
    onSubmit: (values) =&amp;gt; {
      const skillsData =
        values.skills?.length &amp;gt; 0 &amp;amp;&amp;amp; values.skills.map(String).join(",");

      console.log(values, "dfdfdfdfdf", skillsData);
      const payload = {
        firstname: values.firstName,
        lastname: values.lastName,
        email: values.email,
        mobile: values.mobile,
        photo: values.photo,
        gender: values.gender,
        city: values.city,
        skills: skillsData,
        dob: values.dob,
        photo: values.photo,
      };

      handleSave(payload);
    },
  });

  console.log(addEditUserForm, "addEditUserForm");
  const handlePhotoChange = (event) =&amp;gt; {
    const file = event.target.files[0];
    if (file) {
      const reader = new FileReader();
      reader.onloadend = () =&amp;gt; {
        addEditUserForm.setFieldValue("photo", reader.result);
      };
      reader.readAsDataURL(file);
    }
  };

  const skillsArray = [
    { label: "Communication", value: "Communication" },
    { label: "Critical Thinking", value: "Critical Thinking" },
    { label: "Problem Solving", value: "Problem Solving" },
  ];

  console.log(addEditUserForm, "addEditUserForm111");

  return (
    &amp;lt;&amp;gt;
      &amp;lt;ToastContainer /&amp;gt;
      &amp;lt;Modal show={show} onHide={handleClose} size="xl" backdrop="static"&amp;gt;
        &amp;lt;Form onSubmit={addEditUserForm.handleSubmit}&amp;gt;
          &amp;lt;Modal.Header closeButton&amp;gt;
            &amp;lt;Modal.Title&amp;gt;{rowValues ? "Update" : "Add"} User&amp;lt;/Modal.Title&amp;gt;
          &amp;lt;/Modal.Header&amp;gt;
          &amp;lt;Modal.Body&amp;gt;
            &amp;lt;Row&amp;gt;
              &amp;lt;Form.Group className="mb-3 col-md-6" controlId="firstName"&amp;gt;
                &amp;lt;Form.Label&amp;gt;First Name&amp;lt;/Form.Label&amp;gt;
                &amp;lt;Form.Control
                  id="firstName"
                  name="firstName"
                  type="text"
                  onChange={addEditUserForm.handleChange}
                  value={addEditUserForm.values.firstName}
                  autoComplete="off"
                /&amp;gt;
                {addEditUserForm.errors.firstName &amp;amp;&amp;amp;
                addEditUserForm.touched.firstName ? (
                  &amp;lt;div className="text-danger"&amp;gt;
                    {addEditUserForm.errors.firstName}
                  &amp;lt;/div&amp;gt;
                ) : null}
              &amp;lt;/Form.Group&amp;gt;
              &amp;lt;Form.Group className="mb-3 col-md-6" controlId="lastName"&amp;gt;
                &amp;lt;Form.Label&amp;gt;Last Name&amp;lt;/Form.Label&amp;gt;
                &amp;lt;Form.Control
                  id="lastName"
                  name="lastName"
                  type="text"
                  onChange={addEditUserForm.handleChange}
                  value={addEditUserForm.values.lastName}
                  autoComplete="off"
                /&amp;gt;
                {addEditUserForm.errors.lastName &amp;amp;&amp;amp;
                addEditUserForm.touched.lastName ? (
                  &amp;lt;div className="text-danger"&amp;gt;
                    {addEditUserForm.errors.lastName}
                  &amp;lt;/div&amp;gt;
                ) : null}
              &amp;lt;/Form.Group&amp;gt;
              {console.log(addEditUserForm.values, "fgfgffgf")}
              &amp;lt;Form.Group className="mb-3 col-md-6" controlId="dob"&amp;gt;
                &amp;lt;Form.Label&amp;gt;Date of Birth&amp;lt;/Form.Label&amp;gt;
                &amp;lt;Form.Control
                  id="dob"
                  name="dob"
                  type="date"
                  onChange={addEditUserForm.handleChange}
                  value={addEditUserForm.values.dob || ""}
                  autoComplete="off"
                /&amp;gt;

                {addEditUserForm.errors.dob &amp;amp;&amp;amp; addEditUserForm.touched.dob ? (
                  &amp;lt;div className="text-danger"&amp;gt;
                    {addEditUserForm.errors.dob}
                  &amp;lt;/div&amp;gt;
                ) : null}
              &amp;lt;/Form.Group&amp;gt;
              &amp;lt;Form.Group className="mb-3 col-md-6" controlId="photo"&amp;gt;
                &amp;lt;Form.Label&amp;gt;Photo&amp;lt;/Form.Label&amp;gt;

                &amp;lt;Form.Control
                  id="photo"
                  name="photo"
                  type="file"
                  onChange={handlePhotoChange}
                  //  value={addEditUserForm.values.photo}
                /&amp;gt;
                {addEditUserForm.errors.photo &amp;amp;&amp;amp;
                addEditUserForm.touched.photo ? (
                  &amp;lt;div className="text-danger"&amp;gt;
                    {addEditUserForm.errors.photo}
                  &amp;lt;/div&amp;gt;
                ) : null}
              &amp;lt;/Form.Group&amp;gt;
              &amp;lt;Form.Group className="mb-3 col-md-6" controlId="gender"&amp;gt;
                &amp;lt;Form.Label&amp;gt;Gender&amp;lt;/Form.Label&amp;gt;
                &amp;lt;div className="d-flex align-items-center"&amp;gt;
                  &amp;lt;Form.Check
                    type="radio"
                    id="1"
                    label="Male"
                    checked={addEditUserForm.values.gender == "male"}
                    onClick={() =&amp;gt;
                      addEditUserForm.setFieldValue("gender", "male")
                    }
                  /&amp;gt;{" "}
                  &amp;amp;nbsp; &amp;amp;nbsp;
                  &amp;lt;Form.Check
                    type="radio"
                    id="1"
                    checked={addEditUserForm.values.gender == "female"}
                    label="Female"
                    onClick={() =&amp;gt;
                      addEditUserForm.setFieldValue("gender", "female")
                    }
                  /&amp;gt;
                &amp;lt;/div&amp;gt;
                {addEditUserForm.errors.gender &amp;amp;&amp;amp;
                addEditUserForm.touched.gender ? (
                  &amp;lt;div className="text-danger"&amp;gt;
                    {addEditUserForm.errors.gender}
                  &amp;lt;/div&amp;gt;
                ) : null}
              &amp;lt;/Form.Group&amp;gt;
              &amp;lt;Form.Group className="mb-3 col-md-6" controlId="formBasicEmail"&amp;gt;
                &amp;lt;Form.Label&amp;gt;Email Id&amp;lt;/Form.Label&amp;gt;

                &amp;lt;Form.Control
                  id="email"
                  name="email"
                  type="text"
                  onChange={addEditUserForm.handleChange}
                  value={addEditUserForm.values.email}
                  autoComplete="off"
                /&amp;gt;
                {addEditUserForm.errors.email &amp;amp;&amp;amp;
                addEditUserForm.touched.email ? (
                  &amp;lt;div className="text-danger"&amp;gt;
                    {addEditUserForm.errors.email}
                  &amp;lt;/div&amp;gt;
                ) : null}
              &amp;lt;/Form.Group&amp;gt;
              &amp;lt;Form.Group className="mb-3 col-md-6" controlId="formBasicEmail"&amp;gt;
                &amp;lt;Form.Label&amp;gt;Mobile No.&amp;lt;/Form.Label&amp;gt;

                &amp;lt;Form.Control
                  id="mobile"
                  name="mobile"
                  type="text"
                  onChange={addEditUserForm.handleChange}
                  value={addEditUserForm.values.mobile}
                  autoComplete="off"
                /&amp;gt;
                {addEditUserForm.errors.mobile &amp;amp;&amp;amp;
                addEditUserForm.touched.mobile ? (
                  &amp;lt;div className="text-danger"&amp;gt;
                    {addEditUserForm.errors.mobile}
                  &amp;lt;/div&amp;gt;
                ) : null}
              &amp;lt;/Form.Group&amp;gt;
              &amp;lt;Form.Group className="mb-3 col-md-6" controlId="formBasicEmail"&amp;gt;
                &amp;lt;Form.Label&amp;gt;City&amp;lt;/Form.Label&amp;gt;

                &amp;lt;Form.Select
                  aria-label="Default select example"
                  onChange={(e) =&amp;gt;
                    addEditUserForm.setFieldValue("city", e.target.value)
                  }
                  value={addEditUserForm.values.city}
                &amp;gt;
                  &amp;lt;option value="*"&amp;gt;&amp;lt;/option&amp;gt;
                  &amp;lt;option value="Nagpur"&amp;gt;Nagpur&amp;lt;/option&amp;gt;
                  &amp;lt;option value="Chandrapur"&amp;gt;Chandrapur&amp;lt;/option&amp;gt;
                  &amp;lt;option value="Mumbai"&amp;gt;Mumbai&amp;lt;/option&amp;gt;
                &amp;lt;/Form.Select&amp;gt;
                {addEditUserForm.errors.city &amp;amp;&amp;amp; addEditUserForm.touched.city ? (
                  &amp;lt;div className="text-danger"&amp;gt;
                    {addEditUserForm.errors.city}
                  &amp;lt;/div&amp;gt;
                ) : null}
              &amp;lt;/Form.Group&amp;gt;
              &amp;lt;Form.Group className="mb-3 col-md-12" controlId="formBasicEmail"&amp;gt;
                &amp;lt;Form.Label&amp;gt;Skills&amp;lt;/Form.Label&amp;gt;

                &amp;lt;div className="d-flex align-items-center"&amp;gt;
                  {skillsArray?.map((item, index) =&amp;gt; (
                    &amp;lt;span style={{ marginRight: "10px" }} key={index}&amp;gt;
                      &amp;lt;Form.Check
                        type="checkbox"
                        id={index}
                        label={item?.label}
                        checked={addEditUserForm.values.skills.includes(
                          item.label
                        )}
                        onChange={() =&amp;gt; {
                          const updatedSkills =
                            addEditUserForm.values.skills.includes(item.label)
                              ? addEditUserForm.values.skills.filter(
                                  (skill) =&amp;gt; skill !== item.label
                                )
                              : [...addEditUserForm.values.skills, item.label];
                          addEditUserForm.setFieldValue(
                            "skills",
                            updatedSkills
                          );
                        }}
                      /&amp;gt;
                    &amp;lt;/span&amp;gt;
                  ))}
                  {addEditUserForm.errors.skills &amp;amp;&amp;amp;
                  addEditUserForm.touched.skills ? (
                    &amp;lt;div className="text-danger"&amp;gt;
                      {addEditUserForm.errors.skills}
                    &amp;lt;/div&amp;gt;
                  ) : null}
                &amp;lt;/div&amp;gt;
              &amp;lt;/Form.Group&amp;gt;
            &amp;lt;/Row&amp;gt;
          &amp;lt;/Modal.Body&amp;gt;
          &amp;lt;Modal.Footer&amp;gt;
            &amp;lt;Button variant="secondary" onClick={handleClose}&amp;gt;
              Close
            &amp;lt;/Button&amp;gt;
            &amp;lt;Button variant="info" type="submit"&amp;gt;
              Submit
            &amp;lt;/Button&amp;gt;
          &amp;lt;/Modal.Footer&amp;gt;
        &amp;lt;/Form&amp;gt;
      &amp;lt;/Modal&amp;gt;
    &amp;lt;/&amp;gt;
  );
};

export default AddModal;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>dcur</category>
    </item>
    <item>
      <title>mongo-dcur</title>
      <dc:creator>Abhijit Meshram</dc:creator>
      <pubDate>Tue, 10 Dec 2024 18:34:45 +0000</pubDate>
      <link>https://dev.to/abhijit_meshram_e459b6a2a/mongo-dcur-1knm</link>
      <guid>https://dev.to/abhijit_meshram_e459b6a2a/mongo-dcur-1knm</guid>
      <description>&lt;p&gt;{&lt;br&gt;
  "name": "backend",&lt;br&gt;
  "version": "1.0.0",&lt;br&gt;
  "main": "index.js",&lt;br&gt;
  "scripts": {&lt;br&gt;
    "test": "echo \"Error: no test specified\" &amp;amp;&amp;amp; exit 1",&lt;br&gt;
    "start": "nodemon server.js"&lt;br&gt;
  },&lt;br&gt;
  "keywords": [],&lt;br&gt;
  "author": "",&lt;br&gt;
  "license": "ISC",&lt;br&gt;
  "description": "",&lt;br&gt;
  "dependencies": {&lt;br&gt;
    "body-parser": "^1.20.3",&lt;br&gt;
    "cors": "^2.8.5",&lt;br&gt;
    "dotenv": "^16.4.7",&lt;br&gt;
    "express": "^4.21.2",&lt;br&gt;
    "mongodb": "^6.11.0",&lt;br&gt;
    "mongoose": "^8.8.4",&lt;br&gt;
    "nodemon": "^3.1.7"&lt;br&gt;
  }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;const express = require('express');&lt;br&gt;
const bodyParser = require('body-parser');&lt;br&gt;
const cors = require('cors');&lt;br&gt;
const connectDatabase = require('./dbconnection/dbconnection');&lt;br&gt;
const routes = require('./routes/studentroutes');&lt;/p&gt;

&lt;p&gt;const app = express();&lt;/p&gt;

&lt;p&gt;// Middleware&lt;br&gt;
app.use(bodyParser.json());&lt;br&gt;
app.use(cors());&lt;/p&gt;

&lt;p&gt;// Database Connection&lt;br&gt;
connectDatabase();&lt;/p&gt;

&lt;p&gt;// Routes&lt;br&gt;
app.use('/api', routes);&lt;/p&gt;

&lt;p&gt;// Start Server&lt;br&gt;
app.listen(5001, () =&amp;gt; {&lt;br&gt;
  console.log('Server started on port 5001');&lt;br&gt;
});&lt;/p&gt;

&lt;p&gt;const express = require('express');&lt;br&gt;
const { getUsers, createUser, updateUser, deleteUser } = require('../controller/studentcontroller');&lt;br&gt;
const router = express.Router();&lt;/p&gt;

&lt;p&gt;router.get('/users', getUsers);&lt;br&gt;
router.post('/user', createUser);&lt;br&gt;
router.put('/user/:id', updateUser);&lt;br&gt;
router.delete('/user/:id', deleteUser);&lt;/p&gt;

&lt;p&gt;module.exports = router;&lt;/p&gt;

&lt;p&gt;`const mongoose = require('mongoose');&lt;/p&gt;

&lt;p&gt;const userSchema = new mongoose.Schema({&lt;br&gt;
  firstname: {&lt;br&gt;
    type: String,&lt;br&gt;
    required: true, // Add validation if necessary&lt;br&gt;
  },&lt;br&gt;
  lastname: {&lt;br&gt;
    type: String,&lt;br&gt;
    required: true,&lt;br&gt;
  },&lt;br&gt;
  email: {&lt;br&gt;
    type: String,&lt;br&gt;
    required: true,&lt;br&gt;
    unique: true, // Ensures no duplicate emails&lt;br&gt;
  },&lt;br&gt;
  mobile: {&lt;br&gt;
    type: String,&lt;br&gt;
    required: true,&lt;br&gt;
  },&lt;br&gt;
  city: {&lt;br&gt;
    type: String,&lt;br&gt;
  },&lt;br&gt;
  gender: {&lt;br&gt;
    type: String,&lt;br&gt;
    enum: ['Male', 'Female', 'Other'], // Limit to specific values if needed&lt;br&gt;
  },&lt;br&gt;
  skills: {&lt;br&gt;
    type: String,&lt;br&gt;
  },&lt;br&gt;
  dob: {&lt;br&gt;
    type: Date,&lt;br&gt;
  },&lt;br&gt;
  photo: {&lt;br&gt;
    type: String,&lt;br&gt;
    default: '', // Default value for the photo field&lt;br&gt;
  },&lt;br&gt;
}, { timestamps: true }); // Automatically adds createdAt and updatedAt fields&lt;/p&gt;

&lt;p&gt;module.exports = mongoose.model('User', userSchema);&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;/code&gt;const mongoose = require('mongoose');&lt;/p&gt;

&lt;p&gt;const connectDatabase = async () =&amp;gt; {&lt;br&gt;
  try {&lt;br&gt;
    await mongoose.connect('mongodb://localhost:27017/userdata', {&lt;br&gt;
      useNewUrlParser: true,&lt;br&gt;
      useUnifiedTopology: true,&lt;br&gt;
    });&lt;br&gt;
    console.log("Database connected successfully");&lt;br&gt;
  } catch (error) {&lt;br&gt;
    console.error("Error connecting to the database:", error);&lt;br&gt;
  }&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;module.exports = connectDatabase;`&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&lt;br&gt;
&lt;/code&gt;`const User = require('../components/userSchema');&lt;/p&gt;

&lt;p&gt;const getUsers = async (req, res) =&amp;gt; {&lt;br&gt;
  try {&lt;br&gt;
    const users = await User.find({});&lt;br&gt;
    res.send(users);&lt;br&gt;
  } catch (error) {&lt;br&gt;
    console.error(error);&lt;br&gt;
    res.status(500).send(error);&lt;br&gt;
  }&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;const createUser = async (req, res) =&amp;gt; {&lt;br&gt;
  try {&lt;br&gt;
    const user = new User(req.body);&lt;br&gt;
    await user.save();&lt;br&gt;
    res.status(201).json(user);&lt;br&gt;
  } catch (error) {&lt;br&gt;
    console.error(error);&lt;br&gt;
    res.status(500).send(error);&lt;br&gt;
  }&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;const updateUser = async (req, res) =&amp;gt; {&lt;br&gt;
  const { id } = req.params;&lt;/p&gt;

&lt;p&gt;try {&lt;br&gt;
    const user = await User.findByIdAndUpdate(id, req.body, { new: true });&lt;br&gt;
    res.send(user);&lt;br&gt;
  } catch (error) {&lt;br&gt;
    console.error(error);&lt;br&gt;
    res.status(500).send(error);&lt;br&gt;
  }&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;const deleteUser = async (req, res) =&amp;gt; {&lt;br&gt;
  const { id } = req.params;&lt;/p&gt;

&lt;p&gt;try {&lt;br&gt;
    const user = await User.findByIdAndDelete(id);&lt;br&gt;
    res.send(user);&lt;br&gt;
  } catch (error) {&lt;br&gt;
    console.error(error);&lt;br&gt;
    res.status(500).send(error);&lt;br&gt;
  }&lt;br&gt;
};&lt;/p&gt;

&lt;p&gt;module.exports = {&lt;br&gt;
  getUsers,&lt;br&gt;
  createUser,&lt;br&gt;
  updateUser,&lt;br&gt;
  deleteUser,&lt;br&gt;
};&lt;br&gt;
`&lt;/p&gt;

</description>
      <category>dcur</category>
    </item>
  </channel>
</rss>
