From 92eb500e08339916f7fac17c7c16c3b701fc22e7 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 14:44:33 +0900 Subject: [PATCH 01/60] =?UTF-8?q?Feat:=20[#10]=20.gitignore=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 191 ++++++++++++++++++ BE/build.gradle | 24 +++ BE/gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 59203 bytes BE/gradle/wrapper/gradle-wrapper.properties | 5 + BE/gradlew | 185 +++++++++++++++++ BE/gradlew.bat | 89 ++++++++ BE/settings.gradle | 1 + .../com/enolj/airbnb/AirbnbApplication.java | 13 ++ BE/src/main/resources/application.properties | 10 + .../enolj/airbnb/AirbnbApplicationTests.java | 13 ++ 10 files changed, 531 insertions(+) create mode 100644 .gitignore create mode 100644 BE/build.gradle create mode 100644 BE/gradle/wrapper/gradle-wrapper.jar create mode 100644 BE/gradle/wrapper/gradle-wrapper.properties create mode 100755 BE/gradlew create mode 100644 BE/gradlew.bat create mode 100644 BE/settings.gradle create mode 100644 BE/src/main/java/com/enolj/airbnb/AirbnbApplication.java create mode 100644 BE/src/main/resources/application.properties create mode 100644 BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..4141ae3f8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,191 @@ + +# Created by https://www.toptal.com/developers/gitignore/api/macos,intellij,gradle,java +# Edit at https://www.toptal.com/developers/gitignore?templates=macos,intellij,gradle,java + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +### macOS ### +# General +.DS_Store +.AppleDouble +.LSOverride + +# Icon must end with two \r +Icon + + +# Thumbnails +._* + +# Files that might appear in the root of a volume +.DocumentRevisions-V100 +.fseventsd +.Spotlight-V100 +.TemporaryItems +.Trashes +.VolumeIcon.icns +.com.apple.timemachine.donotpresent + +# Directories potentially created on remote AFP share +.AppleDB +.AppleDesktop +Network Trash Folder +Temporary Items +.apdisk + +### Gradle ### +.gradle +build/ + +# Ignore Gradle GUI config +gradle-app.setting + +# Avoid ignoring Gradle wrapper jar file (.jar files are usually ignored) +!gradle-wrapper.jar + +# Cache of project +.gradletasknamecache + +# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898 +# gradle/wrapper/gradle-wrapper.properties + +### Gradle Patch ### +**/build/ + +# End of https://www.toptal.com/developers/gitignore/api/macos,intellij,gradle,java + + +/BE/.gitignore +/.idea/.gitignore +/.idea/airbnb.iml +/.idea/misc.xml +/.idea/modules.xml +/.idea/vcs.xml +/.idea/jarRepositories.xml +/.idea/libraries-with-intellij-classes.xml diff --git a/BE/build.gradle b/BE/build.gradle new file mode 100644 index 000000000..bd6450914 --- /dev/null +++ b/BE/build.gradle @@ -0,0 +1,24 @@ +plugins { + id 'org.springframework.boot' version '2.4.5' + id 'io.spring.dependency-management' version '1.0.11.RELEASE' + id 'java' +} + +group = 'com.enolj' +version = '0.0.1-SNAPSHOT' +sourceCompatibility = '1.8' + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-web' + implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' + runtimeOnly 'mysql:mysql-connector-java' + testImplementation 'org.springframework.boot:spring-boot-starter-test' +} + +test { + useJUnitPlatform() +} diff --git a/BE/gradle/wrapper/gradle-wrapper.jar b/BE/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..e708b1c023ec8b20f512888fe07c5bd3ff77bb8f GIT binary patch literal 59203 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

K7UpUK$>l@ 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 E2O(~oYXATM literal 0 HcmV?d00001 diff --git a/BE/gradle/wrapper/gradle-wrapper.properties b/BE/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 000000000..442d9132e --- /dev/null +++ b/BE/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,5 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/BE/gradlew b/BE/gradlew new file mode 100755 index 000000000..4f906e0c8 --- /dev/null +++ b/BE/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/BE/gradlew.bat b/BE/gradlew.bat new file mode 100644 index 000000000..107acd32c --- /dev/null +++ b/BE/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/BE/settings.gradle b/BE/settings.gradle new file mode 100644 index 000000000..aab815121 --- /dev/null +++ b/BE/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'airbnb' diff --git a/BE/src/main/java/com/enolj/airbnb/AirbnbApplication.java b/BE/src/main/java/com/enolj/airbnb/AirbnbApplication.java new file mode 100644 index 000000000..4e247477b --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/AirbnbApplication.java @@ -0,0 +1,13 @@ +package com.enolj.airbnb; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class AirbnbApplication { + + public static void main(String[] args) { + SpringApplication.run(AirbnbApplication.class, args); + } + +} diff --git a/BE/src/main/resources/application.properties b/BE/src/main/resources/application.properties new file mode 100644 index 000000000..646492036 --- /dev/null +++ b/BE/src/main/resources/application.properties @@ -0,0 +1,10 @@ +spring.datasource.url=jdbc:mysql://localhost:3306/airbnb +spring.datasource.username=airbnb +spring.datasource.password=airbnb +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver +spring.datasource.initialization-mode=always + +#logging.level.sql=DEBUG +logging.level.org.springframework.web.filter.CommonsRequestLoggingFilter=DEBUG + +server.error.include-message=always diff --git a/BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java b/BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java new file mode 100644 index 000000000..72b775835 --- /dev/null +++ b/BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java @@ -0,0 +1,13 @@ +package com.enolj.airbnb; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class AirbnbApplicationTests { + + @Test + void contextLoads() { + } + +} From 301349acfbf54b4701ee897fc90d37632848c78a Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 15:51:46 +0900 Subject: [PATCH 02/60] =?UTF-8?q?Feat:=20[#14]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20searchHouses=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숙소 검색 요청에 대한 목업 API를 제공하기 위해 searchHouses 메소드 생성, 관련 dto 클래스 생성 --- .../enolj/airbnb/service/HouseService.java | 24 +++++++ .../com/enolj/airbnb/web/HouseController.java | 29 +++++++++ .../java/com/enolj/airbnb/web/dto/Charge.java | 28 +++++++++ .../com/enolj/airbnb/web/dto/CheckDate.java | 30 +++++++++ .../com/enolj/airbnb/web/dto/Location.java | 36 +++++++++++ .../java/com/enolj/airbnb/web/dto/People.java | 28 +++++++++ .../airbnb/web/dto/SearchRequestDTO.java | 42 +++++++++++++ .../airbnb/web/dto/SearchResponseDTO.java | 62 +++++++++++++++++++ 8 files changed, 279 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/service/HouseService.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/HouseController.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/Charge.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/Location.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/People.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java new file mode 100644 index 000000000..daf3a9780 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -0,0 +1,24 @@ +package com.enolj.airbnb.service; + +import com.enolj.airbnb.web.dto.Location; +import com.enolj.airbnb.web.dto.SearchRequestDTO; +import com.enolj.airbnb.web.dto.SearchResponseDTO; +import org.springframework.stereotype.Service; + +import java.util.ArrayList; +import java.util.List; + +@Service +public class HouseService { + + public List searchHousesByCondition(SearchRequestDTO requestDTO) { + List searchResponseDTOList = new ArrayList<>(); + searchResponseDTOList.add(new SearchResponseDTO(1, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", + new Location(37.566826, 126.9786567), "Specious and Comfortable cozy house #4", + 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...")); + searchResponseDTOList.add(new SearchResponseDTO(2, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", + new Location(37.566826, 126.9786567), "Specious and Comfortable cozy house #4", + 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...")); + return searchResponseDTOList; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java new file mode 100644 index 000000000..4b7f1aa21 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -0,0 +1,29 @@ +package com.enolj.airbnb.web; + +import com.enolj.airbnb.service.HouseService; +import com.enolj.airbnb.web.dto.SearchRequestDTO; +import com.enolj.airbnb.web.dto.SearchResponseDTO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import java.util.List; + +@RestController +public class HouseController { + + private final HouseService houseService; + private final Logger logger = LoggerFactory.getLogger(HouseController.class); + + public HouseController(HouseService houseService) { + this.houseService = houseService; + } + + @GetMapping("/houses") + public List searchHouses(@RequestBody SearchRequestDTO requestDTO) { + logger.info("숙소 검색 요청"); + return houseService.searchHousesByCondition(requestDTO); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Charge.java b/BE/src/main/java/com/enolj/airbnb/web/dto/Charge.java new file mode 100644 index 000000000..4f3d9777e --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/Charge.java @@ -0,0 +1,28 @@ +package com.enolj.airbnb.web.dto; + +public class Charge { + + private int start; + private int end; + + public Charge(int start, int end) { + this.start = start; + this.end = end; + } + + public void setStart(int start) { + this.start = start; + } + + public void setEnd(int end) { + this.end = end; + } + + @Override + public String toString() { + return "Charge{" + + "start=" + start + + ", end=" + end + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java b/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java new file mode 100644 index 000000000..def2ae7a8 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java @@ -0,0 +1,30 @@ +package com.enolj.airbnb.web.dto; + +import java.time.LocalDate; + +public class CheckDate { + + private LocalDate start; + private LocalDate end; + + public CheckDate(LocalDate start, LocalDate end) { + this.start = start; + this.end = end; + } + + public void setStart(LocalDate start) { + this.start = start; + } + + public void setEnd(LocalDate end) { + this.end = end; + } + + @Override + public String toString() { + return "CheckDate{" + + "start=" + start + + ", end=" + end + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java b/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java new file mode 100644 index 000000000..ee093536a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java @@ -0,0 +1,36 @@ +package com.enolj.airbnb.web.dto; + +public class Location { + + private double latitude; + private double longitude; + + public Location(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + public double getLatitude() { + return latitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + @Override + public String toString() { + return "Location{" + + "Latitude=" + latitude + + ", longitude=" + longitude + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/People.java b/BE/src/main/java/com/enolj/airbnb/web/dto/People.java new file mode 100644 index 000000000..25d8861c8 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/People.java @@ -0,0 +1,28 @@ +package com.enolj.airbnb.web.dto; + +public class People { + + private int guest; + private int kid; + + public People(int guest, int kid) { + this.guest = guest; + this.kid = kid; + } + + public void setGuest(int guest) { + this.guest = guest; + } + + public void setKid(int kid) { + this.kid = kid; + } + + @Override + public String toString() { + return "People{" + + "quest=" + guest + + ", kid=" + kid + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java new file mode 100644 index 000000000..46121379a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java @@ -0,0 +1,42 @@ +package com.enolj.airbnb.web.dto; + +public class SearchRequestDTO { + + private CheckDate date; + private Charge charge; + private People people; + private Location location; + + public SearchRequestDTO(CheckDate date, Charge charge, People people, Location location) { + this.date = date; + this.charge = charge; + this.people = people; + this.location = location; + } + + public void setDate(CheckDate date) { + this.date = date; + } + + public void setCharge(Charge charge) { + this.charge = charge; + } + + public void setPeople(People people) { + this.people = people; + } + + public void setLocation(Location location) { + this.location = location; + } + + @Override + public String toString() { + return "SearchRequestDTO{" + + "date=" + date + + ", charge=" + charge + + ", people=" + people + + ", location=" + location + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java new file mode 100644 index 000000000..ab26c26d1 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java @@ -0,0 +1,62 @@ +package com.enolj.airbnb.web.dto; + +public class SearchResponseDTO { + + private long id; + private String image; + private Location location; + private String name; + private int charge; + private double grade; + private int review; + private String description; + private String option; + + public SearchResponseDTO(long id, String image, Location location, String name, int charge, double grade, int review, String description, String option) { + this.id = id; + this.image = image; + this.location = location; + this.name = name; + this.charge = charge; + this.grade = grade; + this.review = review; + this.description = description; + this.option = option; + } + + public long getId() { + return id; + } + + public String getImage() { + return image; + } + + public Location getLocation() { + return location; + } + + public String getName() { + return name; + } + + public int getCharge() { + return charge; + } + + public double getGrade() { + return grade; + } + + public int getReview() { + return review; + } + + public String getDescription() { + return description; + } + + public String getOption() { + return option; + } +} From f795393128358f6bb7415340ee452bc28b990d89 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 16:15:57 +0900 Subject: [PATCH 03/60] =?UTF-8?q?Feat:=20[#16]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20searchCharges=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 범위 내 숙소 가격 요청에 대한 목업 API를 제공하기 위해 searchCharges 메소드 생성, 관련 DTO 클래스 생성 --- .../enolj/airbnb/service/HouseService.java | 17 ++++++++ .../com/enolj/airbnb/web/HouseController.java | 7 ++++ .../web/dto/SearchChargesRequestDTO.java | 40 +++++++++++++++++++ 3 files changed, 64 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index daf3a9780..8396a0583 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -1,6 +1,7 @@ package com.enolj.airbnb.service; import com.enolj.airbnb.web.dto.Location; +import com.enolj.airbnb.web.dto.SearchChargesRequestDTO; import com.enolj.airbnb.web.dto.SearchRequestDTO; import com.enolj.airbnb.web.dto.SearchResponseDTO; import org.springframework.stereotype.Service; @@ -12,6 +13,7 @@ public class HouseService { public List searchHousesByCondition(SearchRequestDTO requestDTO) { + System.out.println(requestDTO); List searchResponseDTOList = new ArrayList<>(); searchResponseDTOList.add(new SearchResponseDTO(1, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", new Location(37.566826, 126.9786567), "Specious and Comfortable cozy house #4", @@ -21,4 +23,19 @@ public List searchHousesByCondition(SearchRequestDTO requestD 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...")); return searchResponseDTOList; } + + public List searchChargesByCondition(SearchChargesRequestDTO requestDTO) { + System.out.println(requestDTO); + List charges = new ArrayList<>(); + charges.add(1000); + charges.add(1000); + charges.add(1100); + charges.add(1150); + charges.add(1150); + charges.add(3000); + charges.add(5000); + charges.add(10000); + charges.add(100000); + return charges; + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 4b7f1aa21..b48896afe 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -1,6 +1,7 @@ package com.enolj.airbnb.web; import com.enolj.airbnb.service.HouseService; +import com.enolj.airbnb.web.dto.SearchChargesRequestDTO; import com.enolj.airbnb.web.dto.SearchRequestDTO; import com.enolj.airbnb.web.dto.SearchResponseDTO; import org.slf4j.Logger; @@ -26,4 +27,10 @@ public List searchHouses(@RequestBody SearchRequestDTO reques logger.info("숙소 검색 요청"); return houseService.searchHousesByCondition(requestDTO); } + + @GetMapping("/houses/charges") + public List searchCharges(@RequestBody SearchChargesRequestDTO requestDTO) { + logger.info("범위 내 숙소 가격 요청"); + return houseService.searchChargesByCondition(requestDTO); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java new file mode 100644 index 000000000..afaf80fd6 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java @@ -0,0 +1,40 @@ +package com.enolj.airbnb.web.dto; + +public class SearchChargesRequestDTO { + + private CheckDate date; + private Location location; + + public SearchChargesRequestDTO(CheckDate date, Location location) { + this.date = date; + this.location = location; + } + + public void setDate(CheckDate date) { + this.date = date; + } + + public void setLocation(Location location) { + this.location = location; + } + + @Override + public String toString() { + return "SearchChargesRequestDTO{" + + "date=" + date + + ", location=" + location + + '}'; + } +} + + +// { +// "date": { +// "start": "2021-05-18", +// "end": "2021-05-25" +// }, +// "location": { +// "latitude": 37.566826, +// "longitude": 126.9786567 +// } +// } From fde4cfad1c5136fd4e95d1acc10099ab13543bda Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 16:31:18 +0900 Subject: [PATCH 04/60] =?UTF-8?q?Feat:=20[#18]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20getReservationPage=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숙소 예약 페이지 요청에 대한 목업 API를 제공하기 위해 getReservationPage 메소드 생성, 관련 DTO 클래스 생성 --- .../enolj/airbnb/service/HouseService.java | 10 +++-- .../com/enolj/airbnb/web/HouseController.java | 7 ++++ .../web/ReservationInfoResponseDTO.java | 37 +++++++++++++++++++ .../java/com/enolj/airbnb/web/dto/Fee.java | 28 ++++++++++++++ .../airbnb/web/dto/SearchResponseDTO.java | 18 ++++----- 5 files changed, 87 insertions(+), 13 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/web/ReservationInfoResponseDTO.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/Fee.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 8396a0583..48605adbf 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -1,9 +1,7 @@ package com.enolj.airbnb.service; -import com.enolj.airbnb.web.dto.Location; -import com.enolj.airbnb.web.dto.SearchChargesRequestDTO; -import com.enolj.airbnb.web.dto.SearchRequestDTO; -import com.enolj.airbnb.web.dto.SearchResponseDTO; +import com.enolj.airbnb.web.ReservationInfoResponseDTO; +import com.enolj.airbnb.web.dto.*; import org.springframework.stereotype.Service; import java.util.ArrayList; @@ -38,4 +36,8 @@ public List searchChargesByCondition(SearchChargesRequestDTO requestDTO charges.add(100000); return charges; } + + public ReservationInfoResponseDTO getReservationInfo(Long houseId) { + return new ReservationInfoResponseDTO(71466, new Fee(25996, 182468), 4); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index b48896afe..f079af9b0 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -7,6 +7,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -33,4 +34,10 @@ public List searchCharges(@RequestBody SearchChargesRequestDTO requestD logger.info("범위 내 숙소 가격 요청"); return houseService.searchChargesByCondition(requestDTO); } + + @GetMapping("/houses/{houseId}") + public ReservationInfoResponseDTO getReservationPage(@PathVariable Long houseId) { + logger.info("{}번 숙소 예약 페이지 요청", houseId); + return houseService.getReservationInfo(houseId); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/ReservationInfoResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/ReservationInfoResponseDTO.java new file mode 100644 index 000000000..a78db4f4a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/ReservationInfoResponseDTO.java @@ -0,0 +1,37 @@ +package com.enolj.airbnb.web; + +import com.enolj.airbnb.web.dto.Fee; + +public class ReservationInfoResponseDTO { + + private final int charge; + private final Fee fee; + private final int discount; + + public ReservationInfoResponseDTO(int charge, Fee fee, int discount) { + this.charge = charge; + this.fee = fee; + this.discount = discount; + } + + public int getCharge() { + return charge; + } + + public Fee getFee() { + return fee; + } + + public int getDiscount() { + return discount; + } + + @Override + public String toString() { + return "ReservationInfoResponseDTO{" + + "charge=" + charge + + ", fee=" + fee + + ", discount=" + discount + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Fee.java b/BE/src/main/java/com/enolj/airbnb/web/dto/Fee.java new file mode 100644 index 000000000..447d77754 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/Fee.java @@ -0,0 +1,28 @@ +package com.enolj.airbnb.web.dto; + +public class Fee { + + private final int cleaning; + private final int service; + + public Fee(int cleaning, int service) { + this.cleaning = cleaning; + this.service = service; + } + + public int getCleaning() { + return cleaning; + } + + public int getService() { + return service; + } + + @Override + public String toString() { + return "Fee{" + + "cleaning=" + cleaning + + ", service=" + service + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java index ab26c26d1..8b814119d 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java @@ -2,15 +2,15 @@ public class SearchResponseDTO { - private long id; - private String image; - private Location location; - private String name; - private int charge; - private double grade; - private int review; - private String description; - private String option; + private final long id; + private final String image; + private final Location location; + private final String name; + private final int charge; + private final double grade; + private final int review; + private final String description; + private final String option; public SearchResponseDTO(long id, String image, Location location, String name, int charge, double grade, int review, String description, String option) { this.id = id; From 3e8917b3dcd76449b09cb3306564c45c1765cd0a Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 16:55:32 +0900 Subject: [PATCH 05/60] =?UTF-8?q?Feat:=20[#20]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20makeReservation=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숙소 예약 요청에 대한 목업 API를 제공하기 위해 makeReservation 메소드 생성, 관련 DTO 클래스 생성 --- .../enolj/airbnb/service/HouseService.java | 4 +++ .../com/enolj/airbnb/web/HouseController.java | 15 +++++----- .../airbnb/web/dto/ReservationRequestDTO.java | 28 +++++++++++++++++++ 3 files changed, 40 insertions(+), 7 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 48605adbf..a81a20535 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -40,4 +40,8 @@ public List searchChargesByCondition(SearchChargesRequestDTO requestDTO public ReservationInfoResponseDTO getReservationInfo(Long houseId) { return new ReservationInfoResponseDTO(71466, new Fee(25996, 182468), 4); } + + public void makeReservation(ReservationRequestDTO requestDTO) { + System.out.println(requestDTO); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index f079af9b0..4358449db 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -1,15 +1,10 @@ package com.enolj.airbnb.web; import com.enolj.airbnb.service.HouseService; -import com.enolj.airbnb.web.dto.SearchChargesRequestDTO; -import com.enolj.airbnb.web.dto.SearchRequestDTO; -import com.enolj.airbnb.web.dto.SearchResponseDTO; +import com.enolj.airbnb.web.dto.*; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; import java.util.List; @@ -40,4 +35,10 @@ public ReservationInfoResponseDTO getReservationPage(@PathVariable Long houseId) logger.info("{}번 숙소 예약 페이지 요청", houseId); return houseService.getReservationInfo(houseId); } + + @PostMapping("houses/{houseId}") + public void makeReservation(@PathVariable Long houseId, @RequestBody ReservationRequestDTO requestDTO) { + logger.info("{}번 숙소 예약 요청", houseId); + houseService.makeReservation(requestDTO); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java new file mode 100644 index 000000000..c627a260c --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java @@ -0,0 +1,28 @@ +package com.enolj.airbnb.web.dto; + +public class ReservationRequestDTO { + + private CheckDate date; + private People people; + + public ReservationRequestDTO(CheckDate date, People people) { + this.date = date; + this.people = people; + } + + public void setDate(CheckDate date) { + this.date = date; + } + + public void setPeople(People people) { + this.people = people; + } + + @Override + public String toString() { + return "ReservationRequestDTO{" + + "date=" + date + + ", people=" + people + + '}'; + } +} From a1b135f9c164fd47c07750a91a68f009935c6147 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 17:13:25 +0900 Subject: [PATCH 06/60] =?UTF-8?q?Feat:=20[#21]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20getWishes=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 위시 리스트 요청에 대한 목업 API를 제공하기 위해 getWishes 메소드 생성, 관련 DTO 클래스 생성 --- .../enolj/airbnb/service/HouseService.java | 16 ++++++-- .../com/enolj/airbnb/web/HouseController.java | 6 +++ .../airbnb/web/dto/SearchResponseDTO.java | 12 ++++-- .../airbnb/web/dto/WishesResponseDTO.java | 38 +++++++++++++++++++ 4 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/WishesResponseDTO.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index a81a20535..201a5ff1e 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -13,12 +13,12 @@ public class HouseService { public List searchHousesByCondition(SearchRequestDTO requestDTO) { System.out.println(requestDTO); List searchResponseDTOList = new ArrayList<>(); - searchResponseDTOList.add(new SearchResponseDTO(1, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", + searchResponseDTOList.add(new SearchResponseDTO(1L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", new Location(37.566826, 126.9786567), "Specious and Comfortable cozy house #4", - 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...")); - searchResponseDTOList.add(new SearchResponseDTO(2, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", + 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...", true)); + searchResponseDTOList.add(new SearchResponseDTO(2L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", new Location(37.566826, 126.9786567), "Specious and Comfortable cozy house #4", - 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...")); + 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...", false)); return searchResponseDTOList; } @@ -44,4 +44,12 @@ public ReservationInfoResponseDTO getReservationInfo(Long houseId) { public void makeReservation(ReservationRequestDTO requestDTO) { System.out.println(requestDTO); } + + public List getWishList() { + List wishesResponseDTOList = new ArrayList<>(); + wishesResponseDTOList.add(new WishesResponseDTO(1L, "비담집, 비우고담은집", 308571, true, 4.98)); + wishesResponseDTOList.add(new WishesResponseDTO(2L, "비담집, 비우고담은집", 308571, true, 4.98)); + wishesResponseDTOList.add(new WishesResponseDTO(3L, "비담집, 비우고담은집", 308571, true, 4.98)); + return wishesResponseDTOList; + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 4358449db..8d289aae3 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -41,4 +41,10 @@ public void makeReservation(@PathVariable Long houseId, @RequestBody Reservation logger.info("{}번 숙소 예약 요청", houseId); houseService.makeReservation(requestDTO); } + + @GetMapping("/wishes") + public List getWishes() { + logger.info("위시 리스트 요청"); + return houseService.getWishList(); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java index 8b814119d..b95357745 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java @@ -2,7 +2,7 @@ public class SearchResponseDTO { - private final long id; + private final Long id; private final String image; private final Location location; private final String name; @@ -11,8 +11,9 @@ public class SearchResponseDTO { private final int review; private final String description; private final String option; + private final boolean wish; - public SearchResponseDTO(long id, String image, Location location, String name, int charge, double grade, int review, String description, String option) { + public SearchResponseDTO(Long id, String image, Location location, String name, int charge, double grade, int review, String description, String option, boolean wish) { this.id = id; this.image = image; this.location = location; @@ -22,9 +23,10 @@ public SearchResponseDTO(long id, String image, Location location, String name, this.review = review; this.description = description; this.option = option; + this.wish = wish; } - public long getId() { + public Long getId() { return id; } @@ -59,4 +61,8 @@ public String getDescription() { public String getOption() { return option; } + + public boolean isWish() { + return wish; + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/WishesResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/WishesResponseDTO.java new file mode 100644 index 000000000..08fc8c225 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/WishesResponseDTO.java @@ -0,0 +1,38 @@ +package com.enolj.airbnb.web.dto; + +public class WishesResponseDTO { + + private final Long id; + private final String name; + private final int charge; + private final boolean wish; + private final double grade; + + public WishesResponseDTO(Long id, String name, int charge, boolean wish, double grade) { + this.id = id; + this.name = name; + this.charge = charge; + this.wish = wish; + this.grade = grade; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public int getCharge() { + return charge; + } + + public boolean isWish() { + return wish; + } + + public double getGrade() { + return grade; + } +} From 5ccf24b908b5f3a55cb62543d0a0d67a6eab2209 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 17:18:25 +0900 Subject: [PATCH 07/60] =?UTF-8?q?Feat:=20[#22]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20changeWish=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 위시 요청에 대한 목업 API를 제공하기 위해 changeWish 메소드 생성 --- BE/src/main/java/com/enolj/airbnb/service/HouseService.java | 4 ++++ BE/src/main/java/com/enolj/airbnb/web/HouseController.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 201a5ff1e..250c8f074 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -52,4 +52,8 @@ public List getWishList() { wishesResponseDTOList.add(new WishesResponseDTO(3L, "비담집, 비우고담은집", 308571, true, 4.98)); return wishesResponseDTOList; } + + public void changeWish(Long houseId) { + + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 8d289aae3..715796234 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -47,4 +47,10 @@ public List getWishes() { logger.info("위시 리스트 요청"); return houseService.getWishList(); } + + @PostMapping("/wishes/{houseId}") + public void changeWish(@PathVariable Long houseId) { + logger.info("{}번 숙소의 위시 요청", houseId); + houseService.changeWish(houseId); + } } From b80e61c70a5a44638c0789caba0f4b0829d6e329 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 17:31:55 +0900 Subject: [PATCH 08/60] =?UTF-8?q?Feat:=20[#23]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20getReservationList=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숙소 예약 리스트 요청에 대한 목업 API를 제공하기 위해 getReservationList 메소드 생성, 관련 DTO 클래스 생성 --- .../enolj/airbnb/service/HouseService.java | 11 ++++++ .../com/enolj/airbnb/web/HouseController.java | 8 +++- .../web/dto/ReservationResponseDTO.java | 38 +++++++++++++++++++ 3 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 250c8f074..aed9f163a 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -56,4 +56,15 @@ public List getWishList() { public void changeWish(Long houseId) { } + + public List getReservationList() { + List reservationResponseDTOList = new ArrayList<>(); + reservationResponseDTOList.add(new ReservationResponseDTO(1L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", + "2021년 5월 17일 - 2021년 6월 4일", "서초구, 서울, 한국", "Specious and Comfortable cozy house #4")); + reservationResponseDTOList.add(new ReservationResponseDTO(2L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", + "2021년 5월 17일 - 2021년 6월 4일", "서초구, 서울, 한국", "Specious and Comfortable cozy house #4")); + reservationResponseDTOList.add(new ReservationResponseDTO(3L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", + "2021년 5월 17일 - 2021년 6월 4일", "서초구, 서울, 한국", "Specious and Comfortable cozy house #4")); + return reservationResponseDTOList; + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 715796234..1c5d815ed 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -44,7 +44,7 @@ public void makeReservation(@PathVariable Long houseId, @RequestBody Reservation @GetMapping("/wishes") public List getWishes() { - logger.info("위시 리스트 요청"); + logger.info("숙소 위시 리스트 요청"); return houseService.getWishList(); } @@ -53,4 +53,10 @@ public void changeWish(@PathVariable Long houseId) { logger.info("{}번 숙소의 위시 요청", houseId); houseService.changeWish(houseId); } + + @GetMapping("/reservation") + public List getReservationList() { + logger.info("숙소 예약 리스트 요청"); + return houseService.getReservationList(); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java new file mode 100644 index 000000000..2348b2a0a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java @@ -0,0 +1,38 @@ +package com.enolj.airbnb.web.dto; + +public class ReservationResponseDTO { + + private final Long id; + private final String image; + private final String date; + private final String location; + private final String name; + + public ReservationResponseDTO(Long id, String image, String date, String location, String name) { + this.id = id; + this.image = image; + this.date = date; + this.location = location; + this.name = name; + } + + public Long getId() { + return id; + } + + public String getImage() { + return image; + } + + public String getDate() { + return date; + } + + public String getLocation() { + return location; + } + + public String getName() { + return name; + } +} From eed336b70f2c55eabeb9bfe714c76c6d92fbd065 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 17:43:08 +0900 Subject: [PATCH 09/60] =?UTF-8?q?Feat:=20[#24]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20getReservationDetail=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숙소 예약 디테일 정보 요청에 대한 목업 API를 제공하기 위해 getReservationDetail 메소드 생성, 관련 DTO 클래스 생성 --- .../enolj/airbnb/service/HouseService.java | 9 ++++ .../com/enolj/airbnb/web/HouseController.java | 6 +++ .../com/enolj/airbnb/web/dto/Description.java | 26 ++++++++++ .../airbnb/web/dto/ReservationDetailDTO.java | 52 +++++++++++++++++++ 4 files changed, 93 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/Description.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index aed9f163a..161f9528b 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -67,4 +67,13 @@ public List getReservationList() { "2021년 5월 17일 - 2021년 6월 4일", "서초구, 서울, 한국", "Specious and Comfortable cozy house #4")); return reservationResponseDTOList; } + + public ReservationDetailDTO getReservationDetail(Long houseId) { + List images = new ArrayList<>(); + images.add("https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg"); + images.add("https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg"); + images.add("https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg"); + return new ReservationDetailDTO(1L, images, "서초구, 서울, 한국", "Specious and Comfortable cozy house #4", "2021년 5월 17일 오후 4:00", "2021년 6월 4일 오후 12:00", + new Description("Jong님", "집전체 • 게스트 3명", 1488195)); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 1c5d815ed..0fce46f38 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -59,4 +59,10 @@ public List getReservationList() { logger.info("숙소 예약 리스트 요청"); return houseService.getReservationList(); } + + @GetMapping("/reservation/{houseId}") + public ReservationDetailDTO getReservationDetail(@PathVariable Long houseId) { + logger.info("{}번 숙소의 디테일 예약정보 요청", houseId); + return houseService.getReservationDetail(houseId); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java b/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java new file mode 100644 index 000000000..32626cb83 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java @@ -0,0 +1,26 @@ +package com.enolj.airbnb.web.dto; + +public class Description { + + private final String host; + private final String option; + private final int charge; + + public Description(String host, String option, int charge) { + this.host = host; + this.option = option; + this.charge = charge; + } + + public String getHost() { + return host; + } + + public String getOption() { + return option; + } + + public int getCharge() { + return charge; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java new file mode 100644 index 000000000..9320b5707 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java @@ -0,0 +1,52 @@ +package com.enolj.airbnb.web.dto; + +import java.util.List; + +public class ReservationDetailDTO { + + private final Long id; + private final List images; + private final String location; + private final String name; + private final String checkIn; + private final String checkOut; + private final Description description; + + public ReservationDetailDTO(Long id, List images, String location, String name, String checkIn, String checkOut, Description description) { + this.id = id; + this.images = images; + this.location = location; + this.name = name; + this.checkIn = checkIn; + this.checkOut = checkOut; + this.description = description; + } + + public Long getId() { + return id; + } + + public List getImages() { + return images; + } + + public String getLocation() { + return location; + } + + public String getName() { + return name; + } + + public String getCheckIn() { + return checkIn; + } + + public String getCheckOut() { + return checkOut; + } + + public Description getDescription() { + return description; + } +} From 2114f61c18c7cec9d54e405dfaafa55b0d9c6b80 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 18 May 2021 17:47:10 +0900 Subject: [PATCH 10/60] =?UTF-8?q?Feat:=20[#25]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20cancelReservation=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숙소 예약 취소 요청에 대한 목업 API를 제공하기 위해 cancelReservation 메소드 생성 --- BE/src/main/java/com/enolj/airbnb/service/HouseService.java | 4 ++++ BE/src/main/java/com/enolj/airbnb/web/HouseController.java | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 161f9528b..bf6098ce0 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -76,4 +76,8 @@ public ReservationDetailDTO getReservationDetail(Long houseId) { return new ReservationDetailDTO(1L, images, "서초구, 서울, 한국", "Specious and Comfortable cozy house #4", "2021년 5월 17일 오후 4:00", "2021년 6월 4일 오후 12:00", new Description("Jong님", "집전체 • 게스트 3명", 1488195)); } + + public void cancelReservation(Long houseId) { + + } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 0fce46f38..5c5a47762 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -65,4 +65,10 @@ public ReservationDetailDTO getReservationDetail(@PathVariable Long houseId) { logger.info("{}번 숙소의 디테일 예약정보 요청", houseId); return houseService.getReservationDetail(houseId); } + + @DeleteMapping("/reservation/{houseId}") + public void cancelReservation(@PathVariable Long houseId) { + logger.info("{}번 숙소의 예약 취소 요청", houseId); + houseService.cancelReservation(houseId); + } } From cdd002d1f18203240e00e185616f44bdd1aa6a3c Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 20 May 2021 17:03:03 +0900 Subject: [PATCH 11/60] =?UTF-8?q?Chore:=20ReservationInfoResponseDTO=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/main/java/com/enolj/airbnb/service/HouseService.java | 2 +- .../airbnb/web/{ => dto}/ReservationInfoResponseDTO.java | 4 +--- 2 files changed, 2 insertions(+), 4 deletions(-) rename BE/src/main/java/com/enolj/airbnb/web/{ => dto}/ReservationInfoResponseDTO.java (91%) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index bf6098ce0..e15849157 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -1,6 +1,6 @@ package com.enolj.airbnb.service; -import com.enolj.airbnb.web.ReservationInfoResponseDTO; +import com.enolj.airbnb.web.dto.ReservationInfoResponseDTO; import com.enolj.airbnb.web.dto.*; import org.springframework.stereotype.Service; diff --git a/BE/src/main/java/com/enolj/airbnb/web/ReservationInfoResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java similarity index 91% rename from BE/src/main/java/com/enolj/airbnb/web/ReservationInfoResponseDTO.java rename to BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java index a78db4f4a..c989192c6 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/ReservationInfoResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java @@ -1,6 +1,4 @@ -package com.enolj.airbnb.web; - -import com.enolj.airbnb.web.dto.Fee; +package com.enolj.airbnb.web.dto; public class ReservationInfoResponseDTO { From 91c321ceba46ef1662582e58bdcb07d23773bb53 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 20 May 2021 17:03:32 +0900 Subject: [PATCH 12/60] =?UTF-8?q?Chore:=20.gitignore=20=ED=8C=8C=EC=9D=BC?= =?UTF-8?q?=EC=97=90=20build.sh=20=EC=8A=A4=ED=81=AC=EB=A6=BD=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 4141ae3f8..6670df457 100644 --- a/.gitignore +++ b/.gitignore @@ -189,3 +189,4 @@ gradle-app.setting /.idea/vcs.xml /.idea/jarRepositories.xml /.idea/libraries-with-intellij-classes.xml +/BE/build.sh From d6e048500d9492d938742307be6fded532296564 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 20 May 2021 17:07:59 +0900 Subject: [PATCH 13/60] =?UTF-8?q?Feat:=20[#33]=20RequestLoggingFilterConfi?= =?UTF-8?q?g=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit API 요청 시 메소드와 바디가 기록에 남도록 filter 설정 --- .../config/RequestLoggingFilterConfig.java | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/config/RequestLoggingFilterConfig.java diff --git a/BE/src/main/java/com/enolj/airbnb/config/RequestLoggingFilterConfig.java b/BE/src/main/java/com/enolj/airbnb/config/RequestLoggingFilterConfig.java new file mode 100644 index 000000000..a599a04bb --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/config/RequestLoggingFilterConfig.java @@ -0,0 +1,20 @@ +package com.enolj.airbnb.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.CommonsRequestLoggingFilter; + +@Configuration +public class RequestLoggingFilterConfig { + + @Bean + public CommonsRequestLoggingFilter logFilter() { + CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); + filter.setIncludeHeaders(false); + filter.setIncludeQueryString(true); + filter.setIncludePayload(true); + filter.setMaxPayloadLength(10000); + filter.setAfterMessagePrefix("REQUEST DATA : "); + return filter; + } +} From f24a91cd401261a2ec414b84356f896f4a2950d2 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 20 May 2021 17:08:56 +0900 Subject: [PATCH 14/60] =?UTF-8?q?Feat:=20[#33]=20WebConfig=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 리액트에서 API를 사용할 수 있도록 cors 설정을 위해 WebConfig 클래스 생성 --- .../java/com/enolj/airbnb/config/WebConfig.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/config/WebConfig.java diff --git a/BE/src/main/java/com/enolj/airbnb/config/WebConfig.java b/BE/src/main/java/com/enolj/airbnb/config/WebConfig.java new file mode 100644 index 000000000..8b9b77fd2 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/config/WebConfig.java @@ -0,0 +1,15 @@ +package com.enolj.airbnb.config; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebConfig implements WebMvcConfigurer { + + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**") + .allowedOrigins("http://localhost:3000"); + } +} From 181fcb2cd3ce73b8c6a1833c2a8f882a5bd4e734 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 10:49:50 +0900 Subject: [PATCH 15/60] =?UTF-8?q?Chore:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../test/java/com/enolj/airbnb/AirbnbApplicationTests.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java b/BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java index 72b775835..452b46751 100644 --- a/BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java +++ b/BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java @@ -1,13 +1,8 @@ package com.enolj.airbnb; -import org.junit.jupiter.api.Test; import org.springframework.boot.test.context.SpringBootTest; @SpringBootTest class AirbnbApplicationTests { - @Test - void contextLoads() { - } - } From 1b76254f7b6931632192570783b19c264664e411 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 14:26:19 +0900 Subject: [PATCH 16/60] =?UTF-8?q?Refactor:=20DB=20password=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD=EC=9C=BC=EB=A1=9C=20=EC=84=A4=EC=A0=95=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/main/resources/application.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/BE/src/main/resources/application.properties b/BE/src/main/resources/application.properties index 646492036..bdd0e31ca 100644 --- a/BE/src/main/resources/application.properties +++ b/BE/src/main/resources/application.properties @@ -1,6 +1,6 @@ spring.datasource.url=jdbc:mysql://localhost:3306/airbnb spring.datasource.username=airbnb -spring.datasource.password=airbnb +spring.datasource.password=airbnbdb spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.initialization-mode=always From 6e936c59a2b31284ae88487b355ac24d99e3119b Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 14:30:24 +0900 Subject: [PATCH 17/60] =?UTF-8?q?Refactor:=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=EA=B0=80=EB=8F=85=EC=84=B1?= =?UTF-8?q?=EC=9D=84=20=EC=9C=84=ED=95=B4=20makeCharges=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=EB=A5=BC=20=EB=A7=8C=EB=93=A4=EC=96=B4=20sea?= =?UTF-8?q?rchChargesByCondition=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../enolj/airbnb/service/HouseService.java | 47 ++++++++++++++----- 1 file changed, 36 insertions(+), 11 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index e15849157..631cc23c8 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -24,17 +24,7 @@ public List searchHousesByCondition(SearchRequestDTO requestD public List searchChargesByCondition(SearchChargesRequestDTO requestDTO) { System.out.println(requestDTO); - List charges = new ArrayList<>(); - charges.add(1000); - charges.add(1000); - charges.add(1100); - charges.add(1150); - charges.add(1150); - charges.add(3000); - charges.add(5000); - charges.add(10000); - charges.add(100000); - return charges; + return makeCharges(); } public ReservationInfoResponseDTO getReservationInfo(Long houseId) { @@ -80,4 +70,39 @@ public ReservationDetailDTO getReservationDetail(Long houseId) { public void cancelReservation(Long houseId) { } + + public List makeCharges() { + List charges = new ArrayList<>(); + charges.add(50000); + charges.add(55000); + charges.add(60000); + charges.add(65000); + charges.add(65000); + charges.add(70000); + charges.add(75000); + charges.add(75000); + charges.add(80000); + charges.add(80000); + charges.add(80000); + charges.add(85000); + charges.add(85000); + charges.add(85000); + charges.add(85000); + charges.add(90000); + charges.add(90000); + charges.add(90000); + charges.add(95000); + charges.add(100000); + charges.add(100000); + charges.add(105000); + charges.add(110000); + charges.add(115000); + charges.add(120000); + charges.add(125000); + charges.add(125000); + charges.add(130000); + charges.add(135000); + charges.add(140000); + return charges; + } } From 312537134dd9a207c7db2b082c66184b409c0447 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 14:38:20 +0900 Subject: [PATCH 18/60] =?UTF-8?q?Refactor:=20[#38]=20HouseController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EC=97=90=20searchHouses,=20searchCh?= =?UTF-8?q?arges=20=EB=A9=94=EC=86=8C=EB=93=9C=EC=9D=98=20=EB=A7=A4?= =?UTF-8?q?=EA=B0=9C=EB=B3=80=EC=88=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GET 요청에 body를 담을 수 없기 때문에 Parameter로 받도록 수정 --- .../com/enolj/airbnb/web/HouseController.java | 4 +- .../web/dto/SearchChargesRequestDTO.java | 47 +++++++------ .../airbnb/web/dto/SearchRequestDTO.java | 70 +++++++++++++------ 3 files changed, 76 insertions(+), 45 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 5c5a47762..9d278faec 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -19,13 +19,13 @@ public HouseController(HouseService houseService) { } @GetMapping("/houses") - public List searchHouses(@RequestBody SearchRequestDTO requestDTO) { + public List searchHouses(SearchRequestDTO requestDTO) { logger.info("숙소 검색 요청"); return houseService.searchHousesByCondition(requestDTO); } @GetMapping("/houses/charges") - public List searchCharges(@RequestBody SearchChargesRequestDTO requestDTO) { + public List searchCharges(SearchChargesRequestDTO requestDTO) { logger.info("범위 내 숙소 가격 요청"); return houseService.searchChargesByCondition(requestDTO); } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java index afaf80fd6..347e086d3 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java @@ -2,39 +2,42 @@ public class SearchChargesRequestDTO { - private CheckDate date; - private Location location; + private String checkIn; + private String checkOut; + private double latitude; + private double longitude; + + public SearchChargesRequestDTO(String checkIn, String checkOut, double latitude, double longitude) { + this.checkIn = checkIn; + this.checkOut = checkOut; + this.latitude = latitude; + this.longitude = longitude; + } + + public void setCheckIn(String checkIn) { + this.checkIn = checkIn; + } - public SearchChargesRequestDTO(CheckDate date, Location location) { - this.date = date; - this.location = location; + public void setCheckOut(String checkOut) { + this.checkOut = checkOut; } - public void setDate(CheckDate date) { - this.date = date; + public void setLatitude(double latitude) { + this.latitude = latitude; } - public void setLocation(Location location) { - this.location = location; + public void setLongitude(double longitude) { + this.longitude = longitude; } @Override public String toString() { return "SearchChargesRequestDTO{" + - "date=" + date + - ", location=" + location + + "checkIn='" + checkIn + '\'' + + ", checkOut='" + checkOut + '\'' + + ", latitude=" + latitude + + ", longitude=" + longitude + '}'; } } - -// { -// "date": { -// "start": "2021-05-18", -// "end": "2021-05-25" -// }, -// "location": { -// "latitude": 37.566826, -// "longitude": 126.9786567 -// } -// } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java index 46121379a..e8ce6902b 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java @@ -2,41 +2,69 @@ public class SearchRequestDTO { - private CheckDate date; - private Charge charge; - private People people; - private Location location; + private String checkIn; + private String checkOut; + private int minCharge; + private int maxCharge; + private int guest; + private int kid; + private double latitude; + private double longitude; - public SearchRequestDTO(CheckDate date, Charge charge, People people, Location location) { - this.date = date; - this.charge = charge; - this.people = people; - this.location = location; + public SearchRequestDTO(String checkIn, String checkOut, int minCharge, int maxCharge, int guest, int kid, double latitude, double longitude) { + this.checkIn = checkIn; + this.checkOut = checkOut; + this.minCharge = minCharge; + this.maxCharge = maxCharge; + this.guest = guest; + this.kid = kid; + this.latitude = latitude; + this.longitude = longitude; } - public void setDate(CheckDate date) { - this.date = date; + public void setCheckIn(String checkIn) { + this.checkIn = checkIn; } - public void setCharge(Charge charge) { - this.charge = charge; + public void setCheckOut(String checkOut) { + this.checkOut = checkOut; } - public void setPeople(People people) { - this.people = people; + public void setMinCharge(int minCharge) { + this.minCharge = minCharge; } - public void setLocation(Location location) { - this.location = location; + public void setMaxCharge(int maxCharge) { + this.maxCharge = maxCharge; + } + + public void setGuest(int guest) { + this.guest = guest; + } + + public void setKid(int kid) { + this.kid = kid; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; } @Override public String toString() { return "SearchRequestDTO{" + - "date=" + date + - ", charge=" + charge + - ", people=" + people + - ", location=" + location + + "checkIn='" + checkIn + '\'' + + ", checkOut='" + checkOut + '\'' + + ", minCharge=" + minCharge + + ", maxCharge=" + maxCharge + + ", quest=" + guest + + ", kid=" + kid + + ", latitude=" + latitude + + ", longitude=" + longitude + '}'; } } From fa6621ce63c20c6ea8b9b02b44e855dcd2c7ad5d Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 17:04:08 +0900 Subject: [PATCH 19/60] =?UTF-8?q?Feat:=20[#44]=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=EC=9D=98=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=9C=20=EC=8A=A4=ED=82=A4?= =?UTF-8?q?=EB=A7=88=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/main/resources/schema.sql | 33 ++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) create mode 100644 BE/src/main/resources/schema.sql diff --git a/BE/src/main/resources/schema.sql b/BE/src/main/resources/schema.sql new file mode 100644 index 000000000..28932f823 --- /dev/null +++ b/BE/src/main/resources/schema.sql @@ -0,0 +1,33 @@ +-- MySQL Workbench Forward Engineering + +SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0; +SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; +SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; + +-- ----------------------------------------------------- +-- Schema airbnb +-- ----------------------------------------------------- + +-- ----------------------------------------------------- +-- Schema airbnb +-- ----------------------------------------------------- +CREATE SCHEMA IF NOT EXISTS `airbnb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ; +USE `airbnb` ; + +-- ----------------------------------------------------- +-- Table `airbnb`.`user` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `airbnb`.`user`; +CREATE TABLE IF NOT EXISTS `airbnb`.`user` ( + `id` INT AUTO_INCREMENT NOT NULL, + `user_id` VARCHAR(45) NOT NULL, + `email` VARCHAR(45) NOT NULL, + `name` VARCHAR(45) NULL, + `token` VARCHAR(45) NULL, + PRIMARY KEY (`id`)) + ENGINE = InnoDB; + + +SET SQL_MODE=@OLD_SQL_MODE; +SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; +SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; From 8a916e53e919c36ae880139b8ba0f0b696b252c0 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 17:05:16 +0900 Subject: [PATCH 20/60] =?UTF-8?q?Feat:=20[#44]=20=EC=9C=A0=EC=A0=80?= =?UTF-8?q?=EC=9D=98=20=EC=A0=95=EB=B3=B4=EB=A5=BC=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20User=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=99=80=20UserRepository=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/enolj/airbnb/domain/user/User.java | 71 +++++++++++++++++++ .../airbnb/domain/user/UserRepository.java | 10 +++ 2 files changed, 81 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/user/User.java create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/user/UserRepository.java diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/User.java b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java new file mode 100644 index 000000000..8672d17b7 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java @@ -0,0 +1,71 @@ +package com.enolj.airbnb.domain.user; + +import com.enolj.airbnb.web.dto.EmailDTO; +import com.enolj.airbnb.web.dto.TokenDTO; +import com.enolj.airbnb.web.dto.UserInfoDTO; +import org.springframework.data.annotation.Id; + +public class User { + + @Id + private Long id; + private String name; + private String email; + private String userId; + private String token; + + public User() {} + + public User(String name, String email, String userId, String token) { + this.name = name; + this.email = email; + this.userId = userId; + this.token = token; + } + + public static User createUser(UserInfoDTO userInfoDTO, EmailDTO emailDTO, TokenDTO tokenDTO) { + return new User(userInfoDTO.getName(), emailDTO.getEmail(), userInfoDTO.getLogin(), tokenDTO.getAccess_token()); + } + + public void update(UserInfoDTO userInfoDTO, EmailDTO emailDTO, TokenDTO tokenDTO) { + this.name = userInfoDTO.getName(); + this.email = emailDTO.getEmail(); + this.userId = userInfoDTO.getLogin(); + this.token = tokenDTO.getAccess_token(); + } + + public void removeToken() { + this.token = null; + } + + public Long getId() { + return id; + } + + public String getName() { + return name; + } + + public String getEmail() { + return email; + } + + public String getUserId() { + return userId; + } + + public String getToken() { + return token; + } + + @Override + public String toString() { + return "User{" + + "id=" + id + + ", name='" + name + '\'' + + ", email='" + email + '\'' + + ", userId='" + userId + '\'' + + ", token='" + token + '\'' + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/UserRepository.java b/BE/src/main/java/com/enolj/airbnb/domain/user/UserRepository.java new file mode 100644 index 000000000..c05a736fa --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/UserRepository.java @@ -0,0 +1,10 @@ +package com.enolj.airbnb.domain.user; + +import org.springframework.data.repository.CrudRepository; + +import java.util.Optional; + +public interface UserRepository extends CrudRepository { + + Optional findByUserId(String userId); +} From 7da62e8c5d699a8d980b54d4eb8d1a2e2d26d758 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 17:09:41 +0900 Subject: [PATCH 21/60] =?UTF-8?q?Feat:=20[#44]=20UserController=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 로그인, 로그아웃 기능을 제공하기 위해 UserController 클래스 생성, 관련 비즈니스 로직을 가진 UserService 클래스 생성, 관련 DTO 클래스 생성 --- .../com/enolj/airbnb/service/UserService.java | 79 +++++++++++++++++++ .../com/enolj/airbnb/web/UserController.java | 32 ++++++++ .../com/enolj/airbnb/web/dto/EmailDTO.java | 21 +++++ .../com/enolj/airbnb/web/dto/TokenDTO.java | 33 ++++++++ .../com/enolj/airbnb/web/dto/UserInfoDTO.java | 31 ++++++++ .../enolj/airbnb/web/dto/UserResponseDTO.java | 38 +++++++++ 6 files changed, 234 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/service/UserService.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/UserController.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/EmailDTO.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/UserResponseDTO.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java new file mode 100644 index 000000000..0d7b8f024 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -0,0 +1,79 @@ +package com.enolj.airbnb.service; + +import com.enolj.airbnb.authorization.GitHubOAuth; +import com.enolj.airbnb.authorization.OAuth; +import com.enolj.airbnb.domain.user.User; +import com.enolj.airbnb.domain.user.UserRepository; +import com.enolj.airbnb.exception.EntityNotFoundException; +import com.enolj.airbnb.exception.ErrorMessage; +import com.enolj.airbnb.exception.TokenException; +import com.enolj.airbnb.web.dto.EmailDTO; +import com.enolj.airbnb.web.dto.TokenDTO; +import com.enolj.airbnb.web.dto.UserInfoDTO; +import com.enolj.airbnb.web.dto.UserResponseDTO; +import com.enolj.airbnb.web.utils.GitHubType; +import com.enolj.airbnb.web.utils.JwtUtil; +import org.springframework.stereotype.Service; + +import static com.enolj.airbnb.domain.user.User.createUser; +import static com.enolj.airbnb.web.dto.UserResponseDTO.createUserResponseDTO; + +@Service +public class UserService { + + private final UserRepository userRepository; + private final OAuth gitHubOAuth; + + public UserService(UserRepository userRepository, GitHubOAuth gitHubOAuth) { + this.userRepository = userRepository; + this.gitHubOAuth = gitHubOAuth; + } + + public UserResponseDTO login(String code, GitHubType gitHubType) { + TokenDTO tokenDTO = tokenRequestApi(code, gitHubType); + UserInfoDTO userInfoDTO = userInfoRequestApi(tokenDTO.getAccess_token()); + EmailDTO emailDTO = emailRequestApi(tokenDTO.getAccess_token()); + if (verifyUser(userInfoDTO.getLogin())) { + User user = findByUserId(userInfoDTO.getLogin()); + user.update(userInfoDTO, emailDTO, tokenDTO); + return createUserResponseDTO(userRepository.save(user), JwtUtil.createToken(user.getUserId())); + } + User user = createUser(userInfoDTO, emailDTO, tokenDTO); + return createUserResponseDTO(userRepository.save(user), JwtUtil.createToken(user.getUserId())); + } + + public void logout(String authorization) { + String userId = JwtUtil.getUserIdFromToken(getTokenFromAuthorization(authorization)); + User user = findByUserId(userId); + user.removeToken(); + userRepository.save(user); + } + + private String getTokenFromAuthorization(String authorization) { + String[] authArray = authorization.split(" "); + if (authArray.length < 2 || !authArray[0].equals("Beare")) { + throw new TokenException(ErrorMessage.INVALID_TOKEN); + } + return authArray[1]; + } + + private TokenDTO tokenRequestApi(String code, GitHubType gitHubType) { + return gitHubOAuth.getTokenAPI(code, gitHubType); + } + + private UserInfoDTO userInfoRequestApi(String token) { + return gitHubOAuth.getUserInfoAPI(token); + } + + private EmailDTO emailRequestApi(String token) { + return gitHubOAuth.getEmailAPI(token); + } + + private boolean verifyUser(String userId) { + return userRepository.findByUserId(userId).isPresent(); + } + + private User findByUserId(String userId) { + return userRepository.findByUserId(userId).orElseThrow(EntityNotFoundException::new); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/UserController.java b/BE/src/main/java/com/enolj/airbnb/web/UserController.java new file mode 100644 index 000000000..298159dee --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/UserController.java @@ -0,0 +1,32 @@ +package com.enolj.airbnb.web; + +import com.enolj.airbnb.service.UserService; +import com.enolj.airbnb.web.dto.UserResponseDTO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import static com.enolj.airbnb.web.utils.GitHubType.getGitHubTypeByCode; + +@RestController +public class UserController { + + public final UserService userService; + private final Logger logger = LoggerFactory.getLogger(UserController.class); + + public UserController(UserService userService) { + this.userService = userService; + } + + @PostMapping("/login") + public UserResponseDTO login(@RequestParam String code, @RequestParam int typeCode) { + logger.info("로그인 요청"); + return userService.login(code, getGitHubTypeByCode(typeCode)); + } + + @GetMapping("/logout") + public void logout(@RequestHeader String authorization) { + logger.info("로그아웃 요청"); + userService.logout(authorization); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/EmailDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/EmailDTO.java new file mode 100644 index 000000000..fc85c1e56 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/EmailDTO.java @@ -0,0 +1,21 @@ +package com.enolj.airbnb.web.dto; + +public class EmailDTO { + + private String email; + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public String toString() { + return "emailDTO{" + + "email='" + email + '\'' + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java new file mode 100644 index 000000000..2b593fe2a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java @@ -0,0 +1,33 @@ +package com.enolj.airbnb.web.dto; + +public class TokenDTO { + + private String access_token; + private String token_type; + private String scope; + + public void setAccess_token(String access_token) { + this.access_token = access_token; + } + + public void setToken_type(String token_type) { + this.token_type = token_type; + } + + public void setScope(String scope) { + this.scope = scope; + } + + public String getAccess_token() { + return access_token; + } + + @Override + public String toString() { + return "TokenDTO{" + + "access_token='" + access_token + '\'' + + ", token_type='" + token_type + '\'' + + ", scope='" + scope + '\'' + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java new file mode 100644 index 000000000..5720a4d9c --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java @@ -0,0 +1,31 @@ +package com.enolj.airbnb.web.dto; + +public class UserInfoDTO { + + private String login; + private String name; + + public String getLogin() { + return login; + } + + public void setLogin(String login) { + this.login = login; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "UserInfoDTO{" + + "login='" + login + '\'' + + ", name='" + name + '\'' + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/UserResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/UserResponseDTO.java new file mode 100644 index 000000000..b140ae9be --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/UserResponseDTO.java @@ -0,0 +1,38 @@ +package com.enolj.airbnb.web.dto; + +import com.enolj.airbnb.domain.user.User; + +public class UserResponseDTO { + + private final String name; + private final String email; + private final String userId; + private final String token; + + public UserResponseDTO(String name, String email, String userId, String token) { + this.name = name; + this.email = email; + this.userId = userId; + this.token = token; + } + + public static UserResponseDTO createUserResponseDTO(User user, String token) { + return new UserResponseDTO(user.getName(), user.getEmail(), user.getUserId(), token); + } + + public String getName() { + return name; + } + + public String getEmail() { + return email; + } + + public String getUserId() { + return userId; + } + + public String getToken() { + return token; + } +} From 9a727bf08150ae55c58e26cd83f3adbda0480e84 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 17:14:00 +0900 Subject: [PATCH 22/60] =?UTF-8?q?Feat:=20[#44]=20GitHubOAuth=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit getTokenAPI, getUserInfoAPI, getEmailAPI 메소드를 가지는 OAuth 인터페이스를 상속 받는 GitHubOAuth 클래스 생성, 관련 비즈니스 로직과 이넘 클래스 생성, Jwt 토큰을 사용한 인증방식 구현 --- .../airbnb/authorization/GitHubOAuth.java | 77 +++++++++++++++++++ .../com/enolj/airbnb/authorization/OAuth.java | 15 ++++ .../RestTemplateResponseErrorHandler.java | 26 +++++++ .../enolj/airbnb/web/utils/GitHubType.java | 34 ++++++++ .../com/enolj/airbnb/web/utils/GitHubUrl.java | 18 +++++ .../com/enolj/airbnb/web/utils/JwtUtil.java | 43 +++++++++++ 6 files changed, 213 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java create mode 100644 BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java create mode 100644 BE/src/main/java/com/enolj/airbnb/errorHandler/RestTemplateResponseErrorHandler.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/utils/GitHubUrl.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java diff --git a/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java new file mode 100644 index 000000000..9fc9e48d7 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java @@ -0,0 +1,77 @@ +package com.enolj.airbnb.authorization; + +import com.enolj.airbnb.errorHandler.RestTemplateResponseErrorHandler; +import com.enolj.airbnb.exception.ErrorMessage; +import com.enolj.airbnb.exception.OAuthException; +import com.enolj.airbnb.web.dto.EmailDTO; +import com.enolj.airbnb.web.dto.TokenDTO; +import com.enolj.airbnb.web.dto.UserInfoDTO; +import com.enolj.airbnb.web.utils.GitHubType; +import com.enolj.airbnb.web.utils.GitHubUrl; +import org.springframework.boot.web.client.RestTemplateBuilder; +import org.springframework.context.annotation.PropertySource; +import org.springframework.core.ParameterizedTypeReference; +import org.springframework.core.env.Environment; +import org.springframework.http.HttpEntity; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.MediaType; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.util.UriComponentsBuilder; + +import java.util.List; + +@PropertySource("classpath:/oauth.properties") +@Component +public class GitHubOAuth implements OAuth{ + + public static final String CLIENT_ID = "client_id"; + public static final String CLIENT_SECRET = "client_secret"; + public static final String CODE = "code"; + public static final String TOKEN = "token"; + + private final RestTemplate restTemplate; + private final Environment environment; + + public GitHubOAuth(Environment environment, RestTemplateBuilder restTemplateBuilder) { + this.restTemplate = restTemplateBuilder.errorHandler(new RestTemplateResponseErrorHandler()).build(); + this.environment = environment; + } + + @Override + public TokenDTO getTokenAPI(String code, GitHubType gitHubType) { + String id = environment.getProperty(gitHubType.getClientId()); + String secret = environment.getProperty(gitHubType.getClientSecret()); + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.ACCESS_TOKEN.getUrl()) + .queryParam(CLIENT_ID, id) + .queryParam(CLIENT_SECRET, secret) + .queryParam(CODE, code); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE); + httpHeaders.set(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE); + HttpEntity httpEntity = new HttpEntity<>(httpHeaders); + return restTemplate.exchange(builder.toUriString(), HttpMethod.POST, httpEntity, TokenDTO.class).getBody(); + } + + @Override + public UserInfoDTO getUserInfoAPI(String token) { + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.USER_INFO.getUrl()); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.set(HttpHeaders.AUTHORIZATION, TOKEN + " " + token); + HttpEntity httpEntity = new HttpEntity<>(httpHeaders); + return restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, UserInfoDTO.class).getBody(); + } + + @Override + public EmailDTO getEmailAPI(String token) { + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.USER_EMAIL.getUrl()); + HttpHeaders httpHeaders = new HttpHeaders(); + httpHeaders.set(HttpHeaders.AUTHORIZATION, TOKEN + " " + token); + HttpEntity httpEntity = new HttpEntity<>(httpHeaders); + List emailDTOList = restTemplate.exchange(builder.toUriString(), HttpMethod.GET, httpEntity, new ParameterizedTypeReference>() {}).getBody(); + return emailDTOList.stream().findFirst().orElseThrow( + () -> new OAuthException(ErrorMessage.OAUTH_FAILED) + ); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java b/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java new file mode 100644 index 000000000..1b6e8860b --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java @@ -0,0 +1,15 @@ +package com.enolj.airbnb.authorization; + +import com.enolj.airbnb.web.dto.EmailDTO; +import com.enolj.airbnb.web.dto.TokenDTO; +import com.enolj.airbnb.web.dto.UserInfoDTO; +import com.enolj.airbnb.web.utils.GitHubType; + +public interface OAuth { + + TokenDTO getTokenAPI(String code, GitHubType gitHubType); + + UserInfoDTO getUserInfoAPI(String token); + + EmailDTO getEmailAPI(String token); +} diff --git a/BE/src/main/java/com/enolj/airbnb/errorHandler/RestTemplateResponseErrorHandler.java b/BE/src/main/java/com/enolj/airbnb/errorHandler/RestTemplateResponseErrorHandler.java new file mode 100644 index 000000000..b6166c92a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/errorHandler/RestTemplateResponseErrorHandler.java @@ -0,0 +1,26 @@ +package com.enolj.airbnb.errorHandler; + +import com.enolj.airbnb.exception.ErrorMessage; +import com.enolj.airbnb.exception.OAuthException; +import org.springframework.http.client.ClientHttpResponse; +import org.springframework.stereotype.Component; +import org.springframework.web.client.ResponseErrorHandler; + +import java.io.IOException; + +import static org.springframework.http.HttpStatus.Series.CLIENT_ERROR; +import static org.springframework.http.HttpStatus.Series.SERVER_ERROR; + +@Component +public class RestTemplateResponseErrorHandler implements ResponseErrorHandler { + + @Override + public boolean hasError(ClientHttpResponse httpResponse) throws IOException { + return (httpResponse.getStatusCode().series() == CLIENT_ERROR || httpResponse.getStatusCode().series() == SERVER_ERROR); + } + + @Override + public void handleError(ClientHttpResponse httpResponse) { + throw new OAuthException(ErrorMessage.OAUTH_FAILED); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java b/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java new file mode 100644 index 000000000..cc82d66a7 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java @@ -0,0 +1,34 @@ +package com.enolj.airbnb.web.utils; + +import com.enolj.airbnb.exception.ErrorMessage; +import com.enolj.airbnb.exception.GitHubTypeException; + +public enum GitHubType { + + FRONT("github.front.client.id", "github.front.secret"), + IOS("github.ios.client.id", "github.ios.secret"); + + private final String clientId; + private final String clientSecret; + + GitHubType(String clientId, String clientSecret) { + this.clientId = clientId; + this.clientSecret = clientSecret; + } + + public String getClientId() { + return clientId; + } + + public String getClientSecret() { + return clientSecret; + } + + public static GitHubType getGitHubTypeByCode(int code) { + switch (code) { + case 1: return GitHubType.FRONT; + case 2: return GitHubType.IOS; + default: throw new GitHubTypeException(ErrorMessage.INVALID_GITHUBTYPE); + } + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubUrl.java b/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubUrl.java new file mode 100644 index 000000000..7c3990c26 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubUrl.java @@ -0,0 +1,18 @@ +package com.enolj.airbnb.web.utils; + +public enum GitHubUrl { + + ACCESS_TOKEN("https://github.com/login/oauth/access_token"), + USER_INFO("https://api.github.com/user"), + USER_EMAIL("https://api.github.com/user/emails"); + + private final String url; + + GitHubUrl(String url) { + this.url = url; + } + + public String getUrl() { + return url; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java b/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java new file mode 100644 index 000000000..5da413516 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java @@ -0,0 +1,43 @@ +package com.enolj.airbnb.web.utils; + +import com.auth0.jwt.JWT; +import com.auth0.jwt.JWTVerifier; +import com.auth0.jwt.algorithms.Algorithm; +import com.auth0.jwt.exceptions.JWTDecodeException; +import com.auth0.jwt.exceptions.TokenExpiredException; +import com.auth0.jwt.interfaces.DecodedJWT; +import com.enolj.airbnb.exception.ErrorMessage; +import com.enolj.airbnb.exception.TokenException; +import com.fasterxml.jackson.databind.node.TextNode; + +import java.util.Date; + +public class JwtUtil { + + private static final String SECRET = "secret"; + private static final String CLAIM_KEY = "userId"; + private static final Algorithm algorithmHS = Algorithm.HMAC256(SECRET); + + public static String createToken(String userId) { + return JWT.create() + .withClaim(CLAIM_KEY, userId) + .withExpiresAt(new Date()) + .sign(algorithmHS); + } + + public static String getUserIdFromToken(String token) { + DecodedJWT decodedJWT = verifyToken(token); + return decodedJWT.getClaims().get(CLAIM_KEY).as(TextNode.class).asText(); + } + + private static DecodedJWT verifyToken(String token) { + try { + JWTVerifier verifier = JWT.require(algorithmHS) + .acceptExpiresAt(600) + .build(); + return verifier.verify(token); + } catch (JWTDecodeException | TokenExpiredException e) { + throw new TokenException(ErrorMessage.INVALID_TOKEN); + } + } +} From 474fe9082d76b4dc9c0329a73d409477072b8e6c Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 17:14:26 +0900 Subject: [PATCH 23/60] =?UTF-8?q?Feat:=20[#44]=20=EB=A1=9C=EA=B7=B8?= =?UTF-8?q?=EC=9D=B8,=20=EB=A1=9C=EA=B7=B8=EC=95=84=EC=9B=83=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EA=B5=AC=ED=98=84=EC=97=90=20=EC=9E=88=EC=96=B4=20?= =?UTF-8?q?=ED=95=84=EC=9A=94=ED=95=9C=20=EC=98=88=EC=99=B8=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../exception/EntityNotFoundException.java | 23 +++++++++++++++++++ .../enolj/airbnb/exception/ErrorMessage.java | 19 +++++++++++++++ .../airbnb/exception/GitHubTypeException.java | 16 +++++++++++++ .../airbnb/exception/OAuthException.java | 19 +++++++++++++++ .../airbnb/exception/TokenException.java | 19 +++++++++++++++ 5 files changed, 96 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/exception/EntityNotFoundException.java create mode 100644 BE/src/main/java/com/enolj/airbnb/exception/ErrorMessage.java create mode 100644 BE/src/main/java/com/enolj/airbnb/exception/GitHubTypeException.java create mode 100644 BE/src/main/java/com/enolj/airbnb/exception/OAuthException.java create mode 100644 BE/src/main/java/com/enolj/airbnb/exception/TokenException.java diff --git a/BE/src/main/java/com/enolj/airbnb/exception/EntityNotFoundException.java b/BE/src/main/java/com/enolj/airbnb/exception/EntityNotFoundException.java new file mode 100644 index 000000000..9df7e5878 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/exception/EntityNotFoundException.java @@ -0,0 +1,23 @@ +package com.enolj.airbnb.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.BAD_REQUEST) +public class EntityNotFoundException extends RuntimeException { + + private ErrorMessage errorMessage; + + public EntityNotFoundException() { + super(ErrorMessage.ENTITY_NOT_FOUND.getErrorMessage()); + } + + public EntityNotFoundException(String errorMessage) { + super(errorMessage); + } + + public EntityNotFoundException(ErrorMessage errorMessage) { + super(errorMessage.getErrorMessage()); + this.errorMessage = errorMessage; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/exception/ErrorMessage.java b/BE/src/main/java/com/enolj/airbnb/exception/ErrorMessage.java new file mode 100644 index 000000000..bda91213c --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/exception/ErrorMessage.java @@ -0,0 +1,19 @@ +package com.enolj.airbnb.exception; + +public enum ErrorMessage { + + ENTITY_NOT_FOUND("해당 엔티티를 찾을 수 없습니다."), + OAUTH_FAILED("OAuth 인증에 실패 했습니다."), + INVALID_TOKEN("유효하지 않은 토큰입니다."), + INVALID_GITHUBTYPE("유효하지 않은 타입입니다."); + + private final String errorMessage; + + ErrorMessage(String errorMessage) { + this.errorMessage = errorMessage; + } + + public String getErrorMessage() { + return errorMessage; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/exception/GitHubTypeException.java b/BE/src/main/java/com/enolj/airbnb/exception/GitHubTypeException.java new file mode 100644 index 000000000..bb728c469 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/exception/GitHubTypeException.java @@ -0,0 +1,16 @@ +package com.enolj.airbnb.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.BAD_REQUEST) +public class GitHubTypeException extends RuntimeException { + + public GitHubTypeException(String errorMessage) { + super(errorMessage); + } + + public GitHubTypeException(ErrorMessage errorMessage) { + super(errorMessage.getErrorMessage()); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/exception/OAuthException.java b/BE/src/main/java/com/enolj/airbnb/exception/OAuthException.java new file mode 100644 index 000000000..8466ca065 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/exception/OAuthException.java @@ -0,0 +1,19 @@ +package com.enolj.airbnb.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.BAD_REQUEST) +public class OAuthException extends RuntimeException { + + private ErrorMessage errorMessage; + + public OAuthException(String errorMessage) { + super(errorMessage); + } + + public OAuthException(ErrorMessage errorMessage) { + super(errorMessage.getErrorMessage()); + this.errorMessage = errorMessage; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/exception/TokenException.java b/BE/src/main/java/com/enolj/airbnb/exception/TokenException.java new file mode 100644 index 000000000..1ce140f68 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/exception/TokenException.java @@ -0,0 +1,19 @@ +package com.enolj.airbnb.exception; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.UNAUTHORIZED) +public class TokenException extends RuntimeException { + + private ErrorMessage errorMessage; + + public TokenException(String errorMessage) { + super(errorMessage); + } + + public TokenException(ErrorMessage errorMessage) { + super(errorMessage.getErrorMessage()); + this.errorMessage = errorMessage; + } +} From d5a9f9e40ac711673b16cb28a7e5b970f0a3e117 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 17:14:52 +0900 Subject: [PATCH 24/60] =?UTF-8?q?Feat:=20[#44]=20Jwt=EB=A5=BC=20=EC=82=AC?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EA=B8=B0=20=EC=9C=84=ED=95=B4=20=EC=9D=98?= =?UTF-8?q?=EC=A1=B4=EC=84=B1=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/build.gradle | 1 + 1 file changed, 1 insertion(+) diff --git a/BE/build.gradle b/BE/build.gradle index bd6450914..85c089139 100644 --- a/BE/build.gradle +++ b/BE/build.gradle @@ -15,6 +15,7 @@ repositories { dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-data-jdbc' + implementation 'com.auth0:java-jwt:3.8.2' runtimeOnly 'mysql:mysql-connector-java' testImplementation 'org.springframework.boot:spring-boot-starter-test' } From cd8e4e8b06788c415b12dd06802cef36afad1989 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 21 May 2021 17:15:23 +0900 Subject: [PATCH 25/60] =?UTF-8?q?Feat:=20[#44]=20.gitignore=20=ED=8C=8C?= =?UTF-8?q?=EC=9D=BC=EC=97=90=20oauth.properties=20=ED=8C=8C=EC=9D=BC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 6670df457..898907b63 100644 --- a/.gitignore +++ b/.gitignore @@ -190,3 +190,4 @@ gradle-app.setting /.idea/jarRepositories.xml /.idea/libraries-with-intellij-classes.xml /BE/build.sh +/BE/src/main/resources/oauth.properties From c3d5a81300c74634a352b9ff3a088793daa1e448 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Sat, 22 May 2021 16:55:27 +0900 Subject: [PATCH 26/60] =?UTF-8?q?Feat:=20[#47]=20airbnb=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EC=A0=9D=ED=8A=B8=20schema=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/main/resources/schema.sql | 96 +++++++++++++++++++++++++++++++- 1 file changed, 94 insertions(+), 2 deletions(-) diff --git a/BE/src/main/resources/schema.sql b/BE/src/main/resources/schema.sql index 28932f823..fad044aa3 100644 --- a/BE/src/main/resources/schema.sql +++ b/BE/src/main/resources/schema.sql @@ -11,7 +11,7 @@ SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,N -- ----------------------------------------------------- -- Schema airbnb -- ----------------------------------------------------- -CREATE SCHEMA IF NOT EXISTS `airbnb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ; +CREATE SCHEMA IF NOT EXISTS `airbnb` DEFAULT CHARACTER SET utf8 ; USE `airbnb` ; -- ----------------------------------------------------- @@ -23,11 +23,103 @@ CREATE TABLE IF NOT EXISTS `airbnb`.`user` ( `user_id` VARCHAR(45) NOT NULL, `email` VARCHAR(45) NOT NULL, `name` VARCHAR(45) NULL, - `token` VARCHAR(45) NULL, + `token` VARCHAR(255) NULL, PRIMARY KEY (`id`)) ENGINE = InnoDB; +-- ----------------------------------------------------- +-- Table `airbnb`.`house` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `airbnb`.`house`; +CREATE TABLE IF NOT EXISTS `airbnb`.`house` ( + `id` INT AUTO_INCREMENT NOT NULL, + `name` VARCHAR(255) NOT NULL, + `description` VARCHAR(255) NOT NULL, + `charge` INT NOT NULL, + `option` VARCHAR(255) NOT NULL, + `host` VARCHAR(45) NOT NULL, + `grade` DECIMAL(3,2) NOT NULL, + `review` INT NOT NULL, + `latitude` DECIMAL(16,14) NOT NULL, + `longitude` DECIMAL(17,14) NOT NULL, + `discount_ratio` DECIMAL(3,2) NOT NULL, + `cleaning_ratio` DECIMAL(3,2) NOT NULL, + `service_ratio` DECIMAL(3,2) NOT NULL, + PRIMARY KEY (`id`)) + ENGINE = InnoDB; + +-- ----------------------------------------------------- +-- Table `airbnb`.`image` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `airbnb`.`image`; +CREATE TABLE IF NOT EXISTS `airbnb`.`image` ( + `id` INT AUTO_INCREMENT NOT NULL, + `url` VARCHAR(255) NOT NULL, + `house_id` INT NOT NULL, + PRIMARY KEY (`id`), + INDEX `fk_image_house_idx` (`house_id` ASC) VISIBLE, + CONSTRAINT `fk_image_house` + FOREIGN KEY (`house_id`) + REFERENCES `airbnb`.`house` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `airbnb`.`wish` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `airbnb`.`wish`; +CREATE TABLE IF NOT EXISTS `airbnb`.`wish` ( + `id` INT AUTO_INCREMENT NOT NULL, + `user_id` INT NOT NULL, + `house_id` INT NOT NULL, + PRIMARY KEY (`id`), + INDEX `fk_wish_user1_idx` (`user_id` ASC) VISIBLE, + INDEX `fk_wish_house1_idx` (`house_id` ASC) VISIBLE, + CONSTRAINT `fk_wish_user1` + FOREIGN KEY (`user_id`) + REFERENCES `airbnb`.`user` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_wish_house1` + FOREIGN KEY (`house_id`) + REFERENCES `airbnb`.`house` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + + +-- ----------------------------------------------------- +-- Table `airbnb`.`join` +-- ----------------------------------------------------- +DROP TABLE IF EXISTS `airbnb`.`join`; +CREATE TABLE IF NOT EXISTS `airbnb`.`join` ( + `id` INT AUTO_INCREMENT NOT NULL, + `check_in` DATE NOT NULL, + `check_out` DATE NOT NULL, + `guest` INT NOT NULL, + `kid` INT NOT NULL, + `total_charge` INT NOT NULL, + `user_id` INT NOT NULL, + `house_id` INT NOT NULL, + PRIMARY KEY (`id`), + INDEX `fk_join_user1_idx` (`user_id` ASC) VISIBLE, + INDEX `fk_join_house1_idx` (`house_id` ASC) VISIBLE, + CONSTRAINT `fk_join_user1` + FOREIGN KEY (`user_id`) + REFERENCES `airbnb`.`user` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION, + CONSTRAINT `fk_join_house1` + FOREIGN KEY (`house_id`) + REFERENCES `airbnb`.`house` (`id`) + ON DELETE NO ACTION + ON UPDATE NO ACTION) + ENGINE = InnoDB; + + SET SQL_MODE=@OLD_SQL_MODE; SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS; SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS; From 964fdc4a6810003ecd561979761afef26864b06d Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Sat, 22 May 2021 19:47:29 +0900 Subject: [PATCH 27/60] =?UTF-8?q?Feat:=20[#49]=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EC=A0=9D=ED=8A=B8=EC=97=90=20=EC=82=AC=EC=9A=A9=ED=95=A0=20?= =?UTF-8?q?=EA=B8=B0=EB=B3=B8=20=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EC=82=BD?= =?UTF-8?q?=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/main/resources/data.sql | 630 +++++++++++++++++++++++++++++++++ 1 file changed, 630 insertions(+) create mode 100644 BE/src/main/resources/data.sql diff --git a/BE/src/main/resources/data.sql b/BE/src/main/resources/data.sql new file mode 100644 index 000000000..673453af3 --- /dev/null +++ b/BE/src/main/resources/data.sql @@ -0,0 +1,630 @@ +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 50000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.466821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 55000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.467821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 55000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.468821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.469821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.470821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.471821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.472821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.473821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.474821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.475821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.476821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.477821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.478821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.479821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.480821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.481821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.482821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.483821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.484821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.485821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.486821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.487821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.488821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.489821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.491821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.492821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.493821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.494821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.495821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.496821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.497821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.498821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.499821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.500821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.501821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.502821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.503821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.504821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.505821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.506821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.507821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.508821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.509821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.510821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.511821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.512821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.513821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.514821, 127.0312283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.515821, 127.0312283, 4, 0.02, 7.24); + + +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0072283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0082283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0092283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0102283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0112283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0122283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0132283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0142283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0152283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0162283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0172283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0182283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0192283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0202283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0212283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0222283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0232283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0242283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0252283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0262283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0272283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0282283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0292283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0302283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0322283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0332283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0342283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0352283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0362283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0372283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0382283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0392283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0402283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0412283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0422283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0432283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0442283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0452283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0462283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0472283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0482283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0492283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0502283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0512283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0522283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0532283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0542283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0552283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0562283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0572283, 4, 0.02, 7.24); + + +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0582283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0592283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0602283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0612283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0622283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0632283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0642283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0652283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0662283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0672283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0682283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0692283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0702283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0712283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 145000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0722283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 145000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0732283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0742283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0752283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0762283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 155000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0772283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 160000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0782283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 165000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0792283, 4, 0.02, 7.24); +INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 170000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0802283, 4, 0.02, 7.24); + + + + + + + + + +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 1); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 2); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 3); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 4); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 5); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 6); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 7); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 8); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 9); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 10); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 11); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 12); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 13); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 14); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 15); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 16); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 17); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 18); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 19); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 20); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 21); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 22); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 23); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 24); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 25); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 26); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 27); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 28); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 29); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 30); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 31); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 32); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 33); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 34); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 35); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 36); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 37); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 38); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 39); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 40); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 41); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 42); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 43); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 44); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 45); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 46); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 47); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 48); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 49); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 50); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 51); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 52); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 53); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 54); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 55); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 56); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 57); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 58); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 59); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 60); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 61); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 62); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 63); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 64); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 65); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 66); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 67); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 68); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 69); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 70); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 71); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 72); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 73); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 74); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 75); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 76); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 77); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 78); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 79); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 80); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 81); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 82); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 83); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 84); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 85); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 86); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 87); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 88); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 89); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 90); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 91); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 92); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 93); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 94); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 95); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 96); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 97); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 98); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 99); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 100); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 101); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 102); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 103); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 104); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 105); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 106); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 107); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 108); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 109); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 110); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 111); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 112); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 113); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 114); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 115); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 116); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 117); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 118); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 119); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 120); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 121); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 122); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 123); + +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 1); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 2); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 3); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 4); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 5); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 6); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 7); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 8); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 9); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 10); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 11); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 12); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 13); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 14); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 15); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 16); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 17); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 18); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 19); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 20); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 21); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 22); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 23); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 24); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 25); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 26); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 27); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 28); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 29); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 30); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 31); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 32); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 33); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 34); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 35); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 36); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 37); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 38); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 39); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 40); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 41); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 42); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 43); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 44); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 45); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 46); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 47); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 48); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 49); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 50); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 51); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 52); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 53); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 54); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 55); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 56); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 57); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 58); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 59); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 60); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 61); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 62); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 63); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 64); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 65); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 66); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 67); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 68); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 69); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 70); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 71); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 72); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 73); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 74); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 75); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 76); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 77); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 78); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 79); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 80); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 81); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 82); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 83); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 84); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 85); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 86); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 87); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 88); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 89); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 90); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 91); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 92); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 93); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 94); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 95); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 96); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 97); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 98); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 99); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 100); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 101); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 102); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 103); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 104); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 105); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 106); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 107); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 108); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 109); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 110); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 111); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 112); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 113); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 114); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 115); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 116); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 117); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 118); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 119); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 120); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 121); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 122); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 123); + +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 1); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 2); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 3); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 4); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 5); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 6); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 7); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 8); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 9); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 10); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 11); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 12); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 13); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 14); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 15); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 16); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 17); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 18); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 19); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 20); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 21); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 22); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 23); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 24); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 25); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 26); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 27); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 28); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 29); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 30); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 31); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 32); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 33); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 34); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 35); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 36); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 37); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 38); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 39); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 40); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 41); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 42); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 43); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 44); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 45); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 46); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 47); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 48); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 49); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 50); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 51); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 52); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 53); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 54); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 55); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 56); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 57); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 58); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 59); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 60); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 61); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 62); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 63); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 64); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 65); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 66); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 67); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 68); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 69); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 70); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 71); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 72); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 73); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 74); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 75); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 76); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 77); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 78); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 79); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 80); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 81); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 82); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 83); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 84); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 85); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 86); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 87); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 88); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 89); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 90); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 91); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 92); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 93); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 94); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 95); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 96); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 97); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 98); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 99); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 100); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 101); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 102); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 103); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 104); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 105); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 106); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 107); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 108); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 109); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 110); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 111); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 112); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 113); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 114); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 115); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 116); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 117); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 118); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 119); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 120); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 121); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 122); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 123); From 9c0f3b524a418771f509a4d141e87e01dc290581 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Sat, 22 May 2021 20:30:18 +0900 Subject: [PATCH 28/60] =?UTF-8?q?Refactor:=20[#51]=20mockup=20API=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숙소 예약 페이지 요청 API와 숙소 예약 요청 API 수정 --- .../enolj/airbnb/service/HouseService.java | 2 +- .../web/dto/ReservationInfoResponseDTO.java | 29 ++++++++++++------- .../airbnb/web/dto/ReservationRequestDTO.java | 9 +++++- 3 files changed, 27 insertions(+), 13 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 631cc23c8..47f63a926 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -28,7 +28,7 @@ public List searchChargesByCondition(SearchChargesRequestDTO requestDTO } public ReservationInfoResponseDTO getReservationInfo(Long houseId) { - return new ReservationInfoResponseDTO(71466, new Fee(25996, 182468), 4); + return new ReservationInfoResponseDTO(71466, 0.02, 7.24, 4); } public void makeReservation(ReservationRequestDTO requestDTO) { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java index c989192c6..d0d67f91b 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java @@ -3,33 +3,40 @@ public class ReservationInfoResponseDTO { private final int charge; - private final Fee fee; - private final int discount; + private final double cleaningRatio; + private final double serviceRatio; + private final double discountRatio; - public ReservationInfoResponseDTO(int charge, Fee fee, int discount) { + public ReservationInfoResponseDTO(int charge, double cleaningRatio, double serviceRatio, double discountRatio) { this.charge = charge; - this.fee = fee; - this.discount = discount; + this.cleaningRatio = cleaningRatio; + this.serviceRatio = serviceRatio; + this.discountRatio = discountRatio; } public int getCharge() { return charge; } - public Fee getFee() { - return fee; + public double getCleaningRatio() { + return cleaningRatio; } - public int getDiscount() { - return discount; + public double getServiceRatio() { + return serviceRatio; + } + + public double getDiscountRatio() { + return discountRatio; } @Override public String toString() { return "ReservationInfoResponseDTO{" + "charge=" + charge + - ", fee=" + fee + - ", discount=" + discount + + ", cleaningRatio=" + cleaningRatio + + ", serviceRatio=" + serviceRatio + + ", discountRatio=" + discountRatio + '}'; } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java index c627a260c..d51d800f6 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java @@ -4,10 +4,12 @@ public class ReservationRequestDTO { private CheckDate date; private People people; + private int totalCharge; - public ReservationRequestDTO(CheckDate date, People people) { + public ReservationRequestDTO(CheckDate date, People people, int totalCharge) { this.date = date; this.people = people; + this.totalCharge = totalCharge; } public void setDate(CheckDate date) { @@ -18,11 +20,16 @@ public void setPeople(People people) { this.people = people; } + public void setTotalCharge(int totalCharge) { + this.totalCharge = totalCharge; + } + @Override public String toString() { return "ReservationRequestDTO{" + "date=" + date + ", people=" + people + + ", totalCharge=" + totalCharge + '}'; } } From 07de1eecab51692c9509c9031be0802ac39b1a2a Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 00:16:42 +0900 Subject: [PATCH 29/60] =?UTF-8?q?Refactor:=20[#58]=20UserRepository=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20JDBC=20Template=EB=A5=BC?= =?UTF-8?q?=20=EC=82=AC=EC=9A=A9=ED=95=9C=20UserDAO=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=A1=9C=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/enolj/airbnb/domain/user/User.java | 44 ++++++++++++----- .../com/enolj/airbnb/domain/user/UserDAO.java | 47 +++++++++++++++++++ .../airbnb/domain/user/UserRepository.java | 10 ---- .../com/enolj/airbnb/service/UserService.java | 20 ++++---- 4 files changed, 90 insertions(+), 31 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java delete mode 100644 BE/src/main/java/com/enolj/airbnb/domain/user/UserRepository.java diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/User.java b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java index 8672d17b7..03bbadd74 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/user/User.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java @@ -9,28 +9,28 @@ public class User { @Id private Long id; - private String name; - private String email; private String userId; + private String email; + private String name; private String token; public User() {} - public User(String name, String email, String userId, String token) { - this.name = name; - this.email = email; + public User(String userId, String email, String name, String token) { this.userId = userId; + this.email = email; + this.name = name; this.token = token; } public static User createUser(UserInfoDTO userInfoDTO, EmailDTO emailDTO, TokenDTO tokenDTO) { - return new User(userInfoDTO.getName(), emailDTO.getEmail(), userInfoDTO.getLogin(), tokenDTO.getAccess_token()); + return new User(userInfoDTO.getLogin(), emailDTO.getEmail(), userInfoDTO.getName(), tokenDTO.getAccess_token()); } public void update(UserInfoDTO userInfoDTO, EmailDTO emailDTO, TokenDTO tokenDTO) { - this.name = userInfoDTO.getName(); - this.email = emailDTO.getEmail(); this.userId = userInfoDTO.getLogin(); + this.email = emailDTO.getEmail(); + this.name = userInfoDTO.getName(); this.token = tokenDTO.getAccess_token(); } @@ -42,22 +42,42 @@ public Long getId() { return id; } - public String getName() { - return name; + public void setId(Long id) { + this.id = id; + } + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; } public String getEmail() { return email; } - public String getUserId() { - return userId; + public void setEmail(String email) { + this.email = email; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; } public String getToken() { return token; } + public void setToken(String token) { + this.token = token; + } + @Override public String toString() { return "User{" + diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java new file mode 100644 index 000000000..dc803ece7 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java @@ -0,0 +1,47 @@ +package com.enolj.airbnb.domain.user; + +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; +import java.sql.ResultSet; +import java.util.List; +import java.util.Optional; + +@Repository +public class UserDAO { + + private final JdbcTemplate jdbcTemplate; + + public UserDAO(DataSource dataSource) { + jdbcTemplate = new JdbcTemplate(dataSource); + } + + public Optional findById(Long id) { + String sql = "SELECT * FROM user WHERE id = ?"; + List result = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class), id); + return result.stream().findAny(); + } + + public Optional findByUserId(String userId) { + String sql = "SELECT * FROM user WHERE user_id = ?"; + List result = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class), userId); + return result.stream().findAny(); + } + + public List findAll() { + String sql = "SELECT * FROM user"; + return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class)); + } + + public void save(User user) { + String sql = "INSERT INTO user (user_id, email, `name`, token) VALUES (?, ?, ?, ?)"; + jdbcTemplate.update(sql, user.getUserId(), user.getEmail(), user.getName(), user.getToken()); + } + + public void update(User user) { + String sql = "UPDATE user SET user_id = ?, email = ?, `name` = ?, token = ? WHERE id = ?"; + jdbcTemplate.update(sql, user.getUserId(), user.getEmail(), user.getName(), user.getToken(), user.getId()); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/UserRepository.java b/BE/src/main/java/com/enolj/airbnb/domain/user/UserRepository.java deleted file mode 100644 index c05a736fa..000000000 --- a/BE/src/main/java/com/enolj/airbnb/domain/user/UserRepository.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.enolj.airbnb.domain.user; - -import org.springframework.data.repository.CrudRepository; - -import java.util.Optional; - -public interface UserRepository extends CrudRepository { - - Optional findByUserId(String userId); -} diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java index 0d7b8f024..af120c490 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/UserService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -3,7 +3,7 @@ import com.enolj.airbnb.authorization.GitHubOAuth; import com.enolj.airbnb.authorization.OAuth; import com.enolj.airbnb.domain.user.User; -import com.enolj.airbnb.domain.user.UserRepository; +import com.enolj.airbnb.domain.user.UserDAO; import com.enolj.airbnb.exception.EntityNotFoundException; import com.enolj.airbnb.exception.ErrorMessage; import com.enolj.airbnb.exception.TokenException; @@ -21,11 +21,11 @@ @Service public class UserService { - private final UserRepository userRepository; + private final UserDAO userDAO; private final OAuth gitHubOAuth; - public UserService(UserRepository userRepository, GitHubOAuth gitHubOAuth) { - this.userRepository = userRepository; + public UserService(UserDAO userDAO, GitHubOAuth gitHubOAuth) { + this.userDAO = userDAO; this.gitHubOAuth = gitHubOAuth; } @@ -36,17 +36,19 @@ public UserResponseDTO login(String code, GitHubType gitHubType) { if (verifyUser(userInfoDTO.getLogin())) { User user = findByUserId(userInfoDTO.getLogin()); user.update(userInfoDTO, emailDTO, tokenDTO); - return createUserResponseDTO(userRepository.save(user), JwtUtil.createToken(user.getUserId())); + userDAO.update(user); + return createUserResponseDTO(user, JwtUtil.createToken(user.getUserId())); } User user = createUser(userInfoDTO, emailDTO, tokenDTO); - return createUserResponseDTO(userRepository.save(user), JwtUtil.createToken(user.getUserId())); + userDAO.save(user); + return createUserResponseDTO(user, JwtUtil.createToken(user.getUserId())); } public void logout(String authorization) { String userId = JwtUtil.getUserIdFromToken(getTokenFromAuthorization(authorization)); User user = findByUserId(userId); user.removeToken(); - userRepository.save(user); + userDAO.update(user); } private String getTokenFromAuthorization(String authorization) { @@ -70,10 +72,10 @@ private EmailDTO emailRequestApi(String token) { } private boolean verifyUser(String userId) { - return userRepository.findByUserId(userId).isPresent(); + return userDAO.findByUserId(userId).isPresent(); } private User findByUserId(String userId) { - return userRepository.findByUserId(userId).orElseThrow(EntityNotFoundException::new); + return userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); } } From c06b6b2669380dafaeeac1c33c3fa81cd94cacf3 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 13:46:47 +0900 Subject: [PATCH 30/60] =?UTF-8?q?Feat:=20[#59]=20House,=20Image=20?= =?UTF-8?q?=EC=97=94=ED=8B=B0=ED=8B=B0=20=ED=81=B4=EB=9E=98=EC=8A=A4,=20?= =?UTF-8?q?=EA=B4=80=EB=A0=A8=20DAO=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 숙소 검색 요청 API를 구현하기 위해 House, Image 엔티티 클래스와 HouseDAO, ImageDAO 생성 --- .../com/enolj/airbnb/domain/house/House.java | 153 ++++++++++++++++++ .../enolj/airbnb/domain/house/HouseDAO.java | 23 +++ .../com/enolj/airbnb/domain/image/Image.java | 44 +++++ .../enolj/airbnb/domain/image/ImageDAO.java | 23 +++ 4 files changed, 243 insertions(+) create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/house/House.java create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/image/Image.java create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/image/ImageDAO.java diff --git a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java new file mode 100644 index 000000000..45c7196de --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java @@ -0,0 +1,153 @@ +package com.enolj.airbnb.domain.house; + +import org.springframework.data.annotation.Id; + +public class House { + + @Id + private Long id; + private String name; + private String description; + private int charge; + private String option; + private String host; + private double grade; + private int review; + private double latitude; + private double longitude; + private int discountRatio; + private int cleaningRatio; + private int serviceRatio; + + public boolean checkCharge(int minCharge, int maxCharge) { + return minCharge <= charge && charge <= maxCharge; + } + + public boolean checkLocation(double latitude, double longitude) { + return (latitude - 0.001 <= this.latitude && this.latitude <= latitude + 0.001) + && (longitude - 0.001 <= this.longitude && this.longitude <= longitude + 0.001); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public int getCharge() { + return charge; + } + + public void setCharge(int charge) { + this.charge = charge; + } + + public String getOption() { + return option; + } + + public void setOption(String option) { + this.option = option; + } + + public String getHost() { + return host; + } + + public void setHost(String host) { + this.host = host; + } + + public double getGrade() { + return grade; + } + + public void setGrade(double grade) { + this.grade = grade; + } + + public int getReview() { + return review; + } + + public void setReview(int review) { + this.review = review; + } + + public double getLatitude() { + return latitude; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public double getLongitude() { + return longitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + public int getDiscountRatio() { + return discountRatio; + } + + public void setDiscountRatio(int discountRatio) { + this.discountRatio = discountRatio; + } + + public int getCleaningRatio() { + return cleaningRatio; + } + + public void setCleaningRatio(int cleaningRatio) { + this.cleaningRatio = cleaningRatio; + } + + public int getServiceRatio() { + return serviceRatio; + } + + public void setServiceRatio(int serviceRatio) { + this.serviceRatio = serviceRatio; + } + + @Override + public String toString() { + return "House{" + + "id=" + id + + ", name='" + name + '\'' + + ", description='" + description + '\'' + + ", charge=" + charge + + ", option='" + option + '\'' + + ", host='" + host + '\'' + + ", grade=" + grade + + ", review=" + review + + ", latitude=" + latitude + + ", longitude=" + longitude + + ", discountRatio=" + discountRatio + + ", cleaningRatio=" + cleaningRatio + + ", serviceRatio=" + serviceRatio + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java new file mode 100644 index 000000000..48c99b5c8 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java @@ -0,0 +1,23 @@ +package com.enolj.airbnb.domain.house; + +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; +import java.util.List; + +@Repository +public class HouseDAO { + + private final JdbcTemplate jdbcTemplate; + + public HouseDAO(DataSource dataSource) { + jdbcTemplate = new JdbcTemplate(dataSource); + } + + public List findAll() { + String sql = "SELECT * FROM house"; + return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(House.class)); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/domain/image/Image.java b/BE/src/main/java/com/enolj/airbnb/domain/image/Image.java new file mode 100644 index 000000000..7d5080614 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/image/Image.java @@ -0,0 +1,44 @@ +package com.enolj.airbnb.domain.image; + +import org.springframework.data.annotation.Id; + +public class Image { + + @Id + private Long id; + private String url; + private Long houseId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public Long getHouseId() { + return houseId; + } + + public void setHouseId(Long houseId) { + this.houseId = houseId; + } + + @Override + public String toString() { + return "Image{" + + "id=" + id + + ", url='" + url + '\'' + + ", houseId=" + houseId + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/domain/image/ImageDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/image/ImageDAO.java new file mode 100644 index 000000000..b25cb0267 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/image/ImageDAO.java @@ -0,0 +1,23 @@ +package com.enolj.airbnb.domain.image; + +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; +import java.util.List; + +@Repository +public class ImageDAO { + + private final JdbcTemplate jdbcTemplate; + + public ImageDAO(DataSource dataSource) { + jdbcTemplate = new JdbcTemplate(dataSource); + } + + public List findAll(Long houseId) { + String sql = "SELECT * FROM image WHERE house_id = ?"; + return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Image.class), houseId); + } +} From 36a718f7640f42edf7143c5ae0f3e5f81ede76d9 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 13:48:45 +0900 Subject: [PATCH 31/60] =?UTF-8?q?Feat:=20[#59]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20searchHousesByCondition=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 searchHousesByCondition 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../enolj/airbnb/service/HouseService.java | 34 ++++++++++++++----- .../com/enolj/airbnb/web/dto/Location.java | 6 ++++ .../airbnb/web/dto/SearchRequestDTO.java | 16 +++++++++ .../airbnb/web/dto/SearchResponseDTO.java | 9 +++++ 4 files changed, 57 insertions(+), 8 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 47f63a926..0b3e956e9 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -1,25 +1,43 @@ package com.enolj.airbnb.service; +import com.enolj.airbnb.domain.house.HouseDAO; +import com.enolj.airbnb.domain.image.Image; +import com.enolj.airbnb.domain.image.ImageDAO; +import com.enolj.airbnb.exception.EntityNotFoundException; import com.enolj.airbnb.web.dto.ReservationInfoResponseDTO; import com.enolj.airbnb.web.dto.*; import org.springframework.stereotype.Service; import java.util.ArrayList; import java.util.List; +import java.util.stream.Collectors; + +import static com.enolj.airbnb.web.dto.SearchResponseDTO.createSearchResponseDTO; @Service public class HouseService { + private final HouseDAO houseDAO; + private final ImageDAO imageDAO; + + public HouseService(HouseDAO houseDAO, ImageDAO imageDAO) { + this.houseDAO = houseDAO; + this.imageDAO = imageDAO; + } + public List searchHousesByCondition(SearchRequestDTO requestDTO) { System.out.println(requestDTO); - List searchResponseDTOList = new ArrayList<>(); - searchResponseDTOList.add(new SearchResponseDTO(1L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", - new Location(37.566826, 126.9786567), "Specious and Comfortable cozy house #4", - 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...", true)); - searchResponseDTOList.add(new SearchResponseDTO(2L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", - new Location(37.566826, 126.9786567), "Specious and Comfortable cozy house #4", - 15400, 4.60, 270, "강남역 5번 출구에서 도보로 이동가능합니다. ...", "최대 인원 3명 • 원룸 • 침대 1개 • 욕실 1개 ...", false)); - return searchResponseDTOList; + return houseDAO.findAll().stream() + .filter(house -> house.checkCharge(requestDTO.getMinCharge(), requestDTO.getMaxCharge())) + .filter((house -> house.checkLocation(requestDTO.getLatitude(), requestDTO.getLongitude()))) + .map(house -> createSearchResponseDTO(house, findOneImageByHouseId(house.getId()))) + .collect(Collectors.toList()); + } + + private Image findOneImageByHouseId(Long houseId) { + return imageDAO.findAll(houseId).stream() + .findFirst() + .orElseThrow(EntityNotFoundException::new); } public List searchChargesByCondition(SearchChargesRequestDTO requestDTO) { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java b/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java index ee093536a..695b1454c 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java @@ -1,5 +1,7 @@ package com.enolj.airbnb.web.dto; +import com.enolj.airbnb.domain.house.House; + public class Location { private double latitude; @@ -10,6 +12,10 @@ public Location(double latitude, double longitude) { this.longitude = longitude; } + public static Location createLocationByHouse(House house) { + return new Location(house.getLatitude(), house.getLongitude()); + } + public double getLatitude() { return latitude; } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java index e8ce6902b..106748ea9 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java @@ -34,10 +34,18 @@ public void setMinCharge(int minCharge) { this.minCharge = minCharge; } + public int getMinCharge() { + return minCharge; + } + public void setMaxCharge(int maxCharge) { this.maxCharge = maxCharge; } + public int getMaxCharge() { + return maxCharge; + } + public void setGuest(int guest) { this.guest = guest; } @@ -50,10 +58,18 @@ public void setLatitude(double latitude) { this.latitude = latitude; } + public double getLatitude() { + return latitude; + } + public void setLongitude(double longitude) { this.longitude = longitude; } + public double getLongitude() { + return longitude; + } + @Override public String toString() { return "SearchRequestDTO{" + diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java index b95357745..f68a204d0 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java @@ -1,5 +1,10 @@ package com.enolj.airbnb.web.dto; +import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.image.Image; + +import static com.enolj.airbnb.web.dto.Location.createLocationByHouse; + public class SearchResponseDTO { private final Long id; @@ -26,6 +31,10 @@ public SearchResponseDTO(Long id, String image, Location location, String name, this.wish = wish; } + public static SearchResponseDTO createSearchResponseDTO(House house, Image image) { + return new SearchResponseDTO(house.getId(), image.getUrl(), createLocationByHouse(house), house.getName(), house.getCharge(), house.getGrade(), house.getReview(), house.getDescription(), house.getOption(), false); + } + public Long getId() { return id; } From 18d00a4a8ef85723ba428314233475f3ef0d0a8b Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 14:06:15 +0900 Subject: [PATCH 32/60] =?UTF-8?q?Feat:=20[#60]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20searchChargesByCondition=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 searchChargesByCondition 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../enolj/airbnb/service/HouseService.java | 40 ++----------------- 1 file changed, 4 insertions(+), 36 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 0b3e956e9..9428c9e13 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -1,5 +1,6 @@ package com.enolj.airbnb.service; +import com.enolj.airbnb.domain.house.House; import com.enolj.airbnb.domain.house.HouseDAO; import com.enolj.airbnb.domain.image.Image; import com.enolj.airbnb.domain.image.ImageDAO; @@ -42,7 +43,9 @@ private Image findOneImageByHouseId(Long houseId) { public List searchChargesByCondition(SearchChargesRequestDTO requestDTO) { System.out.println(requestDTO); - return makeCharges(); + return houseDAO.findAll().stream() + .map(House::getCharge) + .collect(Collectors.toList()); } public ReservationInfoResponseDTO getReservationInfo(Long houseId) { @@ -88,39 +91,4 @@ public ReservationDetailDTO getReservationDetail(Long houseId) { public void cancelReservation(Long houseId) { } - - public List makeCharges() { - List charges = new ArrayList<>(); - charges.add(50000); - charges.add(55000); - charges.add(60000); - charges.add(65000); - charges.add(65000); - charges.add(70000); - charges.add(75000); - charges.add(75000); - charges.add(80000); - charges.add(80000); - charges.add(80000); - charges.add(85000); - charges.add(85000); - charges.add(85000); - charges.add(85000); - charges.add(90000); - charges.add(90000); - charges.add(90000); - charges.add(95000); - charges.add(100000); - charges.add(100000); - charges.add(105000); - charges.add(110000); - charges.add(115000); - charges.add(120000); - charges.add(125000); - charges.add(125000); - charges.add(130000); - charges.add(135000); - charges.add(140000); - return charges; - } } From 29da8ffbe9a811af53bc03d4a20834c17e202eaa Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 14:17:10 +0900 Subject: [PATCH 33/60] =?UTF-8?q?Feat:=20[#61]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20getReservationInfo=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 getReservationInfo 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../main/java/com/enolj/airbnb/domain/house/HouseDAO.java | 7 +++++++ .../main/java/com/enolj/airbnb/service/HouseService.java | 7 ++++++- .../enolj/airbnb/web/dto/ReservationInfoResponseDTO.java | 6 ++++++ 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java index 48c99b5c8..8b1204a7f 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java @@ -6,6 +6,7 @@ import javax.sql.DataSource; import java.util.List; +import java.util.Optional; @Repository public class HouseDAO { @@ -16,6 +17,12 @@ public HouseDAO(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } + public Optional findById(Long id) { + String sql = "SELECT * FROM house WHERE id = ?"; + List houses = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(House.class), id); + return houses.stream().findAny(); + } + public List findAll() { String sql = "SELECT * FROM house"; return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(House.class)); diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 9428c9e13..6268a9588 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -13,6 +13,7 @@ import java.util.List; import java.util.stream.Collectors; +import static com.enolj.airbnb.web.dto.ReservationInfoResponseDTO.createReservationInfoResponseDTO; import static com.enolj.airbnb.web.dto.SearchResponseDTO.createSearchResponseDTO; @Service @@ -49,7 +50,11 @@ public List searchChargesByCondition(SearchChargesRequestDTO requestDTO } public ReservationInfoResponseDTO getReservationInfo(Long houseId) { - return new ReservationInfoResponseDTO(71466, 0.02, 7.24, 4); + return createReservationInfoResponseDTO(findHouseById(houseId)); + } + + private House findHouseById(Long houseId) { + return houseDAO.findById(houseId).orElseThrow(EntityNotFoundException::new); } public void makeReservation(ReservationRequestDTO requestDTO) { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java index d0d67f91b..4b569be47 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java @@ -1,5 +1,7 @@ package com.enolj.airbnb.web.dto; +import com.enolj.airbnb.domain.house.House; + public class ReservationInfoResponseDTO { private final int charge; @@ -14,6 +16,10 @@ public ReservationInfoResponseDTO(int charge, double cleaningRatio, double servi this.discountRatio = discountRatio; } + public static ReservationInfoResponseDTO createReservationInfoResponseDTO(House house) { + return new ReservationInfoResponseDTO(house.getCharge(), house.getCleaningRatio(), house.getServiceRatio(), house.getDiscountRatio()); + } + public int getCharge() { return charge; } From bab687bfd3f9a302dcad47a3dcf268f58048a372 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 15:41:11 +0900 Subject: [PATCH 34/60] =?UTF-8?q?Feat:=20[#62]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20makeReservation=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 makeReservation 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../com/enolj/airbnb/domain/join/Join.java | 113 ++++++++++++++++++ .../com/enolj/airbnb/domain/join/JoinDAO.java | 21 ++++ .../enolj/airbnb/service/HouseService.java | 19 ++- .../com/enolj/airbnb/web/HouseController.java | 5 +- .../com/enolj/airbnb/web/dto/CheckDate.java | 8 ++ .../java/com/enolj/airbnb/web/dto/People.java | 8 ++ .../airbnb/web/dto/ReservationRequestDTO.java | 10 ++ 7 files changed, 180 insertions(+), 4 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/join/Join.java create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java new file mode 100644 index 000000000..d3ab85488 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java @@ -0,0 +1,113 @@ +package com.enolj.airbnb.domain.join; + +import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.user.User; +import org.springframework.data.annotation.Id; + +import java.time.LocalDate; + +public class Join { + + @Id + private Long id; + private LocalDate checkIn; + private LocalDate checkOut; + private int guest; + private int kid; + private int totalCharge; + private Long userId; + private Long houseId; + + public Join() {} + + public Join(LocalDate checkIn, LocalDate checkOut, int guest, int kid, int totalCharge) { + this.checkIn = checkIn; + this.checkOut = checkOut; + this.guest = guest; + this.kid = kid; + this.totalCharge = totalCharge; + } + + public void reservation(User user, House house) { + this.userId = user.getId(); + this.houseId = house.getId(); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public LocalDate getCheckIn() { + return checkIn; + } + + public void setCheckIn(LocalDate checkIn) { + this.checkIn = checkIn; + } + + public LocalDate getCheckOut() { + return checkOut; + } + + public void setCheckOut(LocalDate checkOut) { + this.checkOut = checkOut; + } + + public int getGuest() { + return guest; + } + + public void setGuest(int guest) { + this.guest = guest; + } + + public int getKid() { + return kid; + } + + public void setKid(int kid) { + this.kid = kid; + } + + public int getTotalCharge() { + return totalCharge; + } + + public void setTotalCharge(int totalCharge) { + this.totalCharge = totalCharge; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getHouseId() { + return houseId; + } + + public void setHouseId(Long houseId) { + this.houseId = houseId; + } + + @Override + public String toString() { + return "Join{" + + "id=" + id + + ", checkIn=" + checkIn + + ", checkOut=" + checkOut + + ", guest=" + guest + + ", kid=" + kid + + ", totalCharge=" + totalCharge + + ", userId=" + userId + + ", houseId=" + houseId + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java new file mode 100644 index 000000000..020379716 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java @@ -0,0 +1,21 @@ +package com.enolj.airbnb.domain.join; + +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; + +@Repository +public class JoinDAO { + + private final JdbcTemplate jdbcTemplate; + + public JoinDAO(DataSource datasource) { + this.jdbcTemplate = new JdbcTemplate(datasource); + } + + public void save(Join join) { + String sql = "INSERT INTO `join`(check_in, check_out, guest, kid, total_charge, user_id, house_id) VALUES(?, ?, ?, ?, ?, ?, ?)"; + jdbcTemplate.update(sql, join.getCheckIn(), join.getCheckOut(), join.getGuest(), join.getKid(), join.getTotalCharge(), join.getUserId(), join.getHouseId()); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 6268a9588..f26bdd13c 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -4,6 +4,10 @@ import com.enolj.airbnb.domain.house.HouseDAO; import com.enolj.airbnb.domain.image.Image; import com.enolj.airbnb.domain.image.ImageDAO; +import com.enolj.airbnb.domain.join.Join; +import com.enolj.airbnb.domain.join.JoinDAO; +import com.enolj.airbnb.domain.user.User; +import com.enolj.airbnb.domain.user.UserDAO; import com.enolj.airbnb.exception.EntityNotFoundException; import com.enolj.airbnb.web.dto.ReservationInfoResponseDTO; import com.enolj.airbnb.web.dto.*; @@ -19,12 +23,16 @@ @Service public class HouseService { + private final UserDAO userDAO; private final HouseDAO houseDAO; private final ImageDAO imageDAO; + private final JoinDAO joinDAO; - public HouseService(HouseDAO houseDAO, ImageDAO imageDAO) { + public HouseService(UserDAO userDAO, HouseDAO houseDAO, ImageDAO imageDAO, JoinDAO joinDAO) { + this.userDAO = userDAO; this.houseDAO = houseDAO; this.imageDAO = imageDAO; + this.joinDAO = joinDAO; } public List searchHousesByCondition(SearchRequestDTO requestDTO) { @@ -57,8 +65,15 @@ private House findHouseById(Long houseId) { return houseDAO.findById(houseId).orElseThrow(EntityNotFoundException::new); } - public void makeReservation(ReservationRequestDTO requestDTO) { + public void makeReservation(String userId, Long houseId, ReservationRequestDTO requestDTO) { System.out.println(requestDTO); + Join join = requestDTO.toEntity(); + join.reservation(findUserByUserId(userId), findHouseById(houseId)); + joinDAO.save(join); + } + + private User findUserByUserId(String userId) { + return userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); } public List getWishList() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 9d278faec..28c3353af 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -2,6 +2,7 @@ import com.enolj.airbnb.service.HouseService; import com.enolj.airbnb.web.dto.*; +import com.enolj.airbnb.web.utils.JwtUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; @@ -37,9 +38,9 @@ public ReservationInfoResponseDTO getReservationPage(@PathVariable Long houseId) } @PostMapping("houses/{houseId}") - public void makeReservation(@PathVariable Long houseId, @RequestBody ReservationRequestDTO requestDTO) { + public void makeReservation(@RequestHeader String authorization, @PathVariable Long houseId, @RequestBody ReservationRequestDTO requestDTO) { logger.info("{}번 숙소 예약 요청", houseId); - houseService.makeReservation(requestDTO); + houseService.makeReservation(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization)), houseId, requestDTO); } @GetMapping("/wishes") diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java b/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java index def2ae7a8..8359f7df4 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java @@ -12,10 +12,18 @@ public CheckDate(LocalDate start, LocalDate end) { this.end = end; } + public LocalDate getStart() { + return start; + } + public void setStart(LocalDate start) { this.start = start; } + public LocalDate getEnd() { + return end; + } + public void setEnd(LocalDate end) { this.end = end; } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/People.java b/BE/src/main/java/com/enolj/airbnb/web/dto/People.java index 25d8861c8..3c2645c3c 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/People.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/People.java @@ -10,10 +10,18 @@ public People(int guest, int kid) { this.kid = kid; } + public int getGuest() { + return guest; + } + public void setGuest(int guest) { this.guest = guest; } + public int getKid() { + return kid; + } + public void setKid(int kid) { this.kid = kid; } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java index d51d800f6..403107eb8 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java @@ -1,5 +1,8 @@ package com.enolj.airbnb.web.dto; +import com.enolj.airbnb.domain.join.Join; +import com.enolj.airbnb.exception.EntityNotFoundException; + public class ReservationRequestDTO { private CheckDate date; @@ -12,6 +15,13 @@ public ReservationRequestDTO(CheckDate date, People people, int totalCharge) { this.totalCharge = totalCharge; } + public Join toEntity() { + if (date.getStart() == null || date.getEnd() == null || people.getGuest() == 0) { + throw new EntityNotFoundException(); + } + return new Join(date.getStart(), date.getEnd(), people.getGuest(), people.getKid(), totalCharge); + } + public void setDate(CheckDate date) { this.date = date; } From 170650e16161df27ee941a92f6a185830d584968 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 15:44:47 +0900 Subject: [PATCH 35/60] =?UTF-8?q?Refactor:=20UserService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=EC=9E=88=EB=8D=98=20getTokenFrom?= =?UTF-8?q?Authorization=20=EB=A9=94=EC=86=8C=EB=93=9C=EB=A5=BC=20JwtUtil?= =?UTF-8?q?=20=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A1=9C=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/enolj/airbnb/service/UserService.java | 11 +---------- .../java/com/enolj/airbnb/web/UserController.java | 3 ++- .../main/java/com/enolj/airbnb/web/utils/JwtUtil.java | 8 ++++++++ 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java index af120c490..31f03be0a 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/UserService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -44,21 +44,12 @@ public UserResponseDTO login(String code, GitHubType gitHubType) { return createUserResponseDTO(user, JwtUtil.createToken(user.getUserId())); } - public void logout(String authorization) { - String userId = JwtUtil.getUserIdFromToken(getTokenFromAuthorization(authorization)); + public void logout(String userId) { User user = findByUserId(userId); user.removeToken(); userDAO.update(user); } - private String getTokenFromAuthorization(String authorization) { - String[] authArray = authorization.split(" "); - if (authArray.length < 2 || !authArray[0].equals("Beare")) { - throw new TokenException(ErrorMessage.INVALID_TOKEN); - } - return authArray[1]; - } - private TokenDTO tokenRequestApi(String code, GitHubType gitHubType) { return gitHubOAuth.getTokenAPI(code, gitHubType); } diff --git a/BE/src/main/java/com/enolj/airbnb/web/UserController.java b/BE/src/main/java/com/enolj/airbnb/web/UserController.java index 298159dee..8e3615637 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/UserController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/UserController.java @@ -2,6 +2,7 @@ import com.enolj.airbnb.service.UserService; import com.enolj.airbnb.web.dto.UserResponseDTO; +import com.enolj.airbnb.web.utils.JwtUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; @@ -27,6 +28,6 @@ public UserResponseDTO login(@RequestParam String code, @RequestParam int typeCo @GetMapping("/logout") public void logout(@RequestHeader String authorization) { logger.info("로그아웃 요청"); - userService.logout(authorization); + userService.logout(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization))); } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java b/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java index 5da413516..7393e0e3d 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java +++ b/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java @@ -40,4 +40,12 @@ private static DecodedJWT verifyToken(String token) { throw new TokenException(ErrorMessage.INVALID_TOKEN); } } + + public static String getTokenFromAuthorization(String authorization) { + String[] authArray = authorization.split(" "); + if (authArray.length < 2 || !authArray[0].equals("Beare")) { + throw new TokenException(ErrorMessage.INVALID_TOKEN); + } + return authArray[1]; + } } From ca1f37a905ae73730a29cda3563873188c8888c1 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 15:48:21 +0900 Subject: [PATCH 36/60] =?UTF-8?q?Feat:=20=ED=86=A0=ED=81=B0=EC=9D=B4=20nul?= =?UTF-8?q?l=EC=9D=BC=20=EB=95=8C=20=EC=97=90=EB=9F=AC=EB=A5=BC=20?= =?UTF-8?q?=EB=82=B4=EB=B3=B4=EB=82=B4=EB=8F=84=EB=A1=9D=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../main/java/com/enolj/airbnb/service/HouseService.java | 8 +++++++- .../main/java/com/enolj/airbnb/service/UserService.java | 6 +++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index f26bdd13c..36e0694b1 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -9,6 +9,8 @@ import com.enolj.airbnb.domain.user.User; import com.enolj.airbnb.domain.user.UserDAO; import com.enolj.airbnb.exception.EntityNotFoundException; +import com.enolj.airbnb.exception.ErrorMessage; +import com.enolj.airbnb.exception.TokenException; import com.enolj.airbnb.web.dto.ReservationInfoResponseDTO; import com.enolj.airbnb.web.dto.*; import org.springframework.stereotype.Service; @@ -73,7 +75,11 @@ public void makeReservation(String userId, Long houseId, ReservationRequestDTO r } private User findUserByUserId(String userId) { - return userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); + User user = userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); + if (user.getToken() == null) { + throw new TokenException(ErrorMessage.INVALID_TOKEN); + } + return user; } public List getWishList() { diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java index 31f03be0a..3275ac4ee 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/UserService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -67,6 +67,10 @@ private boolean verifyUser(String userId) { } private User findByUserId(String userId) { - return userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); + User user = userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); + if (user.getToken() == null) { + throw new TokenException(ErrorMessage.INVALID_TOKEN); + } + return user; } } From 793e78f4f51b4b6462bb7f1707b4b3dbdba3850e Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 16:37:50 +0900 Subject: [PATCH 37/60] =?UTF-8?q?Feat:=20[#64]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20getWishList=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 getWishList 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../com/enolj/airbnb/domain/wish/Wish.java | 57 +++++++++++++++++++ .../com/enolj/airbnb/domain/wish/WishDAO.java | 24 ++++++++ .../enolj/airbnb/service/HouseService.java | 10 ++-- .../com/enolj/airbnb/web/HouseController.java | 4 +- ...sResponseDTO.java => WishResponseDTO.java} | 16 +++--- 5 files changed, 95 insertions(+), 16 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/wish/Wish.java create mode 100644 BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java rename BE/src/main/java/com/enolj/airbnb/web/dto/{WishesResponseDTO.java => WishResponseDTO.java} (60%) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/wish/Wish.java b/BE/src/main/java/com/enolj/airbnb/domain/wish/Wish.java new file mode 100644 index 000000000..5c6b57df6 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/wish/Wish.java @@ -0,0 +1,57 @@ +package com.enolj.airbnb.domain.wish; + +import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.user.User; +import org.springframework.data.annotation.Id; + +public class Wish { + + @Id + private Long id; + private Long userId; + private Long houseId; + + public Wish() {} + + public Wish(Long userId, Long houseId) { + this.userId = userId; + this.houseId = houseId; + } + + public static Wish createWish(User user, House house) { + return new Wish(user.getId(), house.getId()); + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getUserId() { + return userId; + } + + public void setUserId(Long userId) { + this.userId = userId; + } + + public Long getHouseId() { + return houseId; + } + + public void setHouseId(Long houseId) { + this.houseId = houseId; + } + + @Override + public String toString() { + return "Wish{" + + "id=" + id + + ", userId=" + userId + + ", houseId=" + houseId + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java new file mode 100644 index 000000000..560b500df --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java @@ -0,0 +1,24 @@ +package com.enolj.airbnb.domain.wish; + +import org.springframework.jdbc.core.BeanPropertyRowMapper; +import org.springframework.jdbc.core.JdbcTemplate; +import org.springframework.stereotype.Repository; + +import javax.sql.DataSource; +import java.util.List; +import java.util.Optional; + +@Repository +public class WishDAO { + + private JdbcTemplate jdbcTemplate; + + public WishDAO(DataSource dataSource) { + this.jdbcTemplate = new JdbcTemplate(dataSource); + } + + public List findAllByUserId(Long userId) { + String sql = "SELECT * FROM wish WHERE user_id = ?"; + return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Wish.class), userId); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 36e0694b1..b2646f3bc 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -82,12 +82,10 @@ private User findUserByUserId(String userId) { return user; } - public List getWishList() { - List wishesResponseDTOList = new ArrayList<>(); - wishesResponseDTOList.add(new WishesResponseDTO(1L, "비담집, 비우고담은집", 308571, true, 4.98)); - wishesResponseDTOList.add(new WishesResponseDTO(2L, "비담집, 비우고담은집", 308571, true, 4.98)); - wishesResponseDTOList.add(new WishesResponseDTO(3L, "비담집, 비우고담은집", 308571, true, 4.98)); - return wishesResponseDTOList; + public List getWishList(String userId) { + return wishDAO.findAllByUserId(findUserByUserId(userId).getId()).stream() + .map(wish -> createWishResponseDTO(findHouseById(wish.getHouseId()))) + .collect(Collectors.toList()); } public void changeWish(Long houseId) { diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 28c3353af..c513d905b 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -44,9 +44,9 @@ public void makeReservation(@RequestHeader String authorization, @PathVariable L } @GetMapping("/wishes") - public List getWishes() { + public List getWishes(@RequestHeader String authorization) { logger.info("숙소 위시 리스트 요청"); - return houseService.getWishList(); + return houseService.getWishList(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization))); } @PostMapping("/wishes/{houseId}") diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/WishesResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/WishResponseDTO.java similarity index 60% rename from BE/src/main/java/com/enolj/airbnb/web/dto/WishesResponseDTO.java rename to BE/src/main/java/com/enolj/airbnb/web/dto/WishResponseDTO.java index 08fc8c225..4d81a5074 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/WishesResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/WishResponseDTO.java @@ -1,21 +1,25 @@ package com.enolj.airbnb.web.dto; -public class WishesResponseDTO { +import com.enolj.airbnb.domain.house.House; + +public class WishResponseDTO { private final Long id; private final String name; private final int charge; - private final boolean wish; private final double grade; - public WishesResponseDTO(Long id, String name, int charge, boolean wish, double grade) { + public WishResponseDTO(Long id, String name, int charge, double grade) { this.id = id; this.name = name; this.charge = charge; - this.wish = wish; this.grade = grade; } + public static WishResponseDTO createWishResponseDTO(House house) { + return new WishResponseDTO(house.getId(), house.getName(), house.getCharge(), house.getGrade()); + } + public Long getId() { return id; } @@ -28,10 +32,6 @@ public int getCharge() { return charge; } - public boolean isWish() { - return wish; - } - public double getGrade() { return grade; } From 2d4e76d673e107189bfaa6505d5fd07d8544a276 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 16:38:23 +0900 Subject: [PATCH 38/60] =?UTF-8?q?Feat:=20[#65]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20changeWish=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 changeWish 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../com/enolj/airbnb/domain/wish/WishDAO.java | 16 ++++++++++++++++ .../enolj/airbnb/service/HouseService.java | 19 ++++++++++++++++--- .../com/enolj/airbnb/web/HouseController.java | 4 ++-- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java index 560b500df..d820c1989 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java @@ -17,8 +17,24 @@ public WishDAO(DataSource dataSource) { this.jdbcTemplate = new JdbcTemplate(dataSource); } + public void save(Wish wish) { + String sql = "INSERT INTO wish(user_id, house_id) VALUES(?, ?)"; + jdbcTemplate.update(sql, wish.getUserId(), wish.getHouseId()); + } + public List findAllByUserId(Long userId) { String sql = "SELECT * FROM wish WHERE user_id = ?"; return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Wish.class), userId); } + + public Optional findByUserIdAndHouseId(Long userId, Long houseId) { + String sql = "SELECT * FROM wish WHERE user_id = ? AND house_id = ?"; + List wishes = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Wish.class), userId, houseId); + return wishes.stream().findAny(); + } + + public void delete(Wish wish) { + String sql = "DELETE FROM wish WHERE user_id = ? AND house_id = ?"; + jdbcTemplate.update(sql, wish.getUserId(), wish.getHouseId()); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index b2646f3bc..7175835d2 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -8,6 +8,8 @@ import com.enolj.airbnb.domain.join.JoinDAO; import com.enolj.airbnb.domain.user.User; import com.enolj.airbnb.domain.user.UserDAO; +import com.enolj.airbnb.domain.wish.Wish; +import com.enolj.airbnb.domain.wish.WishDAO; import com.enolj.airbnb.exception.EntityNotFoundException; import com.enolj.airbnb.exception.ErrorMessage; import com.enolj.airbnb.exception.TokenException; @@ -17,10 +19,12 @@ import java.util.ArrayList; import java.util.List; +import java.util.Optional; import java.util.stream.Collectors; import static com.enolj.airbnb.web.dto.ReservationInfoResponseDTO.createReservationInfoResponseDTO; import static com.enolj.airbnb.web.dto.SearchResponseDTO.createSearchResponseDTO; +import static com.enolj.airbnb.web.dto.WishResponseDTO.createWishResponseDTO; @Service public class HouseService { @@ -29,12 +33,14 @@ public class HouseService { private final HouseDAO houseDAO; private final ImageDAO imageDAO; private final JoinDAO joinDAO; + private final WishDAO wishDAO; - public HouseService(UserDAO userDAO, HouseDAO houseDAO, ImageDAO imageDAO, JoinDAO joinDAO) { + public HouseService(UserDAO userDAO, HouseDAO houseDAO, ImageDAO imageDAO, JoinDAO joinDAO, WishDAO wishDAO) { this.userDAO = userDAO; this.houseDAO = houseDAO; this.imageDAO = imageDAO; this.joinDAO = joinDAO; + this.wishDAO = wishDAO; } public List searchHousesByCondition(SearchRequestDTO requestDTO) { @@ -88,8 +94,15 @@ public List getWishList(String userId) { .collect(Collectors.toList()); } - public void changeWish(Long houseId) { - + public void changeWish(String userId, Long houseId) { + User user = findUserByUserId(userId); + House house = findHouseById(houseId); + Optional wish = wishDAO.findByUserIdAndHouseId(user.getId(), house.getId()); + if (wish.isPresent()) { + wishDAO.delete(wish.get()); + return; + } + wishDAO.save(Wish.createWish(user, house)); } public List getReservationList() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index c513d905b..3b0f03300 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -50,9 +50,9 @@ public List getWishes(@RequestHeader String authorization) { } @PostMapping("/wishes/{houseId}") - public void changeWish(@PathVariable Long houseId) { + public void changeWish(@RequestHeader String authorization, @PathVariable Long houseId) { logger.info("{}번 숙소의 위시 요청", houseId); - houseService.changeWish(houseId); + houseService.changeWish(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization)), houseId); } @GetMapping("/reservation") From fc134849399392b49f65592dd14013ab154e5715 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 17:02:32 +0900 Subject: [PATCH 39/60] =?UTF-8?q?Feat:=20[#66]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20getReservationList=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 getReservationList 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../java/com/enolj/airbnb/domain/house/House.java | 4 ++++ .../java/com/enolj/airbnb/domain/join/Join.java | 4 ++++ .../com/enolj/airbnb/domain/join/JoinDAO.java | 7 +++++++ .../com/enolj/airbnb/service/HouseService.java | 15 ++++++--------- .../com/enolj/airbnb/web/HouseController.java | 4 ++-- .../airbnb/web/dto/ReservationResponseDTO.java | 8 ++++++++ 6 files changed, 31 insertions(+), 11 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java index 45c7196de..fffaa3eb8 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java @@ -28,6 +28,10 @@ public boolean checkLocation(double latitude, double longitude) { && (longitude - 0.001 <= this.longitude && this.longitude <= longitude + 0.001); } + public String makeLocation() { + return "서초구, 서울, 한국"; + } + public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java index d3ab85488..c5f137eaf 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java @@ -33,6 +33,10 @@ public void reservation(User user, House house) { this.houseId = house.getId(); } + public String makeDate() { + return checkIn + " = " + checkOut; + } + public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java index 020379716..ad85b1e68 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java @@ -1,9 +1,11 @@ package com.enolj.airbnb.domain.join; +import org.springframework.jdbc.core.BeanPropertyRowMapper; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Repository; import javax.sql.DataSource; +import java.util.List; @Repository public class JoinDAO { @@ -18,4 +20,9 @@ public void save(Join join) { String sql = "INSERT INTO `join`(check_in, check_out, guest, kid, total_charge, user_id, house_id) VALUES(?, ?, ?, ?, ?, ?, ?)"; jdbcTemplate.update(sql, join.getCheckIn(), join.getCheckOut(), join.getGuest(), join.getKid(), join.getTotalCharge(), join.getUserId(), join.getHouseId()); } + + public List findAllByUserId(Long userId) { + String sql = "SELECT * FROM `join` WHERE user_id = ?"; + return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Join.class), userId); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 7175835d2..c13cdacd1 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import static com.enolj.airbnb.web.dto.ReservationInfoResponseDTO.createReservationInfoResponseDTO; +import static com.enolj.airbnb.web.dto.ReservationResponseDTO.createReservationResponseDTO; import static com.enolj.airbnb.web.dto.SearchResponseDTO.createSearchResponseDTO; import static com.enolj.airbnb.web.dto.WishResponseDTO.createWishResponseDTO; @@ -105,15 +106,11 @@ public void changeWish(String userId, Long houseId) { wishDAO.save(Wish.createWish(user, house)); } - public List getReservationList() { - List reservationResponseDTOList = new ArrayList<>(); - reservationResponseDTOList.add(new ReservationResponseDTO(1L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", - "2021년 5월 17일 - 2021년 6월 4일", "서초구, 서울, 한국", "Specious and Comfortable cozy house #4")); - reservationResponseDTOList.add(new ReservationResponseDTO(2L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", - "2021년 5월 17일 - 2021년 6월 4일", "서초구, 서울, 한국", "Specious and Comfortable cozy house #4")); - reservationResponseDTOList.add(new ReservationResponseDTO(3L, "https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg", - "2021년 5월 17일 - 2021년 6월 4일", "서초구, 서울, 한국", "Specious and Comfortable cozy house #4")); - return reservationResponseDTOList; + public List getReservationList(String userId) { + User user = findUserByUserId(userId); + return joinDAO.findAllByUserId(user.getId()).stream() + .map(join -> createReservationResponseDTO(findHouseById(join.getUserId()), join, findOneImageByHouseId(join.getHouseId()))) + .collect(Collectors.toList()); } public ReservationDetailDTO getReservationDetail(Long houseId) { diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 3b0f03300..02311fa5c 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -56,9 +56,9 @@ public void changeWish(@RequestHeader String authorization, @PathVariable Long h } @GetMapping("/reservation") - public List getReservationList() { + public List getReservationList(@RequestHeader String authorization) { logger.info("숙소 예약 리스트 요청"); - return houseService.getReservationList(); + return houseService.getReservationList(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization))); } @GetMapping("/reservation/{houseId}") diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java index 2348b2a0a..5a6dd85dd 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java @@ -1,5 +1,9 @@ package com.enolj.airbnb.web.dto; +import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.image.Image; +import com.enolj.airbnb.domain.join.Join; + public class ReservationResponseDTO { private final Long id; @@ -16,6 +20,10 @@ public ReservationResponseDTO(Long id, String image, String date, String locatio this.name = name; } + public static ReservationResponseDTO createReservationResponseDTO(House house, Join join, Image image) { + return new ReservationResponseDTO(house.getId(), image.getUrl(), join.makeDate(), house.makeLocation(), house.getName()); + } + public Long getId() { return id; } From c643d76069b66318752057e86deb0cb00120b221 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 17:45:56 +0900 Subject: [PATCH 40/60] =?UTF-8?q?Refactor:=20Authorization=EC=9D=84=20?= =?UTF-8?q?=ED=86=B5=ED=95=9C=20=EC=9D=B8=EC=A6=9D=20=EB=B0=A9=EB=B2=95=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/enolj/airbnb/domain/user/User.java | 4 +++ .../enolj/airbnb/service/HouseService.java | 27 +++++++------------ .../com/enolj/airbnb/service/UserService.java | 10 ++++--- .../com/enolj/airbnb/web/HouseController.java | 8 +++--- .../com/enolj/airbnb/web/UserController.java | 3 +-- 5 files changed, 25 insertions(+), 27 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/User.java b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java index 03bbadd74..721d40f9b 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/user/User.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java @@ -38,6 +38,10 @@ public void removeToken() { this.token = null; } + public boolean verifyToken(String token) { + return this.token.equals(token); + } + public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index c13cdacd1..5d6716a23 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -11,8 +11,6 @@ import com.enolj.airbnb.domain.wish.Wish; import com.enolj.airbnb.domain.wish.WishDAO; import com.enolj.airbnb.exception.EntityNotFoundException; -import com.enolj.airbnb.exception.ErrorMessage; -import com.enolj.airbnb.exception.TokenException; import com.enolj.airbnb.web.dto.ReservationInfoResponseDTO; import com.enolj.airbnb.web.dto.*; import org.springframework.stereotype.Service; @@ -22,6 +20,7 @@ import java.util.Optional; import java.util.stream.Collectors; +import static com.enolj.airbnb.service.UserService.getUserFromAuthorization; import static com.enolj.airbnb.web.dto.ReservationInfoResponseDTO.createReservationInfoResponseDTO; import static com.enolj.airbnb.web.dto.ReservationResponseDTO.createReservationResponseDTO; import static com.enolj.airbnb.web.dto.SearchResponseDTO.createSearchResponseDTO; @@ -74,29 +73,21 @@ private House findHouseById(Long houseId) { return houseDAO.findById(houseId).orElseThrow(EntityNotFoundException::new); } - public void makeReservation(String userId, Long houseId, ReservationRequestDTO requestDTO) { + public void makeReservation(String authorization, Long houseId, ReservationRequestDTO requestDTO) { System.out.println(requestDTO); Join join = requestDTO.toEntity(); - join.reservation(findUserByUserId(userId), findHouseById(houseId)); + join.reservation(getUserFromAuthorization(userDAO, authorization), findHouseById(houseId)); joinDAO.save(join); } - private User findUserByUserId(String userId) { - User user = userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); - if (user.getToken() == null) { - throw new TokenException(ErrorMessage.INVALID_TOKEN); - } - return user; - } - - public List getWishList(String userId) { - return wishDAO.findAllByUserId(findUserByUserId(userId).getId()).stream() + public List getWishList(String authorization) { + return wishDAO.findAllByUserId(getUserFromAuthorization(userDAO, authorization).getId()).stream() .map(wish -> createWishResponseDTO(findHouseById(wish.getHouseId()))) .collect(Collectors.toList()); } - public void changeWish(String userId, Long houseId) { - User user = findUserByUserId(userId); + public void changeWish(String authorization, Long houseId) { + User user = getUserFromAuthorization(userDAO, authorization); House house = findHouseById(houseId); Optional wish = wishDAO.findByUserIdAndHouseId(user.getId(), house.getId()); if (wish.isPresent()) { @@ -106,8 +97,8 @@ public void changeWish(String userId, Long houseId) { wishDAO.save(Wish.createWish(user, house)); } - public List getReservationList(String userId) { - User user = findUserByUserId(userId); + public List getReservationList(String authorization) { + User user = getUserFromAuthorization(userDAO, authorization); return joinDAO.findAllByUserId(user.getId()).stream() .map(join -> createReservationResponseDTO(findHouseById(join.getUserId()), join, findOneImageByHouseId(join.getHouseId()))) .collect(Collectors.toList()); diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java index 3275ac4ee..417bd2ed2 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/UserService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -44,8 +44,8 @@ public UserResponseDTO login(String code, GitHubType gitHubType) { return createUserResponseDTO(user, JwtUtil.createToken(user.getUserId())); } - public void logout(String userId) { - User user = findByUserId(userId); + public void logout(String authorization) { + User user = getUserFromAuthorization(userDAO, authorization); user.removeToken(); userDAO.update(user); } @@ -67,7 +67,11 @@ private boolean verifyUser(String userId) { } private User findByUserId(String userId) { - User user = userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); + return userDAO.findByUserId(userId).orElseThrow(EntityNotFoundException::new); + } + + public static User getUserFromAuthorization(UserDAO userDAO, String authorization) { + User user = userDAO.findByUserId(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization))).orElseThrow(EntityNotFoundException::new); if (user.getToken() == null) { throw new TokenException(ErrorMessage.INVALID_TOKEN); } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 02311fa5c..0adf1b73f 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -40,25 +40,25 @@ public ReservationInfoResponseDTO getReservationPage(@PathVariable Long houseId) @PostMapping("houses/{houseId}") public void makeReservation(@RequestHeader String authorization, @PathVariable Long houseId, @RequestBody ReservationRequestDTO requestDTO) { logger.info("{}번 숙소 예약 요청", houseId); - houseService.makeReservation(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization)), houseId, requestDTO); + houseService.makeReservation(authorization, houseId, requestDTO); } @GetMapping("/wishes") public List getWishes(@RequestHeader String authorization) { logger.info("숙소 위시 리스트 요청"); - return houseService.getWishList(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization))); + return houseService.getWishList(authorization); } @PostMapping("/wishes/{houseId}") public void changeWish(@RequestHeader String authorization, @PathVariable Long houseId) { logger.info("{}번 숙소의 위시 요청", houseId); - houseService.changeWish(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization)), houseId); + houseService.changeWish(authorization, houseId); } @GetMapping("/reservation") public List getReservationList(@RequestHeader String authorization) { logger.info("숙소 예약 리스트 요청"); - return houseService.getReservationList(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization))); + return houseService.getReservationList(authorization); } @GetMapping("/reservation/{houseId}") diff --git a/BE/src/main/java/com/enolj/airbnb/web/UserController.java b/BE/src/main/java/com/enolj/airbnb/web/UserController.java index 8e3615637..298159dee 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/UserController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/UserController.java @@ -2,7 +2,6 @@ import com.enolj.airbnb.service.UserService; import com.enolj.airbnb.web.dto.UserResponseDTO; -import com.enolj.airbnb.web.utils.JwtUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; @@ -28,6 +27,6 @@ public UserResponseDTO login(@RequestParam String code, @RequestParam int typeCo @GetMapping("/logout") public void logout(@RequestHeader String authorization) { logger.info("로그아웃 요청"); - userService.logout(JwtUtil.getUserIdFromToken(JwtUtil.getTokenFromAuthorization(authorization))); + userService.logout(authorization); } } From 5d0b74d84682bd7604961db6d199190a395f51ba Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 18:00:18 +0900 Subject: [PATCH 41/60] =?UTF-8?q?Feat:=20[#67]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20cancelReservation=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 cancelReservation 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../java/com/enolj/airbnb/domain/join/JoinDAO.java | 12 ++++++++++++ .../java/com/enolj/airbnb/service/HouseService.java | 8 +++++++- .../java/com/enolj/airbnb/web/HouseController.java | 4 ++-- 3 files changed, 21 insertions(+), 3 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java index ad85b1e68..d62a71e9c 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java @@ -6,6 +6,7 @@ import javax.sql.DataSource; import java.util.List; +import java.util.Optional; @Repository public class JoinDAO { @@ -25,4 +26,15 @@ public List findAllByUserId(Long userId) { String sql = "SELECT * FROM `join` WHERE user_id = ?"; return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Join.class), userId); } + + public Optional findByUserIdAndHouseId(Long userId, Long houseId) { + String sql = "SELECT * FROM `join` WHERE user_id = ? AND house_id = ?"; + List joins = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Join.class), userId, houseId); + return joins.stream().findAny(); + } + + public void delete(Join join) { + String sql = "DELETE FROM `join` WHERE user_id = ? AND house_id = ?"; + jdbcTemplate.update(sql, join.getUserId(), join.getHouseId()); + } } diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 5d6716a23..4bd859409 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -113,7 +113,13 @@ public ReservationDetailDTO getReservationDetail(Long houseId) { new Description("Jong님", "집전체 • 게스트 3명", 1488195)); } - public void cancelReservation(Long houseId) { + public void cancelReservation(String authorization, Long houseId) { + User user = getUserFromAuthorization(userDAO, authorization); + House house = findHouseById(houseId); + joinDAO.delete(findJoinByUserIdAndHouseId(user.getId(), house.getId())); + } + private Join findJoinByUserIdAndHouseId(Long userId, Long houseId) { + return joinDAO.findByUserIdAndHouseId(userId, houseId).orElseThrow(EntityNotFoundException::new); } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 0adf1b73f..be4f81431 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -68,8 +68,8 @@ public ReservationDetailDTO getReservationDetail(@PathVariable Long houseId) { } @DeleteMapping("/reservation/{houseId}") - public void cancelReservation(@PathVariable Long houseId) { + public void cancelReservation(@RequestHeader String authorization, @PathVariable Long houseId) { logger.info("{}번 숙소의 예약 취소 요청", houseId); - houseService.cancelReservation(houseId); + houseService.cancelReservation(authorization, houseId); } } From c1af4a0589da8f4f23c642e59d97a6531b469e41 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Tue, 25 May 2021 18:26:14 +0900 Subject: [PATCH 42/60] =?UTF-8?q?Feat:=20[#68]=20HouseService=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20getReservationDetail=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 정적 데이터만 전달하던 getReservationDetail 메소드를 DAO를 활용하여 실질적인 데이터를 전달하도록 구현 --- .../java/com/enolj/airbnb/domain/join/Join.java | 8 ++++++++ .../com/enolj/airbnb/service/HouseService.java | 16 +++++++++------- .../com/enolj/airbnb/web/HouseController.java | 4 ++-- .../com/enolj/airbnb/web/dto/Description.java | 6 ++++++ .../airbnb/web/dto/ReservationDetailDTO.java | 9 +++++++++ 5 files changed, 34 insertions(+), 9 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java index c5f137eaf..3aa1c2212 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java @@ -37,6 +37,14 @@ public String makeDate() { return checkIn + " = " + checkOut; } + public String getCheckInTime() { + return checkIn.getYear() + "년 " + checkIn.getMonthValue() + "월 " + checkIn.getDayOfMonth() + "일 오후 4:00"; + } + + public String getCheckOutTime() { + return checkOut.getYear() + "년 " + checkOut.getMonthValue() + "월 " + checkOut.getDayOfMonth() + "일 오후 12:00"; + } + public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 4bd859409..4be60939c 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -21,6 +21,7 @@ import java.util.stream.Collectors; import static com.enolj.airbnb.service.UserService.getUserFromAuthorization; +import static com.enolj.airbnb.web.dto.ReservationDetailDTO.createReservationDetailDTO; import static com.enolj.airbnb.web.dto.ReservationInfoResponseDTO.createReservationInfoResponseDTO; import static com.enolj.airbnb.web.dto.ReservationResponseDTO.createReservationResponseDTO; import static com.enolj.airbnb.web.dto.SearchResponseDTO.createSearchResponseDTO; @@ -104,13 +105,14 @@ public List getReservationList(String authorization) { .collect(Collectors.toList()); } - public ReservationDetailDTO getReservationDetail(Long houseId) { - List images = new ArrayList<>(); - images.add("https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg"); - images.add("https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg"); - images.add("https://user-images.githubusercontent.com/63284310/118603297-b2839780-b7ee-11eb-9096-c0fba9792163.jpeg"); - return new ReservationDetailDTO(1L, images, "서초구, 서울, 한국", "Specious and Comfortable cozy house #4", "2021년 5월 17일 오후 4:00", "2021년 6월 4일 오후 12:00", - new Description("Jong님", "집전체 • 게스트 3명", 1488195)); + public ReservationDetailDTO getReservationDetail(String authorization, Long houseId) { + User user = getUserFromAuthorization(userDAO, authorization); + House house = findHouseById(houseId); + Join join = findJoinByUserIdAndHouseId(user.getId(), house.getId()); + List images = imageDAO.findAll(house.getId()).stream() + .map(Image::getUrl) + .collect(Collectors.toList()); + return createReservationDetailDTO(house, images, join); } public void cancelReservation(String authorization, Long houseId) { diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index be4f81431..f9f5b97eb 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -62,9 +62,9 @@ public List getReservationList(@RequestHeader String aut } @GetMapping("/reservation/{houseId}") - public ReservationDetailDTO getReservationDetail(@PathVariable Long houseId) { + public ReservationDetailDTO getReservationDetail(@RequestHeader String authorization, @PathVariable Long houseId) { logger.info("{}번 숙소의 디테일 예약정보 요청", houseId); - return houseService.getReservationDetail(houseId); + return houseService.getReservationDetail(authorization, houseId); } @DeleteMapping("/reservation/{houseId}") diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java b/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java index 32626cb83..422954ad6 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java @@ -1,5 +1,7 @@ package com.enolj.airbnb.web.dto; +import com.enolj.airbnb.domain.house.House; + public class Description { private final String host; @@ -12,6 +14,10 @@ public Description(String host, String option, int charge) { this.charge = charge; } + public static Description createDescription(House house) { + return new Description(house.getHost(), house.getOption(), house.getCharge()); + } + public String getHost() { return host; } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java index 9320b5707..ed6edfd53 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java @@ -1,7 +1,12 @@ package com.enolj.airbnb.web.dto; +import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.join.Join; + import java.util.List; +import static com.enolj.airbnb.web.dto.Description.createDescription; + public class ReservationDetailDTO { private final Long id; @@ -22,6 +27,10 @@ public ReservationDetailDTO(Long id, List images, String location, Strin this.description = description; } + public static ReservationDetailDTO createReservationDetailDTO(House house, List images, Join join) { + return new ReservationDetailDTO(house.getId(), images, "서초구, 서울, 한국", house.getName(), join.getCheckInTime(), join.getCheckOutTime(), createDescription(house)); + } + public Long getId() { return id; } From 562d9db9628c23a0d65093158e37d1b98cda2401 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Wed, 26 May 2021 11:18:44 +0900 Subject: [PATCH 43/60] =?UTF-8?q?Chore:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/main/java/com/enolj/airbnb/service/HouseService.java | 1 - BE/src/main/java/com/enolj/airbnb/web/HouseController.java | 1 - 2 files changed, 2 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 4be60939c..1e87a5a9a 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -15,7 +15,6 @@ import com.enolj.airbnb.web.dto.*; import org.springframework.stereotype.Service; -import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index f9f5b97eb..724c25582 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -2,7 +2,6 @@ import com.enolj.airbnb.service.HouseService; import com.enolj.airbnb.web.dto.*; -import com.enolj.airbnb.web.utils.JwtUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; From 51da48d2d5e179045575963bb253a6e8976872b4 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Wed, 26 May 2021 11:20:28 +0900 Subject: [PATCH 44/60] =?UTF-8?q?Refactor:=20JsonProperty=20=EC=96=B4?= =?UTF-8?q?=EB=85=B8=ED=85=8C=EC=9D=B4=EC=85=98=EC=9D=84=20=ED=99=9C?= =?UTF-8?q?=EC=9A=A9=ED=95=98=EC=97=AC=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/enolj/airbnb/domain/user/User.java | 6 +++--- .../com/enolj/airbnb/service/UserService.java | 8 ++++---- .../java/com/enolj/airbnb/web/dto/TokenDTO.java | 15 +++++++++------ .../com/enolj/airbnb/web/dto/UserInfoDTO.java | 15 +++++++++------ 4 files changed, 25 insertions(+), 19 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/User.java b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java index 721d40f9b..2152f00e4 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/user/User.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java @@ -24,14 +24,14 @@ public User(String userId, String email, String name, String token) { } public static User createUser(UserInfoDTO userInfoDTO, EmailDTO emailDTO, TokenDTO tokenDTO) { - return new User(userInfoDTO.getLogin(), emailDTO.getEmail(), userInfoDTO.getName(), tokenDTO.getAccess_token()); + return new User(userInfoDTO.getUserId(), emailDTO.getEmail(), userInfoDTO.getName(), tokenDTO.getAccessToken()); } public void update(UserInfoDTO userInfoDTO, EmailDTO emailDTO, TokenDTO tokenDTO) { - this.userId = userInfoDTO.getLogin(); + this.userId = userInfoDTO.getUserId(); this.email = emailDTO.getEmail(); this.name = userInfoDTO.getName(); - this.token = tokenDTO.getAccess_token(); + this.token = tokenDTO.getAccessToken(); } public void removeToken() { diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java index 417bd2ed2..ecf82efac 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/UserService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -31,10 +31,10 @@ public UserService(UserDAO userDAO, GitHubOAuth gitHubOAuth) { public UserResponseDTO login(String code, GitHubType gitHubType) { TokenDTO tokenDTO = tokenRequestApi(code, gitHubType); - UserInfoDTO userInfoDTO = userInfoRequestApi(tokenDTO.getAccess_token()); - EmailDTO emailDTO = emailRequestApi(tokenDTO.getAccess_token()); - if (verifyUser(userInfoDTO.getLogin())) { - User user = findByUserId(userInfoDTO.getLogin()); + UserInfoDTO userInfoDTO = userInfoRequestApi(tokenDTO.getAccessToken()); + EmailDTO emailDTO = emailRequestApi(tokenDTO.getAccessToken()); + if (verifyUser(userInfoDTO.getUserId())) { + User user = findByUserId(userInfoDTO.getUserId()); user.update(userInfoDTO, emailDTO, tokenDTO); userDAO.update(user); return createUserResponseDTO(user, JwtUtil.createToken(user.getUserId())); diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java index 2b593fe2a..9b96ccc2b 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java @@ -1,13 +1,16 @@ package com.enolj.airbnb.web.dto; +import com.fasterxml.jackson.annotation.JsonProperty; + public class TokenDTO { - private String access_token; + @JsonProperty("access_token") + private String accessToken; private String token_type; private String scope; - public void setAccess_token(String access_token) { - this.access_token = access_token; + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; } public void setToken_type(String token_type) { @@ -18,14 +21,14 @@ public void setScope(String scope) { this.scope = scope; } - public String getAccess_token() { - return access_token; + public String getAccessToken() { + return accessToken; } @Override public String toString() { return "TokenDTO{" + - "access_token='" + access_token + '\'' + + "access_token='" + accessToken + '\'' + ", token_type='" + token_type + '\'' + ", scope='" + scope + '\'' + '}'; diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java index 5720a4d9c..976bc4c61 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java @@ -1,16 +1,19 @@ package com.enolj.airbnb.web.dto; +import com.fasterxml.jackson.annotation.JsonProperty; + public class UserInfoDTO { - private String login; + @JsonProperty("login") + private String userId; private String name; - public String getLogin() { - return login; + public String getUserId() { + return userId; } - public void setLogin(String login) { - this.login = login; + public void setUserId(String userId) { + this.userId = userId; } public String getName() { @@ -24,7 +27,7 @@ public void setName(String name) { @Override public String toString() { return "UserInfoDTO{" + - "login='" + login + '\'' + + "login='" + userId + '\'' + ", name='" + name + '\'' + '}'; } From b77912500d387d10081e335b4400cffb83fdcb19 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Wed, 26 May 2021 11:22:13 +0900 Subject: [PATCH 45/60] =?UTF-8?q?Feat:=20UserDAO=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EC=9D=98=20save=20=EB=A9=94=EC=86=8C=EB=93=9C=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit save 메소드의 쿼리문을 이미 레코드 존재 시 token 값만 업데이트 하도록 수정, 불필요한 메소드 삭제, schema.sql에 userId를 유니크 키로 설정 --- .../com/enolj/airbnb/domain/user/UserDAO.java | 21 ++----------------- .../com/enolj/airbnb/service/UserService.java | 4 ++-- BE/src/main/resources/schema.sql | 2 +- 3 files changed, 5 insertions(+), 22 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java index dc803ece7..5ea0b3a3e 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java @@ -5,7 +5,6 @@ import org.springframework.stereotype.Repository; import javax.sql.DataSource; -import java.sql.ResultSet; import java.util.List; import java.util.Optional; @@ -18,30 +17,14 @@ public UserDAO(DataSource dataSource) { jdbcTemplate = new JdbcTemplate(dataSource); } - public Optional findById(Long id) { - String sql = "SELECT * FROM user WHERE id = ?"; - List result = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class), id); - return result.stream().findAny(); - } - public Optional findByUserId(String userId) { String sql = "SELECT * FROM user WHERE user_id = ?"; List result = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class), userId); return result.stream().findAny(); } - public List findAll() { - String sql = "SELECT * FROM user"; - return jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class)); - } - public void save(User user) { - String sql = "INSERT INTO user (user_id, email, `name`, token) VALUES (?, ?, ?, ?)"; - jdbcTemplate.update(sql, user.getUserId(), user.getEmail(), user.getName(), user.getToken()); - } - - public void update(User user) { - String sql = "UPDATE user SET user_id = ?, email = ?, `name` = ?, token = ? WHERE id = ?"; - jdbcTemplate.update(sql, user.getUserId(), user.getEmail(), user.getName(), user.getToken(), user.getId()); + String sql = "INSERT INTO user (user_id, email, `name`, token) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE token = ?"; + jdbcTemplate.update(sql, user.getUserId(), user.getEmail(), user.getName(), user.getToken(), user.getToken()); } } diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java index ecf82efac..785cf548e 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/UserService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -36,7 +36,7 @@ public UserResponseDTO login(String code, GitHubType gitHubType) { if (verifyUser(userInfoDTO.getUserId())) { User user = findByUserId(userInfoDTO.getUserId()); user.update(userInfoDTO, emailDTO, tokenDTO); - userDAO.update(user); + userDAO.save(user); return createUserResponseDTO(user, JwtUtil.createToken(user.getUserId())); } User user = createUser(userInfoDTO, emailDTO, tokenDTO); @@ -47,7 +47,7 @@ public UserResponseDTO login(String code, GitHubType gitHubType) { public void logout(String authorization) { User user = getUserFromAuthorization(userDAO, authorization); user.removeToken(); - userDAO.update(user); + userDAO.save(user); } private TokenDTO tokenRequestApi(String code, GitHubType gitHubType) { diff --git a/BE/src/main/resources/schema.sql b/BE/src/main/resources/schema.sql index fad044aa3..93ee7913e 100644 --- a/BE/src/main/resources/schema.sql +++ b/BE/src/main/resources/schema.sql @@ -20,7 +20,7 @@ USE `airbnb` ; DROP TABLE IF EXISTS `airbnb`.`user`; CREATE TABLE IF NOT EXISTS `airbnb`.`user` ( `id` INT AUTO_INCREMENT NOT NULL, - `user_id` VARCHAR(45) NOT NULL, + `user_id` VARCHAR(45) UNIQUE KEY NOT NULL, `email` VARCHAR(45) NOT NULL, `name` VARCHAR(45) NULL, `token` VARCHAR(255) NULL, From 20bb4dfc63a07ead0f930cda05a84afadeaf5efd Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Wed, 26 May 2021 17:08:52 +0900 Subject: [PATCH 46/60] =?UTF-8?q?Fix:=20=ED=94=84=EB=A1=A0=ED=8A=B8?= =?UTF-8?q?=EC=9D=98=20=EC=9A=94=EA=B5=AC=EC=82=AC=ED=95=AD=EC=97=90=20?= =?UTF-8?q?=EB=A7=9E=EA=B2=8C=20API=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 검색 요청 API의 response에 옵션 분리, local에 대한 정보 추가, 예약 페이지 요청 API에 후기 추가 --- .../com/enolj/airbnb/domain/house/House.java | 20 +- .../com/enolj/airbnb/domain/join/Join.java | 4 + .../com/enolj/airbnb/web/dto/Description.java | 5 +- .../airbnb/web/dto/ReservationDetailDTO.java | 2 +- .../web/dto/ReservationInfoResponseDTO.java | 10 +- .../airbnb/web/dto/SearchResponseDTO.java | 20 +- BE/src/main/resources/data.sql | 246 +++++++++--------- 7 files changed, 171 insertions(+), 136 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java index fffaa3eb8..7c511a293 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java @@ -2,6 +2,10 @@ import org.springframework.data.annotation.Id; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + public class House { @Id @@ -24,14 +28,26 @@ public boolean checkCharge(int minCharge, int maxCharge) { } public boolean checkLocation(double latitude, double longitude) { - return (latitude - 0.001 <= this.latitude && this.latitude <= latitude + 0.001) - && (longitude - 0.001 <= this.longitude && this.longitude <= longitude + 0.001); + return (latitude - 0.003 <= this.latitude && this.latitude <= latitude + 0.003) + && (longitude - 0.003 <= this.longitude && this.longitude <= longitude + 0.003); } public String makeLocation() { return "서초구, 서울, 한국"; } + public String makeLocal() { + return "서초구의 아파트 전체"; + } + + public List makeOption() { + List splitOption = Arrays.asList(option.split(",")); + List options = new ArrayList<>(); + options.add(String.join(" • ", splitOption.subList(0, 4))); + options.add(String.join(" • ", splitOption.subList(4, 8))); + return options; + } + public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java index 3aa1c2212..dd4fa5c55 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java @@ -45,6 +45,10 @@ public String getCheckOutTime() { return checkOut.getYear() + "년 " + checkOut.getMonthValue() + "월 " + checkOut.getDayOfMonth() + "일 오후 12:00"; } + public String makeOption() { + return "집전체 • 게스트 " + guest + "명"; + } + public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java b/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java index 422954ad6..dc7940b49 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java @@ -1,6 +1,7 @@ package com.enolj.airbnb.web.dto; import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.join.Join; public class Description { @@ -14,8 +15,8 @@ public Description(String host, String option, int charge) { this.charge = charge; } - public static Description createDescription(House house) { - return new Description(house.getHost(), house.getOption(), house.getCharge()); + public static Description createDescription(House house, Join join) { + return new Description(house.getHost(), join.makeOption(), house.getCharge()); } public String getHost() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java index ed6edfd53..7c0bc8f72 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java @@ -28,7 +28,7 @@ public ReservationDetailDTO(Long id, List images, String location, Strin } public static ReservationDetailDTO createReservationDetailDTO(House house, List images, Join join) { - return new ReservationDetailDTO(house.getId(), images, "서초구, 서울, 한국", house.getName(), join.getCheckInTime(), join.getCheckOutTime(), createDescription(house)); + return new ReservationDetailDTO(house.getId(), images, house.makeLocation(), house.getName(), join.getCheckInTime(), join.getCheckOutTime(), createDescription(house, join)); } public Long getId() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java index 4b569be47..7cef036c2 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java @@ -8,16 +8,18 @@ public class ReservationInfoResponseDTO { private final double cleaningRatio; private final double serviceRatio; private final double discountRatio; + private final int review; - public ReservationInfoResponseDTO(int charge, double cleaningRatio, double serviceRatio, double discountRatio) { + public ReservationInfoResponseDTO(int charge, double cleaningRatio, double serviceRatio, double discountRatio, int review) { this.charge = charge; this.cleaningRatio = cleaningRatio; this.serviceRatio = serviceRatio; this.discountRatio = discountRatio; + this.review = review; } public static ReservationInfoResponseDTO createReservationInfoResponseDTO(House house) { - return new ReservationInfoResponseDTO(house.getCharge(), house.getCleaningRatio(), house.getServiceRatio(), house.getDiscountRatio()); + return new ReservationInfoResponseDTO(house.getCharge(), house.getCleaningRatio(), house.getServiceRatio(), house.getDiscountRatio(), house.getReview()); } public int getCharge() { @@ -36,6 +38,10 @@ public double getDiscountRatio() { return discountRatio; } + public int getReview() { + return review; + } + @Override public String toString() { return "ReservationInfoResponseDTO{" + diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java index f68a204d0..98e65581f 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java @@ -3,6 +3,8 @@ import com.enolj.airbnb.domain.house.House; import com.enolj.airbnb.domain.image.Image; +import java.util.List; + import static com.enolj.airbnb.web.dto.Location.createLocationByHouse; public class SearchResponseDTO { @@ -10,29 +12,31 @@ public class SearchResponseDTO { private final Long id; private final String image; private final Location location; + private final String local; private final String name; private final int charge; private final double grade; private final int review; private final String description; - private final String option; + private final List options; private final boolean wish; - public SearchResponseDTO(Long id, String image, Location location, String name, int charge, double grade, int review, String description, String option, boolean wish) { + public SearchResponseDTO(Long id, String image, Location location, String local, String name, int charge, double grade, int review, String description, List options, boolean wish) { this.id = id; this.image = image; this.location = location; + this.local = local; this.name = name; this.charge = charge; this.grade = grade; this.review = review; this.description = description; - this.option = option; + this.options = options; this.wish = wish; } public static SearchResponseDTO createSearchResponseDTO(House house, Image image) { - return new SearchResponseDTO(house.getId(), image.getUrl(), createLocationByHouse(house), house.getName(), house.getCharge(), house.getGrade(), house.getReview(), house.getDescription(), house.getOption(), false); + return new SearchResponseDTO(house.getId(), image.getUrl(), createLocationByHouse(house), house.makeLocal(), house.getName(), house.getCharge(), house.getGrade(), house.getReview(), house.getDescription(), house.makeOption(), false); } public Long getId() { @@ -47,6 +51,10 @@ public Location getLocation() { return location; } + public String getLocal() { + return local; + } + public String getName() { return name; } @@ -67,8 +75,8 @@ public String getDescription() { return description; } - public String getOption() { - return option; + public List getOptions() { + return options; } public boolean isWish() { diff --git a/BE/src/main/resources/data.sql b/BE/src/main/resources/data.sql index 673453af3..011a75526 100644 --- a/BE/src/main/resources/data.sql +++ b/BE/src/main/resources/data.sql @@ -1,253 +1,253 @@ INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 50000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.466821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 50000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.466821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 55000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.467821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 55000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.467821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 55000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.468821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 55000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.468821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.469821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.469821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.470821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.470821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.471821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 60000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.471821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.472821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.472821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.473821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.473821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.474821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.474821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.475821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 65000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.475821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.476821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.476821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.477821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.477821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.478821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.478821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.479821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.479821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.480821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 70000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.480821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.481821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.481821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.482821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.482821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.483821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.483821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.484821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 75000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.484821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.485821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.485821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.486821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.486821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.487821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.487821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.488821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.488821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.489821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.489821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 80000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.491821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.491821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.492821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.492821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.493821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.493821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.494821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.494821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.495821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.495821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.496821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.496821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.497821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 85000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.497821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.498821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.498821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.499821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.499821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.500821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.500821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.501821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.501821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.502821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.502821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.503821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.503821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.504821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.504821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.505821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.505821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.506821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 90000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.506821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.507821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.507821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.508821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.508821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.509821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.509821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.510821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.510821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.511821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.511821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.512821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.512821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.513821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.513821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.514821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.514821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.515821, 127.0312283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.515821, 127.0312283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0072283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0072283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0082283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 95000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0082283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0092283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0092283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0102283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0102283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0112283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0112283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0122283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0122283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0132283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0132283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0142283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0142283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0152283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0152283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0162283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0162283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0172283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0172283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0182283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0182283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0192283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0192283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0202283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 100000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0202283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0212283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0212283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0222283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0222283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0232283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0232283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0242283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0242283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0252283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0252283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0262283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0262283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0272283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0272283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0282283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0282283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0292283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0292283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0302283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0302283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0322283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 105000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0322283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0332283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0332283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0342283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0342283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0352283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0352283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0362283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0362283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0372283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0372283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0382283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0382283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0392283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0392283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0402283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0402283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0412283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0412283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0422283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 110000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0422283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0432283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0432283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0442283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0442283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0452283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0452283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0462283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0462283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0472283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0472283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0482283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0482283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0492283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0492283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0502283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 115000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0502283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0512283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0512283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0522283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0522283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0532283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0532283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0542283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0542283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0552283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0552283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0562283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 120000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0562283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0572283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0572283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0582283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0582283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0592283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0592283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0602283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0602283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0612283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 125000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0612283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0622283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0622283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0632283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0632283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0642283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 130000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0642283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0652283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0652283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0662283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0662283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0672283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0672283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0682283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 135000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0682283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0692283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0692283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0702283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0702283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0712283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 140000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0712283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 145000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0722283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 145000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0722283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 145000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0732283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 145000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0732283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0742283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0742283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0752283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0752283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0762283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 150000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0762283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 155000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0772283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 155000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0772283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 160000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0782283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 160000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0782283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 165000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0792283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 165000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0792283, 4, 0.02, 7.24); INSERT INTO house(`name`, description, charge, `option`, host, grade, review, latitude, longitude, discount_ratio, cleaning_ratio, service_ratio) -VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 170000, '최대 인원 4명 • 침실 1개 • 침대 1개 • 욕실 1개 • 주방 • 무선 인터넷 • 에어컨 • 헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0802283, 4, 0.02, 7.24); +VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 도보로 이동가능합니다. 지하철, 버스노선이 다양하고 맛집, 마트 등, 주변 시설이 풍부합니다. 깨끗하고, 아늑한 시설을 사용하실 수 있습니다.', 170000, '최대 인원 4명,침실 1개,침대 1개,욕실 1개,주방,무선 인터넷,에어컨,헤어드라이기', 'Jong님', 4.80, 127, 37.490821, 127.0802283, 4, 0.02, 7.24); From 6cf66695ab629181e8c445d2c76122a17d9a7ce4 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Wed, 26 May 2021 18:16:54 +0900 Subject: [PATCH 47/60] =?UTF-8?q?Feat:=20[#77]=20=EC=88=99=EC=86=8C=20?= =?UTF-8?q?=EC=83=81=EC=84=B8=20=ED=8E=98=EC=9D=B4=EC=A7=80=20=EC=9A=94?= =?UTF-8?q?=EC=B2=AD=20API=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/enolj/airbnb/domain/house/House.java | 12 ++- .../enolj/airbnb/service/HouseService.java | 14 ++- .../com/enolj/airbnb/web/HouseController.java | 6 ++ .../web/dto/HouseDetailInfoResponseDTO.java | 92 +++++++++++++++++++ 4 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java diff --git a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java index 7c511a293..ef147ef6e 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java @@ -28,8 +28,8 @@ public boolean checkCharge(int minCharge, int maxCharge) { } public boolean checkLocation(double latitude, double longitude) { - return (latitude - 0.003 <= this.latitude && this.latitude <= latitude + 0.003) - && (longitude - 0.003 <= this.longitude && this.longitude <= longitude + 0.003); + return (latitude - 0.006 <= this.latitude && this.latitude <= latitude + 0.006) + && (longitude - 0.006 <= this.longitude && this.longitude <= longitude + 0.006); } public String makeLocation() { @@ -48,6 +48,14 @@ public List makeOption() { return options; } + public String makeHost() { + return "레지던스 전체 호스트: " + host + "님"; + } + + public String getHostImage() { + return "https://user-images.githubusercontent.com/63284310/119629402-f149cb00-be48-11eb-8fa5-c4415b37076d.jpeg"; + } + public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 1e87a5a9a..00b7d2628 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -20,6 +20,7 @@ import java.util.stream.Collectors; import static com.enolj.airbnb.service.UserService.getUserFromAuthorization; +import static com.enolj.airbnb.web.dto.HouseDetailInfoResponseDTO.createHouseDetailInfoResponseDTO; import static com.enolj.airbnb.web.dto.ReservationDetailDTO.createReservationDetailDTO; import static com.enolj.airbnb.web.dto.ReservationInfoResponseDTO.createReservationInfoResponseDTO; import static com.enolj.airbnb.web.dto.ReservationResponseDTO.createReservationResponseDTO; @@ -44,7 +45,6 @@ public HouseService(UserDAO userDAO, HouseDAO houseDAO, ImageDAO imageDAO, JoinD } public List searchHousesByCondition(SearchRequestDTO requestDTO) { - System.out.println(requestDTO); return houseDAO.findAll().stream() .filter(house -> house.checkCharge(requestDTO.getMinCharge(), requestDTO.getMaxCharge())) .filter((house -> house.checkLocation(requestDTO.getLatitude(), requestDTO.getLongitude()))) @@ -59,12 +59,21 @@ private Image findOneImageByHouseId(Long houseId) { } public List searchChargesByCondition(SearchChargesRequestDTO requestDTO) { - System.out.println(requestDTO); return houseDAO.findAll().stream() .map(House::getCharge) .collect(Collectors.toList()); } + public HouseDetailInfoResponseDTO getHouseDetailInfo(Long houseId) { + return createHouseDetailInfoResponseDTO(findHouseById(houseId), findAllImageByHouseId(houseId)); + } + + private List findAllImageByHouseId(Long houseId) { + return imageDAO.findAll(houseId).stream() + .map(Image::getUrl) + .collect(Collectors.toList()); + } + public ReservationInfoResponseDTO getReservationInfo(Long houseId) { return createReservationInfoResponseDTO(findHouseById(houseId)); } @@ -74,7 +83,6 @@ private House findHouseById(Long houseId) { } public void makeReservation(String authorization, Long houseId, ReservationRequestDTO requestDTO) { - System.out.println(requestDTO); Join join = requestDTO.toEntity(); join.reservation(getUserFromAuthorization(userDAO, authorization), findHouseById(houseId)); joinDAO.save(join); diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index 724c25582..aabc2880c 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -30,6 +30,12 @@ public List searchCharges(SearchChargesRequestDTO requestDTO) { return houseService.searchChargesByCondition(requestDTO); } + @GetMapping("/houses/detail/{houseId}") + public HouseDetailInfoResponseDTO getHouseDetail(@PathVariable Long houseId) { + logger.info("{}번 숙소의 디테일 페이지 요청", houseId); + return houseService.getHouseDetailInfo(houseId); + } + @GetMapping("/houses/{houseId}") public ReservationInfoResponseDTO getReservationPage(@PathVariable Long houseId) { logger.info("{}번 숙소 예약 페이지 요청", houseId); diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java new file mode 100644 index 000000000..5dd5e877f --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java @@ -0,0 +1,92 @@ +package com.enolj.airbnb.web.dto; + +import com.enolj.airbnb.domain.house.House; + +import java.util.List; + +public class HouseDetailInfoResponseDTO { + + private final String name; + private final List images; + private final int review; + private final String location; + private final String host; + private final String hostImage; + private final List options; + private final String description; + private final int charge; + private final boolean wish; + + public HouseDetailInfoResponseDTO(String name, List images, int review, String location, String host, String hostImage, List options, String description, int charge, boolean wish) { + this.name = name; + this.images = images; + this.review = review; + this.location = location; + this.host = host; + this.hostImage = hostImage; + this.options = options; + this.description = description; + this.charge = charge; + this.wish = wish; + } + + public static HouseDetailInfoResponseDTO createHouseDetailInfoResponseDTO(House house, List images) { + return new HouseDetailInfoResponseDTO(house.getName(), images, house.getReview(), house.makeLocation(), house.makeHost(), house.getHostImage(), house.makeOption(), house.getDescription(), house.getCharge(), false); + } + + public String getName() { + return name; + } + + public List getImages() { + return images; + } + + public int getReview() { + return review; + } + + public String getLocation() { + return location; + } + + public String getHost() { + return host; + } + + public String getHostImage() { + return hostImage; + } + + public List getOptions() { + return options; + } + + public String getDescription() { + return description; + } + + public int getCharge() { + return charge; + } + + public boolean isWish() { + return wish; + } + + @Override + public String toString() { + return "HouseDetailInfoResponseDTO{" + + "name='" + name + '\'' + + ", images=" + images + + ", review=" + review + + ", location='" + location + '\'' + + ", host='" + host + '\'' + + ", hostImage='" + hostImage + '\'' + + ", options=" + options + + ", description='" + description + '\'' + + ", charge=" + charge + + ", wish=" + wish + + '}'; + } +} From dbb2dfae1cb864f8f294baeea86d36349734e62a Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 3 Jun 2021 14:27:22 +0900 Subject: [PATCH 48/60] =?UTF-8?q?Refactor:=20[#90]=20WebConfig=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20logFilter=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit RequestLoggingFilterConfig 클래스에 있던 logFilter 메소드를 WebConfig 클래스로 이동 --- .../config/RequestLoggingFilterConfig.java | 20 ------------------- .../com/enolj/airbnb/config/WebConfig.java | 15 +++++++++++++- 2 files changed, 14 insertions(+), 21 deletions(-) delete mode 100644 BE/src/main/java/com/enolj/airbnb/config/RequestLoggingFilterConfig.java diff --git a/BE/src/main/java/com/enolj/airbnb/config/RequestLoggingFilterConfig.java b/BE/src/main/java/com/enolj/airbnb/config/RequestLoggingFilterConfig.java deleted file mode 100644 index a599a04bb..000000000 --- a/BE/src/main/java/com/enolj/airbnb/config/RequestLoggingFilterConfig.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.enolj.airbnb.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.filter.CommonsRequestLoggingFilter; - -@Configuration -public class RequestLoggingFilterConfig { - - @Bean - public CommonsRequestLoggingFilter logFilter() { - CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); - filter.setIncludeHeaders(false); - filter.setIncludeQueryString(true); - filter.setIncludePayload(true); - filter.setMaxPayloadLength(10000); - filter.setAfterMessagePrefix("REQUEST DATA : "); - return filter; - } -} diff --git a/BE/src/main/java/com/enolj/airbnb/config/WebConfig.java b/BE/src/main/java/com/enolj/airbnb/config/WebConfig.java index 8b9b77fd2..cb91b914a 100644 --- a/BE/src/main/java/com/enolj/airbnb/config/WebConfig.java +++ b/BE/src/main/java/com/enolj/airbnb/config/WebConfig.java @@ -1,15 +1,28 @@ package com.enolj.airbnb.config; +import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; +import org.springframework.web.filter.CommonsRequestLoggingFilter; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class WebConfig implements WebMvcConfigurer { + @Bean + public CommonsRequestLoggingFilter logFilter() { + CommonsRequestLoggingFilter filter = new CommonsRequestLoggingFilter(); + filter.setIncludeHeaders(false); + filter.setIncludeQueryString(true); + filter.setIncludePayload(true); + filter.setMaxPayloadLength(10000); + filter.setAfterMessagePrefix("REQUEST DATA : "); + return filter; + } + @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") - .allowedOrigins("http://localhost:3000"); + .allowedOrigins("http://localhost:3000", "http://3.37.76.224"); } } From 414167602f53b2db4f0e07aa2006402d96a21394 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 3 Jun 2021 14:29:33 +0900 Subject: [PATCH 49/60] =?UTF-8?q?Refactor:=20[#90]=20OAuth=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=EC=9D=98=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=9D=B4=EB=A6=84=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../airbnb/authorization/GitHubOAuth.java | 8 +++---- .../com/enolj/airbnb/authorization/OAuth.java | 7 +++---- .../com/enolj/airbnb/service/UserService.java | 21 ++++--------------- 3 files changed, 10 insertions(+), 26 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java index 9fc9e48d7..f317ca223 100644 --- a/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java +++ b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java @@ -40,9 +40,7 @@ public GitHubOAuth(Environment environment, RestTemplateBuilder restTemplateBuil } @Override - public TokenDTO getTokenAPI(String code, GitHubType gitHubType) { - String id = environment.getProperty(gitHubType.getClientId()); - String secret = environment.getProperty(gitHubType.getClientSecret()); + public TokenDTO tokenReceiveAPI(String code, int typeCode) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.ACCESS_TOKEN.getUrl()) .queryParam(CLIENT_ID, id) .queryParam(CLIENT_SECRET, secret) @@ -55,7 +53,7 @@ public TokenDTO getTokenAPI(String code, GitHubType gitHubType) { } @Override - public UserInfoDTO getUserInfoAPI(String token) { + public UserInfoDTO userInfoReceiveAPI(String token) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.USER_INFO.getUrl()); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set(HttpHeaders.AUTHORIZATION, TOKEN + " " + token); @@ -64,7 +62,7 @@ public UserInfoDTO getUserInfoAPI(String token) { } @Override - public EmailDTO getEmailAPI(String token) { + public EmailDTO emailReceiveAPI(String token) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.USER_EMAIL.getUrl()); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set(HttpHeaders.AUTHORIZATION, TOKEN + " " + token); diff --git a/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java b/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java index 1b6e8860b..b9fb93f3d 100644 --- a/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java +++ b/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java @@ -3,13 +3,12 @@ import com.enolj.airbnb.web.dto.EmailDTO; import com.enolj.airbnb.web.dto.TokenDTO; import com.enolj.airbnb.web.dto.UserInfoDTO; -import com.enolj.airbnb.web.utils.GitHubType; public interface OAuth { - TokenDTO getTokenAPI(String code, GitHubType gitHubType); + TokenDTO tokenReceiveAPI(String code, int typeCode); - UserInfoDTO getUserInfoAPI(String token); + UserInfoDTO userInfoReceiveAPI(String token); - EmailDTO getEmailAPI(String token); + EmailDTO emailReceiveAPI(String token); } diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java index 785cf548e..a17d66e2b 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/UserService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -11,7 +11,6 @@ import com.enolj.airbnb.web.dto.TokenDTO; import com.enolj.airbnb.web.dto.UserInfoDTO; import com.enolj.airbnb.web.dto.UserResponseDTO; -import com.enolj.airbnb.web.utils.GitHubType; import com.enolj.airbnb.web.utils.JwtUtil; import org.springframework.stereotype.Service; @@ -29,10 +28,10 @@ public UserService(UserDAO userDAO, GitHubOAuth gitHubOAuth) { this.gitHubOAuth = gitHubOAuth; } - public UserResponseDTO login(String code, GitHubType gitHubType) { - TokenDTO tokenDTO = tokenRequestApi(code, gitHubType); - UserInfoDTO userInfoDTO = userInfoRequestApi(tokenDTO.getAccessToken()); - EmailDTO emailDTO = emailRequestApi(tokenDTO.getAccessToken()); + public UserResponseDTO login(String code, int typeCode) { + TokenDTO tokenDTO = gitHubOAuth.tokenReceiveAPI(code, typeCode); + UserInfoDTO userInfoDTO = gitHubOAuth.userInfoReceiveAPI(tokenDTO.getAccessToken()); + EmailDTO emailDTO = gitHubOAuth.emailReceiveAPI(tokenDTO.getAccessToken()); if (verifyUser(userInfoDTO.getUserId())) { User user = findByUserId(userInfoDTO.getUserId()); user.update(userInfoDTO, emailDTO, tokenDTO); @@ -50,18 +49,6 @@ public void logout(String authorization) { userDAO.save(user); } - private TokenDTO tokenRequestApi(String code, GitHubType gitHubType) { - return gitHubOAuth.getTokenAPI(code, gitHubType); - } - - private UserInfoDTO userInfoRequestApi(String token) { - return gitHubOAuth.getUserInfoAPI(token); - } - - private EmailDTO emailRequestApi(String token) { - return gitHubOAuth.getEmailAPI(token); - } - private boolean verifyUser(String userId) { return userDAO.findByUserId(userId).isPresent(); } From 06ee701ecc3f886e348d14827c77c663521d94b2 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 3 Jun 2021 14:31:09 +0900 Subject: [PATCH 50/60] =?UTF-8?q?Refactor:=20[#90]=20GitHubOAuth=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EB=A6=AC=ED=8C=A9=ED=86=A0?= =?UTF-8?q?=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 상수의 접근제어자 변경, Environment를 멤버변수로 갖고 있던 부분을 값만 가지도록 변경 --- .../airbnb/authorization/GitHubOAuth.java | 40 ++++++++++++++----- .../com/enolj/airbnb/web/UserController.java | 4 +- .../enolj/airbnb/web/utils/GitHubType.java | 26 ++++++++---- 3 files changed, 51 insertions(+), 19 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java index f317ca223..bb3c6c039 100644 --- a/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java +++ b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java @@ -24,26 +24,32 @@ @PropertySource("classpath:/oauth.properties") @Component -public class GitHubOAuth implements OAuth{ +public class GitHubOAuth implements OAuth { - public static final String CLIENT_ID = "client_id"; - public static final String CLIENT_SECRET = "client_secret"; - public static final String CODE = "code"; - public static final String TOKEN = "token"; + private static final String CLIENT_ID = "client_id"; + private static final String CLIENT_SECRET = "client_secret"; + private static final String CODE = "code"; + private static final String TOKEN = "token"; private final RestTemplate restTemplate; - private final Environment environment; + private final String frontClientId; + private final String frontClientSecret; + private final String iOSClientId; + private final String iOSClientSecret; public GitHubOAuth(Environment environment, RestTemplateBuilder restTemplateBuilder) { this.restTemplate = restTemplateBuilder.errorHandler(new RestTemplateResponseErrorHandler()).build(); - this.environment = environment; + this.frontClientId = environment.getProperty(GitHubType.FRONT.getClientId()); + this.frontClientSecret = environment.getProperty(GitHubType.FRONT.getClientSecret()); + this.iOSClientId = environment.getProperty(GitHubType.IOS.getClientId()); + this.iOSClientSecret = environment.getProperty(GitHubType.IOS.getClientSecret()); } @Override public TokenDTO tokenReceiveAPI(String code, int typeCode) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.ACCESS_TOKEN.getUrl()) - .queryParam(CLIENT_ID, id) - .queryParam(CLIENT_SECRET, secret) + .queryParam(CLIENT_ID, getClientIdByTypeCode(typeCode)) + .queryParam(CLIENT_SECRET, getClientSecretByTypeCode(typeCode)) .queryParam(CODE, code); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE); @@ -52,6 +58,22 @@ public TokenDTO tokenReceiveAPI(String code, int typeCode) { return restTemplate.exchange(builder.toUriString(), HttpMethod.POST, httpEntity, TokenDTO.class).getBody(); } + private String getClientIdByTypeCode(int typeCode) { + GitHubType gitHubType = GitHubType.getGitHubTypeByCode(typeCode); + if (gitHubType == GitHubType.FRONT) { + return frontClientId; + } + return iOSClientId; + } + + private String getClientSecretByTypeCode(int typeCode) { + GitHubType gitHubType = GitHubType.getGitHubTypeByCode(typeCode); + if (gitHubType == GitHubType.FRONT) { + return frontClientSecret; + } + return iOSClientSecret; + } + @Override public UserInfoDTO userInfoReceiveAPI(String token) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.USER_INFO.getUrl()); diff --git a/BE/src/main/java/com/enolj/airbnb/web/UserController.java b/BE/src/main/java/com/enolj/airbnb/web/UserController.java index 298159dee..1a2fe1ca9 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/UserController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/UserController.java @@ -6,8 +6,6 @@ import org.slf4j.LoggerFactory; import org.springframework.web.bind.annotation.*; -import static com.enolj.airbnb.web.utils.GitHubType.getGitHubTypeByCode; - @RestController public class UserController { @@ -21,7 +19,7 @@ public UserController(UserService userService) { @PostMapping("/login") public UserResponseDTO login(@RequestParam String code, @RequestParam int typeCode) { logger.info("로그인 요청"); - return userService.login(code, getGitHubTypeByCode(typeCode)); + return userService.login(code, typeCode); } @GetMapping("/logout") diff --git a/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java b/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java index cc82d66a7..a48603765 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java +++ b/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java @@ -5,17 +5,23 @@ public enum GitHubType { - FRONT("github.front.client.id", "github.front.secret"), - IOS("github.ios.client.id", "github.ios.secret"); + FRONT(1, "github.front.client.id", "github.front.secret"), + IOS(2, "github.ios.client.id", "github.ios.secret"); + private final int code; private final String clientId; private final String clientSecret; - GitHubType(String clientId, String clientSecret) { + GitHubType(int code, String clientId, String clientSecret) { + this.code = code; this.clientId = clientId; this.clientSecret = clientSecret; } + public int getCode() { + return code; + } + public String getClientId() { return clientId; } @@ -24,11 +30,17 @@ public String getClientSecret() { return clientSecret; } + public boolean matchCode(int code) { + return this.code == code; + } + public static GitHubType getGitHubTypeByCode(int code) { - switch (code) { - case 1: return GitHubType.FRONT; - case 2: return GitHubType.IOS; - default: throw new GitHubTypeException(ErrorMessage.INVALID_GITHUBTYPE); + if (GitHubType.FRONT.matchCode(code)) { + return GitHubType.FRONT; + } + if (GitHubType.IOS.matchCode(code)) { + return GitHubType.IOS; } + throw new GitHubTypeException(ErrorMessage.INVALID_GITHUBTYPE); } } From 09974426ba033bd6424477a4a5603ec73998d0d8 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 3 Jun 2021 14:31:49 +0900 Subject: [PATCH 51/60] =?UTF-8?q?Chore:=20data.sql=EC=9D=98=20=EC=9D=B4?= =?UTF-8?q?=EB=AF=B8=EC=A7=80=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/main/resources/data.sql | 738 ++++++++++++++++----------------- 1 file changed, 369 insertions(+), 369 deletions(-) diff --git a/BE/src/main/resources/data.sql b/BE/src/main/resources/data.sql index 011a75526..6bd365629 100644 --- a/BE/src/main/resources/data.sql +++ b/BE/src/main/resources/data.sql @@ -257,374 +257,374 @@ VALUES('Specious and Comfortable cozy house #4', '강남역 5번 출구에서 -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 1); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 2); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 3); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 4); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 5); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 6); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 7); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 8); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 9); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 10); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 11); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 12); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 13); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 14); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 15); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 16); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 17); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 18); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 19); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 20); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 21); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 22); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 23); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 24); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 25); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 26); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 27); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 28); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 29); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 30); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 31); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 32); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 33); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 34); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 35); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 36); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 37); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 38); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 39); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 40); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 41); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 42); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 43); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 44); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 45); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 46); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 47); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 48); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 49); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 50); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 51); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 52); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 53); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 54); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 55); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 56); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 57); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 58); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 59); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 60); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 61); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 62); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 63); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 64); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 65); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 66); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 67); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 68); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 69); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 70); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 71); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 72); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 73); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 74); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 75); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 76); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 77); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 78); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 79); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 80); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 81); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 82); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 83); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 84); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 85); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 86); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 87); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 88); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 89); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 90); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 91); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 92); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 93); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 94); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 95); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 96); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 97); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 98); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 99); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 100); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 101); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 102); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 103); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 104); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 105); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 106); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 107); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 108); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 109); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 110); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 111); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 112); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 113); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 114); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 115); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 116); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 117); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 118); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 119); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 120); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 121); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 122); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 123); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 1); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 2); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 3); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 4); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 5); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 6); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 7); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 8); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 9); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 10); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 11); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 12); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 13); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 14); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 15); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 16); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 17); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 18); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 19); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 20); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 21); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 22); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 23); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 24); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 25); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 26); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 27); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 28); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 29); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 30); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 31); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 32); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 33); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 34); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 35); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 36); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 37); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 38); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 39); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 40); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 41); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 42); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 43); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 44); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 45); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 46); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 47); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 48); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 49); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 50); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 51); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 52); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 53); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 54); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 55); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 56); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 57); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 58); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 59); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 60); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 61); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 62); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 63); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 64); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 65); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 66); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 67); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 68); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 69); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 70); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 71); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 72); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 73); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 74); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 75); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 76); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 77); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 78); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 79); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 80); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 81); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 82); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 83); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 84); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 85); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 86); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 87); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 88); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 89); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 90); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 91); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 92); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 93); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 94); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 95); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 96); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 97); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 98); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 99); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 100); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 101); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 102); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 103); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 104); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 105); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 106); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 107); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 108); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 109); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 110); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 111); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 112); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 113); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 114); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 115); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 116); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 117); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 118); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 119); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 120); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 121); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 122); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 123); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 1); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 2); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 3); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 4); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 5); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 6); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 7); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 8); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 9); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 10); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 11); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 12); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 13); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 14); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 15); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 16); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 17); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 18); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 19); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 20); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 21); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 22); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 23); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 24); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 25); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 26); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 27); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 28); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 29); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 30); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 31); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 32); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 33); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 34); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 35); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 36); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 37); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 38); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 39); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 40); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 41); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 42); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 43); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 44); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 45); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 46); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 47); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 48); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 49); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 50); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 51); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 52); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 53); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 54); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 55); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 56); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 57); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 58); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 59); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 60); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 61); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 62); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 63); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 64); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 65); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 66); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 67); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 68); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 69); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 70); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 71); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 72); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 73); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 74); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 75); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 76); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 77); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 78); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 79); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 80); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 81); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 82); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 83); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 84); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 85); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 86); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 87); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 88); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 89); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 90); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 91); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 92); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 93); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 94); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 95); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 96); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 97); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 98); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 99); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 100); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 101); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 102); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 103); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 104); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 105); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 106); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 107); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 108); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 109); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 110); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 111); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 112); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 113); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 114); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 115); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 116); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 117); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 118); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 119); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 120); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 121); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 122); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 123); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 1); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 2); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 3); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 4); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 5); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 6); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 7); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 8); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 9); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 10); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 11); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 12); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 13); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 14); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 15); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 16); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 17); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 18); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 19); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 20); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 21); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 22); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 23); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 24); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 25); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 26); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 27); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 28); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 29); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 30); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 31); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 32); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 33); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 34); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 35); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 36); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 37); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 38); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 39); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 40); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 41); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 42); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 43); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 44); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 45); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 46); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 47); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 48); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 49); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 50); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 51); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 52); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 53); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 54); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 55); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 56); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 57); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 58); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 59); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 60); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 61); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 62); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 63); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 64); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 65); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 66); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 67); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 68); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 69); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 70); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 71); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 72); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 73); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 74); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 75); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 76); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 77); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 78); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 79); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 80); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 81); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 82); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 83); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 84); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 85); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 86); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 87); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 88); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 89); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 90); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 91); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 92); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 93); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 94); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 95); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 96); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 97); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 98); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 99); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 100); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 101); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 102); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 103); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 104); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 105); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 106); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 107); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 108); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 109); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 110); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 111); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 112); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 113); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 114); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 115); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 116); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 117); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 118); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 119); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 120); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 121); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 122); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 123); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 1); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 2); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 3); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 4); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 5); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 6); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 7); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 8); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 9); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 10); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 11); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 12); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 13); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 14); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 15); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 16); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 17); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 18); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 19); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 20); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 21); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 22); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 23); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 24); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 25); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 26); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 27); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 28); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 29); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 30); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 31); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 32); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 33); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 34); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 35); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 36); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 37); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 38); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 39); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 40); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 41); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 42); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 43); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 44); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 45); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 46); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 47); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 48); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 49); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 50); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 51); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 52); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 53); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 54); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 55); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 56); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 57); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 58); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 59); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 60); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 61); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 62); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 63); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 64); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 65); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 66); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 67); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 68); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 69); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 70); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 71); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 72); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 73); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 74); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 75); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 76); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 77); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 78); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 79); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 80); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 81); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 82); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 83); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 84); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 85); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 86); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 87); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 88); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 89); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 90); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 91); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 92); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 93); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 94); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 95); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 96); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 97); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 98); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 99); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 100); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 101); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 102); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 103); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 104); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 105); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 106); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 107); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 108); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 109); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 110); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 111); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 112); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 113); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 114); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 115); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 116); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 117); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 118); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 119); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 120); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 121); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 122); -INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119223747-13380a80-bb36-11eb-9a80-a373e662850a.jpeg', 123); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 1); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 2); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 3); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 4); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 5); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 6); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 7); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 8); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 9); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 10); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 11); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 12); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 13); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 14); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 15); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 16); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 17); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 18); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 19); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 20); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 21); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 22); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 23); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 24); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 25); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 26); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 27); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 28); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 29); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 30); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 31); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 32); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 33); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 34); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 35); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 36); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 37); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 38); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 39); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 40); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 41); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 42); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 43); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 44); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 45); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 46); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 47); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 48); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 49); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 50); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 51); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 52); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 53); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 54); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 55); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 56); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 57); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 58); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 59); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 60); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 61); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 62); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 63); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 64); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 65); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 66); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 67); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 68); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 69); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 70); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 71); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 72); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 73); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 74); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 75); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 76); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 77); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 78); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 79); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 80); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 81); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 82); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 83); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 84); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 85); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 86); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 87); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 88); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 89); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 90); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 91); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 92); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 93); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 94); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 95); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 96); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 97); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 98); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 99); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 100); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 101); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 102); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 103); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 104); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 105); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 106); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 107); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 108); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 109); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 110); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 111); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 112); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 113); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 114); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 115); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 116); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 117); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 118); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 119); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 120); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 121); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 122); +INSERT INTO image(url, house_id) VALUES('https://user-images.githubusercontent.com/63284310/119981309-72939000-bff8-11eb-8a54-5d0e9c4fcbba.jpeg', 123); From 5a4754d5ddbbda603031443392a66b19ed755bf4 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 3 Jun 2021 15:28:49 +0900 Subject: [PATCH 52/60] =?UTF-8?q?Refactor:=20[#90]=20JwtUtil=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit verifyToken 메소드에서 JWTVerificationException를 사용하여 예외 포장, getTokenFromAuthorization 메소드에서 상수를 사용하지 않도록 수정 --- .../java/com/enolj/airbnb/web/utils/JwtUtil.java | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java b/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java index 7393e0e3d..779747131 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java +++ b/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java @@ -3,8 +3,7 @@ import com.auth0.jwt.JWT; import com.auth0.jwt.JWTVerifier; import com.auth0.jwt.algorithms.Algorithm; -import com.auth0.jwt.exceptions.JWTDecodeException; -import com.auth0.jwt.exceptions.TokenExpiredException; +import com.auth0.jwt.exceptions.JWTVerificationException; import com.auth0.jwt.interfaces.DecodedJWT; import com.enolj.airbnb.exception.ErrorMessage; import com.enolj.airbnb.exception.TokenException; @@ -36,16 +35,15 @@ private static DecodedJWT verifyToken(String token) { .acceptExpiresAt(600) .build(); return verifier.verify(token); - } catch (JWTDecodeException | TokenExpiredException e) { + } catch (JWTVerificationException e) { throw new TokenException(ErrorMessage.INVALID_TOKEN); } } public static String getTokenFromAuthorization(String authorization) { - String[] authArray = authorization.split(" "); - if (authArray.length < 2 || !authArray[0].equals("Beare")) { - throw new TokenException(ErrorMessage.INVALID_TOKEN); + if (authorization.startsWith("Bearer ")) { + return authorization.substring("Bearer ".length()); } - return authArray[1]; + throw new TokenException(ErrorMessage.INVALID_TOKEN); } } From 148b0be9b723bd7c380e66b062cf0aaa74f828e2 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 3 Jun 2021 17:05:00 +0900 Subject: [PATCH 53/60] =?UTF-8?q?Refactor:=20[#90]=20HouseController=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HouseController 클래스의 Reservation 부분과 Wish 부분을 ReservationController 클래스와 WishController 클래스로 분리 --- .../com/enolj/airbnb/web/HouseController.java | 42 --------------- .../airbnb/web/ReservationController.java | 53 +++++++++++++++++++ .../com/enolj/airbnb/web/WishController.java | 32 +++++++++++ 3 files changed, 85 insertions(+), 42 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/web/ReservationController.java create mode 100644 BE/src/main/java/com/enolj/airbnb/web/WishController.java diff --git a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java index aabc2880c..7b20f740e 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/HouseController.java +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -35,46 +35,4 @@ public HouseDetailInfoResponseDTO getHouseDetail(@PathVariable Long houseId) { logger.info("{}번 숙소의 디테일 페이지 요청", houseId); return houseService.getHouseDetailInfo(houseId); } - - @GetMapping("/houses/{houseId}") - public ReservationInfoResponseDTO getReservationPage(@PathVariable Long houseId) { - logger.info("{}번 숙소 예약 페이지 요청", houseId); - return houseService.getReservationInfo(houseId); - } - - @PostMapping("houses/{houseId}") - public void makeReservation(@RequestHeader String authorization, @PathVariable Long houseId, @RequestBody ReservationRequestDTO requestDTO) { - logger.info("{}번 숙소 예약 요청", houseId); - houseService.makeReservation(authorization, houseId, requestDTO); - } - - @GetMapping("/wishes") - public List getWishes(@RequestHeader String authorization) { - logger.info("숙소 위시 리스트 요청"); - return houseService.getWishList(authorization); - } - - @PostMapping("/wishes/{houseId}") - public void changeWish(@RequestHeader String authorization, @PathVariable Long houseId) { - logger.info("{}번 숙소의 위시 요청", houseId); - houseService.changeWish(authorization, houseId); - } - - @GetMapping("/reservation") - public List getReservationList(@RequestHeader String authorization) { - logger.info("숙소 예약 리스트 요청"); - return houseService.getReservationList(authorization); - } - - @GetMapping("/reservation/{houseId}") - public ReservationDetailDTO getReservationDetail(@RequestHeader String authorization, @PathVariable Long houseId) { - logger.info("{}번 숙소의 디테일 예약정보 요청", houseId); - return houseService.getReservationDetail(authorization, houseId); - } - - @DeleteMapping("/reservation/{houseId}") - public void cancelReservation(@RequestHeader String authorization, @PathVariable Long houseId) { - logger.info("{}번 숙소의 예약 취소 요청", houseId); - houseService.cancelReservation(authorization, houseId); - } } diff --git a/BE/src/main/java/com/enolj/airbnb/web/ReservationController.java b/BE/src/main/java/com/enolj/airbnb/web/ReservationController.java new file mode 100644 index 000000000..ec8b9229e --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/ReservationController.java @@ -0,0 +1,53 @@ +package com.enolj.airbnb.web; + +import com.enolj.airbnb.service.ReservationService; +import com.enolj.airbnb.web.dto.ReservationDetailDTO; +import com.enolj.airbnb.web.dto.ReservationInfoResponseDTO; +import com.enolj.airbnb.web.dto.ReservationRequestDTO; +import com.enolj.airbnb.web.dto.ReservationResponseDTO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +public class ReservationController { + + private final ReservationService reservationService; + private final Logger logger = LoggerFactory.getLogger(HouseController.class); + + public ReservationController(ReservationService reservationService) { + this.reservationService = reservationService; + } + + @GetMapping("/reservation") + public List getReservationList(@RequestHeader String authorization) { + logger.info("숙소 예약 리스트 요청"); + return reservationService.getReservationList(authorization); + } + + @GetMapping("/reservation/{houseId}") + public ReservationInfoResponseDTO getReservationPage(@PathVariable Long houseId) { + logger.info("{}번 숙소 예약 페이지 요청", houseId); + return reservationService.getReservationInfo(houseId); + } + + @PostMapping("/reservation/{houseId}") + public void makeReservation(@RequestHeader String authorization, @PathVariable Long houseId, @RequestBody ReservationRequestDTO requestDTO) { + logger.info("{}번 숙소 예약 요청", houseId); + reservationService.makeReservation(authorization, houseId, requestDTO); + } + + @DeleteMapping("/reservation/{houseId}") + public void cancelReservation(@RequestHeader String authorization, @PathVariable Long houseId) { + logger.info("{}번 숙소의 예약 취소 요청", houseId); + reservationService.cancelReservation(authorization, houseId); + } + + @GetMapping("/reservation/detail/{houseId}") + public ReservationDetailDTO getReservationDetail(@RequestHeader String authorization, @PathVariable Long houseId) { + logger.info("{}번 숙소의 디테일 예약정보 요청", houseId); + return reservationService.getReservationDetail(authorization, houseId); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/WishController.java b/BE/src/main/java/com/enolj/airbnb/web/WishController.java new file mode 100644 index 000000000..a17ff1a0a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/WishController.java @@ -0,0 +1,32 @@ +package com.enolj.airbnb.web; + +import com.enolj.airbnb.service.WishService; +import com.enolj.airbnb.web.dto.WishResponseDTO; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +public class WishController { + + private final WishService wishService; + private final Logger logger = LoggerFactory.getLogger(HouseController.class); + + public WishController(WishService wishService) { + this.wishService = wishService; + } + + @GetMapping("/wishes") + public List getWishes(@RequestHeader String authorization) { + logger.info("숙소 위시 리스트 요청"); + return wishService.getWishList(authorization); + } + + @PostMapping("/wishes/{houseId}") + public void changeWish(@RequestHeader String authorization, @PathVariable Long houseId) { + logger.info("{}번 숙소의 위시 요청", houseId); + wishService.changeWish(authorization, houseId); + } +} From a94fa7d21accb10e854ae93b277cf211166efb66 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Thu, 3 Jun 2021 17:05:39 +0900 Subject: [PATCH 54/60] =?UTF-8?q?Refactor:=20[#90]=20HouseService=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit HouseService 클래스의 Reservation 부분과 Wish 부분을 ReservationService 클래스와 WishService 클래스로 분리 --- .../enolj/airbnb/service/HouseService.java | 87 ++----------------- .../airbnb/service/ReservationService.java | 87 +++++++++++++++++++ .../com/enolj/airbnb/service/WishService.java | 53 +++++++++++ 3 files changed, 147 insertions(+), 80 deletions(-) create mode 100644 BE/src/main/java/com/enolj/airbnb/service/ReservationService.java create mode 100644 BE/src/main/java/com/enolj/airbnb/service/WishService.java diff --git a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java index 00b7d2628..a983094ee 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/HouseService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -4,44 +4,25 @@ import com.enolj.airbnb.domain.house.HouseDAO; import com.enolj.airbnb.domain.image.Image; import com.enolj.airbnb.domain.image.ImageDAO; -import com.enolj.airbnb.domain.join.Join; -import com.enolj.airbnb.domain.join.JoinDAO; -import com.enolj.airbnb.domain.user.User; -import com.enolj.airbnb.domain.user.UserDAO; -import com.enolj.airbnb.domain.wish.Wish; -import com.enolj.airbnb.domain.wish.WishDAO; import com.enolj.airbnb.exception.EntityNotFoundException; -import com.enolj.airbnb.web.dto.ReservationInfoResponseDTO; import com.enolj.airbnb.web.dto.*; import org.springframework.stereotype.Service; import java.util.List; -import java.util.Optional; import java.util.stream.Collectors; -import static com.enolj.airbnb.service.UserService.getUserFromAuthorization; import static com.enolj.airbnb.web.dto.HouseDetailInfoResponseDTO.createHouseDetailInfoResponseDTO; -import static com.enolj.airbnb.web.dto.ReservationDetailDTO.createReservationDetailDTO; -import static com.enolj.airbnb.web.dto.ReservationInfoResponseDTO.createReservationInfoResponseDTO; -import static com.enolj.airbnb.web.dto.ReservationResponseDTO.createReservationResponseDTO; import static com.enolj.airbnb.web.dto.SearchResponseDTO.createSearchResponseDTO; -import static com.enolj.airbnb.web.dto.WishResponseDTO.createWishResponseDTO; @Service public class HouseService { - private final UserDAO userDAO; private final HouseDAO houseDAO; private final ImageDAO imageDAO; - private final JoinDAO joinDAO; - private final WishDAO wishDAO; - public HouseService(UserDAO userDAO, HouseDAO houseDAO, ImageDAO imageDAO, JoinDAO joinDAO, WishDAO wishDAO) { - this.userDAO = userDAO; + public HouseService(HouseDAO houseDAO, ImageDAO imageDAO) { this.houseDAO = houseDAO; this.imageDAO = imageDAO; - this.joinDAO = joinDAO; - this.wishDAO = wishDAO; } public List searchHousesByCondition(SearchRequestDTO requestDTO) { @@ -52,12 +33,6 @@ public List searchHousesByCondition(SearchRequestDTO requestD .collect(Collectors.toList()); } - private Image findOneImageByHouseId(Long houseId) { - return imageDAO.findAll(houseId).stream() - .findFirst() - .orElseThrow(EntityNotFoundException::new); - } - public List searchChargesByCondition(SearchChargesRequestDTO requestDTO) { return houseDAO.findAll().stream() .map(House::getCharge) @@ -68,67 +43,19 @@ public HouseDetailInfoResponseDTO getHouseDetailInfo(Long houseId) { return createHouseDetailInfoResponseDTO(findHouseById(houseId), findAllImageByHouseId(houseId)); } + private Image findOneImageByHouseId(Long houseId) { + return imageDAO.findAll(houseId).stream() + .findFirst() + .orElseThrow(EntityNotFoundException::new); + } + private List findAllImageByHouseId(Long houseId) { return imageDAO.findAll(houseId).stream() .map(Image::getUrl) .collect(Collectors.toList()); } - public ReservationInfoResponseDTO getReservationInfo(Long houseId) { - return createReservationInfoResponseDTO(findHouseById(houseId)); - } - private House findHouseById(Long houseId) { return houseDAO.findById(houseId).orElseThrow(EntityNotFoundException::new); } - - public void makeReservation(String authorization, Long houseId, ReservationRequestDTO requestDTO) { - Join join = requestDTO.toEntity(); - join.reservation(getUserFromAuthorization(userDAO, authorization), findHouseById(houseId)); - joinDAO.save(join); - } - - public List getWishList(String authorization) { - return wishDAO.findAllByUserId(getUserFromAuthorization(userDAO, authorization).getId()).stream() - .map(wish -> createWishResponseDTO(findHouseById(wish.getHouseId()))) - .collect(Collectors.toList()); - } - - public void changeWish(String authorization, Long houseId) { - User user = getUserFromAuthorization(userDAO, authorization); - House house = findHouseById(houseId); - Optional wish = wishDAO.findByUserIdAndHouseId(user.getId(), house.getId()); - if (wish.isPresent()) { - wishDAO.delete(wish.get()); - return; - } - wishDAO.save(Wish.createWish(user, house)); - } - - public List getReservationList(String authorization) { - User user = getUserFromAuthorization(userDAO, authorization); - return joinDAO.findAllByUserId(user.getId()).stream() - .map(join -> createReservationResponseDTO(findHouseById(join.getUserId()), join, findOneImageByHouseId(join.getHouseId()))) - .collect(Collectors.toList()); - } - - public ReservationDetailDTO getReservationDetail(String authorization, Long houseId) { - User user = getUserFromAuthorization(userDAO, authorization); - House house = findHouseById(houseId); - Join join = findJoinByUserIdAndHouseId(user.getId(), house.getId()); - List images = imageDAO.findAll(house.getId()).stream() - .map(Image::getUrl) - .collect(Collectors.toList()); - return createReservationDetailDTO(house, images, join); - } - - public void cancelReservation(String authorization, Long houseId) { - User user = getUserFromAuthorization(userDAO, authorization); - House house = findHouseById(houseId); - joinDAO.delete(findJoinByUserIdAndHouseId(user.getId(), house.getId())); - } - - private Join findJoinByUserIdAndHouseId(Long userId, Long houseId) { - return joinDAO.findByUserIdAndHouseId(userId, houseId).orElseThrow(EntityNotFoundException::new); - } } diff --git a/BE/src/main/java/com/enolj/airbnb/service/ReservationService.java b/BE/src/main/java/com/enolj/airbnb/service/ReservationService.java new file mode 100644 index 000000000..9bd7a134f --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/service/ReservationService.java @@ -0,0 +1,87 @@ +package com.enolj.airbnb.service; + +import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.house.HouseDAO; +import com.enolj.airbnb.domain.image.Image; +import com.enolj.airbnb.domain.image.ImageDAO; +import com.enolj.airbnb.domain.join.Join; +import com.enolj.airbnb.domain.join.JoinDAO; +import com.enolj.airbnb.domain.user.User; +import com.enolj.airbnb.domain.user.UserDAO; +import com.enolj.airbnb.exception.EntityNotFoundException; +import com.enolj.airbnb.web.dto.ReservationDetailDTO; +import com.enolj.airbnb.web.dto.ReservationInfoResponseDTO; +import com.enolj.airbnb.web.dto.ReservationRequestDTO; +import com.enolj.airbnb.web.dto.ReservationResponseDTO; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +import static com.enolj.airbnb.service.UserService.getUserFromAuthorization; +import static com.enolj.airbnb.web.dto.ReservationDetailDTO.createReservationDetailDTO; +import static com.enolj.airbnb.web.dto.ReservationInfoResponseDTO.createReservationInfoResponseDTO; +import static com.enolj.airbnb.web.dto.ReservationResponseDTO.createReservationResponseDTO; + +@Service +public class ReservationService { + + private final UserDAO userDAO; + private final HouseDAO houseDAO; + private final ImageDAO imageDAO; + private final JoinDAO joinDAO; + + public ReservationService(UserDAO userDAO, HouseDAO houseDAO, ImageDAO imageDAO, JoinDAO joinDAO) { + this.userDAO = userDAO; + this.houseDAO = houseDAO; + this.imageDAO = imageDAO; + this.joinDAO = joinDAO; + } + + public ReservationInfoResponseDTO getReservationInfo(Long houseId) { + return createReservationInfoResponseDTO(findHouseById(houseId)); + } + + public void makeReservation(String authorization, Long houseId, ReservationRequestDTO requestDTO) { + Join join = requestDTO.toEntity(); + join.reservation(getUserFromAuthorization(userDAO, authorization), findHouseById(houseId)); + joinDAO.save(join); + } + + public List getReservationList(String authorization) { + User user = getUserFromAuthorization(userDAO, authorization); + return joinDAO.findAllByUserId(user.getId()).stream() + .map(join -> createReservationResponseDTO(findHouseById(join.getUserId()), join, findOneImageByHouseId(join.getHouseId()))) + .collect(Collectors.toList()); + } + + public ReservationDetailDTO getReservationDetail(String authorization, Long houseId) { + User user = getUserFromAuthorization(userDAO, authorization); + House house = findHouseById(houseId); + Join join = findJoinByUserIdAndHouseId(user.getId(), house.getId()); + List images = imageDAO.findAll(house.getId()).stream() + .map(Image::getUrl) + .collect(Collectors.toList()); + return createReservationDetailDTO(house, images, join); + } + + public void cancelReservation(String authorization, Long houseId) { + User user = getUserFromAuthorization(userDAO, authorization); + House house = findHouseById(houseId); + joinDAO.delete(findJoinByUserIdAndHouseId(user.getId(), house.getId())); + } + + private House findHouseById(Long houseId) { + return houseDAO.findById(houseId).orElseThrow(EntityNotFoundException::new); + } + + private Image findOneImageByHouseId(Long houseId) { + return imageDAO.findAll(houseId).stream() + .findFirst() + .orElseThrow(EntityNotFoundException::new); + } + + private Join findJoinByUserIdAndHouseId(Long userId, Long houseId) { + return joinDAO.findByUserIdAndHouseId(userId, houseId).orElseThrow(EntityNotFoundException::new); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/service/WishService.java b/BE/src/main/java/com/enolj/airbnb/service/WishService.java new file mode 100644 index 000000000..dcf8c72ea --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/service/WishService.java @@ -0,0 +1,53 @@ +package com.enolj.airbnb.service; + +import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.house.HouseDAO; +import com.enolj.airbnb.domain.user.User; +import com.enolj.airbnb.domain.user.UserDAO; +import com.enolj.airbnb.domain.wish.Wish; +import com.enolj.airbnb.domain.wish.WishDAO; +import com.enolj.airbnb.exception.EntityNotFoundException; +import com.enolj.airbnb.web.dto.WishResponseDTO; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +import static com.enolj.airbnb.service.UserService.getUserFromAuthorization; +import static com.enolj.airbnb.web.dto.WishResponseDTO.createWishResponseDTO; + +@Service +public class WishService { + + private final UserDAO userDAO; + private final HouseDAO houseDAO; + private final WishDAO wishDAO; + + public WishService(UserDAO userDAO, HouseDAO houseDAO, WishDAO wishDAO) { + this.userDAO = userDAO; + this.houseDAO = houseDAO; + this.wishDAO = wishDAO; + } + + public List getWishList(String authorization) { + return wishDAO.findAllByUserId(getUserFromAuthorization(userDAO, authorization).getId()).stream() + .map(wish -> createWishResponseDTO(findHouseById(wish.getHouseId()))) + .collect(Collectors.toList()); + } + + public void changeWish(String authorization, Long houseId) { + User user = getUserFromAuthorization(userDAO, authorization); + House house = findHouseById(houseId); + Optional wish = wishDAO.findByUserIdAndHouseId(user.getId(), house.getId()); + if (wish.isPresent()) { + wishDAO.delete(wish.get()); + return; + } + wishDAO.save(Wish.createWish(user, house)); + } + + private House findHouseById(Long houseId) { + return houseDAO.findById(houseId).orElseThrow(EntityNotFoundException::new); + } +} From cbf796f06146798a3fdfd0246747036efa09c324 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 4 Jun 2021 15:14:47 +0900 Subject: [PATCH 55/60] =?UTF-8?q?Refactor:=20[#90]=20OAuth=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=EC=9D=98=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/enolj/airbnb/authorization/GitHubOAuth.java | 6 +++--- BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java | 6 +++--- BE/src/main/java/com/enolj/airbnb/service/UserService.java | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java index bb3c6c039..584742735 100644 --- a/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java +++ b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java @@ -46,7 +46,7 @@ public GitHubOAuth(Environment environment, RestTemplateBuilder restTemplateBuil } @Override - public TokenDTO tokenReceiveAPI(String code, int typeCode) { + public TokenDTO getToken(String code, int typeCode) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.ACCESS_TOKEN.getUrl()) .queryParam(CLIENT_ID, getClientIdByTypeCode(typeCode)) .queryParam(CLIENT_SECRET, getClientSecretByTypeCode(typeCode)) @@ -75,7 +75,7 @@ private String getClientSecretByTypeCode(int typeCode) { } @Override - public UserInfoDTO userInfoReceiveAPI(String token) { + public UserInfoDTO getUserInfo(String token) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.USER_INFO.getUrl()); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set(HttpHeaders.AUTHORIZATION, TOKEN + " " + token); @@ -84,7 +84,7 @@ public UserInfoDTO userInfoReceiveAPI(String token) { } @Override - public EmailDTO emailReceiveAPI(String token) { + public EmailDTO getEmail(String token) { UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.USER_EMAIL.getUrl()); HttpHeaders httpHeaders = new HttpHeaders(); httpHeaders.set(HttpHeaders.AUTHORIZATION, TOKEN + " " + token); diff --git a/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java b/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java index b9fb93f3d..abf8f7a02 100644 --- a/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java +++ b/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java @@ -6,9 +6,9 @@ public interface OAuth { - TokenDTO tokenReceiveAPI(String code, int typeCode); + TokenDTO getToken(String code, int typeCode); - UserInfoDTO userInfoReceiveAPI(String token); + UserInfoDTO getUserInfo(String token); - EmailDTO emailReceiveAPI(String token); + EmailDTO getEmail(String token); } diff --git a/BE/src/main/java/com/enolj/airbnb/service/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java index a17d66e2b..db63c7f00 100644 --- a/BE/src/main/java/com/enolj/airbnb/service/UserService.java +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -29,9 +29,9 @@ public UserService(UserDAO userDAO, GitHubOAuth gitHubOAuth) { } public UserResponseDTO login(String code, int typeCode) { - TokenDTO tokenDTO = gitHubOAuth.tokenReceiveAPI(code, typeCode); - UserInfoDTO userInfoDTO = gitHubOAuth.userInfoReceiveAPI(tokenDTO.getAccessToken()); - EmailDTO emailDTO = gitHubOAuth.emailReceiveAPI(tokenDTO.getAccessToken()); + TokenDTO tokenDTO = gitHubOAuth.getToken(code, typeCode); + UserInfoDTO userInfoDTO = gitHubOAuth.getUserInfo(tokenDTO.getAccessToken()); + EmailDTO emailDTO = gitHubOAuth.getEmail(tokenDTO.getAccessToken()); if (verifyUser(userInfoDTO.getUserId())) { User user = findByUserId(userInfoDTO.getUserId()); user.update(userInfoDTO, emailDTO, tokenDTO); From 1f76bf80d192d65d33e11a84da3bf63307b163f8 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 4 Jun 2021 15:20:49 +0900 Subject: [PATCH 56/60] =?UTF-8?q?Refactor:=20[#90]=20TokenDTO=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=9D=98=20token=5Ftype=20=EB=A9=A4=EB=B2=84?= =?UTF-8?q?=EB=B3=80=EC=88=98=EB=A5=BC=20tokenType=EC=9C=BC=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java index 9b96ccc2b..c2018291a 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java @@ -6,15 +6,16 @@ public class TokenDTO { @JsonProperty("access_token") private String accessToken; - private String token_type; + @JsonProperty("token_type") + private String tokenType; private String scope; public void setAccessToken(String accessToken) { this.accessToken = accessToken; } - public void setToken_type(String token_type) { - this.token_type = token_type; + public void setTokenType(String tokenType) { + this.tokenType = tokenType; } public void setScope(String scope) { @@ -29,7 +30,7 @@ public String getAccessToken() { public String toString() { return "TokenDTO{" + "access_token='" + accessToken + '\'' + - ", token_type='" + token_type + '\'' + + ", token_type='" + tokenType + '\'' + ", scope='" + scope + '\'' + '}'; } From 3e51082edc0f116152f3b1a9aebe705214f2e9b1 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 4 Jun 2021 15:22:02 +0900 Subject: [PATCH 57/60] =?UTF-8?q?Refactor:=20[#90]=20House=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit makeLocation, makeHost, makeLocal, getHostImage 메소드 제거, 해당 정보들은 DTO 클래스에서 갖도록 수정 --- .../com/enolj/airbnb/domain/house/House.java | 16 ---------------- .../web/dto/HouseDetailInfoResponseDTO.java | 10 +++++----- .../airbnb/web/dto/ReservationDetailDTO.java | 6 +++--- .../airbnb/web/dto/ReservationResponseDTO.java | 6 +++--- .../enolj/airbnb/web/dto/SearchResponseDTO.java | 6 +++--- 5 files changed, 14 insertions(+), 30 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java index ef147ef6e..517c550b5 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/house/House.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java @@ -32,14 +32,6 @@ public boolean checkLocation(double latitude, double longitude) { && (longitude - 0.006 <= this.longitude && this.longitude <= longitude + 0.006); } - public String makeLocation() { - return "서초구, 서울, 한국"; - } - - public String makeLocal() { - return "서초구의 아파트 전체"; - } - public List makeOption() { List splitOption = Arrays.asList(option.split(",")); List options = new ArrayList<>(); @@ -48,14 +40,6 @@ public List makeOption() { return options; } - public String makeHost() { - return "레지던스 전체 호스트: " + host + "님"; - } - - public String getHostImage() { - return "https://user-images.githubusercontent.com/63284310/119629402-f149cb00-be48-11eb-8fa5-c4415b37076d.jpeg"; - } - public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java index 5dd5e877f..0e4ed7bb6 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java @@ -17,13 +17,13 @@ public class HouseDetailInfoResponseDTO { private final int charge; private final boolean wish; - public HouseDetailInfoResponseDTO(String name, List images, int review, String location, String host, String hostImage, List options, String description, int charge, boolean wish) { + public HouseDetailInfoResponseDTO(String name, List images, int review, String host, List options, String description, int charge, boolean wish) { this.name = name; this.images = images; this.review = review; - this.location = location; - this.host = host; - this.hostImage = hostImage; + this.location = "서초구, 서울, 한국"; + this.host = "레지던스 전체 호스트: " + host + "님"; + this.hostImage = "https://user-images.githubusercontent.com/63284310/119629402-f149cb00-be48-11eb-8fa5-c4415b37076d.jpeg"; this.options = options; this.description = description; this.charge = charge; @@ -31,7 +31,7 @@ public HouseDetailInfoResponseDTO(String name, List images, int review, } public static HouseDetailInfoResponseDTO createHouseDetailInfoResponseDTO(House house, List images) { - return new HouseDetailInfoResponseDTO(house.getName(), images, house.getReview(), house.makeLocation(), house.makeHost(), house.getHostImage(), house.makeOption(), house.getDescription(), house.getCharge(), false); + return new HouseDetailInfoResponseDTO(house.getName(), images, house.getReview(), house.getHost(), house.makeOption(), house.getDescription(), house.getCharge(), false); } public String getName() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java index 7c0bc8f72..5aeeaa6bb 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java @@ -17,10 +17,10 @@ public class ReservationDetailDTO { private final String checkOut; private final Description description; - public ReservationDetailDTO(Long id, List images, String location, String name, String checkIn, String checkOut, Description description) { + public ReservationDetailDTO(Long id, List images, String name, String checkIn, String checkOut, Description description) { this.id = id; this.images = images; - this.location = location; + this.location = "서초구, 서울, 한국"; this.name = name; this.checkIn = checkIn; this.checkOut = checkOut; @@ -28,7 +28,7 @@ public ReservationDetailDTO(Long id, List images, String location, Strin } public static ReservationDetailDTO createReservationDetailDTO(House house, List images, Join join) { - return new ReservationDetailDTO(house.getId(), images, house.makeLocation(), house.getName(), join.getCheckInTime(), join.getCheckOutTime(), createDescription(house, join)); + return new ReservationDetailDTO(house.getId(), images, house.getName(), join.getCheckInTime(), join.getCheckOutTime(), createDescription(house, join)); } public Long getId() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java index 5a6dd85dd..28f8cc056 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java @@ -12,16 +12,16 @@ public class ReservationResponseDTO { private final String location; private final String name; - public ReservationResponseDTO(Long id, String image, String date, String location, String name) { + public ReservationResponseDTO(Long id, String image, String date, String name) { this.id = id; this.image = image; this.date = date; - this.location = location; + this.location = "서초구의 아파트 전체"; this.name = name; } public static ReservationResponseDTO createReservationResponseDTO(House house, Join join, Image image) { - return new ReservationResponseDTO(house.getId(), image.getUrl(), join.makeDate(), house.makeLocation(), house.getName()); + return new ReservationResponseDTO(house.getId(), image.getUrl(), join.makeDate(), house.getName()); } public Long getId() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java index 98e65581f..2d548f67c 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java @@ -21,11 +21,11 @@ public class SearchResponseDTO { private final List options; private final boolean wish; - public SearchResponseDTO(Long id, String image, Location location, String local, String name, int charge, double grade, int review, String description, List options, boolean wish) { + public SearchResponseDTO(Long id, String image, Location location, String name, int charge, double grade, int review, String description, List options, boolean wish) { this.id = id; this.image = image; this.location = location; - this.local = local; + this.local = "서초구의 아파트 전체"; this.name = name; this.charge = charge; this.grade = grade; @@ -36,7 +36,7 @@ public SearchResponseDTO(Long id, String image, Location location, String local, } public static SearchResponseDTO createSearchResponseDTO(House house, Image image) { - return new SearchResponseDTO(house.getId(), image.getUrl(), createLocationByHouse(house), house.makeLocal(), house.getName(), house.getCharge(), house.getGrade(), house.getReview(), house.getDescription(), house.makeOption(), false); + return new SearchResponseDTO(house.getId(), image.getUrl(), createLocationByHouse(house), house.getName(), house.getCharge(), house.getGrade(), house.getReview(), house.getDescription(), house.makeOption(), false); } public Long getId() { From b001bca9e67bf30f8199c33acbfdabc7b5e78a5c Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 4 Jun 2021 15:35:58 +0900 Subject: [PATCH 58/60] =?UTF-8?q?Refactor:=20[#90]=20DAO=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=EC=84=9C=20=EB=A6=AC=ED=84=B4=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=EC=9D=B4=20Optional=EC=9D=B8=20=EB=A9=94?= =?UTF-8?q?=EC=86=8C=EB=93=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Optional로 만들기 위해 리스트로 받아 스트림으로 만든 후 찾아 반환하던 방식에서 직접 Optional.ofNullable 메소드를 사용하여 만들어 반환하도록 수정 --- BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java | 4 ++-- BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java | 4 ++-- BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java | 4 ++-- BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java index 8b1204a7f..bc4edcb62 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java @@ -19,8 +19,8 @@ public HouseDAO(DataSource dataSource) { public Optional findById(Long id) { String sql = "SELECT * FROM house WHERE id = ?"; - List houses = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(House.class), id); - return houses.stream().findAny(); + House house = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(House.class), id); + return Optional.ofNullable(house); } public List findAll() { diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java index d62a71e9c..032ab1e23 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java @@ -29,8 +29,8 @@ public List findAllByUserId(Long userId) { public Optional findByUserIdAndHouseId(Long userId, Long houseId) { String sql = "SELECT * FROM `join` WHERE user_id = ? AND house_id = ?"; - List joins = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Join.class), userId, houseId); - return joins.stream().findAny(); + Join join = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Join.class), userId, houseId); + return Optional.ofNullable(join); } public void delete(Join join) { diff --git a/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java index 5ea0b3a3e..96eabdd76 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java @@ -19,8 +19,8 @@ public UserDAO(DataSource dataSource) { public Optional findByUserId(String userId) { String sql = "SELECT * FROM user WHERE user_id = ?"; - List result = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(User.class), userId); - return result.stream().findAny(); + User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), userId); + return Optional.ofNullable(user); } public void save(User user) { diff --git a/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java b/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java index d820c1989..f6d77b543 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java @@ -29,8 +29,8 @@ public List findAllByUserId(Long userId) { public Optional findByUserIdAndHouseId(Long userId, Long houseId) { String sql = "SELECT * FROM wish WHERE user_id = ? AND house_id = ?"; - List wishes = jdbcTemplate.query(sql, new BeanPropertyRowMapper<>(Wish.class), userId, houseId); - return wishes.stream().findAny(); + Wish wish = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Wish.class), userId, houseId); + return Optional.ofNullable(wish); } public void delete(Wish wish) { From 136a8d4aa1bcd3efd04e20fd3a4cd2b208fee4e7 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 4 Jun 2021 15:49:20 +0900 Subject: [PATCH 59/60] =?UTF-8?q?Refactor:=20[#90]=20Join=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EC=97=90=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=A0=9C=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit makeDate, getCheckInTime, getCheckOutTime, makeOption 메소드 제거, 해당 정보는 각각의 DTO 클래스에서 만들어주도록 변경 --- .../java/com/enolj/airbnb/domain/join/Join.java | 16 ---------------- .../com/enolj/airbnb/web/dto/Description.java | 6 +++--- .../airbnb/web/dto/ReservationDetailDTO.java | 9 +++++---- .../airbnb/web/dto/ReservationResponseDTO.java | 8 +++++--- 4 files changed, 13 insertions(+), 26 deletions(-) diff --git a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java index dd4fa5c55..d3ab85488 100644 --- a/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/Join.java @@ -33,22 +33,6 @@ public void reservation(User user, House house) { this.houseId = house.getId(); } - public String makeDate() { - return checkIn + " = " + checkOut; - } - - public String getCheckInTime() { - return checkIn.getYear() + "년 " + checkIn.getMonthValue() + "월 " + checkIn.getDayOfMonth() + "일 오후 4:00"; - } - - public String getCheckOutTime() { - return checkOut.getYear() + "년 " + checkOut.getMonthValue() + "월 " + checkOut.getDayOfMonth() + "일 오후 12:00"; - } - - public String makeOption() { - return "집전체 • 게스트 " + guest + "명"; - } - public Long getId() { return id; } diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java b/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java index dc7940b49..1e36c3dd7 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java @@ -9,14 +9,14 @@ public class Description { private final String option; private final int charge; - public Description(String host, String option, int charge) { + public Description(String host, int guest, int charge) { this.host = host; - this.option = option; + this.option = "집전체 • 게스트 " + guest + "명"; this.charge = charge; } public static Description createDescription(House house, Join join) { - return new Description(house.getHost(), join.makeOption(), house.getCharge()); + return new Description(house.getHost(), join.getGuest(), house.getCharge()); } public String getHost() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java index 5aeeaa6bb..6ef7a317b 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java @@ -3,6 +3,7 @@ import com.enolj.airbnb.domain.house.House; import com.enolj.airbnb.domain.join.Join; +import java.time.LocalDate; import java.util.List; import static com.enolj.airbnb.web.dto.Description.createDescription; @@ -17,18 +18,18 @@ public class ReservationDetailDTO { private final String checkOut; private final Description description; - public ReservationDetailDTO(Long id, List images, String name, String checkIn, String checkOut, Description description) { + public ReservationDetailDTO(Long id, List images, String name, LocalDate checkIn, LocalDate checkOut, Description description) { this.id = id; this.images = images; this.location = "서초구, 서울, 한국"; this.name = name; - this.checkIn = checkIn; - this.checkOut = checkOut; + this.checkIn = checkIn.getYear() + "년 " + checkIn.getMonthValue() + "월 " + checkIn.getDayOfMonth() + "일 오후 4:00"; + this.checkOut = checkOut.getYear() + "년 " + checkOut.getMonthValue() + "월 " + checkOut.getDayOfMonth() + "일 오후 12:00"; this.description = description; } public static ReservationDetailDTO createReservationDetailDTO(House house, List images, Join join) { - return new ReservationDetailDTO(house.getId(), images, house.getName(), join.getCheckInTime(), join.getCheckOutTime(), createDescription(house, join)); + return new ReservationDetailDTO(house.getId(), images, house.getName(), join.getCheckIn(), join.getCheckOut(), createDescription(house, join)); } public Long getId() { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java index 28f8cc056..f1dc64a10 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java @@ -4,6 +4,8 @@ import com.enolj.airbnb.domain.image.Image; import com.enolj.airbnb.domain.join.Join; +import java.time.LocalDate; + public class ReservationResponseDTO { private final Long id; @@ -12,16 +14,16 @@ public class ReservationResponseDTO { private final String location; private final String name; - public ReservationResponseDTO(Long id, String image, String date, String name) { + public ReservationResponseDTO(Long id, String image, LocalDate checkIn, LocalDate checkOut, String name) { this.id = id; this.image = image; - this.date = date; + this.date = checkIn + " = " + checkOut; this.location = "서초구의 아파트 전체"; this.name = name; } public static ReservationResponseDTO createReservationResponseDTO(House house, Join join, Image image) { - return new ReservationResponseDTO(house.getId(), image.getUrl(), join.makeDate(), house.getName()); + return new ReservationResponseDTO(house.getId(), image.getUrl(), join.getCheckIn(), join.getCheckOut(), house.getName()); } public Long getId() { From acca41b2fafe3b852315159194029dcea19e1177 Mon Sep 17 00:00:00 2001 From: jeong-inho Date: Fri, 4 Jun 2021 16:10:26 +0900 Subject: [PATCH 60/60] =?UTF-8?q?Refactor:=20[#90]=20DTO=20=ED=8C=A8?= =?UTF-8?q?=ED=82=A4=EC=A7=80=20=EB=82=B4=20VO=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java | 3 ++- .../java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java | 2 ++ .../main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java | 3 ++- BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/Charge.java | 2 +- .../main/java/com/enolj/airbnb/web/{dto => vo}/CheckDate.java | 2 +- .../java/com/enolj/airbnb/web/{dto => vo}/Description.java | 2 +- BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/Fee.java | 2 +- .../main/java/com/enolj/airbnb/web/{dto => vo}/Location.java | 2 +- BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/People.java | 2 +- 9 files changed, 12 insertions(+), 8 deletions(-) rename BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/Charge.java (93%) rename BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/CheckDate.java (95%) rename BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/Description.java (95%) rename BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/Fee.java (93%) rename BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/Location.java (96%) rename BE/src/main/java/com/enolj/airbnb/web/{dto => vo}/People.java (94%) diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java index 6ef7a317b..76915c155 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java @@ -2,11 +2,12 @@ import com.enolj.airbnb.domain.house.House; import com.enolj.airbnb.domain.join.Join; +import com.enolj.airbnb.web.vo.Description; import java.time.LocalDate; import java.util.List; -import static com.enolj.airbnb.web.dto.Description.createDescription; +import static com.enolj.airbnb.web.vo.Description.createDescription; public class ReservationDetailDTO { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java index 403107eb8..c0f1684f9 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java @@ -2,6 +2,8 @@ import com.enolj.airbnb.domain.join.Join; import com.enolj.airbnb.exception.EntityNotFoundException; +import com.enolj.airbnb.web.vo.CheckDate; +import com.enolj.airbnb.web.vo.People; public class ReservationRequestDTO { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java index 2d548f67c..62a9de08a 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java @@ -2,10 +2,11 @@ import com.enolj.airbnb.domain.house.House; import com.enolj.airbnb.domain.image.Image; +import com.enolj.airbnb.web.vo.Location; import java.util.List; -import static com.enolj.airbnb.web.dto.Location.createLocationByHouse; +import static com.enolj.airbnb.web.vo.Location.createLocationByHouse; public class SearchResponseDTO { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Charge.java b/BE/src/main/java/com/enolj/airbnb/web/vo/Charge.java similarity index 93% rename from BE/src/main/java/com/enolj/airbnb/web/dto/Charge.java rename to BE/src/main/java/com/enolj/airbnb/web/vo/Charge.java index 4f3d9777e..e3e1fea48 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/Charge.java +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/Charge.java @@ -1,4 +1,4 @@ -package com.enolj.airbnb.web.dto; +package com.enolj.airbnb.web.vo; public class Charge { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java b/BE/src/main/java/com/enolj/airbnb/web/vo/CheckDate.java similarity index 95% rename from BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java rename to BE/src/main/java/com/enolj/airbnb/web/vo/CheckDate.java index 8359f7df4..d1d553e32 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/CheckDate.java +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/CheckDate.java @@ -1,4 +1,4 @@ -package com.enolj.airbnb.web.dto; +package com.enolj.airbnb.web.vo; import java.time.LocalDate; diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java b/BE/src/main/java/com/enolj/airbnb/web/vo/Description.java similarity index 95% rename from BE/src/main/java/com/enolj/airbnb/web/dto/Description.java rename to BE/src/main/java/com/enolj/airbnb/web/vo/Description.java index 1e36c3dd7..357f59660 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/Description.java +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/Description.java @@ -1,4 +1,4 @@ -package com.enolj.airbnb.web.dto; +package com.enolj.airbnb.web.vo; import com.enolj.airbnb.domain.house.House; import com.enolj.airbnb.domain.join.Join; diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Fee.java b/BE/src/main/java/com/enolj/airbnb/web/vo/Fee.java similarity index 93% rename from BE/src/main/java/com/enolj/airbnb/web/dto/Fee.java rename to BE/src/main/java/com/enolj/airbnb/web/vo/Fee.java index 447d77754..8bb47192d 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/Fee.java +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/Fee.java @@ -1,4 +1,4 @@ -package com.enolj.airbnb.web.dto; +package com.enolj.airbnb.web.vo; public class Fee { diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java b/BE/src/main/java/com/enolj/airbnb/web/vo/Location.java similarity index 96% rename from BE/src/main/java/com/enolj/airbnb/web/dto/Location.java rename to BE/src/main/java/com/enolj/airbnb/web/vo/Location.java index 695b1454c..46ee01bf4 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/Location.java +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/Location.java @@ -1,4 +1,4 @@ -package com.enolj.airbnb.web.dto; +package com.enolj.airbnb.web.vo; import com.enolj.airbnb.domain.house.House; diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/People.java b/BE/src/main/java/com/enolj/airbnb/web/vo/People.java similarity index 94% rename from BE/src/main/java/com/enolj/airbnb/web/dto/People.java rename to BE/src/main/java/com/enolj/airbnb/web/vo/People.java index 3c2645c3c..46c0de8d0 100644 --- a/BE/src/main/java/com/enolj/airbnb/web/dto/People.java +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/People.java @@ -1,4 +1,4 @@ -package com.enolj.airbnb.web.dto; +package com.enolj.airbnb.web.vo; public class People {