Skip to content

Commit 352da5f

Browse files
author
jianggang
committed
fix: mysql >= 5.7 sql_mode=only_full_group_by compatible
1 parent 2e6b47c commit 352da5f

6 files changed

Lines changed: 26 additions & 29 deletions

File tree

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public List<MemberResponse> create(@Validated @RequestBody MemberCreateRequest c
5454
@Operation(summary = "List Member", description = "Get a list of all member")
5555
@PreAuthorize("hasAnyAuthority('OWNER', 'WRITER')")
5656
public Page<MemberResponse> list(MemberSearchRequest searchRequest) {
57-
return memberService.query(searchRequest);
57+
return memberService.list(searchRequest);
5858
}
5959

6060
@PatchMapping

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

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@
33
import com.featureprobe.api.entity.Event;
44
import org.springframework.data.jpa.repository.JpaRepository;
55
import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
6+
import org.springframework.data.jpa.repository.Query;
67
import org.springframework.stereotype.Repository;
78

89
import java.util.Date;
910
import java.util.List;
11+
import java.util.Set;
1012

1113
@Repository
1214
public interface EventRepository extends JpaRepository<Event, Long>, JpaSpecificationExecutor<Event> {
@@ -18,4 +20,13 @@ List<Event> findBySdkKeyAndToggleKeyAndStartDateGreaterThanEqualAndEndDateLessTh
1820

1921
boolean existsBySdkKeyAndToggleKey(String sdkKey, String toggleKey);
2022

23+
@Query(value = "SELECT toggle_key from event WHERE sdk_key = ?1 OR sdk_key = ?2 GROUP BY toggle_key",
24+
nativeQuery = true)
25+
Set<String> findAllAccessedToggleKey(String serverSdkKey, String clientSdkKey);
26+
27+
@Query(value = "SELECT toggle_key from event WHERE ( sdk_key = ?1 OR sdk_key = ?2 ) " +
28+
"AND end_date >= ?3 GROUP BY toggle_key", nativeQuery = true)
29+
Set<String> findAllAccessedToggleKeyGreaterThanOrEqualToEndDate(String serverSdkKey, String clientSdkKey,
30+
Date time);
31+
2132
}

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

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,13 +143,12 @@ private void verifyAdminPrivileges() {
143143
}
144144
}
145145

