Skip to content

Commit

Permalink
feat: 1차적으로 멤버 검색하는 기능 추가
Browse files Browse the repository at this point in the history
  • Loading branch information
korECM committed Aug 7, 2022
1 parent 0d05c62 commit 239aa03
Show file tree
Hide file tree
Showing 4 changed files with 110 additions and 0 deletions.
33 changes: 33 additions & 0 deletions src/main/kotlin/zip/cafe/api/SearchController.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package zip.cafe.api

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping
import org.springframework.web.bind.annotation.RequestParam
import org.springframework.web.bind.annotation.RestController
import zip.cafe.api.dto.ApiResponse
import zip.cafe.api.dto.ApiResponse.Companion.success
import zip.cafe.api.dto.MemberInfo.Companion.from
import zip.cafe.api.dto.SearchInfo
import zip.cafe.service.SearchService

@RequestMapping("/search")
@RestController
class SearchController(
private val searchService: SearchService
) {


@GetMapping
fun search(@RequestParam query: String): ApiResponse<SearchInfo> {
println("query = $query")
val searchResult = searchService.search(query)
println("searchResult = $searchResult")
return success(
SearchInfo(
listOf(),
listOf(),
searchResult.map(::from)
)
)
}
}
42 changes: 42 additions & 0 deletions src/main/kotlin/zip/cafe/api/dto/Search.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package zip.cafe.api.dto

import zip.cafe.entity.member.Member

data class SearchInfo(
val cafes: List<CafeInfo>,
val keywords: List<KeywordInfo>,
val members: List<MemberInfo>,
)

data class CafeInfo(
val id: Long,
val name: String,
val image: String,
val description: String,
)

data class KeywordInfo(
val id: Long,
val name: String,
val numberOfPosts: Long,
)


data class MemberInfo(
val id: Long,
val name: String,
val image: String,
val description: String
) {

companion object {
fun from(member: Member): MemberInfo {
return MemberInfo(
member.id,
member.nickname,
"https://images.chosun.com/resizer/08-lUWhtJ5pJpORejo8xPXHKyBE=/600x655/smart/cloudfront-ap-northeast-1.images.arcpublishing.com/chosun/57OEJVMO3RCD3K5LXOWT456IPY.jpg",
"어쩌구팬카페"
)
}
}
}
20 changes: 20 additions & 0 deletions src/main/kotlin/zip/cafe/repository/SearchRepository.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package zip.cafe.repository

import com.querydsl.jpa.impl.JPAQueryFactory
import org.springframework.stereotype.Repository
import zip.cafe.entity.member.Member
import zip.cafe.entity.member.QMember.member

@Repository
class SearchRepository(
private val queryFactory: JPAQueryFactory
) {

fun searchByMemberNickname(query: String): List<Member> {
return queryFactory
.select(member)
.from(member)
.where(member.nickname.contains(query))
.fetch()
}
}
15 changes: 15 additions & 0 deletions src/main/kotlin/zip/cafe/service/SearchService.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
package zip.cafe.service

import org.springframework.stereotype.Service
import org.springframework.transaction.annotation.Transactional
import zip.cafe.entity.member.Member
import zip.cafe.repository.SearchRepository

@Transactional(readOnly = true)
@Service
class SearchService(
private val searchRepository: SearchRepository
) {

fun search(query: String): List<Member> = searchRepository.searchByMemberNickname(query)
}

0 comments on commit 239aa03

Please sign in to comment.