package kickr.web.api;
import io.dropwizard.hibernate.UnitOfWork;
import java.util.List;
import java.util.stream.Collectors;
import javax.annotation.security.RolesAllowed;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
import kickr.web.model.PlayerData;
import kickr.db.dao.PlayerDAO;
import kickr.db.entity.Player;
import kickr.web.model.SearchResultsData;
@Path("player")
@Produces(MediaType.APPLICATION_JSON)
public class PlayerResource {
protected PlayerDAO playerDao;
public PlayerResource(PlayerDAO playerDao) {
this.playerDao = playerDao;
}
/**
* Query conditions are disjunctive
*
* @param query
* @return
*/
@GET
@Path("search")
@RolesAllowed("user")
@UnitOfWork
public SearchResultsData getPlayers(@QueryParam("query") String query) {
query = query.trim();
List<Player> players = playerDao.findPlayersMatchingNameOrAlias(query);
List<SearchResultsData.Result> results =
players.stream()
.map(p -> new SearchResultsData.Result(p.getAlias(), p.getName()))
.collect(Collectors.toList());
PlayerData playerDefinition = PlayerUtil.parsePlayer(query);
if (playerDefinition.getEmail() != null) {
results.add(0, new SearchResultsData.Result(
playerDefinition.getAlias() + " <" + playerDefinition.getEmail() + ">",
"(new player)"
));
}
return new SearchResultsData().withResults(results);
}
@POST
@RolesAllowed("user")
@UnitOfWork
public void createPlayer(PlayerData player) {
playerDao.create(player.toPlayer());
}
}