/** * Saves user response. * * <p>This action builds a Response object from request by creating and parsing DynamicForm data. * Built Response object is then validated and returned back to client as a JSON object. * * <p>If response object is not valid - returns BAD_REQUEST status code to client as well as JSON * object with validation errors. * * <p>If response data is outdated - returns BAD_REQUEST status code to client as well as JSON * object with global errors. * * <p>This action requires CSRF token. * * @return 200-OK with saved response object as JSON 400-BAD_REQUEST with errors as JSON */ @RequireCSRFCheck @Transactional public Result createResponse() { DynamicForm form = form().bindFromRequest(); List<Field> activeFields = fieldService.getAllActiveFields(); Response response = new Response(form.data(), activeFields); Logger.info("User send response: {}.", response); List<ValidationError> errors = response.validate(); if (errors != null) { errors.forEach(form::reject); Logger.warn("User response contains validation errors: {}.", errors); return badRequest(form.errorsAsJson()); } Response result = responseService.saveResponse(response); if (result == null) { form.reject("global", "Some options are outdated!"); Logger.warn("Users response contains outdated data."); return badRequest(form.errorsAsJson()); } else { Logger.info("Response saved: {}.", response); return ok(toJson(response)); } }