Skip to content

Commit

Permalink
#602 Paginated list of validation runs for Build type
Browse files Browse the repository at this point in the history
  • Loading branch information
dcoraboeuf committed May 14, 2018
1 parent f1006f1 commit 8ea568c
Show file tree
Hide file tree
Showing 5 changed files with 106 additions and 0 deletions.
Expand Up @@ -227,8 +227,30 @@ public interface StructureService {

ValidationRun getValidationRun(ID validationRunId);

/**
* @deprecated Use {@link #getValidationRunsForBuild(ID, int, int)} instead.
*/
@Deprecated
List<ValidationRun> getValidationRunsForBuild(ID buildId);

/**
* Gets the list of validation runs for a build.
*
* @param buildId ID of the build
* @param offset Offset in the list
* @param count Maximum number of elements to return
* @return List of validation runs
*/
List<ValidationRun> getValidationRunsForBuild(ID buildId, int offset, int count);

/**
* Gets the number of validation runs for a build.
*
* @param buildId ID of the build
* @return Number of validation runs
*/
int getValidationRunsCountForBuild(ID buildId);

/**
* @deprecated Use {@link #getValidationRunsForBuildAndValidationStamp(ID, ID, int, int)} instead.
*/
Expand Down
Expand Up @@ -920,6 +920,31 @@ public List<ValidationRun> getValidationRunsForBuild(Build build, Function<Strin
);
}

@Override
public List<ValidationRun> getValidationRunsForBuild(Build build, int offset, int count, Function<String, ValidationRunStatusID> validationRunStatusService) {
return getNamedParameterJdbcTemplate().query(
"SELECT * FROM VALIDATION_RUNS WHERE BUILDID = :buildId ORDER BY ID DESC LIMIT :count OFFSET :offset",
params("buildId", build.id())
.addValue("offset", offset)
.addValue("count", count),
(rs, rowNum) -> toValidationRun(
rs,
id -> build,
this::getValidationStamp,
validationRunStatusService
)
);
}

@Override
public int getValidationRunsCountForBuild(Build build) {
return getNamedParameterJdbcTemplate().queryForObject(
"SELECT COUNT(ID) FROM VALIDATION_RUNS WHERE BUILDID = :buildId",
params("buildId", build.id()),
Integer.class
);
}

@Override
public List<ValidationRun> getValidationRunsForBuildAndValidationStamp(Build build, ValidationStamp validationStamp, Function<String, ValidationRunStatusID> validationRunStatusService) {
return getNamedParameterJdbcTemplate().query(
Expand Down
Expand Up @@ -184,8 +184,31 @@ default void builds(Branch branch, Predicate<Build> buildPredicate) {

ValidationRun getValidationRun(ID validationRunId, Function<String, ValidationRunStatusID> validationRunStatusService);

/**
* @deprecated Use {@link #getValidationRunsForBuild(ID, int, int, Function)} instead.
*/
@Deprecated
List<ValidationRun> getValidationRunsForBuild(Build build, Function<String, ValidationRunStatusID> validationRunStatusService);

/**
* Gets the list of validation runs for a build.
*
* @param build Build to get the validation runs for
* @param offset Offset in the list
* @param count Maximum number of elements to return
* @param validationRunStatusService Run status mapping function (provided by caller)
* @return List of validation runs
*/
List<ValidationRun> getValidationRunsForBuild(Build build, int offset, int count, Function<String, ValidationRunStatusID> validationRunStatusService);

/**
* Gets the number of validation runs for a build.
*
* @param build Build to get the validation runs for
* @return Number of validation runs
*/
int getValidationRunsCountForBuild(Build build);

@Deprecated
List<ValidationRun> getValidationRunsForBuildAndValidationStamp(Build build, ValidationStamp validationStamp, Function<String, ValidationRunStatusID> validationRunStatusService);

Expand Down
Expand Up @@ -1144,6 +1144,20 @@ public List<ValidationRun> getValidationRunsForBuild(ID buildId) {
return structureRepository.getValidationRunsForBuild(build, validationRunStatusService::getValidationRunStatus);
}

@Override
public List<ValidationRun> getValidationRunsForBuild(ID buildId, int offset, int count) {
Build build = getBuild(buildId);
securityService.checkProjectFunction(build.getBranch().getProject().id(), ProjectView.class);
return structureRepository.getValidationRunsForBuild(build, offset, count, validationRunStatusService::getValidationRunStatus);
}

@Override
public int getValidationRunsCountForBuild(ID buildId) {
Build build = getBuild(buildId);
securityService.checkProjectFunction(build.getBranch().getProject().id(), ProjectView.class);
return structureRepository.getValidationRunsCountForBuild(build);
}

@Override
public List<ValidationRun> getValidationRunsForBuildAndValidationStamp(ID buildId, ID validationStampId) {
Build build = getBuild(buildId);
Expand Down
Expand Up @@ -22,6 +22,7 @@ constructor(
private val structureService: StructureService,
private val projectEntityInterface: GQLProjectEntityInterface,
private val validation: GQLTypeValidation,
private val validationRun: GQLTypeValidationRun,
private val runInfo: GQLTypeRunInfo,
private val runInfoService: RunInfoService,
private val paginatedListFactory: GQLPaginatedListFactory,
Expand Down Expand Up @@ -91,6 +92,27 @@ constructor(
.dataFetcher(buildValidationRunsFetcher())
.build()
)

// Paginated list of validation runs
.field(
paginatedListFactory.createPaginatedField<Build, ValidationRun>(
fieldName = "validationRunsPaginated",
fieldDescription = "Paginated list of validation runs",
itemType = validationRun,
itemListCounter = { _, build ->
structureService.getValidationRunsCountForBuild(
build.id
)
},
itemListProvider = { _, build, offset, size ->
structureService.getValidationRunsForBuild(
build.id,
offset,
size
)
}
)
)
// Validation runs per validation stamp
.field { f ->
f.name("validations")
Expand Down

0 comments on commit 8ea568c

Please sign in to comment.