Skip to content

Commit c49a0a8

Browse files
committed
list build by status
1 parent 6d5be56 commit c49a0a8

File tree

14 files changed

+123
-34
lines changed

14 files changed

+123
-34
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.flowci.build;
2+
3+
import com.flowci.build.business.ListBuilds;
4+
import com.flowci.build.model.Build;
5+
import io.swagger.v3.oas.annotations.Operation;
6+
import io.swagger.v3.oas.annotations.Parameter;
7+
import io.swagger.v3.oas.annotations.tags.Tag;
8+
import jakarta.validation.Valid;
9+
import jakarta.validation.constraints.Min;
10+
import lombok.AllArgsConstructor;
11+
import org.springframework.data.domain.PageRequest;
12+
import org.springframework.web.bind.annotation.*;
13+
14+
import java.util.List;
15+
16+
@RestController
17+
@RequestMapping("/v2/builds")
18+
@Tag(name = "build")
19+
@AllArgsConstructor
20+
public class BuildController {
21+
22+
private final ListBuilds listBuilds;
23+
24+
@Operation(description = "list builds")
25+
@GetMapping
26+
public List<Build> getBuildsByStatus(@RequestParam("status") Build.Status status,
27+
@RequestParam(required = false, name = "page", defaultValue = "0")
28+
@Valid @Min(0)
29+
Integer page,
30+
@RequestParam(required = false, name = "size", defaultValue = "20")
31+
@Valid @Min(20)
32+
Integer size) {
33+
return listBuilds.invoke(status, PageRequest.of(page, size));
34+
}
35+
}

