import { Request, Response } from 'express';
<% dto.forEach(function(innerDto){ %>
import { <%= innerDto.controllerClassName %>BackEnd }  from '../convector';<% }); %>

export class Controller {<% dto.forEach(function(innerDto){ %><% innerDto.getAllMethods.forEach(function(method){ %>
  async <%= innerDto.name + '_' + method %>(req: Request, res: Response): Promise<void> {
    let result = await <%= innerDto.controllerClassName %>BackEnd.<%= method %>();
    res.status(200).json(result);
  }
<% }); %>
<% innerDto.getByIdMethods.forEach(function(method){ %>
  async <%= innerDto.name + '_' + method %>(req: Request, res: Response) {
    let result = await <%= innerDto.controllerClassName %>BackEnd.<%= method %>(req.params.id);
    if (!result) {
      return res.status(404);
    }
    res.json(result);
  }
<% });
  innerDto.createMethods.forEach(function(method){ %>
  async <%= innerDto.name + '_' + method.methodName %>(req: Request, res: Response) {
    try {
      let modelRaw = req.body;
      let result = await <%= innerDto.controllerClassName %>BackEnd.<%= method.methodName %>(modelRaw);
      res.json(result);
    } catch (ex) {
      console.log(ex.message, ex.stack);
      res.status(500).send(ex.stack);
    }
  }
<% });
  innerDto.serviceMethods.forEach(function(method){ %>
  async <%= innerDto.name + '_' + method.methodName %>(req: Request, res: Response) {
    try {
      let params = req.body;
      <% let parameters = new Array();
      method.parameters.forEach(function(parameter){
        parameters.push("params."+ parameter.getName());
      });
      parameterString = parameters.join(','); %>
      let returnObject = await <%= innerDto.controllerClassName %>BackEnd.<%= method.methodName %>(<%= parameterString %>);
      if (returnObject === undefined) {
        return res.status(404);
      }
      res.json(returnObject);
    } catch (ex) {
      console.log(ex.message, ex.stack);
      res.status(500).send(ex.stack);
    }
  }
<% }); %>
<% }); %>
}
export default new Controller();
