const { body, validationResult } = require('express-validator') const userService = require('../services/userService') const FetchResult = require('../common/web/fetchResult') const errorMessages = require('../config/errorMessages') const successMessages = require('../config/successMessages') exports.getAllUsers = async (res) => { try { const users = await userService.user_list() return FetchResult.formatResult(res, 200, 'success', users) } catch (err) { return FetchResult.formatResult(res, 500, 'Internal server error') } } exports.createUser = [ body('account').isLength({ min: 3 }).withMessage('Account must be at least 3 characters long'), body('account').isEmpty().withMessage('Account is required'), body('password').isLength({ min: 6 }).withMessage('Password must be at least 6 characters long'), body('password').isEmpty().withMessage('Password is required'), async (req, res, next) => { const errors = validationResult(req) if (!errors.isEmpty()) { return FetchResult.formatResult( res, 400, errors .array() .map((err) => err.msg) .join(', ') ) } next() }, async (req, res) => { try { const user = req.body await userService.create_user(user) return FetchResult.formatResult(res, 201, successMessages.user.created) } catch (err) { logger('Error creating user: ', err) if (err.message === errorMessages.user.already_exists) { return FetchResult.formatResult(res, 400, errorMessages.user.already_exists) } return FetchResult.formatResult(res, 500, 'Internal server error') } } ] exports.login = [ body('account').notEmpty().withMessage('Account is required'), body('password').notEmpty().withMessage('Password is required'), async (req, res, next) => { const errors = validationResult(req) if (!errors.isEmpty()) { console.log(errors) return FetchResult.formatResult( res, 400, errors .array() .map((err) => err.msg) .join(', ') ) } next() }, async (req, res) => { try { const { account, password } = req.body const user = await userService.login(account, password) req.session.user = user return FetchResult.formatResult(res, 200, successMessages.user.login) } catch (err) { if (err.message === errorMessages.user.not_found) { return FetchResult.formatResult(res, 401, errorMessages.user.account_password_not_match) } return FetchResult.formatResult(res, 500, 'Internal server error') } } ] exports.getUserExist = async (req, res) => { console.log(req.path) try { const { account } = req.query const exist = await userService.get_user_exist(account) if (!exist) { return FetchResult.formatResult(res, 404, errorMessages.user.not_found) } return FetchResult.formatResult(res, 200, successMessages.user.exist) } catch (err) { return FetchResult.formatResult(res, 500, 'Internal server error') } }