package br.com.caelum.example.controller;
import static br.com.caelum.vraptor.view.Results.representation;
import static br.com.caelum.vraptor.view.Results.status;
import br.com.caelum.example.infra.Database;
import br.com.caelum.example.model.Item;
import br.com.caelum.vraptor.Consumes;
import br.com.caelum.vraptor.Get;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.restfulie.Restfulie;
import br.com.caelum.vraptor.restfulie.hypermedia.ConfigurableHypermediaResource;
@Resource
public class ItemsController {
private final Database database;
private final Result result;
private final Restfulie restfulie;
public ItemsController(Database database, Result result, Restfulie restfulie) {
this.database = database;
this.result = result;
this.restfulie = restfulie;
}
@Get
@Path("/items")
public void list() {
ConfigurableHypermediaResource resource = restfulie.enhance(database.lista());
resource.relation("basket").uses(BasketsController.class).create(null);
result.use(representation()).from(resource, "items").serialize();
}
@Get
@Path("/items/{id}")
public void show(int id) {
Item item = database.get(id);
result.use(representation()).from(item).serialize();
}
@Post
@Consumes
@Path("/items")
public void create(Item item) {
database.adiciona(item);
result.use(status()).created("/items/" + item.getId());
}
}