|
- import {
- AdderService,
- AdderServiceImpl,
- ArgumentOutOfRangeError,
- InvalidArgumentTypeError,
- } from './adder.service';
- import { CommandHandler } from '../../packages/cli-wrapper';
-
- export interface AdderController {
- addNumbers: CommandHandler;
- subtractNumbers: CommandHandler;
- }
-
- export class AdderControllerImpl implements AdderController {
- constructor(
- private readonly adderService: AdderService = new AdderServiceImpl(),
- ) {
- // noop
- }
-
- readonly addNumbers: CommandHandler = (params) => {
- if (!params.interactive) {
- const checkArgs = params.args as Record<string, unknown>;
- if (typeof checkArgs.a === 'undefined') {
- params.logger.error('Missing required argument: a');
- return -1;
- }
- if (typeof checkArgs.b === 'undefined') {
- params.logger.error('Missing required argument: b');
- return -1;
- }
- }
-
- const { a, b } = params.args;
- try {
- const response = this.adderService.addNumbers({ a: Number(a), b: Number(b) });
- params.logger.info(response);
- } catch (errorRaw) {
- const error = errorRaw as Error;
- params.logger.error(error.message);
- if (error instanceof InvalidArgumentTypeError) {
- return -1;
- }
- if (error instanceof ArgumentOutOfRangeError) {
- return -2;
- }
- return -3;
- }
- return 0;
- }
-
- readonly subtractNumbers: CommandHandler = (params) => {
- if (!params.interactive) {
- const checkArgs = params.args as Record<string, unknown>;
- if (typeof checkArgs.a === 'undefined') {
- params.logger.error('Missing required argument: a');
- return -1;
- }
- if (typeof checkArgs.b === 'undefined') {
- params.logger.error('Missing required argument: b');
- return -1;
- }
- }
-
- const { a, b } = params.args;
- try {
- const response = this.adderService.addNumbers({ a: Number(a), b: -(Number(b)) });
- params.logger.info(response);
- } catch (errorRaw) {
- const error = errorRaw as Error;
- params.logger.error(error.message);
- if (error instanceof InvalidArgumentTypeError) {
- return -1;
- }
- if (error instanceof ArgumentOutOfRangeError) {
- return -2;
- }
- return -3;
- }
- return 0;
- }
- }
|