package apps.http.todo;
import http.FormUrlEncoded;
import http.HttpResponse;
import http.HttpStatusCode;
import java.io.IOException;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import todo.ToDo;
import todo.ToDoRepository;
public class ToDoController {
private final ToDoRepository _repo;
public ToDoController(ToDoRepository repo) {
_repo = repo;
}
public HttpResponse handleGetAllToDos(HttpServletRequest req) {
Iterable<ToDo> list = _repo.getAll();
return new HttpResponse(HttpStatusCode.Ok, new ToDosView(list));
}
public HttpResponse handleGetToDoById(HttpServletRequest req, int id) {
ToDo td = _repo.getById(id);
if(td == null) return new HttpResponse(HttpStatusCode.NotFound);
return new HttpResponse(HttpStatusCode.Ok, new ToDoView(td));
}
public HttpResponse handlePostToDos(HttpServletRequest req) {
try {
Map<String,String> values = FormUrlEncoded.retrieveFrom(req);
if(!values.containsKey("description"))
return new HttpResponse(HttpStatusCode.BadRequest);
ToDo td = new ToDo(values.get("description"));
_repo.add(td);
return new HttpResponse(HttpStatusCode.SeeOther)
.withHeader("Location", ResolveUrl.of(td));
} catch (IOException e) {
return new HttpResponse(HttpStatusCode.InternalServerError);
}
}
}