Advertisement
alvinfnaldi

Backend Express

Oct 2nd, 2023
751
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // server.js
  2. import "dotenv/config";
  3. import express from "express";
  4. import route from "./routing/route.js";
  5.  
  6. const app = express();
  7. const port = process.env.PORT || 7200;
  8.  
  9. app.use(express.json());
  10. app.use(express.urlencoded({ extended: true }));
  11.  
  12. app.use(route);
  13.  
  14. app.listen(port, () => {
  15.   console.log(`Server running on port ${port}`);
  16. });
  17.  
  18. // package.json
  19. {
  20.   "name": "latbackend",
  21.   "version": "1.0.0",
  22.   "description": "",
  23.   "main": "index.js",
  24.   "type": "module",
  25.   "scripts": {
  26.     "start": "nodemon server",
  27.     "test": "echo \"Error: no test specified\" && exit 1",
  28.     "genModelDB": "sequelize-auto -o ./model2 -d Eproduct -h localhost -v true -l esm -u postgres -p 5432 -x alvin -e postgres"
  29.   },
  30.   "keywords": [],
  31.   "author": "",
  32.   "license": "ISC",
  33.   "dependencies": {
  34.     "bcrypt": "^5.1.1",
  35.     "dotenv": "^16.3.1",
  36.     "express": "^4.18.2",
  37.     "jsonwebtoken": "^9.0.2",
  38.     "pg": "^8.11.3",
  39.     "sequelize": "^6.33.0",
  40.     "sequelize-auto": "^0.8.8"
  41.   },
  42.   "devDependencies": {
  43.     "nodemon": "^3.0.1"
  44.   }
  45. }
  46.  
  47. // errorhandling.js
  48. const errorHandling = (data = "", code, message) => {
  49.   return {
  50.     data: data,
  51.     code: code,
  52.     message: message,
  53.   };
  54. };
  55.  
  56. export { errorHandling };
  57.  
  58. // init-models.js
  59. import { Sequelize } from "sequelize";
  60.  
  61. const sequelize = new Sequelize(
  62.   process.env.DB_NM,
  63.   process.env.DB_USER,
  64.   process.env.DB_PASSWORD,
  65.   {
  66.     dialect: "postgres",
  67.     pool: {
  68.       max: 5,
  69.       min: 0,
  70.       acquire: 30000,
  71.       idle: 10000,
  72.     },
  73.   }
  74. );
  75.  
  76. if (sequelize) {
  77.   setTimeout(() => {
  78.     console.log("Database Connected!");
  79.   }, 1000);
  80. }
  81.  
  82. const models = initModels(sequelize);
  83. export default models;
  84. export { sequelize };
  85.  
  86. // order.js
  87. import { errorHandling } from "../helper/errorhandling.js"
  88. import { sequelize } from "../model/init-models.js"
  89.  
  90. const insertorder = async (req, res) => {
  91.     try {
  92.         const {dt_order, dt_orderdetail} = req.body
  93.         const query = `call insertorder('[${JSON.stringify(dt_order)}]', '${JSON.stringify(dt_orderdetail)}')`
  94.         const result = await sequelize.query(query)
  95.         res.send(errorHandling(result, 200, "Sukses"))
  96.     } catch (error) {
  97.         res.send(errorHandling(400, error.message))
  98.     }
  99. }
  100.  
  101. const updateorder = async (req, res) => {
  102.     try {
  103.         const {dt_order, dt_orderdetail} = req.body
  104.         console.log(dt_order)
  105.         console.log(dt_orderdetail)
  106.         const query = `call updateorder('[${JSON.stringify(dt_order)}]', '${JSON.stringify(dt_orderdetail)}')`
  107.         const result = await sequelize.query(query)
  108.         res.send(errorHandling(result, 200, "Sukses Update"))
  109.     } catch (error) {
  110.         res.send(errorHandling(400, error.message))
  111.     }
  112. }
  113.  
  114. export { insertorder, updateorder }
  115.  
  116. // user.js
  117. import bcrypt from "bcrypt";
  118. import { errorHandling } from "../helper/errorhandling.js";
  119. import models, { sequelize } from "../model/init-models.js";
  120. import jwt from "jsonwebtoken";
  121.  
  122. const listuser = async (req, res) => {
  123.   try {
  124.     const result = await models.users.findAll(); // select * from users
  125.     res.send(errorHandling(result, 200, "Sukses"));
  126.   } catch (error) {
  127.     res.send(errorHandling(400, error.message));
  128.   }
  129. };
  130.  
  131. const createuser = async (req, res) => {
  132.   try {
  133.     const { usr, pswd } = req.body;
  134.     const userExists = await models.users.findOne({ where: { username: usr } });
  135.     if (userExists) {
  136.       res.status(400);
  137.       throw new Error(`Username ${usr} already exists`);
  138.     }
  139.     const salt = bcrypt.genSaltSync(10);
  140.     const passhash = bcrypt.hashSync(pswd, salt);
  141.     const result = await models.users.create(
  142.       {
  143.         username: usr,
  144.         password: passhash,
  145.       },
  146.       { returning: true }
  147.     );
  148.  
  149.     res.send(errorHandling(result, 200, "Sukses Create"));
  150.   } catch (error) {
  151.     res.send(errorHandling(error.message));
  152.   }
  153. };
  154.  
  155. const updateuser = async (req, res) => {
  156.   try {
  157.     const salt = bcrypt.genSaltSync(10);
  158.     const passhash = bcrypt.hashSync(req.body.pswd, salt);
  159.     const result = await models.users.update(
  160.       {
  161.         username: req.body.usr,
  162.         password: passhash,
  163.       },
  164.       {
  165.         where: { id: req.params.id },
  166.         returning: true,
  167.       }
  168.     );
  169.     res.send(errorHandling(result, 200, "Sukses Update"));
  170.   } catch (error) {
  171.     res.send(errorHandling(400, error.message));
  172.   }
  173. };
  174.  
  175. const deleteuser = (req, res) => {
  176.   try {
  177.     const result = models.users.destroy({
  178.       where: { id: req.params.id },
  179.       returning: true,
  180.     });
  181.     res.send(errorHandling(result, 200, "Sukses Delete"));
  182.   } catch (error) {
  183.     res.send(errorHandling(400, error.message));
  184.   }
  185. };
  186.  
  187. const getusercustomer = async (req, res) => {
  188.   try {
  189.     // untuk menampilkan left join
  190.     // const result = await models.users.findAndCountAll({
  191.     //   include: 'customers'
  192.     // })
  193.  
  194.     // untuk menampilkan inner join
  195.     // const result = await models.users.findAndCountAll({
  196.     //   include: { model: models.customer, as: "customers", required: true },
  197.     // });
  198.  
  199.     // menampilkan atribut yg digunakan
  200.     // const result = await models.users.findAndCountAll({
  201.     //   include: [
  202.     //     {
  203.     //       model: models.customer,
  204.     //       as: "customers",
  205.     //       required: true,
  206.     //       attributes: ["first_name", "last_name"],
  207.     //     },
  208.     //     {
  209.     //       model: models.orders,
  210.     //       as: "orders",
  211.     //       include: { model: models.order_detail, as: "order_details" },
  212.     //       atributes: ["username"],
  213.     //     },
  214.     //   ],
  215.     // });
  216.  
  217.     //show all details
  218.     const result = await models.users.findAll({
  219.       include: { all: true, nested: true },
  220.     });
  221.     res.send(errorHandling(result, 200, "Sukses"));
  222.   } catch (error) {
  223.     res.send(errorHandling(400, error.message));
  224.   }
  225. };
  226.  
  227. //syntax sql
  228. const getview = async (req, res) => {
  229.   try {
  230.     const query = `select * from data_eproduct`;
  231.     const result = await sequelize.query(query);
  232.     res.send(errorHandling(result, 200, "Sukses"));
  233.   } catch (error) {
  234.     res.send(errorHandling(400, error.message));
  235.   }
  236. };
  237.  
  238. //using view
  239. const viewmodel = async (req, res) => {
  240.   try {
  241.     const result = await models.data_eproduct.findAll();
  242.     res.send(errorHandling(result, 200, "Sukses"));
  243.   } catch (error) {
  244.     res.send(errorHandling(400, error.message));
  245.   }
  246. };
  247.  
  248. //pagination
  249. const datacur = async (req, res) => {
  250.   try {
  251.     const query = `select * from datacursor(${req.params.lim},${req.params.page})`;
  252.     const result = await sequelize.query(query);
  253.     res.send(errorHandling(result[0], 200, "Sukses"));
  254.   } catch (error) {
  255.     res.send(errorHandling(400, error.message));
  256.   }
  257. };
  258.  
  259. //search
  260. const searchuname = async (req, res) => {
  261.   try {
  262.     const query = `select * from searchuname('${req.params.usr}')`;
  263.     const result = await sequelize.query(query);
  264.     res.send(errorHandling(result[0], 200, "Sukses"));
  265.   } catch (error) {
  266.     res.send(errorHandling(400, error.message));
  267.   }
  268. };
  269.  
  270. //method login
  271. const login = async (req, res) => {
  272.   try {
  273.     const { usr, pswd } = req.body;
  274.  
  275.     const user = await models.users.findOne({ where: { username: usr } });
  276.     if (!user) {
  277.       res.send(errorHandling("Username tidak ditemukan", 400));
  278.     } else {
  279.       const matchPassword = bcrypt.compareSync(pswd, user.password);
  280.       if (matchPassword) {
  281.         const token = jwt.sign(
  282.           { username: user.username, createdat: user.createdat },
  283.           process.env.SECRET_KEY, { expiresIn: "10s" }
  284.         );
  285.         res.send(errorHandling(token, 200, "Sukses"));
  286.       } else {
  287.         res.send(errorHandling(400, "Password salah"));
  288.       }
  289.     }
  290.   } catch (error) {
  291.     res.send(errorHandling(400, error.message));
  292.   }
  293. };
  294.  
  295. //method cek authorize
  296. const checkToken = async (req, res, next) => {
  297.   try {
  298.     const token = req.headers.authorization;
  299.     if (!token) {
  300.       res.send(errorHandling(200, "Not authorized"));
  301.     } else {
  302.       const verify = jwt.verify(token, process.env.SECRET_KEY);
  303.       if (verify) {
  304.         next();
  305.       }
  306.     }
  307.   } catch (error) {
  308.     res.send(errorHandling(400, error.message));
  309.   }
  310. };
  311.  
  312. export { listuser, createuser, updateuser, deleteuser, getusercustomer, getview, viewmodel, datacur, searchuname, login, checkToken };
  313.  
  314. // route.js
  315. import { Router } from "express";
  316. import { home } from "../controller/home.js";
  317. import { listuser, createuser, updateuser, deleteuser, getusercustomer, getview, viewmodel, datacur, searchuname, login, checkToken } from "../controller/user.js";
  318. import { insertorder, updateorder } from "../controller/order.js";
  319.  
  320. const router = Router();
  321.  
  322. router.get("/", home);
  323. router.get("/user", checkToken, listuser);
  324.  
  325. router.post("/user", createuser);
  326.  
  327. router.put("/user/:id", updateuser);
  328. router.delete("/user/:id", deleteuser);
  329.  
  330. router.post("/insertorder", insertorder);
  331. router.put("/updateorder", updateorder);
  332.  
  333. router.delete("/insertorder/:id");
  334.  
  335. router.get("/getusercustomer", getusercustomer);
  336. router.get("/getdataeproduct", getview);
  337. router.get("/viewmodel", viewmodel);
  338. router.get("/datacur/:lim/:page", datacur);
  339. router.get("/searchuname/:usr", searchuname);
  340.  
  341. router.post("/login", login);
  342.  
  343. export default router;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement