craftninja/exp-starter-api

View on GitHub
controllers/users.js

Summary

Maintainability
A
0 mins
Test Coverage
const jwt = require('jsonwebtoken');

const currentUser = require('../lib/currentUser');
const userSerializer = require('../serializers/user');
const User = require('../models/user');

exports.index = async (req, res) => {
  const users = await User.all();
  const serializedUsers = users.map(user => userSerializer(user));
  res.json({ users: await Promise.all(serializedUsers) });
};

exports.me = async (req, res) => {
  const token = req.headers.jwt;
  const user = await currentUser(token);
  const serializedUser = await userSerializer(user);
  res.json({ user: serializedUser });
};

exports.create = async (req, res) => {
  const user = await User.create(req.body);
  if (user.errors) {
    res.json({ user });
  } else {
    const serializedUser = await userSerializer(user);
    const token = jwt.sign({ user: serializedUser }, process.env.JWT_SECRET);
    res.json({ jwt: token, user: serializedUser });
  }
};

exports.show = async (req, res, next) => {
  try {
    const user = await User.find(req.params.id);
    const serializedUser = await userSerializer(user);
    res.json({ user: serializedUser });
  } catch (e) {
    const err = new Error('Not Found');
    err.status = 404;
    next(err);
  }
};

exports.update = async (req, res) => {
  const updatedUser = await User.update({
    ...req.body,
    ...{ id: req.params.id },
  });

  if (updatedUser.errors) {
    res.json({ user: updatedUser });
  } else {
    const serializedUser = await userSerializer(updatedUser);
    res.json({ user: serializedUser });
  }
};