diff --git a/BE/.gitignore b/BE/.gitignore index c2065bc26..75c4010b3 100644 --- a/BE/.gitignore +++ b/BE/.gitignore @@ -4,6 +4,7 @@ build/ !gradle/wrapper/gradle-wrapper.jar !**/src/main/**/build/ !**/src/test/**/build/ +.DS_Store ### STS ### .apt_generated diff --git a/BE/build.gradle b/BE/build.gradle index 6c5055e0b..533495c78 100644 --- a/BE/build.gradle +++ b/BE/build.gradle @@ -22,9 +22,12 @@ dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-validation' implementation 'org.springframework.boot:spring-boot-starter-web' - compileOnly 'org.projectlombok:lombok' runtimeOnly 'mysql:mysql-connector-java' + + compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' + implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.0' + testImplementation 'org.springframework.boot:spring-boot-starter-test' } diff --git a/BE/src/main/java/yanse/airbnb/domain/room/RoomRepository.java b/BE/src/main/java/yanse/airbnb/domain/room/RoomRepository.java new file mode 100644 index 000000000..262baaf48 --- /dev/null +++ b/BE/src/main/java/yanse/airbnb/domain/room/RoomRepository.java @@ -0,0 +1,16 @@ +package yanse.airbnb.domain.room; + +import java.util.List; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; +import yanse.airbnb.web.dto.ResponseSearchAddressDto; + +public interface RoomRepository extends JpaRepository { + + @Query("select new yanse.airbnb.web.dto.ResponseSearchAddressDto" + + "(concat(r.address.city, ' ' ,r.address.region, ' ' ,r.address.district, r.address.detail)) from Room r " + + "where r.address.city like %:address% or r.address.region like %:address% " + + "or r.address.district like %:address% or r.address.detail like %:address%") + List findByAddress(@Param("address") String address); +} diff --git a/BE/src/main/java/yanse/airbnb/service/SearchService.java b/BE/src/main/java/yanse/airbnb/service/SearchService.java new file mode 100644 index 000000000..467173479 --- /dev/null +++ b/BE/src/main/java/yanse/airbnb/service/SearchService.java @@ -0,0 +1,19 @@ +package yanse.airbnb.service; + +import java.util.List; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import yanse.airbnb.domain.room.RoomRepository; +import yanse.airbnb.web.dto.ResponseSearchAddressDto; + +@Transactional(readOnly = true) +@RequiredArgsConstructor +@Service +public class SearchService { + + private final RoomRepository roomRepository; + public List findAddress(String address) { + return roomRepository.findByAddress(address); + } +} diff --git a/BE/src/main/java/yanse/airbnb/web/controller/SearchController.java b/BE/src/main/java/yanse/airbnb/web/controller/SearchController.java new file mode 100644 index 000000000..f505e2164 --- /dev/null +++ b/BE/src/main/java/yanse/airbnb/web/controller/SearchController.java @@ -0,0 +1,23 @@ +package yanse.airbnb.web.controller; + +import java.util.List; +import lombok.RequiredArgsConstructor; +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 yanse.airbnb.service.SearchService; +import yanse.airbnb.web.dto.ResponseSearchAddressDto; + +@RequestMapping("/search") +@RequiredArgsConstructor +@RestController +public class SearchController { + + private final SearchService searchService; + + @GetMapping + public List searchAddress(@RequestParam String address) { + return searchService.findAddress(address); + } +} diff --git a/BE/src/main/java/yanse/airbnb/web/dto/ResponseSearchAddressDto.java b/BE/src/main/java/yanse/airbnb/web/dto/ResponseSearchAddressDto.java new file mode 100644 index 000000000..f7f3ed105 --- /dev/null +++ b/BE/src/main/java/yanse/airbnb/web/dto/ResponseSearchAddressDto.java @@ -0,0 +1,16 @@ +package yanse.airbnb.web.dto; + +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ResponseSearchAddressDto { + + private String address; +} diff --git a/BE/src/main/resources/application.yml b/BE/src/main/resources/application.yml index b14925126..165171a2c 100644 --- a/BE/src/main/resources/application.yml +++ b/BE/src/main/resources/application.yml @@ -1,4 +1,3 @@ - spring: datasource: url: ${MYSQL_URL} @@ -18,4 +17,4 @@ spring: # show_sql: true logging.level: - org.hibernate.SQL: debug \ No newline at end of file + org.hibernate.SQL: debug diff --git a/BE/src/main/resources/data.sql b/BE/src/main/resources/data.sql index d81fb6d31..141de6930 100644 --- a/BE/src/main/resources/data.sql +++ b/BE/src/main/resources/data.sql @@ -9,6 +9,18 @@ insert into room (city, region, district, detail, price, rating, review_count, r values ('서울', '강남구', '강남대로62길23', '4층', 10000, 4.8, 187, '룸이라네', 1, 2, 16, 12, 3, '레지던스', '편안하신가요?', 1); +insert into room (city, region, district, detail, price, rating, review_count, room_description, + bathroom_count, bed_count, check_in_time, check_out_time, max_guest, room_type, room_name, + members_id) +values ('서울', '서초구', '강북대로62길23', '4층', 10000, 4.8, 187, '룸이라네', + 1, 2, 16, 12, 3, '레지던스', '편안하신가요?', 1); + +insert into room (city, region, district, detail, price, rating, review_count, room_description, + bathroom_count, bed_count, check_in_time, check_out_time, max_guest, room_type, room_name, + members_id) +values ('서울', '동구', '강서대로62길23', '4층', 10000, 4.8, 187, '룸이라네', + 1, 2, 16, 12, 3, '레지던스', '편안하신가요?', 1); + insert into room_image (url, room_id) values ('url1', 1), ('url2', 1); insert into reservation (adult_count, child_count, infant_count, check_in_date_time, check_out_date_time, @@ -16,4 +28,4 @@ insert into reservation (adult_count, child_count, infant_count, check_in_date_t members_id, room_id) values (2, 1, 0, '2022-05-30', '2022-06-01', 10000.0, 'weekly', 10.0, 10.0, 20000, 1, 1); -insert into wish (members_id, room_id) values (1, 1); \ No newline at end of file +insert into wish (members_id, room_id) values (1, 1);