Skip to content

Commit 92b6af1

Browse files
committed
support batch list latest jobs by flow id list
1 parent 1389962 commit 92b6af1

File tree

6 files changed

+58
-1
lines changed

6 files changed

+58
-1
lines changed

core/src/main/java/com/flowci/core/job/controller/JobController.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
import org.springframework.web.bind.annotation.*;
3636

3737
import java.util.Base64;
38+
import java.util.Collection;
39+
import java.util.Collections;
3840
import java.util.List;
3941

4042
/**
@@ -56,6 +58,15 @@ public class JobController extends BaseController {
5658
@Autowired
5759
private TaskExecutor appTaskExecutor;
5860

61+
@PostMapping("/batch/latest")
62+
@Action(JobAction.LIST)
63+
public List<Job> listLatest(@RequestBody Collection<String> flowIdList) {
64+
if (flowIdList.isEmpty()) {
65+
return Collections.emptyList();
66+
}
67+
return jobService.listLatest(flowIdList);
68+
}
69+
5970
@GetMapping("/{flow}")
6071
@Action(JobAction.LIST)
6172
public Page<JobItem> list(@PathVariable("flow") String name,
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,14 @@
11
package com.flowci.core.job.dao;
22

3+
import com.flowci.core.job.domain.Job;
4+
import com.flowci.core.job.domain.JobNumber;
5+
6+
import java.util.Collection;
7+
import java.util.List;
8+
39
public interface CustomJobDao {
410

511
void increaseNumOfArtifact(String jobId);
12+
13+
List<Job> list(Collection<JobNumber> numbers);
614
}

core/src/main/java/com/flowci/core/job/dao/CustomJobDaoImpl.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
package com.flowci.core.job.dao;
22

33
import com.flowci.core.job.domain.Job;
4+
import com.flowci.core.job.domain.JobNumber;
45
import org.springframework.beans.factory.annotation.Autowired;
56
import org.springframework.data.mongodb.core.MongoOperations;
7+
import org.springframework.data.mongodb.core.query.Criteria;
68
import org.springframework.data.mongodb.core.query.Update;
79

10+
import java.util.ArrayList;
11+
import java.util.Collection;
12+
import java.util.List;
13+
814
import static org.springframework.data.mongodb.core.query.Criteria.where;
915
import static org.springframework.data.mongodb.core.query.Query.query;
1016

@@ -20,4 +26,20 @@ public void increaseNumOfArtifact(String jobId) {
2026
new Update().inc("numOfArtifact", 1),
2127
Job.class);
2228
}
29+
30+
@Override
31+
public List<Job> list(Collection<JobNumber> numbers) {
32+
List<String> flowIdList = new ArrayList<>(numbers.size());
33+
List<Long> buildNumList = new ArrayList<>(numbers.size());
34+
35+
for (JobNumber num : numbers) {
36+
flowIdList.add(num.getFlowId());
37+
buildNumList.add(num.getNumber());
38+
}
39+
40+
Criteria criteria = where("flowId").in(flowIdList)
41+
.andOperator(where("buildNumber").in(buildNumList));
42+
43+
return operations.find(query(criteria), Job.class);
44+
}
2345
}

core/src/main/java/com/flowci/core/job/dao/JobNumberDao.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
import org.springframework.data.mongodb.repository.MongoRepository;
2121
import org.springframework.stereotype.Repository;
2222

23+
import java.util.Collection;
24+
import java.util.List;
2325
import java.util.Optional;
2426

2527
/**
@@ -30,5 +32,7 @@ public interface JobNumberDao extends MongoRepository<JobNumber, String>, Custom
3032

3133
Optional<JobNumber> findByFlowId(String flowId);
3234

35+
List<JobNumber> findAllByFlowIdIn(Collection<String> ids);
36+
3337
void deleteAllByFlowId(String flowId);
3438
}

core/src/main/java/com/flowci/core/job/service/JobService.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
import org.springframework.data.domain.Page;
2727

2828
import javax.annotation.Nullable;
29+
import java.util.Collection;
2930
import java.util.List;
3031

3132
/**
@@ -61,10 +62,15 @@ public interface JobService {
6162
JobYml getYml(Job job);
6263

6364
/**
64-
* Get latest job
65+
* Get the latest job
6566
*/
6667
Job getLatest(String flowId);
6768

69+
/**
70+
* List latest jobs from flow id list
71+
*/
72+
List<Job> listLatest(Collection<String> flowIdList);
73+
6874
/**
6975
* List jobs with fields only shown on the list
7076
*/

core/src/main/java/com/flowci/core/job/service/JobServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -199,6 +199,12 @@ public Job getLatest(String flowId) {
199199
throw new NotFoundException("No jobs for flow {0}", flowId);
200200
}
201201

202+
@Override
203+
public List<Job> listLatest(Collection<String> flowIdList) {
204+
List<JobNumber> numberList = jobNumberDao.findAllByFlowIdIn(flowIdList);
205+
return jobDao.list(numberList);
206+
}
207+
202208
@Override
203209
public Page<JobItem> list(Flow flow, int page, int size) {
204210
PageRequest pageable = PageRequest.of(page, size, SortByBuildNumber);

0 commit comments

Comments
 (0)