public PutPointResult putPoint(PutPointRequest putPointRequest) {
long geohash = S2Manager.generateGeohash(putPointRequest.getGeoPoint());
long hashKey = S2Manager.generateHashKey(geohash, config.getHashKeyLength());
String geoJson = GeoJsonMapper.stringFromGeoObject(putPointRequest.getGeoPoint());
PutItemRequest putItemRequest = putPointRequest.getPutItemRequest();
putItemRequest.setTableName(config.getTableName());
AttributeValue hashKeyValue = new AttributeValue().withN(String.valueOf(hashKey));
putItemRequest.getItem().put(config.getHashKeyAttributeName(), hashKeyValue);
putItemRequest.getItem().put(config.getRangeKeyAttributeName(), putPointRequest.getRangeKeyValue());
AttributeValue geohashValue = new AttributeValue().withN(Long.toString(geohash));
putItemRequest.getItem().put(config.getGeohashAttributeName(), geohashValue);
AttributeValue geoJsonValue = new AttributeValue().withS(geoJson);
putItemRequest.getItem().put(config.getGeoJsonAttributeName(), geoJsonValue);
PutItemResult putItemResult = config.getDynamoDBClient().putItem(putItemRequest);
PutPointResult putPointResult = new PutPointResult(putItemResult);
return putPointResult;