Skip to content

Commit 349e37a

Browse files
authored
release: 1.3.5 (#267)
2 parents c1a9aa4 + 61b4e82 commit 349e37a

File tree

2 files changed

+65
-3
lines changed

2 files changed

+65
-3
lines changed

src/main/kotlin/org/gitanimals/guild/domain/GuildRepository.kt

Lines changed: 46 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,50 @@ interface GuildRepository : JpaRepository<Guild, Long> {
5151
)
5252
fun search(@Param("text") text: String, pageable: Pageable): Page<Guild>
5353

54-
@Query(value = "select g from Guild as g")
55-
fun search(pageable: Pageable): Page<Guild>
54+
@Query(
55+
value = """
56+
select g from Guild as g
57+
order by case
58+
when :filter = org.gitanimals.guild.domain.SearchFilter.PEOPLE_ASC then '%'
59+
else :personaType
60+
end
61+
"""
62+
)
63+
fun search(pageable: Pageable, @Param("filter") filter: SearchFilter): Page<Guild>
64+
65+
@Query(
66+
"""
67+
select g from Guild as g
68+
left join g.members as m group by g.id
69+
order by count(m) asc
70+
"""
71+
)
72+
fun searchByPeopleCountAsc(pageable: Pageable): Page<Guild>
73+
74+
@Query(
75+
"""
76+
select g from Guild as g
77+
left join g.members as m group by g.id
78+
order by count(m) desc
79+
"""
80+
)
81+
fun searchByPeopleCountDesc(pageable: Pageable): Page<Guild>
82+
83+
@Query(
84+
"""
85+
select g from Guild as g
86+
left join g.members as m group by g.id
87+
order by (g.leader.contributions + coalesce(sum(m.contributions), 0)) asc
88+
"""
89+
)
90+
fun searchByContributionCountAsc(pageable: Pageable): Page<Guild>
91+
92+
@Query(
93+
"""
94+
select g from Guild as g
95+
left join g.members as m group by g.id
96+
order by (g.leader.contributions + coalesce(sum(m.contributions), 0)) desc
97+
"""
98+
)
99+
fun searchByContributionCountDesc(pageable: Pageable): Page<Guild>
56100
}

src/main/kotlin/org/gitanimals/guild/domain/GuildService.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,11 @@ import org.gitanimals.guild.domain.request.ChangeGuildRequest
66
import org.gitanimals.guild.domain.request.CreateLeaderRequest
77
import org.hibernate.Hibernate
88
import org.springframework.data.domain.Page
9+
import org.springframework.data.domain.PageRequest
910
import org.springframework.data.domain.Pageable
11+
import org.springframework.data.domain.Sort
12+
import org.springframework.data.domain.Sort.Direction.ASC
13+
import org.springframework.data.domain.Sort.Direction.DESC
1014
import org.springframework.data.repository.findByIdOrNull
1115
import org.springframework.orm.ObjectOptimisticLockingFailureException
1216
import org.springframework.retry.annotation.Retryable
@@ -143,7 +147,21 @@ class GuildService(
143147

144148
fun search(text: String, pageNumber: Int, filter: SearchFilter): Page<Guild> {
145149
return if (text.isBlank()) {
146-
guildRepository.search(Pageable.ofSize(PAGE_SIZE).withPage(pageNumber))
150+
when (filter) {
151+
SearchFilter.RANDOM,
152+
SearchFilter.PEOPLE_ASC ->
153+
guildRepository.searchByPeopleCountAsc(PageRequest.of(pageNumber, PAGE_SIZE))
154+
155+
SearchFilter.PEOPLE_DESC ->
156+
guildRepository.searchByPeopleCountDesc(PageRequest.of(pageNumber, PAGE_SIZE))
157+
158+
SearchFilter.CONTRIBUTION_ASC ->
159+
guildRepository.searchByContributionCountAsc(PageRequest.of(pageNumber, PAGE_SIZE))
160+
161+
SearchFilter.CONTRIBUTION_DESC ->
162+
guildRepository.searchByContributionCountDesc(PageRequest.of(pageNumber, PAGE_SIZE))
163+
164+
}
147165
} else {
148166
guildRepository.search(text, Pageable.ofSize(PAGE_SIZE).withPage(pageNumber))
149167
}.onEach {

0 commit comments

Comments
 (0)