mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 12:50:38 +00:00
refactoring: trial balance sheet report. refactoring: general ledger report. refactoring: journal report. refactoring: P&L report.
71 lines
1.8 KiB
TypeScript
71 lines
1.8 KiB
TypeScript
import { Response, Request, NextFunction } from 'express';
|
|
import { matchedData, validationResult } from "express-validator";
|
|
import { camelCase, snakeCase, omit } from "lodash";
|
|
import { mapKeysDeep } from 'utils'
|
|
import asyncMiddleware from 'api/middleware/asyncMiddleware';
|
|
|
|
export default class BaseController {
|
|
|
|
/**
|
|
* Converts plain object keys to cameCase style.
|
|
* @param {Object} data
|
|
*/
|
|
private dataToCamelCase(data) {
|
|
return mapKeysDeep(data, (v, k) => camelCase(k));
|
|
}
|
|
|
|
/**
|
|
* Matches the body data from validation schema.
|
|
* @param {Request} req
|
|
* @param options
|
|
*/
|
|
matchedBodyData(req: Request, options: any = {}) {
|
|
const data = matchedData(req, {
|
|
locations: ['body'],
|
|
includeOptionals: true,
|
|
...omit(options, ['locations']), // override any propery except locations.
|
|
});
|
|
return this.dataToCamelCase(data);
|
|
}
|
|
|
|
/**
|
|
* Matches the query data from validation schema.
|
|
* @param {Request} req
|
|
*/
|
|
matchedQueryData(req: Request) {
|
|
const data = matchedData(req, {
|
|
locations: ['query'],
|
|
});
|
|
return this.dataToCamelCase(data);
|
|
}
|
|
|
|
/**
|
|
* Validate validation schema middleware.
|
|
* @param {Request} req
|
|
* @param {Response} res
|
|
* @param {NextFunction} next
|
|
*/
|
|
validationResult(req: Request, res: Response, next: NextFunction) {
|
|
const validationErrors = validationResult(req);
|
|
|
|
if (!validationErrors.isEmpty()) {
|
|
return res.boom.badData(null, {
|
|
code: 'validation_error',
|
|
...validationErrors,
|
|
});
|
|
}
|
|
next();
|
|
}
|
|
|
|
/**
|
|
* Transform the given data to response.
|
|
* @param {any} data
|
|
*/
|
|
transfromToResponse(data: any) {
|
|
return mapKeysDeep(data, (v, k) => snakeCase(k));
|
|
}
|
|
|
|
asyncMiddleware(callback) {
|
|
return asyncMiddleware(callback);
|
|
}
|
|
} |