Skip to content

Commit ad63d61

Browse files
author
jianggang
committed
feat: add query approval total function
1 parent 3ef9d40 commit ad63d61

5 files changed

Lines changed: 55 additions & 0 deletions

File tree

src/main/java/com/featureprobe/api/controller/ApprovalRecordController.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,13 @@
11
package com.featureprobe.api.controller;
22

33
import com.featureprobe.api.base.doc.DefaultApiResponses;
4+
import com.featureprobe.api.base.doc.GetApiResponse;
5+
import com.featureprobe.api.base.enums.ApprovalStatusEnum;
46
import com.featureprobe.api.dto.ApprovalRecordQueryRequest;
57
import com.featureprobe.api.dto.ApprovalRecordResponse;
8+
import com.featureprobe.api.dto.ApprovalTotalResponse;
69
import com.featureprobe.api.service.ApprovalRecordService;
10+
import io.swagger.v3.oas.annotations.Operation;
711
import io.swagger.v3.oas.annotations.tags.Tag;
812
import lombok.AllArgsConstructor;
913
import lombok.extern.slf4j.Slf4j;
@@ -25,8 +29,17 @@ public class ApprovalRecordController {
2529
private ApprovalRecordService approvalRecordService;
2630

2731
@GetMapping
32+
@GetApiResponse
33+
@Operation(summary = "Get approval list", description = "Get approval list.")
2834
public Page<ApprovalRecordResponse> list(@Validated ApprovalRecordQueryRequest queryRequest) {
2935
return approvalRecordService.list(queryRequest);
3036
}
3137

38+
@GetMapping("/total")
39+
@GetApiResponse
40+
@Operation(summary = "Get approval total by status", description = "Get approval list.")
41+
public ApprovalTotalResponse total(ApprovalStatusEnum status) {
42+
return new ApprovalTotalResponse(approvalRecordService.total(status));
43+
}
44+
3245
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package com.featureprobe.api.dto;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Data;
5+
import lombok.NoArgsConstructor;
6+
7+
@Data
8+
@AllArgsConstructor
9+
@NoArgsConstructor
10+
public class ApprovalTotalResponse {
11+
12+
private long total;
13+
14+
}

src/main/java/com/featureprobe/api/repository/ApprovalRecordRepository.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.featureprobe.api.repository;
22

3+
import com.featureprobe.api.base.enums.ApprovalStatusEnum;
34
import com.featureprobe.api.entity.ApprovalRecord;
45
import org.springframework.data.jpa.repository.JpaRepository;
56
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
@@ -14,4 +15,5 @@ public interface ApprovalRecordRepository extends JpaRepository<ApprovalRecord,
1415
Optional<ApprovalRecord> findByProjectKeyAndEnvironmentKeyAndToggleKey(String projectKey, String environmentKey,
1516
String toggleKey);
1617

18+
long countByStatusAndReviewersIsContaining(ApprovalStatusEnum status, String account);
1719
}

src/main/java/com/featureprobe/api/service/ApprovalRecordService.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.featureprobe.api.service;
22

33
import com.featureprobe.api.auth.TokenHelper;
4+
import com.featureprobe.api.base.enums.ApprovalStatusEnum;
45
import com.featureprobe.api.base.enums.ApprovalTypeEnum;
56
import com.featureprobe.api.base.enums.ResourceType;
67
import com.featureprobe.api.base.enums.SketchStatusEnum;
@@ -75,6 +76,11 @@ public Page<ApprovalRecordResponse> list(ApprovalRecordQueryRequest queryRequest
7576
return new PageImpl<>(sortedRes, pageable, res.getTotalElements());
7677
}
7778

79+
public long total(ApprovalStatusEnum status) {
80+
return approvalRecordRepository.countByStatusAndReviewersIsContaining(status,
81+
"\"" + TokenHelper.getAccount() + "\"");
82+
}
83+
7884
private Specification<ApprovalRecord> buildListSpec(ApprovalRecordQueryRequest queryRequest) {
7985
return (root, query, cb) -> {
8086
Predicate p1 = cb.equal(root.get("submitBy"), TokenHelper.getAccount());

src/test/groovy/com/featureprobe/api/service/ApprovalRecordServiceSpec.groovy

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package com.featureprobe.api.service
22

3+
import com.featureprobe.api.auth.TokenHelper
34
import com.featureprobe.api.base.enums.ApprovalStatusEnum
45
import com.featureprobe.api.base.enums.ApprovalTypeEnum
56
import com.featureprobe.api.dto.ApprovalRecordQueryRequest
@@ -16,6 +17,10 @@ import com.featureprobe.api.repository.ToggleRepository
1617
import org.hibernate.internal.SessionImpl
1718
import org.springframework.data.domain.PageImpl
1819
import org.springframework.data.domain.Pageable
20+
import org.springframework.security.core.context.SecurityContextHolder
21+
import org.springframework.security.core.context.SecurityContextImpl
22+
import org.springframework.security.oauth2.jwt.Jwt
23+
import org.springframework.security.oauth2.server.resource.authentication.JwtAuthenticationToken
1924
import spock.lang.Specification
2025

2126
import javax.persistence.EntityManager
@@ -56,5 +61,20 @@ class ApprovalRecordServiceSpec extends Specification {
5661
1 == list.content.size()
5762
}
5863

64+
def "Query approval record total by status" () {
65+
given:
66+
setAuthContext("Admin", "ADMIN")
67+
when:
68+
def total = approvalRecordService.total(ApprovalStatusEnum.PENDING)
69+
then:
70+
1 * approvalRecordRepository.countByStatusAndReviewersIsContaining(ApprovalStatusEnum.PENDING, "\"Admin\"") >> 1
71+
1 == total
72+
}
73+
74+
private setAuthContext(String account, String role) {
75+
SecurityContextHolder.setContext(new SecurityContextImpl(
76+
new JwtAuthenticationToken(new Jwt.Builder("21212").header("a","a")
77+
.claim("role", role).claim("account", account).build())))
78+
}
5979
}
6080

0 commit comments

Comments
 (0)