/*
   * TODO: Refatorar esse código, está um lixo. Validar Subject enviado, senão vai dar exception.
   */
  @ApiMethod(
      produces = APIDoc.PROD_CONSU_JSON,
      consumes = APIDoc.PROD_CONSU_JSON,
      summary = APIDoc.SUM_SAVE_KNOWLEDGE)
  @ApiBodyObject(clazz = KnowledgeMod.class)
  @RequestMapping(value = "/knowledge", method = RequestMethod.POST)
  public ResponseEntity saveKnowledge(@RequestBody KnowledgeMod param) {

    ResponseEntity responseEntity = getErrorResponse(param);
    if (responseEntity != null) return responseEntity;

    User user = null;
    if (Utils.verifyParamEmptyOrNull(param.idUser)) user = userService.findById(param.idUser);
    else if (user == null)
      return new ResponseEntity("Usuário inválido.", HttpStatus.UNPROCESSABLE_ENTITY);

    Area area = null;
    if (Utils.verifyParamEmptyOrNull(param.area)) {
      area = service.findAreaById(param.area);
      if (area == null)
        return new ResponseEntity(
            "Impossível localizar área com id: " + param.area, HttpStatus.UNPROCESSABLE_ENTITY);
      else param.name = area.getName();
    } else {
      area = service.saveArea(new Area(param.name));
      param.area = area.getId();
    }

    Knowledge knowledge = new Knowledge(user, area);
    if (param.subject != null && param.subject > 0) {
      Subject subject = service.findSubjectById(param.subject);
      knowledge.setSubject(subject);
    }
    service.save(knowledge);

    return new ResponseEntity(
        param, knowledge != null ? HttpStatus.CREATED : HttpStatus.INTERNAL_SERVER_ERROR);
  }