Advertisement
Guest User

Untitled

a guest
Apr 26th, 2017
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import express from 'express';
  2. import bcrypt from 'bcrypt';
  3. import db from '../../lib/db';
  4.  
  5. const saltRounds = 10;
  6.  
  7. const users = express();
  8.  
  9. const getUsers = (req, res) => {
  10.   const { language_id } = req.query;
  11.  
  12.   const query = `
  13.         SELECT
  14.             u.*
  15.  
  16.         FROM
  17.             users u
  18.     `;
  19.  
  20.   db
  21.     .any(query)
  22.     .then(function(data) {
  23.       res.status(200).json({
  24.         status: 'success',
  25.         data: data,
  26.         message: 'Retrieved ALL users'
  27.       });
  28.     })
  29.     .catch(err => {
  30.       res.status(500).send(err);
  31.     });
  32. };
  33.  
  34. const getSingleUser = (req, res) => {
  35.   const id = req.params.id;
  36.  
  37.   const { language_id } = req.query;
  38.  
  39.   const query = `
  40.         SELECT
  41.             u.*
  42.         FROM users u
  43.         WHERE u.ID = ${id}
  44.     `;
  45.  
  46.   db
  47.     .one(query)
  48.     .then(function(data) {
  49.       res.status(200).json({
  50.         status: 'success',
  51.         data: data,
  52.         message: 'Retrieved SINGLE user'
  53.       });
  54.     })
  55.     .catch(err => {
  56.       res.status(404).send(err);
  57.     });
  58. };
  59.  
  60. const getUserPositions = (req, res) => {
  61.   const { language_id } = req.query;
  62.  
  63.   const query = `
  64.         SELECT
  65.             p.*,
  66.             p.id AS id,
  67.             (
  68.                 SELECT
  69.                     json_object_agg(language_id, value)
  70.                 AS
  71.                     position
  72.                 FROM
  73.                     position_description pd
  74.                 WHERE
  75.                     p.id = pd.position_id
  76.             )
  77.  
  78.         FROM
  79.             position p
  80.     `;
  81.  
  82.   db
  83.     .any(query)
  84.     .then(data => {
  85.       res.status(200).json({
  86.         status: 'success',
  87.         data: data,
  88.         message: 'Retrieved ALL positions'
  89.       });
  90.     })
  91.     .catch(err => {
  92.       res.status(500).send(err);
  93.     });
  94. };
  95.  
  96. const createUser = (req, res) => {
  97.   const {
  98.     role_id,
  99.     location_id,
  100.     position_id,
  101.     email,
  102.     password,
  103.     first_name,
  104.     last_name,
  105.     position,
  106.     phone,
  107.     is_public
  108.   } = req.body;
  109.  
  110.   if (!email || !password) {
  111.     return res.status(500).send('No email or password specified');
  112.   }
  113.  
  114.   bcrypt.hash(password, saltRounds, (err, hash) => {
  115.     if (err) {
  116.       res.status(500).json({
  117.         status: 'error',
  118.         message: 'Error hashing password'
  119.       });
  120.     } else {
  121.       const query = `
  122.                 INSERT INTO users (
  123.                     role_id,
  124.                     location_id,
  125.                     position_id,
  126.                     email,
  127.                     password,
  128.                     first_name,
  129.                     last_name,
  130.                     phone,
  131.                     is_public
  132.                 ) values (
  133.                     ${parseInt(role_id) || null},
  134.                     ${parseInt(location_id) || null},
  135.                     ${parseInt(position_id) || null},
  136.                     '${email || ''}',
  137.                     '${hash || ''}',
  138.                     '${first_name || ''}',
  139.                     '${last_name || ''}',
  140.                     '${phone || ''}',
  141.                     ${Boolean(is_public)}
  142.                 ) RETURNING id`;
  143.  
  144.       db
  145.         .one(query)
  146.         .then(data => {
  147.           const id = parseInt(data.id);
  148.  
  149.           if (position && position.length > 0) {
  150.             let udQuery = '';
  151.  
  152.             position.forEach(item => {
  153.               udQuery += `
  154.                                 INSERT INTO users_description (
  155.                                     ID,
  156.                                     language_id,
  157.                                     position
  158.                                 ) values (
  159.                                     ${id},
  160.                                     ${parseInt(item.language_id)},
  161.                                     '${item.value}'
  162.                                 );
  163.                             `;
  164.             });
  165.  
  166.             db
  167.               .none(udQuery)
  168.               .then(() => {
  169.                 res.status(200).json({
  170.                   status: 'success',
  171.                   message: 'Inserted one user'
  172.                 });
  173.               })
  174.               .catch(err => {
  175.                 res.status(500).send(err);
  176.               });
  177.           } else {
  178.             res.status(200).json({
  179.               status: 'success',
  180.               message: 'Inserted one user'
  181.             });
  182.           }
  183.         })
  184.         .catch(err => {
  185.           res.status(500).send(err);
  186.         });
  187.     }
  188.   });
  189. };
  190.  
  191. const updateUser = (req, res) => {
  192.   const id = req.params.id;
  193.  
  194.   const {
  195.     email,
  196.     password,
  197.     first_name,
  198.     last_name,
  199.     position,
  200.     phone,
  201.     location_id,
  202.     position_id,
  203.     is_public
  204.   } = req.body;
  205.  
  206.   let query = `
  207.         UPDATE users
  208.         SET
  209.             email = '${email || ''}',
  210.             first_name = '${first_name || ''}',
  211.             last_name = '${last_name || ''}',
  212.             phone = '${phone || ''}',
  213.             is_public = ${Boolean(is_public)},
  214.             location_id = ${parseInt(location_id) || null},
  215.             position_id = ${parseInt(position_id) || null}`;
  216.  
  217.   if (password) {
  218.     bcrypt.hash(password, saltRounds, (err, hash) => {
  219.       if (err) {
  220.         res.status(500).json({
  221.           status: 'error',
  222.           message: 'Error hashing password'
  223.         });
  224.       } else {
  225.         query += `, password = '${hash || ''}' `;
  226.  
  227.         query += `WHERE id = ${id}`;
  228.  
  229.         db
  230.           .none(query)
  231.           .then(() => {
  232.             if (position && position.length > 0) {
  233.               let udQuery = '';
  234.  
  235.               position.forEach(item => {
  236.                 udQuery += `
  237.                                     UPDATE users_description ud
  238.                                     SET position = '${item.value}'
  239.                                     WHERE ud.ID = id AND ud.language_id = ${item.language_id};
  240.                                 `;
  241.               });
  242.  
  243.               db
  244.                 .none(udQuery)
  245.                 .then(() => {
  246.                   res.status(200).json({
  247.                     status: 'success',
  248.                     message: 'Updated user id: ' + id
  249.                   });
  250.                 })
  251.                 .catch(err => {
  252.                   res.status(500).send(err);
  253.                 });
  254.             } else {
  255.               res.status(200).json({
  256.                 status: 'success',
  257.                 message: 'Updated user id: ' + id
  258.               });
  259.             }
  260.           })
  261.           .catch(err => {
  262.             res.status(500).send(err);
  263.           });
  264.       }
  265.     });
  266.   } else {
  267.     query += `WHERE id = ${id}`;
  268.  
  269.     db
  270.       .none(query)
  271.       .then(() => {
  272.         if (position && position.length > 0) {
  273.           let udQuery = '';
  274.  
  275.           position.forEach(item => {
  276.             udQuery += `
  277.                             UPDATE users_description ud
  278.                             SET position = '${item.value}'
  279.                             WHERE ud.ID = id AND ud.language_id = ${item.language_id};
  280.                         `;
  281.           });
  282.  
  283.           db
  284.             .none(udQuery)
  285.             .then(() => {
  286.               res.status(200).json({
  287.                 status: 'success',
  288.                 message: 'Updated user id: ' + id
  289.               });
  290.             })
  291.             .catch(err => {
  292.               res.status(500).send(err);
  293.             });
  294.         } else {
  295.           res.status(200).json({
  296.             status: 'success',
  297.             message: 'Updated user id: ' + id
  298.           });
  299.         }
  300.       })
  301.       .catch(err => {
  302.         res.status(500).send(err);
  303.       });
  304.   }
  305. };
  306.  
  307. const deleteUser = (req, res) => {
  308.   const id = req.params.id;
  309.  
  310.   if (id) {
  311.     db
  312.       .result('DELETE FROM users WHERE id = $1', id)
  313.       .then(result => {
  314.         db
  315.           .result(`DELETE FROM users_description WHERE id = ${id}`)
  316.           .then(udResult => {
  317.             res.status(200).json({
  318.               status: 'success',
  319.               message: `Removed ${result.rowCount} user`
  320.             });
  321.           })
  322.           .catch(err => {
  323.             res.status(500).send(err);
  324.           });
  325.       })
  326.       .catch(err => {
  327.         res.status(500).send(err);
  328.       });
  329.   } else {
  330.     res.status(500).send('no user found');
  331.   }
  332. };
  333.  
  334. users.get('/positions', getUserPositions);
  335. users.get('/:id', getSingleUser);
  336. users.get('/', getUsers);
  337. users.delete('/:id', deleteUser);
  338. users.post('/', createUser);
  339. users.put('/:id', updateUser);
  340.  
  341. module.exports = users;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement