public class UserController {
    private static final int HTTP_BAD_REQUEST = 400;
    private static final int HTTP_STATUS_OK = 200;
    private static final UserDAO dao = new UserDAO();

    public UserController() {
        get("/users", (request, response) -> {
            response.status(HTTP_STATUS_OK);
            response.type("application/json");
            return dataToJson(dao.findAll());
        });

        post("/users", (request, response) -> {
            try {
                ObjectMapper mapper = new ObjectMapper();
                User user = mapper.readValue(request.body(), User.class);
                if (!user.isValid()) {
                    response.status(HTTP_BAD_REQUEST);
                    return "";
                }
                if (dao.create(user)) {
                    response.status(HTTP_STATUS_OK);
                    response.type("application/text");
                    return user.getId();
                }
                else { return ""; }
            }
            catch (JsonParseException e) {
                response.status(HTTP_BAD_REQUEST);
                return "";
            }
        });
    }

    public static String dataToJson(Object data) {
        try {
            ObjectMapper mapper = new ObjectMapper();
            mapper.enable(SerializationFeature.INDENT_OUTPUT);
            StringWriter sw = new StringWriter();
            mapper.writeValue(sw, data);
            return sw.toString();
        } catch (IOException e) {
            throw new RuntimeException("IOException from a StringWriter?");
        }
    }
}