package hu.sch.api.search;
import hu.sch.api.Base;
import hu.sch.api.exceptions.RequestFormatException;
import hu.sch.domain.Group;
import hu.sch.domain.user.User;
import hu.sch.services.SearchManagerLocal;
import java.util.List;
import javax.inject.Inject;
import javax.validation.Valid;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@Path("search")
public class Search extends Base {
private static final Logger logger = LoggerFactory.getLogger(Search.class);
private SearchManagerLocal searchManager;
@POST
public SearchResult doSearch(@Valid final SearchTerm term) {
if (term == null) {
throw new RequestFormatException("Request body cannot be empty.");
}
long countOfUsers = searchManager.countUsers(term.getTerm());
long countOfGroup = searchManager.countGroup(term.getTerm());
switch(term.getMode()) {
case USER:
List<User> users = searchManager.searchUsers(term.getTerm(), term.getPage(), term.getResultsPerPage());
return SearchResult.fromUsers(countOfUsers, countOfGroup, users);
case GROUP:
List<Group> groups = searchManager.searchGroups(term.getTerm(), term.getPage(), term.getResultsPerPage());
return SearchResult.fromGroups(countOfUsers, countOfGroup, groups);
default:
logger.error("Not supported search mode: {}", term.getMode().name());
throw new RequestFormatException("Not supported search mode: " + term.getMode().name());
}
}
@Inject
public void setSearchManager(SearchManagerLocal searchManager) {
this.searchManager = searchManager;
}
}