timi-codes/Banka

View on GitHub
API/controllers/account.controller.js

Summary

Maintainability
A
2 hrs
Test Coverage
import AccountService from '../services/account.service';
import ResponseGenerator from '../utils/ResponseGenerator';
 
const response = new ResponseGenerator();
 
/**
* account controller performs account related function - CRUD
*/
class AccountController {
/**
* @param{object} request express request object
* @param{object} response express request object
* @returns {json} json
* @memberof AccountController
*/
static async createBankAccount(req, res) {
const { id } = req.token;
const { type, balance } = req.body;
 
try {
const account = await AccountService.createAccount(id, type, balance);
return response.sendSuccess(res, 201, account);
} catch (error) {
return response.sendError(res, 400, error.message);
}
}
 
/**
* @param{object} request express request object
* @param{object} response express request object
* @returns {json} json
* @memberof AccountController
*/
Function `fetchAllAccounts` has a Cognitive Complexity of 9 (exceeds 6 allowed). Consider refactoring.
static async fetchAllAccounts(req, res) {
const { status } = req.query;
 
try {
if (status && !(['dormant', 'active'].includes(status))) {
throw new Error('invalid status query');
}
 
const accounts = await AccountService.getAllAccounts();
 
if (accounts.length > 0) {
if (status) {
const filtered = accounts.find(account => account.status === status);
if (filtered) {
return response.sendSuccess(res, 200, [filtered], 'Account was successfully fetched');
}
return response.sendSuccess(res, 200, [], 'No account found');
}
return response.sendSuccess(res, 200, accounts, 'Account was successfully fetched');
}
return response.sendError(res, 204, 'no account has been created');
} catch (error) {
Avoid too many `return` statements within this function.
return response.sendError(res, 400, error.message);
}
}
 
/**
* @param{object} request express request object
* @param{object} response express request object
* @returns {json} json
* @memberof AccountController
*/
static async changeStatus(req, res) {
const { status } = req.body;
const { accountNumber } = req.params;
try {
const data = await AccountService.changeAccountStatus(accountNumber, status);
return response.sendSuccess(res, 200, data, 'Account status was successfully changed');
} catch (error) {
return response.sendError(res, 400, error.message);
}
}
 
/**
* @param{object} request express request object
* @param{object} response express request object
* @returns {json} json
* @memberof AccountController
*/
Similar blocks of code found in 2 locations. Consider refactoring.
static async getAccount(req, res) {
const { accountNumber } = req.params;
try {
const data = await AccountService.getAccount(accountNumber);
return response.sendSuccess(res, 200, data, 'Account was successfully fetched');
} catch (error) {
return response.sendError(res, 400, error.message);
}
}
 
/**
* @param{object} request express request object
* @param{object} response express request object
* @returns {json} json
* @memberof UserController
*/
static async getAUserAccounts(req, res) {
const { email } = req.params;
try {
const accounts = await AccountService.getAUserAccounts(email);
if (accounts) {
return response.sendSuccess(res, 200, accounts, 'Accounts was successfully fetched');
}
return response.sendError(res, 400, 'something went wrong');
} catch (error) {
return response.sendError(res, 400, error.message);
}
}
 
/**
* @param{object} request express request object
* @param{object} response express request object
* @returns {json} json
* @memberof AccountController
*/
static async deleteAccount(req, res) {
const { accountNumber } = req.params;
try {
const message = await AccountService.deleteAccount(accountNumber);
return response.sendSuccess(res, 200, null, message);
} catch (error) {
return response.sendError(res, 400, error.message);
}
}
}
 
 
export default AccountController;