package cassandra;
import java.util.concurrent.atomic.AtomicInteger;
import org.jooby.Jooby;
import org.jooby.Results;
import org.jooby.cassandra.Cassandra;
import org.jooby.cassandra.CassandraSessionStore;
import org.jooby.cassandra.Datastore;
import org.jooby.json.Jackson;
public class CassandraApp extends Jooby {
{
use(new Jackson());
use(new Cassandra("cassandra://localhost/beers")
.accesor(BeerRepo.class));
session(CassandraSessionStore.class);
/** Session */
AtomicInteger inc = new AtomicInteger(0);
get("/", req -> {
return req.ifSession().orElseGet(() -> {
return req.session()
.set("foo", inc.incrementAndGet());
}).attributes();
});
get("/delete", req -> {
req.ifSession().ifPresent(session -> {
session.destroy();
});
return "session destroyed";
});
get("/:name", req -> {
return req.ifSession()
.map(session -> session.get(req.param("name").value()).value())
.orElse("<missing>");
});
/** CRUD */
use("/api/beer")
.post(req -> {
Datastore ds = req.require(Datastore.class);
Beer beer = req.body().to(Beer.class);
ds.saveAsync(beer);
return beer;
})
.get("/:id", req -> {
Datastore ds = req.require(Datastore.class);
return ds.getAsync(Beer.class, req.param("id").value());
})
.get(req -> {
Datastore ds = req.require(Datastore.class);
return ds.queryAsync(Beer.class, "select * from beer");
})
.delete("/:id", req -> {
Datastore ds = req.require(Datastore.class);
ds.deleteAsync(Beer.class, req.param("id").value());
return Results.noContent();
});
}
public static void main(final String[] args) throws Throwable {
run(CassandraApp::new, args);
}
}