146-
public Page<MemberResponse> query(MemberSearchRequest searchRequest) {
146+
public Page<MemberResponse> list(MemberSearchRequest searchRequest) {
147147
Pageable pageable = PageRequestUtil.toPageable(searchRequest, Sort.Direction.DESC, "createdTime");
148148
Specification<OrganizationMember> spec = (root, query, cb) -> {
149149
Predicate p1 = cb.equal(root.get("organizationId"), TenantContext.getCurrentOrganization()
150150
.getOrganizationId());
151-
return query.where(cb.and(p1)).groupBy(root.get("memberId"))
152-
.getRestriction();
151+
return query.where(cb.and(p1)).getRestriction();
153152
};
154153
Page<OrganizationMember> organizationMembers = organizationMemberRepository.findAll(spec, pageable);
155154
List<Long> memberIds = organizationMembers.getContent().stream().map(OrganizationMember::getMemberId)

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

Lines changed: 3 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,6 @@
4242
import com.featureprobe.api.util.PageRequestUtil;
4343
import com.featureprobe.sdk.server.FPUser;
4444
import com.featureprobe.sdk.server.FeatureProbe;
45-
import com.google.common.collect.Sets;
4645
import lombok.AllArgsConstructor;
4746
import lombok.extern.slf4j.Slf4j;
4847
import org.apache.commons.collections4.CollectionUtils;
@@ -60,9 +59,7 @@
6059
import javax.persistence.criteria.Predicate;
6160
import java.time.LocalDateTime;
6261
import java.time.ZoneId;
63-
import java.util.ArrayList;
6462
import java.util.Arrays;
65-
import java.util.Collections;
6663
import java.util.Date;
6764
import java.util.HashMap;
6865
import java.util.HashSet;
@@ -381,27 +378,13 @@ private Set<String> queryToggleKeysByVisited(VisitFilter visitFilter, String pro
381378
}
382379

383380
private Set<String> allVisitedToggleKeys(Environment environment) {
384-
Specification<Event> spec = (root, query, cb) -> {
385-
Predicate p1 = cb.equal(root.get("sdkKey"), environment.getServerSdkKey());
386-
Predicate p2 = cb.equal(root.get("sdkKey"), environment.getClientSdkKey());
387-
return query.where(cb.or(p1, p2)).groupBy(root.get("toggleKey"))
388-
.getRestriction();
389-
};
390-
List<Event> events = eventRepository.findAll(spec);
391-
return events.stream().map(Event::getToggleKey).collect(Collectors.toSet());
381+
return eventRepository.findAllAccessedToggleKey(environment.getServerSdkKey(), environment.getClientSdkKey());
392382
}
393383

394384
private Set<String> weekVisitedToggleKeys(Environment environment) {
395385
Date lastWeek = Date.from(LocalDateTime.now().minusDays(7).atZone(ZoneId.systemDefault()).toInstant());
396-
Specification<Event> spec = (root, query, cb) -> {
397-
Predicate p1 = cb.equal(root.get("sdkKey"), environment.getServerSdkKey());
398-
Predicate p2 = cb.equal(root.get("sdkKey"), environment.getClientSdkKey());
399-
Predicate p3 = cb.greaterThanOrEqualTo(root.get("endDate"), lastWeek);
400-
return query.where(cb.or(p1, p2), cb.and(p3)).groupBy(root.get("toggleKey"))
401-
.getRestriction();
402-
};
403-
List<Event> events = eventRepository.findAll(spec);
404-
return events.stream().map(Event::getToggleKey).collect(Collectors.toSet());
386+
return eventRepository.findAllAccessedToggleKeyGreaterThanOrEqualToEndDate(
387+
environment.getServerSdkKey(), environment.getClientSdkKey(), lastWeek);
405388
}
406389

407390
private Set<String> lastVisitBeforeWeekToggleKeys(Environment environment) {

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ class MemberServiceSpec extends Specification {
166166

167167
def "query member list"() {
168168
when:
169-
def list = memberService.query(new MemberSearchRequest(keyword: "root",
169+
def list = memberService.list(new MemberSearchRequest(keyword: "root",
170170
pageIndex: 0, pageSize: 10))
171171

172172
then:

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

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ class ToggleServiceSpec extends Specification {
7070

7171
IncludeArchivedToggleService includeArchivedToggleService
7272

73+
Set<String> toggleKeys = new HashSet();
74+
7375
def projectKey
7476
def environmentKey
7577
def toggleKey
@@ -102,6 +104,7 @@ class ToggleServiceSpec extends Specification {
102104
toggleKey = "feature_toggle_unit_test"
103105
toggleName = "test_toggle"
104106
sdkKey = "server-123456"
107+
toggleKeys.add(toggleKey)
105108
rules = "{\"rules\":[{\"conditions\":[{\"type\":\"string\",\"subject\":\"city\",\"predicate\":\"is one of\"," +
106109
"\"objects\":[\"Paris\"]},{\"type\":\"segment\",\"subject\":\"\",\"predicate\":\"is in\"," +
107110
"\"objects\":[\"test_segment\"]},{\"type\":\"number\",\"subject\":\"age\",\"predicate\":\"=\"," +
@@ -142,7 +145,7 @@ class ToggleServiceSpec extends Specification {
142145
false) >> [new Targeting(toggleKey: toggleKey)]
143146
1 * tagRepository.findByNameIn(["test"]) >> [new Tag(name: "test", toggles: [new Toggle(key: toggleKey)])]
144147
1 * toggleTagRepository.findByTagIdIn(_) >> [new ToggleTagRelation(toggleKey: toggleKey)]
145-
1 * eventRepository.findAll(_) >> [new Event(toggleKey: toggleKey)]
148+
1 * eventRepository.findAllAccessedToggleKeyGreaterThanOrEqualToEndDate(_, _, _) >> toggleKeys
146149
1 * toggleRepository.findAll(_, _) >> new PageImpl<>([new Toggle(key: toggleKey, projectKey: projectKey)],
147150
Pageable.ofSize(1), 1)
148151
1 * targetingRepository.findByProjectKeyAndEnvironmentKeyAndToggleKeyIn(projectKey, environmentKey, [toggleKey]) >>
@@ -176,7 +179,8 @@ class ToggleServiceSpec extends Specification {
176179
false) >> [new Targeting(toggleKey: toggleKey)]
177180
1 * tagRepository.findByNameIn(["test"]) >> [new Tag(name: "test", toggles: [new Toggle(key: toggleKey)])]
178181
1 * toggleTagRepository.findByTagIdIn(_) >> [new ToggleTagRelation(toggleKey: toggleKey)]
179-
2 * eventRepository.findAll(_) >> [new Event(toggleKey: toggleKey)]
182+
1 * eventRepository.findAllAccessedToggleKey(_, _) >> toggleKeys
183+
1 * eventRepository.findAllAccessedToggleKeyGreaterThanOrEqualToEndDate(_, _, _) >> toggleKeys
180184
1 * toggleRepository.findAll(_, _) >> new PageImpl<>([new Toggle(key: toggleKey, projectKey: projectKey)],
181185
Pageable.ofSize(1), 1)
182186
1 * targetingRepository.findByProjectKeyAndEnvironmentKeyAndToggleKeyIn(projectKey, environmentKey, [toggleKey]) >>
@@ -210,7 +214,7 @@ class ToggleServiceSpec extends Specification {
210214
false) >> [new Targeting(toggleKey: toggleKey)]
211215
1 * tagRepository.findByNameIn(["test"]) >> [new Tag(name: "test", toggles: [new Toggle(key: toggleKey)])]
212216
1 * toggleTagRepository.findByTagIdIn(_) >> [new ToggleTagRelation(toggleKey: toggleKey)]
213-
1 * eventRepository.findAll(_) >> [new Event(toggleKey: toggleKey)]
217+
1 * eventRepository.findAllAccessedToggleKey(_, _) >> toggleKeys
214218
1 * toggleRepository.findAll(_) >> [new Toggle(key: toggleKey, projectKey: projectKey)]
215219
1 * toggleRepository.findAll(_, _) >> new PageImpl<>([new Toggle(key: toggleKey, projectKey: projectKey)],
216220
Pageable.ofSize(1), 1)
@@ -245,7 +249,7 @@ class ToggleServiceSpec extends Specification {
245249
false) >> [new Targeting(toggleKey: toggleKey)]
246250
1 * tagRepository.findByNameIn(["test"]) >> [new Tag(name: "test", toggles: [new Toggle(key: toggleKey)])]
247251
1 * toggleTagRepository.findByTagIdIn(_) >> [new ToggleTagRelation(toggleKey: toggleKey)]
248-
1 * eventRepository.findAll(_) >> [new Event(toggleKey: toggleKey)]
252+
1 * eventRepository.findAllAccessedToggleKeyGreaterThanOrEqualToEndDate(_, _, _) >> toggleKeys
249253
1 * toggleRepository.findAll(_, _) >> new PageImpl<>([new Toggle(key: toggleKey, projectKey: projectKey)],
250254
Pageable.ofSize(1), 1)
251255
1 * targetingRepository.findByProjectKeyAndEnvironmentKeyAndToggleKeyIn(projectKey, environmentKey, [toggleKey]) >>

0 commit comments

Comments
 (0)