ProjectAres/API/ocn/src/main/java/tc/oc/api/ocn/OCNTournamentService.java

55 lines
2.2 KiB
Java

package tc.oc.api.ocn;
import javax.inject.Singleton;
import com.damnhandy.uri.template.UriTemplate;
import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.ListenableFuture;
import tc.oc.api.docs.Entrant;
import tc.oc.api.docs.PlayerId;
import tc.oc.api.docs.Tournament;
import tc.oc.api.http.HttpOption;
import tc.oc.api.model.HttpQueryService;
import tc.oc.api.tourney.RecordMatchResponse;
import tc.oc.api.tourney.TournamentService;
@Singleton
class OCNTournamentService extends HttpQueryService<Tournament> implements TournamentService {
@Override
public ListenableFuture<RecordMatchResponse> recordMatch(Tournament tournament, String matchId) {
return client().post(memberUri(tournament._id(), "record_match"),
ImmutableMap.of("match_id", matchId),
RecordMatchResponse.class,
HttpOption.INFINITE_RETRY);
}
@Override
public ListenableFuture<Entrant> entrant(String tournamentId, String teamId) {
return client().get(UriTemplate.fromTemplate("/tournaments/{id}/entrants/{team_id}")
.set("id", tournamentId)
.set("team_id", teamId)
.expand(),
Entrant.class);
}
private ListenableFuture<Entrant> entrantSearch(String tournamentId, String param, String value) {
return client().get(UriTemplate.fromTemplate("/tournaments/{id}/entrants?{param}={value}")
.set("id", tournamentId)
.set("param", param)
.set("value", value)
.expand(),
Entrant.class);
}
@Override
public ListenableFuture<Entrant> entrantByTeamName(String tournamentId, String teamName) {
return entrantSearch(tournamentId, "team_name", teamName);
}
@Override
public ListenableFuture<Entrant> entrantByMember(String tournamentId, PlayerId playerId) {
return entrantSearch(tournamentId, "member_id", playerId._id());
}
}