diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..898907b63 --- /dev/null +++ b/.gitignore @@ -0,0 +1,193 @@ + +# 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 +/BE/build.sh +/BE/src/main/resources/oauth.properties diff --git a/BE/build.gradle b/BE/build.gradle new file mode 100644 index 000000000..85c089139 --- /dev/null +++ b/BE/build.gradle @@ -0,0 +1,25 @@ +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' + implementation 'com.auth0:java-jwt:3.8.2' + 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 000000000..e708b1c02 Binary files /dev/null and b/BE/gradle/wrapper/gradle-wrapper.jar differ 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/java/com/enolj/airbnb/authorization/GitHubOAuth.java b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java new file mode 100644 index 000000000..584742735 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/authorization/GitHubOAuth.java @@ -0,0 +1,97 @@ +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 { + + 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 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.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 getToken(String code, int typeCode) { + UriComponentsBuilder builder = UriComponentsBuilder.fromHttpUrl(GitHubUrl.ACCESS_TOKEN.getUrl()) + .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); + 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(); + } + + 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 getUserInfo(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 getEmail(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..abf8f7a02 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/authorization/OAuth.java @@ -0,0 +1,14 @@ +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; + +public interface OAuth { + + TokenDTO getToken(String code, int typeCode); + + UserInfoDTO getUserInfo(String token); + + EmailDTO getEmail(String token); +} 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..cb91b914a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/config/WebConfig.java @@ -0,0 +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", "http://3.37.76.224"); + } +} 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..517c550b5 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/House.java @@ -0,0 +1,165 @@ +package com.enolj.airbnb.domain.house; + +import org.springframework.data.annotation.Id; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +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.006 <= this.latitude && this.latitude <= latitude + 0.006) + && (longitude - 0.006 <= this.longitude && this.longitude <= longitude + 0.006); + } + + 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; + } + + 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..bc4edcb62 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/house/HouseDAO.java @@ -0,0 +1,30 @@ +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; +import java.util.Optional; + +@Repository +public class HouseDAO { + + private final JdbcTemplate jdbcTemplate; + + public HouseDAO(DataSource dataSource) { + jdbcTemplate = new JdbcTemplate(dataSource); + } + + public Optional findById(Long id) { + String sql = "SELECT * FROM house WHERE id = ?"; + House house = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(House.class), id); + return Optional.ofNullable(house); + } + + 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); + } +} 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..032ab1e23 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/join/JoinDAO.java @@ -0,0 +1,40 @@ +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; +import java.util.Optional; + +@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()); + } + + 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 = ?"; + Join join = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Join.class), userId, houseId); + return Optional.ofNullable(join); + } + + 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/domain/user/User.java b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java new file mode 100644 index 000000000..2152f00e4 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/User.java @@ -0,0 +1,95 @@ +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 userId; + private String email; + private String name; + private String token; + + public User() {} + + 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.getUserId(), emailDTO.getEmail(), userInfoDTO.getName(), tokenDTO.getAccessToken()); + } + + public void update(UserInfoDTO userInfoDTO, EmailDTO emailDTO, TokenDTO tokenDTO) { + this.userId = userInfoDTO.getUserId(); + this.email = emailDTO.getEmail(); + this.name = userInfoDTO.getName(); + this.token = tokenDTO.getAccessToken(); + } + + public void removeToken() { + this.token = null; + } + + public boolean verifyToken(String token) { + return this.token.equals(token); + } + + public Long getId() { + return id; + } + + 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 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{" + + "id=" + id + + ", name='" + name + '\'' + + ", email='" + email + '\'' + + ", userId='" + userId + '\'' + + ", token='" + token + '\'' + + '}'; + } +} 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..96eabdd76 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/user/UserDAO.java @@ -0,0 +1,30 @@ +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.util.List; +import java.util.Optional; + +@Repository +public class UserDAO { + + private final JdbcTemplate jdbcTemplate; + + public UserDAO(DataSource dataSource) { + jdbcTemplate = new JdbcTemplate(dataSource); + } + + public Optional findByUserId(String userId) { + String sql = "SELECT * FROM user WHERE user_id = ?"; + User user = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(User.class), userId); + return Optional.ofNullable(user); + } + + public void save(User user) { + 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/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..f6d77b543 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/domain/wish/WishDAO.java @@ -0,0 +1,40 @@ +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 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 = ?"; + Wish wish = jdbcTemplate.queryForObject(sql, new BeanPropertyRowMapper<>(Wish.class), userId, houseId); + return Optional.ofNullable(wish); + } + + 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/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/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; + } +} 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..a983094ee --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/service/HouseService.java @@ -0,0 +1,61 @@ +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.exception.EntityNotFoundException; +import com.enolj.airbnb.web.dto.*; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.stream.Collectors; + +import static com.enolj.airbnb.web.dto.HouseDetailInfoResponseDTO.createHouseDetailInfoResponseDTO; +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) { + 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()); + } + + public List searchChargesByCondition(SearchChargesRequestDTO requestDTO) { + return houseDAO.findAll().stream() + .map(House::getCharge) + .collect(Collectors.toList()); + } + + 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()); + } + + private House findHouseById(Long houseId) { + return houseDAO.findById(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/UserService.java b/BE/src/main/java/com/enolj/airbnb/service/UserService.java new file mode 100644 index 000000000..db63c7f00 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/service/UserService.java @@ -0,0 +1,67 @@ +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.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.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.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 UserDAO userDAO; + private final OAuth gitHubOAuth; + + public UserService(UserDAO userDAO, GitHubOAuth gitHubOAuth) { + this.userDAO = userDAO; + this.gitHubOAuth = gitHubOAuth; + } + + public UserResponseDTO login(String code, int typeCode) { + 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); + userDAO.save(user); + return createUserResponseDTO(user, JwtUtil.createToken(user.getUserId())); + } + User user = createUser(userInfoDTO, emailDTO, tokenDTO); + userDAO.save(user); + return createUserResponseDTO(user, JwtUtil.createToken(user.getUserId())); + } + + public void logout(String authorization) { + User user = getUserFromAuthorization(userDAO, authorization); + user.removeToken(); + userDAO.save(user); + } + + private boolean verifyUser(String userId) { + return userDAO.findByUserId(userId).isPresent(); + } + + private User findByUserId(String userId) { + 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); + } + return user; + } +} 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); + } +} 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..7b20f740e --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/HouseController.java @@ -0,0 +1,38 @@ +package com.enolj.airbnb.web; + +import com.enolj.airbnb.service.HouseService; +import com.enolj.airbnb.web.dto.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.bind.annotation.*; + +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(SearchRequestDTO requestDTO) { + logger.info("숙소 검색 요청"); + return houseService.searchHousesByCondition(requestDTO); + } + + @GetMapping("/houses/charges") + public List searchCharges(SearchChargesRequestDTO requestDTO) { + logger.info("범위 내 숙소 가격 요청"); + return houseService.searchChargesByCondition(requestDTO); + } + + @GetMapping("/houses/detail/{houseId}") + public HouseDetailInfoResponseDTO getHouseDetail(@PathVariable Long houseId) { + logger.info("{}번 숙소의 디테일 페이지 요청", houseId); + return houseService.getHouseDetailInfo(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/UserController.java b/BE/src/main/java/com/enolj/airbnb/web/UserController.java new file mode 100644 index 000000000..1a2fe1ca9 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/UserController.java @@ -0,0 +1,30 @@ +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.*; + +@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, 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/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); + } +} 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/HouseDetailInfoResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/HouseDetailInfoResponseDTO.java new file mode 100644 index 000000000..0e4ed7bb6 --- /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 host, List options, String description, int charge, boolean wish) { + this.name = name; + this.images = images; + this.review = review; + 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; + this.wish = wish; + } + + public static HouseDetailInfoResponseDTO createHouseDetailInfoResponseDTO(House house, List images) { + return new HouseDetailInfoResponseDTO(house.getName(), images, house.getReview(), house.getHost(), 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 + + '}'; + } +} 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..76915c155 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationDetailDTO.java @@ -0,0 +1,63 @@ +package com.enolj.airbnb.web.dto; + +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.vo.Description.createDescription; + +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 name, LocalDate checkIn, LocalDate checkOut, Description description) { + this.id = id; + this.images = images; + this.location = "서초구, 서울, 한국"; + this.name = name; + 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.getCheckIn(), join.getCheckOut(), createDescription(house, join)); + } + + 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; + } +} 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 new file mode 100644 index 000000000..7cef036c2 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationInfoResponseDTO.java @@ -0,0 +1,54 @@ +package com.enolj.airbnb.web.dto; + +import com.enolj.airbnb.domain.house.House; + +public class ReservationInfoResponseDTO { + + private final int charge; + 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, 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(), house.getReview()); + } + + public int getCharge() { + return charge; + } + + public double getCleaningRatio() { + return cleaningRatio; + } + + public double getServiceRatio() { + return serviceRatio; + } + + public double getDiscountRatio() { + return discountRatio; + } + + public int getReview() { + return review; + } + + @Override + public String toString() { + return "ReservationInfoResponseDTO{" + + "charge=" + charge + + ", 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 new file mode 100644 index 000000000..c0f1684f9 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationRequestDTO.java @@ -0,0 +1,47 @@ +package com.enolj.airbnb.web.dto; + +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 { + + private CheckDate date; + private People people; + private int totalCharge; + + public ReservationRequestDTO(CheckDate date, People people, int totalCharge) { + this.date = date; + this.people = people; + 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; + } + + 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 + + '}'; + } +} 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..f1dc64a10 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/ReservationResponseDTO.java @@ -0,0 +1,48 @@ +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; + +import java.time.LocalDate; + +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, LocalDate checkIn, LocalDate checkOut, String name) { + this.id = id; + this.image = image; + 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.getCheckIn(), join.getCheckOut(), house.getName()); + } + + 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; + } +} 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..347e086d3 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchChargesRequestDTO.java @@ -0,0 +1,43 @@ +package com.enolj.airbnb.web.dto; + +public class SearchChargesRequestDTO { + + 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 void setCheckOut(String checkOut) { + this.checkOut = checkOut; + } + + public void setLatitude(double latitude) { + this.latitude = latitude; + } + + public void setLongitude(double longitude) { + this.longitude = longitude; + } + + @Override + public String toString() { + return "SearchChargesRequestDTO{" + + "checkIn='" + checkIn + '\'' + + ", checkOut='" + checkOut + '\'' + + ", latitude=" + latitude + + ", longitude=" + longitude + + '}'; + } +} + 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..106748ea9 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchRequestDTO.java @@ -0,0 +1,86 @@ +package com.enolj.airbnb.web.dto; + +public class SearchRequestDTO { + + 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(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 setCheckIn(String checkIn) { + this.checkIn = checkIn; + } + + public void setCheckOut(String checkOut) { + this.checkOut = checkOut; + } + + 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; + } + + public void setKid(int kid) { + this.kid = kid; + } + + 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{" + + "checkIn='" + checkIn + '\'' + + ", checkOut='" + checkOut + '\'' + + ", minCharge=" + minCharge + + ", maxCharge=" + maxCharge + + ", quest=" + guest + + ", kid=" + kid + + ", latitude=" + latitude + + ", longitude=" + longitude + + '}'; + } +} 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..62a9de08a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/SearchResponseDTO.java @@ -0,0 +1,86 @@ +package com.enolj.airbnb.web.dto; + +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.vo.Location.createLocationByHouse; + +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 List options; + private final 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 = "서초구의 아파트 전체"; + this.name = name; + this.charge = charge; + this.grade = grade; + this.review = review; + this.description = description; + 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.makeOption(), false); + } + + public Long getId() { + return id; + } + + public String getImage() { + return image; + } + + public Location getLocation() { + return location; + } + + public String getLocal() { + return local; + } + + 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 List getOptions() { + return options; + } + + public boolean isWish() { + return wish; + } +} 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..c2018291a --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/TokenDTO.java @@ -0,0 +1,37 @@ +package com.enolj.airbnb.web.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class TokenDTO { + + @JsonProperty("access_token") + private String accessToken; + @JsonProperty("token_type") + private String tokenType; + private String scope; + + public void setAccessToken(String accessToken) { + this.accessToken = accessToken; + } + + public void setTokenType(String tokenType) { + this.tokenType = tokenType; + } + + public void setScope(String scope) { + this.scope = scope; + } + + public String getAccessToken() { + return accessToken; + } + + @Override + public String toString() { + return "TokenDTO{" + + "access_token='" + accessToken + '\'' + + ", token_type='" + tokenType + '\'' + + ", 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..976bc4c61 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/UserInfoDTO.java @@ -0,0 +1,34 @@ +package com.enolj.airbnb.web.dto; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class UserInfoDTO { + + @JsonProperty("login") + private String userId; + private String name; + + public String getUserId() { + return userId; + } + + public void setUserId(String userId) { + this.userId = userId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "UserInfoDTO{" + + "login='" + userId + '\'' + + ", 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; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/dto/WishResponseDTO.java b/BE/src/main/java/com/enolj/airbnb/web/dto/WishResponseDTO.java new file mode 100644 index 000000000..4d81a5074 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/dto/WishResponseDTO.java @@ -0,0 +1,38 @@ +package com.enolj.airbnb.web.dto; + +import com.enolj.airbnb.domain.house.House; + +public class WishResponseDTO { + + private final Long id; + private final String name; + private final int charge; + private final double grade; + + public WishResponseDTO(Long id, String name, int charge, double grade) { + this.id = id; + this.name = name; + this.charge = charge; + 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; + } + + public String getName() { + return name; + } + + public int getCharge() { + return charge; + } + + public double getGrade() { + return grade; + } +} 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..a48603765 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/utils/GitHubType.java @@ -0,0 +1,46 @@ +package com.enolj.airbnb.web.utils; + +import com.enolj.airbnb.exception.ErrorMessage; +import com.enolj.airbnb.exception.GitHubTypeException; + +public enum GitHubType { + + 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(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; + } + + public String getClientSecret() { + return clientSecret; + } + + public boolean matchCode(int code) { + return this.code == code; + } + + public static GitHubType getGitHubTypeByCode(int code) { + if (GitHubType.FRONT.matchCode(code)) { + return GitHubType.FRONT; + } + if (GitHubType.IOS.matchCode(code)) { + return GitHubType.IOS; + } + 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..779747131 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/utils/JwtUtil.java @@ -0,0 +1,49 @@ +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.JWTVerificationException; +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 (JWTVerificationException e) { + throw new TokenException(ErrorMessage.INVALID_TOKEN); + } + } + + public static String getTokenFromAuthorization(String authorization) { + if (authorization.startsWith("Bearer ")) { + return authorization.substring("Bearer ".length()); + } + throw new TokenException(ErrorMessage.INVALID_TOKEN); + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/vo/Charge.java b/BE/src/main/java/com/enolj/airbnb/web/vo/Charge.java new file mode 100644 index 000000000..e3e1fea48 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/Charge.java @@ -0,0 +1,28 @@ +package com.enolj.airbnb.web.vo; + +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/vo/CheckDate.java b/BE/src/main/java/com/enolj/airbnb/web/vo/CheckDate.java new file mode 100644 index 000000000..d1d553e32 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/CheckDate.java @@ -0,0 +1,38 @@ +package com.enolj.airbnb.web.vo; + +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 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; + } + + @Override + public String toString() { + return "CheckDate{" + + "start=" + start + + ", end=" + end + + '}'; + } +} diff --git a/BE/src/main/java/com/enolj/airbnb/web/vo/Description.java b/BE/src/main/java/com/enolj/airbnb/web/vo/Description.java new file mode 100644 index 000000000..357f59660 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/Description.java @@ -0,0 +1,33 @@ +package com.enolj.airbnb.web.vo; + +import com.enolj.airbnb.domain.house.House; +import com.enolj.airbnb.domain.join.Join; + +public class Description { + + private final String host; + private final String option; + private final int charge; + + public Description(String host, int guest, int charge) { + this.host = host; + this.option = "집전체 • 게스트 " + guest + "명"; + this.charge = charge; + } + + public static Description createDescription(House house, Join join) { + return new Description(house.getHost(), join.getGuest(), house.getCharge()); + } + + 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/vo/Fee.java b/BE/src/main/java/com/enolj/airbnb/web/vo/Fee.java new file mode 100644 index 000000000..8bb47192d --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/Fee.java @@ -0,0 +1,28 @@ +package com.enolj.airbnb.web.vo; + +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/vo/Location.java b/BE/src/main/java/com/enolj/airbnb/web/vo/Location.java new file mode 100644 index 000000000..46ee01bf4 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/Location.java @@ -0,0 +1,42 @@ +package com.enolj.airbnb.web.vo; + +import com.enolj.airbnb.domain.house.House; + +public class Location { + + private double latitude; + private double longitude; + + public Location(double latitude, double longitude) { + this.latitude = latitude; + this.longitude = longitude; + } + + public static Location createLocationByHouse(House house) { + return new Location(house.getLatitude(), house.getLongitude()); + } + + 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/vo/People.java b/BE/src/main/java/com/enolj/airbnb/web/vo/People.java new file mode 100644 index 000000000..46c0de8d0 --- /dev/null +++ b/BE/src/main/java/com/enolj/airbnb/web/vo/People.java @@ -0,0 +1,36 @@ +package com.enolj.airbnb.web.vo; + +public class People { + + private int guest; + private int kid; + + public People(int guest, int kid) { + this.guest = guest; + 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; + } + + @Override + public String toString() { + return "People{" + + "quest=" + guest + + ", kid=" + kid + + '}'; + } +} diff --git a/BE/src/main/resources/application.properties b/BE/src/main/resources/application.properties new file mode 100644 index 000000000..bdd0e31ca --- /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=airbnbdb +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/main/resources/data.sql b/BE/src/main/resources/data.sql new file mode 100644 index 000000000..6bd365629 --- /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/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/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/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); diff --git a/BE/src/main/resources/schema.sql b/BE/src/main/resources/schema.sql new file mode 100644 index 000000000..93ee7913e --- /dev/null +++ b/BE/src/main/resources/schema.sql @@ -0,0 +1,125 @@ +-- 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 utf8 ; +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) UNIQUE KEY NOT NULL, + `email` VARCHAR(45) NOT NULL, + `name` 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; 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..452b46751 --- /dev/null +++ b/BE/src/test/java/com/enolj/airbnb/AirbnbApplicationTests.java @@ -0,0 +1,8 @@ +package com.enolj.airbnb; + +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class AirbnbApplicationTests { + +}