src/main/java/com/flowci/build/FlowBuildController.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
@RestController
1717
@RequestMapping("/v2/flows")
18-
@Tag(name = "build for flows")
18+
@Tag(name = "flow")
1919
@AllArgsConstructor
2020
public class FlowBuildController {
2121

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.flowci.build.business;
2+
3+
import com.flowci.build.model.Build;
4+
5+
public interface FetchBuild {
6+
Build invoke(Long buildId);
7+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.flowci.build.business;
2+
3+
import com.flowci.build.model.Build;
4+
import org.springframework.data.domain.PageRequest;
5+
6+
import java.util.List;
7+
8+
public interface ListBuilds {
9+
List<Build> invoke(PageRequest pageRequest);
10+
List<Build> invoke(Build.Status status, PageRequest pageRequest);
11+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package com.flowci.build.business.impl;
2+
3+
import com.flowci.build.business.FetchBuild;
4+
import com.flowci.build.model.Build;
5+
import com.flowci.build.repo.BuildRepo;
6+
import com.flowci.common.exception.NotAvailableException;
7+
import lombok.AllArgsConstructor;
8+
import org.springframework.stereotype.Component;
9+
10+
@Component
11+
@AllArgsConstructor
12+
public class FetchBuildImpl implements FetchBuild {
13+
14+
private final BuildRepo buildRepo;
15+
16+
@Override
17+
public Build invoke(Long buildId) {
18+
var optional = buildRepo.findById(buildId);
19+
if (optional.isEmpty()) {
20+
throw new NotAvailableException("Build not found");
21+
}
22+
return optional.get();
23+
}
24+
}
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package com.flowci.build.business.impl;
2+
3+
import com.flowci.build.business.ListBuilds;
4+
import com.flowci.build.model.Build;
5+
import com.flowci.build.repo.BuildRepo;
6+
import lombok.AllArgsConstructor;
7+
import org.springframework.data.domain.PageRequest;
8+
import org.springframework.stereotype.Component;
9+
10+
import java.util.List;
11+
12+
@Component
13+
@AllArgsConstructor
14+
public class ListBuildsImpl implements ListBuilds {
15+
16+
private final BuildRepo buildRepo;
17+
18+
@Override
19+
public List<Build> invoke(PageRequest pageRequest) {
20+
return buildRepo.findAll(pageRequest).getContent();
21+
}
22+
23+
@Override
24+
public List<Build> invoke(Build.Status status, PageRequest pageRequest) {
25+
return buildRepo.findAllByStatusOrderByCreatedAtDesc(status, pageRequest);
26+
}
27+
}

src/main/java/com/flowci/build/business/impl/TriggerBuildImpl.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.flowci.build.business.impl;
22

33
import com.flowci.build.business.CreateBuild;
4+
import com.flowci.build.business.FetchBuild;
45
import com.flowci.build.business.TriggerBuild;
56
import com.flowci.build.business.WaitForAgent;
67
import com.flowci.build.model.Build;
@@ -16,12 +17,13 @@ public class TriggerBuildImpl implements TriggerBuild {
1617

1718
private final CreateBuild createBuild;
1819
private final WaitForAgent waitForAgent;
20+
private final FetchBuild fetchBuild;
1921

2022
@Override
2123
@Transactional
2224
public Build invoke(Long flowId, Build.Trigger trigger, @Nullable Variables inputs) {
2325
var build = createBuild.invoke(flowId, trigger, inputs);
2426
waitForAgent.invoke(build.getId());
25-
return build;
27+
return fetchBuild.invoke(build.getId());
2628
}
2729
}

src/main/java/com/flowci/build/repo/BuildRepo.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,20 @@
11
package com.flowci.build.repo;
22

33
import com.flowci.build.model.Build;
4+
import org.springframework.data.domain.Pageable;
45
import org.springframework.data.jpa.repository.JpaRepository;
56
import org.springframework.data.jpa.repository.Modifying;
67
import org.springframework.data.jpa.repository.Query;
78
import org.springframework.stereotype.Repository;
89
import org.springframework.transaction.annotation.Transactional;
910

11+
import java.util.List;
12+
1013
@Repository
1114
public interface BuildRepo extends JpaRepository<Build, Long> {
1215

16+
List<Build> findAllByStatusOrderByCreatedAtDesc(Build.Status status, Pageable pageable);
17+
1318
@Transactional
1419
@Modifying(clearAutomatically = true, flushAutomatically = true)
1520
@Query("update Build b set b.status = ?2 where b.id= ?1")

src/main/java/com/flowci/flow/FlowController.java

Lines changed: 2 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,8 @@
1414
import io.swagger.v3.oas.annotations.responses.ApiResponse;
1515
import io.swagger.v3.oas.annotations.tags.Tag;
1616
import jakarta.validation.Valid;
17-
import jakarta.validation.constraints.Min;
1817
import lombok.AllArgsConstructor;
1918
import lombok.extern.slf4j.Slf4j;
20-
import org.springframework.data.domain.PageRequest;
2119
import org.springframework.http.MediaType;
2220
import org.springframework.web.bind.annotation.*;
2321

@@ -48,16 +46,8 @@ public Flow getFlow(@PathVariable("id") @Valid @ValidId String id) {
4846
@GetMapping
4947
public List<Flow> getFlows(@RequestParam(required = false, name = "parentId", defaultValue = "10000")
5048
@Valid @ValidId
51-
String parentId,
52-
53-
@RequestParam(required = false, name = "page", defaultValue = "0")
54-
@Valid @Min(0)
55-
Integer page,
56-
57-
@RequestParam(required = false, name = "size", defaultValue = "20")
58-
@Valid @Min(20)
59-
Integer size) {
60-
return listFlows.invoke(parseLong(parentId), PageRequest.of(page, size));
49+
String parentId) {
50+
return listFlows.invoke(parseLong(parentId));
6151
}
6252

6353
@Operation(description = "create a new flow")

src/main/java/com/flowci/flow/business/ListFlows.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,9 @@
22

33
import com.flowci.flow.model.Flow;
44
import jakarta.annotation.Nullable;
5-
import org.springframework.data.domain.PageRequest;
65

76
import java.util.List;
87

98
public interface ListFlows {
10-
List<Flow> invoke(@Nullable Long parentId, PageRequest pageRequest);
9+
List<Flow> invoke(@Nullable Long parentId);
1110
}

0 commit comments

Comments
 (0)